<?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>203547</bug_id>
          
          <creation_ts>2019-10-28 19:34:31 -0700</creation_ts>
          <short_desc>Fix cookie bugs inherent to WebProcessPool ownership of NetworkProcessProxy</short_desc>
          <delta_ts>2020-09-23 14:41:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>216041</dup_id>
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=208250</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216041</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>213048</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>berto</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mkwst</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1584803</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-10-28 19:34:31 -0700</bug_when>
    <thetext>Use a NetworkProcessProxy singleton instead of one per WebProcessPool</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584805</commentid>
    <comment_count>1</comment_count>
      <attachid>382149</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-10-28 19:35:18 -0700</bug_when>
    <thetext>Created attachment 382149
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584806</commentid>
    <comment_count>2</comment_count>
      <attachid>382149</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-10-28 19:35:46 -0700</bug_when>
    <thetext>Comment on attachment 382149
Patch

Not quite ready yet, but I thought I&apos;d upload my WIP patch.  Most things work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588894</commentid>
    <comment_count>3</comment_count>
      <attachid>383180</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-08 16:52:16 -0800</bug_when>
    <thetext>Created attachment 383180
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588895</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-08 16:52:36 -0800</bug_when>
    <thetext>Just rebasing.  Still not ready yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589061</commentid>
    <comment_count>5</comment_count>
      <attachid>383233</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-09 17:57:25 -0800</bug_when>
    <thetext>Created attachment 383233
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589062</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-11-09 17:58:27 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589069</commentid>
    <comment_count>7</comment_count>
      <attachid>383235</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-09 20:36:45 -0800</bug_when>
    <thetext>Created attachment 383235
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589088</commentid>
    <comment_count>8</comment_count>
      <attachid>383242</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-10 03:17:56 -0800</bug_when>
    <thetext>Created attachment 383242
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589089</commentid>
    <comment_count>9</comment_count>
      <attachid>383243</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-10 03:24:43 -0800</bug_when>
    <thetext>Created attachment 383243
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589090</commentid>
    <comment_count>10</comment_count>
      <attachid>383244</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-11-10 04:28:07 -0800</bug_when>
    <thetext>Created attachment 383244
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589107</commentid>
    <comment_count>11</comment_count>
      <attachid>383244</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-11-10 07:58:25 -0800</bug_when>
    <thetext>Comment on attachment 383244
Patch

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

&gt; Source/WebKit/ChangeLog:4
&gt; +        Use a NetworkProcessProxy singleton instead of one per WebProcessPool
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=203547

Please include information about why you are making this change and how it is beneficial.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623670</commentid>
    <comment_count>12</comment_count>
      <attachid>391917</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-27 14:23:18 -0800</bug_when>
    <thetext>Created attachment 391917
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623687</commentid>
    <comment_count>13</comment_count>
      <attachid>391917</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-02-27 14:57:16 -0800</bug_when>
    <thetext>Comment on attachment 391917
Patch

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

&gt; Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp:161
&gt; +    , m_throttler(*this, false)

Why is this OK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623712</commentid>
    <comment_count>14</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-27 15:28:42 -0800</bug_when>
    <thetext>It&apos;s not.  As you can tell, this latest patch is not quite ready yet.  I wasn&apos;t sure what to do with the process throttlers, so I removed that for now.  We will need to fix that before landing, as well as fix other things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623853</commentid>
    <comment_count>15</comment_count>
      <attachid>391956</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-27 19:18:18 -0800</bug_when>
    <thetext>Created attachment 391956
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623854</commentid>
    <comment_count>16</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-27 19:19:13 -0800</bug_when>
    <thetext>Closer, but still not quite ready.  Chris, I&apos;m interested in what you think we should do about the process throttlers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623858</commentid>
    <comment_count>17</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-02-27 19:32:50 -0800</bug_when>
    <thetext>Would still love to know the &quot;why&quot; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623952</commentid>
    <comment_count>18</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-28 07:28:26 -0800</bug_when>
    <thetext>Still plan to explain that in the changelog once it works.  Until then you can read the test I added and see the kind of thing that developers do a lot and doesn&apos;t work until this fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623959</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-02-28 08:02:18 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #16)
&gt; Closer, but still not quite ready.  Chris, I&apos;m interested in what you think
&gt; we should do about the process throttlers

Maybe get the flag from the first process pool you find?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623966</commentid>
    <comment_count>20</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-28 08:56:51 -0800</bug_when>
    <thetext>and rdar://problem/56027111</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678364</commentid>
    <comment_count>21</comment_count>
      <attachid>406104</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-06 13:02:35 -0700</bug_when>
    <thetext>Created attachment 406104
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678372</commentid>
    <comment_count>22</comment_count>
      <attachid>406105</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-06 13:13:03 -0700</bug_when>
    <thetext>Created attachment 406105
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679653</commentid>
    <comment_count>23</comment_count>
      <attachid>406434</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-11 16:51:26 -0700</bug_when>
    <thetext>Created attachment 406434
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679658</commentid>
    <comment_count>24</comment_count>
      <attachid>406435</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-11 16:57:27 -0700</bug_when>
    <thetext>Created attachment 406435
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679679</commentid>
    <comment_count>25</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-08-11 18:50:22 -0700</bug_when>
    <thetext>Do you intend for this to be up for review? It still lacks any details in the ChangeLog?

--

Alex has explained in a separate situation that the impetus behind this change (and please correct me if I have the details wrong) is due to the fact that multiple network processes can&apos;t share an http cookie store. So if you make multiple WKWebViews, all sharing the same default WKWebsiteDataStore, and then try to get the httpCookieStore from the WKWebsiteDataStore, it will return one of the network processes cookie stores at random. This is clearly bad.

So, assuming we can&apos;t fix the underlying issue and make the network libraries cookie stores work in multiple processes at time, we likely have to change how network process sharing works.

An alternative approach to solving this problem, which I think has various nice properties, would be to make the network process per-WKWebsiteDataStore (and probably having one global one for all ephemeral WKWebsiteDataStores). In practice, this will not be hugely different than what I think is being proposed here, as for public api, there is only the defaultDataStore global and the nonPersistentDataStores (e.g. ephemeral).

The benefit though is that it provides flexibility to expand in the future, for instance, if there is desire to allow third parties to create their own WKWebsiteDataStores so they can keep certain data segregated from each other (e.g. an app that uses WKWebViews for both ads and their own content, might not want to share website data between them). While in principle, it might be possible that a singleton network process could provide that segregation if there was not global state, history has shown us that system libraries do not always cooperate. 

So to sum up, I think a better more conservative and future proof version of this would be to make the network process not a singleton, but per-WKWebsiteDataStores.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679698</commentid>
    <comment_count>26</comment_count>
      <attachid>406446</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-11 21:54:34 -0700</bug_when>
    <thetext>Created attachment 406446
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679699</commentid>
    <comment_count>27</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-11 21:58:20 -0700</bug_when>
    <thetext>No review yet.  There&apos;s still something wrong with service workers, but I&apos;m letting EWS tell me if there&apos;s anything else wrong.

Sam, you are correct that cookie storage and correctness is the motivation for this.  Making one network process per WKWebsiteDataStore would also solve that correctness problem, but it would add the cost of launching and running another process per private tab, which would be a considerable performance regression I don&apos;t think we want.  The ability to create a persistent cookie storage from a path already exists, so that is not a motivation to separate network processes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679702</commentid>
    <comment_count>28</comment_count>
      <attachid>406447</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-11 23:19:10 -0700</bug_when>
    <thetext>Created attachment 406447
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679821</commentid>
    <comment_count>29</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-08-12 14:24:11 -0700</bug_when>
    <thetext>Hm, I see this was a lot of work. Why are you trying to move to single NetworkProcessProxy?

I only looked at this briefly, but I&apos;m not sure this can be made to work easily for soup. Problem is WebProcessPool corresponds to WebKitWebContext, the library context object. Remember WebProcessPool used to be called WebContext, right? Separate WebProcessPools currently have to use separate network processes, otherwise they&apos;re no longer really separate contexts at all. Say library A and library B are trying to use WebKit with different network settings, or say an application is trying to use WebKit in two different ways in two different places... the same network process shouldn&apos;t be used for both contexts because they have process-level settings that would clobber each other.

That said, I think it might be possible to do without sacrificing correctness. We would need to move all global NetworkProcess settings to be properties of NetworkSession instead (there are currently many that aren&apos;t, e.g. we never fixed bug #195140), then ensure a different NetworkSession gets used for each WebProcessPool (currently not the case), and then somehow get rid of SessionID::DefaultSessionID. That&apos;s probably easier said than done....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679857</commentid>
    <comment_count>30</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-08-12 15:44:48 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #27)
&gt; No review yet.  There&apos;s still something wrong with service workers, but I&apos;m
&gt; letting EWS tell me if there&apos;s anything else wrong.
&gt; 
&gt; Sam, you are correct that cookie storage and correctness is the motivation
&gt; for this.  Making one network process per WKWebsiteDataStore would also
&gt; solve that correctness problem, but it would add the cost of launching and
&gt; running another process per private tab, which would be a considerable
&gt; performance regression I don&apos;t think we want.  

As I noted, having a single network process for all ephemeral data stores would likely be okay, or if you wanted to, having a way for ephemeral data stores to use the default data stores network process might also be fine as an optimization.

&gt; The ability to create a
&gt; persistent cookie storage from a path already exists, so that is not a
&gt; motivation to separate network processes.

I don&apos;t think I stated it was. 

I really don&apos;t think a singleton is the right architectural or future thinking option here, and before committing to such a change, we should all agree this is the right direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679870</commentid>
    <comment_count>31</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-12 16:15:57 -0700</bug_when>
    <thetext>Michael, what are these &quot;process-level settings&quot; and why can&apos;t they be made to be properties of the NetworkSession?  That&apos;s what I&apos;ve been doing to prepare for this, and that is why I asked the libsoup network implementation maintainers to do the same.

Sam, could you give a concrete example of why having more processes would be better &quot;future thinking&quot;?  If we need an optimization to use one process for multiple sessions, why would we not make that the default?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679872</commentid>
    <comment_count>32</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-08-12 16:23:34 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #25)
&gt; Alex has explained in a separate situation that the impetus behind this
&gt; change (and please correct me if I have the details wrong) is due to the
&gt; fact that multiple network processes can&apos;t share an http cookie store. So if
&gt; you make multiple WKWebViews, all sharing the same default
&gt; WKWebsiteDataStore, and then try to get the httpCookieStore from the
&gt; WKWebsiteDataStore, it will return one of the network processes cookie
&gt; stores at random. This is clearly bad.
&gt; 
&gt; So, assuming we can&apos;t fix the underlying issue and make the network
&gt; libraries cookie stores work in multiple processes at time, we likely have
&gt; to change how network process sharing works.

Oh OK... sorry for failing to read. Yeah that is not good. I wonder if the libsoup backend might have similar problems....

&gt; An alternative approach to solving this problem, which I think has various
&gt; nice properties, would be to make the network process per-WKWebsiteDataStore
&gt; (and probably having one global one for all ephemeral WKWebsiteDataStores).
&gt; In practice, this will not be hugely different than what I think is being
&gt; proposed here, as for public api, there is only the defaultDataStore global
&gt; and the nonPersistentDataStores (e.g. ephemeral).

Sadly, we allow setting a WebKitWebsiteDataStore on both a WebkitWebContext or a WebKitWebView, where the web view setting overrides the web context setting. That is, the same website data store can be shared between two different views that use two different web contexts. And this is baked into public API, so it can&apos;t be changed. Now that&apos;s not a total blocker, but it makes any change quite tricky for the same reason that a singleton network process is tricky: settings that are currently global to the network process would need to somehow be associated with the correct web context (probably via NetworkSession) because one network process could be used by multiple web contexts.

That said, removing global state is good and we should try to do it regardless. But I think we have to completely remove SessionID::DefaultSessionID from the codebase to make that work, and I&apos;m not sure if that&apos;s practical to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679873</commentid>
    <comment_count>33</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-08-12 16:32:28 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #31)
&gt; Michael, what are these &quot;process-level settings&quot; and why can&apos;t they be made
&gt; to be properties of the NetworkSession?

Things like: webkit_web_context_set_tls_errors_policy(), webkit_web_context_allow_tls_certificate_for_host(), webkit_web_context_set_preferred_languages(), webkit_cookie_manager_set_accept_policy(), etc.

We actually *can* make them all properties of the NetworkSession, at least I think so. Remember I tried to help with this a year ago because you requested it, then abandoned the effort when you suggested it was no longer a priority. (Some history in bug #195140 where I was trying to move the accept policy setting.) I don&apos;t have time to retake that work myself, but maybe someone from Igalia could push it through if you want to reopen that bug. In theory, once everything is removed from NetworkProcessCreationParameters, we should be almost good to go from the network process side of things... but then the next problem is that we need to fix up the UI process to stop using SessionID::DefaultSessionID all over the place. Soup port code has a lot of assumptions that the only NetworkSession is the default NetworkSession, and that all will have to be audited and fixed up. The soup backend has never supported multiple NetworkSessions per web context so it was just never important before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679874</commentid>
    <comment_count>34</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-12 16:36:53 -0700</bug_when>
    <thetext>We don&apos;t need to remove everything from NetworkProcessCreationParameters, just everything that is not also global to the UI process.  Right now it&apos;s being used as a way to make global things in the network process that are just properties of one WebProcessPool that could be different in a different WebProcessPool.  This is what must be shifted away from in order to fix these cookie bugs.  GTK API can be shimmed to do basically what it used to, deprecated, and replaced.  This is part of why we haven&apos;t exposed any public API on WKProcessPool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680080</commentid>
    <comment_count>35</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-08-13 14:33:42 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #31)
&gt; 
&gt; Sam, could you give a concrete example of why having more processes would be
&gt; better &quot;future thinking&quot;?  

Sure. If we wanted to improve defense against Spectre style attacks on user data, using multiple processes is the best option going.

Also, as I mentioned above, historically, there have been system APIs that are only exposed on a per-process level. So, if we added API to created data segregated WKWebsiteDataStores that depended on any of those, we would need multiple network processes (this was the case for the shimmed credentials for quite a while, I am not sure if it is still the case).

&gt; If we need an optimization to use one process for
&gt; multiple sessions, why would we not make that the default?

I don&apos;t think I said don&apos;t make it the default. What I want to avoid is reducing the flexibility of the architecture by baking in the concept of a singleton network process, when conceptually, keeping it multi-instance and aligning it with WKWebsiteDataStores would work just as well.

What concerns do you have the approach I have outlined? It seem like a nice compromise. I achieves the goals you have set out and maintains flexibility.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680081</commentid>
    <comment_count>36</comment_count>
      <attachid>406544</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-13 14:41:03 -0700</bug_when>
    <thetext>Created attachment 406544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680083</commentid>
    <comment_count>37</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-13 14:45:38 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #35)
&gt; (In reply to Alex Christensen from comment #31)
&gt; &gt; 
&gt; &gt; Sam, could you give a concrete example of why having more processes would be
&gt; &gt; better &quot;future thinking&quot;?  
&gt; 
&gt; Sure. If we wanted to improve defense against Spectre style attacks on user
&gt; data, using multiple processes is the best option going.
Spectre style attacks are easily achievable in the web processes because they run untrusted JavaScript.  That is not true of the networking process.  I suppose if we do find some kind of speculative execution attack that can be performed without execution, we would need to consider process separation.  Until then, I think it is better to have a smaller number of processes because of the substantial overhead of launching and sustaining a process.

&gt; Also, as I mentioned above, historically, there have been system APIs that
&gt; are only exposed on a per-process level. So, if we added API to created data
&gt; segregated WKWebsiteDataStores that depended on any of those, we would need
&gt; multiple network processes (this was the case for the shimmed credentials
&gt; for quite a while, I am not sure if it is still the case).
Historically this has been true.  I have worked long and hard to make sure it is no longer true.  Bug 213048 is me finishing that work.

&gt; &gt; If we need an optimization to use one process for
&gt; &gt; multiple sessions, why would we not make that the default?
&gt; 
&gt; I don&apos;t think I said don&apos;t make it the default. What I want to avoid is
&gt; reducing the flexibility of the architecture by baking in the concept of a
&gt; singleton network process, when conceptually, keeping it multi-instance and
&gt; aligning it with WKWebsiteDataStores would work just as well.
If it&apos;s not the default, then nobody would choose to use an obscure setting to slow down their application for no benefit.

&gt; What concerns do you have the approach I have outlined? It seem like a nice
&gt; compromise. I achieves the goals you have set out and maintains flexibility.

Process overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680087</commentid>
    <comment_count>38</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-08-13 14:56:13 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #37)
&gt; (In reply to Sam Weinig from comment #35)
&gt; &gt; (In reply to Alex Christensen from comment #31)
&gt; &gt; &gt; 
&gt; &gt; &gt; Sam, could you give a concrete example of why having more processes would be
&gt; &gt; &gt; better &quot;future thinking&quot;?  
&gt; &gt; 
&gt; &gt; Sure. If we wanted to improve defense against Spectre style attacks on user
&gt; &gt; data, using multiple processes is the best option going.
&gt; Spectre style attacks are easily achievable in the web processes because
&gt; they run untrusted JavaScript.  That is not true of the networking process. 
&gt; I suppose if we do find some kind of speculative execution attack that can
&gt; be performed without execution, we would need to consider process
&gt; separation.  Until then, I think it is better to have a smaller number of
&gt; processes because of the substantial overhead of launching and sustaining a
&gt; process.

You are also conflating the architecture and the number of processes used. I am not suggesting we use more processes. I am suggesting we don&apos;t use a singleton pattern, and instead tie network processor ownership to WebsiteDataStore. As I indicated when responding to your concern about ephemeral pages, the number of actual processes used can be optimized how ever one wants.

&gt; 
&gt; &gt; Also, as I mentioned above, historically, there have been system APIs that
&gt; &gt; are only exposed on a per-process level. So, if we added API to created data
&gt; &gt; segregated WKWebsiteDataStores that depended on any of those, we would need
&gt; &gt; multiple network processes (this was the case for the shimmed credentials
&gt; &gt; for quite a while, I am not sure if it is still the case).
&gt; Historically this has been true.  I have worked long and hard to make sure
&gt; it is no longer true.  Bug 213048 is me finishing that work.

There is no reason to believe this wouldn&apos;t be true in the future again. System frameworks often make assumptions about global state assuming all their clients will be applications and without thinking about the ramifications of other frameworks that need to use that functionality.

&gt; 
&gt; &gt; &gt; If we need an optimization to use one process for
&gt; &gt; &gt; multiple sessions, why would we not make that the default?
&gt; &gt; 
&gt; &gt; I don&apos;t think I said don&apos;t make it the default. What I want to avoid is
&gt; &gt; reducing the flexibility of the architecture by baking in the concept of a
&gt; &gt; singleton network process, when conceptually, keeping it multi-instance and
&gt; &gt; aligning it with WKWebsiteDataStores would work just as well.
&gt; If it&apos;s not the default, then nobody would choose to use an obscure setting
&gt; to slow down their application for no benefit.

I don&apos;t understand this. What obscure setting are you referring to?

&gt; 
&gt; &gt; What concerns do you have the approach I have outlined? It seem like a nice
&gt; &gt; compromise. I achieves the goals you have set out and maintains flexibility.
&gt; 
&gt; Process overhead.

So far, what I have proposed does not create any additional processes overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680107</commentid>
    <comment_count>39</comment_count>
      <attachid>406548</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-13 15:33:31 -0700</bug_when>
    <thetext>Created attachment 406548
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680113</commentid>
    <comment_count>40</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-13 15:54:18 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #38)
&gt; &gt; &gt; Also, as I mentioned above, historically, there have been system APIs that
&gt; &gt; &gt; are only exposed on a per-process level. So, if we added API to created data
&gt; &gt; &gt; segregated WKWebsiteDataStores that depended on any of those, we would need
&gt; &gt; &gt; multiple network processes (this was the case for the shimmed credentials
&gt; &gt; &gt; for quite a while, I am not sure if it is still the case).
&gt; &gt; Historically this has been true.  I have worked long and hard to make sure
&gt; &gt; it is no longer true.  Bug 213048 is me finishing that work.
&gt; 
&gt; There is no reason to believe this wouldn&apos;t be true in the future again.
&gt; System frameworks often make assumptions about global state assuming all
&gt; their clients will be applications and without thinking about the
&gt; ramifications of other frameworks that need to use that functionality.
I disagree.  Session based networking and not breaking session boundaries is pretty fundamental these days, and if anyone breaks the boundaries it will already be a substantial privacy breach.

&gt; &gt; &gt; &gt; If we need an optimization to use one process for
&gt; &gt; &gt; &gt; multiple sessions, why would we not make that the default?
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t think I said don&apos;t make it the default. What I want to avoid is
&gt; &gt; &gt; reducing the flexibility of the architecture by baking in the concept of a
&gt; &gt; &gt; singleton network process, when conceptually, keeping it multi-instance and
&gt; &gt; &gt; aligning it with WKWebsiteDataStores would work just as well.
&gt; &gt; If it&apos;s not the default, then nobody would choose to use an obscure setting
&gt; &gt; to slow down their application for no benefit.
&gt; 
&gt; I don&apos;t understand this. What obscure setting are you referring to?
I was referring to a switch somewhere in your proposed solution to switch between one network process and a network process per WebsiteDataStore.  I think such a switch would be hard to find and not very useful.

&gt; So far, what I have proposed does not create any additional processes
&gt; overhead.

If I have Safari open with 10 private tabs, your proposal creates 9 additional processes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680121</commentid>
    <comment_count>41</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-13 16:00:06 -0700</bug_when>
    <thetext>I think doing this does not prevent us from making a network process per WebsiteDataStore if we find a reason that paying the process price is worth it.  I just don&apos;t think we have such a reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680242</commentid>
    <comment_count>42</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-08-14 01:47:19 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #41)
&gt; I think doing this does not prevent us from making a network process per
&gt; WebsiteDataStore if we find a reason that paying the process price is worth
&gt; it.  I just don&apos;t think we have such a reason.

Maybe we need it for the other ports, at least for the soup based ports using the glib API. This is how the GLib API currently works:

 - WebKitWebsiteDataManager: this is the WebsiteDataStore. If you use _new() constructor you get a persistent data store with the default session ID, so two persistent data managers both use the same default session ID (this is not a problem with the current implementation). If you use new_ephemeral() a non-persistent data store is created.

 - WebKitWebContext: this is the WebProcessPool. It has a construct only property for the website data manager, which means it&apos;s required for constructing the object and it can&apos;t change for its lifetime. This is always the primary data store for the WebProcessPool and the only one in our case.

 - WebKitWebView: this is WebPageProxy. The web view also has a website data manager associated, but *only* to allow ephemeral web views on non-ephemeral web contexts. So, by default the web view uses the data manager of its web context, and there&apos;s no API to set a different data manager for a web view. When a web view is created with new_ephemeral() and the web context data manager is persistent a new ephemeral data manager is created and associated to the web view. Again this happens at construction and can&apos;t change.

So, with this model, it&apos;s not a problem to have two persistent data managers using the same default session id, because it&apos;s not possible to have both in the same network process. If two contexts are created we will have two network processes each with a default session. If you create two contexts sharing the same data manager, both network process would be accessing the same cookies storage, which is what this bug is trying to solve, right? So, the problem is present in soup based ports too, but not that easy to happen, most of the applications create just one web context and if they create more than one is precisely to use a different data store configuration. 

If we follow Sam&apos;s suggestion, and we use a network process per data store, the bug would be solved for us (unless you create two different data stores with the same cookies configuration, but I think we can consider that a programmer error and just document it in the API). I like the idea of using one network process per persistent data store and one network process for all non-persistent data stores.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680402</commentid>
    <comment_count>43</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-08-14 12:21:17 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #40)
&gt; (In reply to Sam Weinig from comment #38)
&gt; &gt; &gt; &gt; Also, as I mentioned above, historically, there have been system APIs that
&gt; &gt; &gt; &gt; are only exposed on a per-process level. So, if we added API to created data
&gt; &gt; &gt; &gt; segregated WKWebsiteDataStores that depended on any of those, we would need
&gt; &gt; &gt; &gt; multiple network processes (this was the case for the shimmed credentials
&gt; &gt; &gt; &gt; for quite a while, I am not sure if it is still the case).
&gt; &gt; &gt; Historically this has been true.  I have worked long and hard to make sure
&gt; &gt; &gt; it is no longer true.  Bug 213048 is me finishing that work.
&gt; &gt; 
&gt; &gt; There is no reason to believe this wouldn&apos;t be true in the future again.
&gt; &gt; System frameworks often make assumptions about global state assuming all
&gt; &gt; their clients will be applications and without thinking about the
&gt; &gt; ramifications of other frameworks that need to use that functionality.
&gt; I disagree.  Session based networking and not breaking session boundaries is
&gt; pretty fundamental these days, and if anyone breaks the boundaries it will
&gt; already be a substantial privacy breach.

The network process is used for a lot more than networking today. For sure it should be named better, but that&apos;s where we stand.

&gt; 
&gt; &gt; &gt; &gt; &gt; If we need an optimization to use one process for
&gt; &gt; &gt; &gt; &gt; multiple sessions, why would we not make that the default?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I don&apos;t think I said don&apos;t make it the default. What I want to avoid is
&gt; &gt; &gt; &gt; reducing the flexibility of the architecture by baking in the concept of a
&gt; &gt; &gt; &gt; singleton network process, when conceptually, keeping it multi-instance and
&gt; &gt; &gt; &gt; aligning it with WKWebsiteDataStores would work just as well.
&gt; &gt; &gt; If it&apos;s not the default, then nobody would choose to use an obscure setting
&gt; &gt; &gt; to slow down their application for no benefit.
&gt; &gt; 
&gt; &gt; I don&apos;t understand this. What obscure setting are you referring to?
&gt; I was referring to a switch somewhere in your proposed solution to switch
&gt; between one network process and a network process per WebsiteDataStore.  I
&gt; think such a switch would be hard to find and not very useful.
&gt; 
&gt; &gt; So far, what I have proposed does not create any additional processes
&gt; &gt; overhead.
&gt; 
&gt; If I have Safari open with 10 private tabs, your proposal creates 9
&gt; additional processes.

I can&apos;t tell if you are arguing in good faith here, but I have said numerous times that there is nothing in my proposal that would require this. We could still implement ephemeral data stores (e.g. safari private tabs) to use the network process from the default data store.

I think I have come to my limit in debating this. You seem to have come to the conclusion on how you wish to fix this bug long ago, no more strongly demonstrated than by by the title of the bug being &quot;Use a NetworkProcessProxy singleton instead of one per WebProcessPool&quot; rather than the symptom you are trying to fix and you don&apos;t seem interested in feedback, compromise or consensus here, which is really disappointing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680420</commentid>
    <comment_count>44</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-14 13:42:39 -0700</bug_when>
    <thetext>I am indeed interested in feedback, which is why I not only have been discussing here but I went to webkit-dev to get more feedback.  I haven&apos;t been taking Sam&apos;s suggestion to describe my changes more in the change log because I was prototyping something I didn&apos;t know could be done without breaking things.  Now that I know it can be done, I&apos;m planning to document more and explore tweaking and improving the solution.

Comment 43 is the first concrete proposal for an alternative that does not introduce many unnecessary processes.  Comment 30&apos;s &quot;having a way for ephemeral data stores to use the default data stores network process might also be fine as an optimization&quot; sounded to me like introducing SPI to do such, which I thought would be a bad solution.  Feel free to be disappointed, but be disappointed in the miscommunication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680425</commentid>
    <comment_count>45</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-08-14 13:59:06 -0700</bug_when>
    <thetext>I renamed this bug based on feedback from comment 43 that it was biased towards my initial approach to solving the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691267</commentid>
    <comment_count>46</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-23 14:41:47 -0700</bug_when>
    <thetext>I plan to fix this in https://bugs.webkit.org/show_bug.cgi?id=216041

*** This bug has been marked as a duplicate of bug 216041 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382149</attachid>
            <date>2019-10-28 19:35:18 -0700</date>
            <delta_ts>2019-11-08 16:52:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20191028193517.patch</filename>
            <type>text/plain</type>
            <size>91958</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTE2OTMpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBAQAorMjAxOS0xMC0yOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBhIE5ldHdv
cmtQcm9jZXNzUHJveHkgc2luZ2xldG9uIGluc3RlYWQgb2Ygb25lIHBlciBXZWJQcm9jZXNzUG9v
bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToK
KyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhU
VFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tp
ZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3Jl
Ojpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoQVBJOjpI
VFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoQVBJ
OjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6CisgICAgICAgIChX
S0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9zZXRDb29raWVBY2Nl
cHRQb2xpY3k6XSk6CisgICAgICAgICh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tp
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNN
b2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpw
cm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250
ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6CisgICAgICAg
IChXZWJLaXQ6Om1fd2ViUHJvY2Vzc0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6On5XZWJQcm9jZXNzUG9vbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0
Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9O
ZXR3b3JraW5nUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVh
ckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyTGVnYWN5UHJpdmF0ZUJy
b3dzaW5nTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFs
bG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRXZWJQcm9jZXNzSGFzVXBsb2Fkcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVhcldlYlByb2Nlc3NIYXNVcGxv
YWRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMTktMTAtMjggIFdl
bnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBJ
bnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5ub2RlQXRQb3NpdGlvbklzRm9jdXNlZEVs
ZW1lbnQgd2l0aCBhbiBlbGVtZW50IGNvbnRleHQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCShyZXZpc2lvbiAyNTE2ODYpCisrKyBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAzLDIyICszMDMsMjEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6
ZU5ldHdvcmtQcgogICAgICAgICBtZW1vcnlQcmVzc3VyZUhhbmRsZXIuaW5zdGFsbCgpOwogICAg
IH0KIAotICAgIHNldENhY2hlTW9kZWwocGFyYW1ldGVycy5jYWNoZU1vZGVsLCBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3
b3JrQ2FjaGVEaXJlY3RvcnkpOwotCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKICAgICBtX2lzSVRQRGF0YWJhc2VFbmFibGVkID0gcGFyYW1ldGVycy5zaG91bGRFbmFibGVJ
VFBEYXRhYmFzZTsKICNlbmRpZgogCiAgICAgV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVk
KHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKTsKIAotICAgIFNh
bmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0g
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lv
bjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCisgICAgZm9yIChhdXRvJiBkYXRh
U3RvcmVQYXJhbWV0ZXJzIDogcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzKSB7CisgICAg
ICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMuc2Vzc2lvbklEOwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIGFk
ZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOworICAgICAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgZGF0
YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgor
ICAgICAgICBpbml0aWFsaXplU3RvcmFnZVF1b3RhKGRhdGFTdG9yZVBhcmFtZXRlcnMpOworICAg
ICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0
ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1vdGVOZXR3b3JraW5nQ29u
dGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUoZGF0YVN0
b3JlUGFyYW1ldGVycykpOworICAgIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAg
ICBpZiAocGFyZW50UHJvY2Vzc0hhc1NlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpKSB7CkBAIC0z
MjYsMTQgKzMyNSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHIK
ICAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSwgc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwg
V1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBw
YXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwogICAgIH0KICNlbmRpZgotICAgIGluaXRpYWxpemVTdG9yYWdlUXVvdGEocGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyk7Ci0KLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0
LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxv
Y2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byogZGVm
YXVsdFNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKTsKLSAgICBhdXRvKiBkZWZhdWx0U3RvcmFnZVNlc3Npb24gPSBkZWZhdWx0U2Vzc2lv
bi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjb29raWUg
OiBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzKQot
ICAgICAgICBkZWZhdWx0U3RvcmFnZVNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwogCiAgICAg
Zm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAg
c3VwcGxlbWVudC0+aW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKQEAgLTQxOSwxMiArNDEwLDYgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlTmV0d29ya0Nvbm5lYwogCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIHsKLSAgICBkZWZhdWx0U3RvcmFnZVNl
c3Npb24oKS5jcmVkZW50aWFsU3RvcmFnZSgpLmNsZWFyQ3JlZGVudGlhbHMoKTsKLSAgICBpZiAo
YXV0byogbmV0d29ya1Nlc3Npb24gPSB0aGlzLT5uZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKSkKLSAgICAgICAgbmV0d29ya1Nlc3Npb24tPmNsZWFyQ3Jl
ZGVudGlhbHMoKTsKLSAgICBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCiAg
ICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFtdIChhdXRvJiBuZXR3b3JrU2Vzc2lvbikgewogICAg
ICAgICBpZiAoYXV0byBzdG9yYWdlU2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uLm5ldHdvcmtTdG9y
YWdlU2Vzc2lvbigpKQogICAgICAgICAgICAgc3RvcmFnZVNlc3Npb24tPmNyZWRlbnRpYWxTdG9y
YWdlKCkuY2xlYXJDcmVkZW50aWFscygpOwpAQCAtNTI0LDIxICs1MDksMTEgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdAogCiBXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Np
b25JRCYgc2Vzc2lvbklEKSBjb25zdAogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuICZkZWZhdWx0U3RvcmFn
ZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmdldChzZXNz
aW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtQcm9j
ZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGlmICghbV9kZWZhdWx0
TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAgICAgICBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNl
c3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotICAgIHJldHVy
biAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwotfQotCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+JiBmdW5jdG9yKQogewotICAgIGZ1bmN0b3Io
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwogICAgIGZvciAoYXV0byYgc3RvcmFnZVNlc3Npb24g
OiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMudmFsdWVzKCkpCiAgICAgICAgIGZ1bmN0b3IoKnN0
b3JhZ2VTZXNzaW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmgJKHJldmlzaW9uIDI1MTY4NikKKysrIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2
Niw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihj
b25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYpOwog
ICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oY29uc3Qg
UEFMOjpTZXNzaW9uSUQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b24mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNzaW9uKGNvbnN0IFBB
TDo6U2Vzc2lvbklEJik7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBlbnN1cmVTZXNz
aW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiwgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nl
c3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+JiYpOwpAQCAtMzQyLDcgKzM0MSw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAg
ICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4gcGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSBjb25zdDsKIAogICAgIHZvaWQgdGVybWluYXRlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBwbGF0
Zm9ybVRlcm1pbmF0ZSgpOwpAQCAtNDgxLDcgKzQ3OSw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNo
TWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25l
dHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Np
b25zOwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4gbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogCiAgICAgUmVmUHRyPFN0
b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5hZ2VyU2V0OwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjUxNjg2KQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZQogICAgIElQQzo6ZW5jb2RlKGVuY29kZXIsIG5ldHdvcmtBVFNDb250ZXh0
LmdldCgpKTsKICAgICBlbmNvZGVyIDw8IHN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkOwogI2VuZGlm
Ci0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBlbmNvZGVy
IDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYgVVNFKFNPVVApCiAgICAgZW5jb2Rlci5lbmNv
ZGVFbnVtKGNvb2tpZUFjY2VwdFBvbGljeSk7CiAgICAgZW5jb2RlciA8PCBpZ25vcmVUTFNFcnJv
cnM7CkBAIC0xMjIsMTEgKzEyMiwxMSBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzOjpkCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0gICAgT3B0aW9uYWw8
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwot
ICAgIGRlY29kZXIgPj4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgaWYgKCFkZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycykKKyAgICBPcHRpb25hbDxWZWN0b3I8V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM+PiBkYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGRlY29kZXIgPj4gZGF0
YVN0b3JlUGFyYW1ldGVyczsKKyAgICBpZiAoIWRhdGFTdG9yZVBhcmFtZXRlcnMpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMgPSBX
VEZNb3ZlKCpkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyk7CisgICAgcmVzdWx0LmRhdGFTdG9y
ZVBhcmFtZXRlcnMgPSBXVEZNb3ZlKCpkYXRhU3RvcmVQYXJhbWV0ZXJzKTsKIAogI2lmIFVTRShT
T1VQKQogICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHJlc3VsdC5jb29raWVBY2NlcHRQb2xp
Y3kpKQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAkocmV2aXNpb24gMjUxNjg2
KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0cnVjdCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyAKICAgICBib29sIHN0b3JhZ2VBY2Nlc3NBUElF
bmFibGVkOwogI2VuZGlmCiAKLSAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBkZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnM+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAgICAgCiAjaWYgVVNFKFNPVVApCiAgICAgSFRUUENv
b2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3kgeyBIVFRQQ29va2llQWNjZXB0UG9s
aWN5OjpBbHdheXNBY2NlcHQgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0JKHJldmlzaW9uIDI1
MTY4NikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nl
c3NDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtODYsOSArODYsNiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3Vt
ZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRl
cnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAg
IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKLSNlbmRpZgogI2VuZGlmCiAKICAgICBfQ0ZOZXR3b3JrU2V0QVRTQ29udGV4
dChwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKQEAgLTExNSwxMSArMTEyLDYg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgIFtOU1VSTENh
Y2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRm
b3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3JrUHJv
Y2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShTT1VS
Q0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCShyZXZpc2lv
biAyNTE2ODYpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1By
b2Nlc3NDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogewogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1D
cmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5p
cXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFsbG93U3BlY2lmaWNI
VFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRl
SW5mbywgY29uc3QgU3RyaW5nJiBob3N0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a1Byb2Nlc3NTb3VwLmNwcAkocmV2aXNpb24gMjUxNjg2KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0NSwxMSArMTQ1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXpl
TgogICAgIH0pOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Np
b24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9y
cykKIHsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OnNldFNob3VsZElnbm9yZVRMU0Vycm9ycyhp
Z25vcmVUTFNFcnJvcnMpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjUxNjg2KQorKysgU291cmNl
L1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw5ICs0NCw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVu
Y29kZSgKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIgPDwgaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwgaW5kZXhl
ZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtOTksMTQgKzk2LDYgQEAgT3B0aW9u
YWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYgogICAgIGlmICghaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
ID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlPiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsK
LSAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlOwotICAgIGlmICghaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUo
KmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRp
ZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgJKHJldmlzaW9u
IDI1MTY4NikKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDkgKzU3LDYgQEAgc3RydWN0IFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzIHsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBTdHJp
bmcgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNl
VGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYg
RU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAyNTE2ODYpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJB
UElTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIK
KyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxs
YmFja0lELmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiV2ViQ29va2llTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKQEAgLTM5LDIwICs0MCwxNSBAQAog
bmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hh
ciogV2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5h
Z2VyUHJveHkmIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkKIHsKLSAgICByZXR1
cm4gIldlYkNvb2tpZU1hbmFnZXJQcm94eSI7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdl
YkNvb2tpZU1hbmFnZXJQcm94eT4gbWFuYWdlcjsKKyAgICByZXR1cm4gbWFuYWdlcjsKIH0KIAot
UmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gV2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUo
V2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQorV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJD
b29raWVNYW5hZ2VyUHJveHkoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tp
ZU1hbmFnZXJQcm94eShwcm9jZXNzUG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6
OldlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAg
OiBXZWJDb250ZXh0U3VwcGxlbWVudChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3Vw
cGxlbWVudDo6cHJvY2Vzc1Bvb2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsK
IH0KIAogV2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KCkKQEAg
LTY1LDQzICs2MSw5IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2wK
ICAgICBtX2NsaWVudC5pbml0aWFsaXplKGNsaWVudCk7CiB9CiAKLS8vIFdlYkNvbnRleHRTdXBw
bGVtZW50Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3ll
ZCgpCi17Ci0gICAgVmVjdG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJzOwotICAgIGZvciAoYXV0byYg
b2JzZXJ2ZXJTZXQgOiBtX2Nvb2tpZU9ic2VydmVycy52YWx1ZXMoKSkgewotICAgICAgICBmb3Ig
KGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJTZXQpCi0gICAgICAgICAgICBvYnNlcnZlcnMuYXBw
ZW5kKG9ic2VydmVyKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2
ZXJzKQotICAgICAgICBvYnNlcnZlci0+bWFuYWdlckRlc3Ryb3llZCgpOwotCi0gICAgQVNTRVJU
KG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5
KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnJlZldlYkNvbnRleHRTdXBw
bGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6cmVmKCk7Ci19Ci0KLXZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9i
amVjdDo6ZGVyZWYoKTsKLX0KLQogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgW2Nh
bGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCB0b2tlbiA9IG5ldHdv
cmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eVRva2VuKCldKFZlY3RvcjxT
dHJpbmc+JiYgaG9zdG5hbWVzKSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihX
VEZNb3ZlKGhvc3RuYW1lcykpOwogICAgIH0pOwpAQCAtMTA5LDE3ICs3MSwxNyBAQCB2b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzCiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgp
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBo
b3N0bmFtZXMpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Np
b25JRCwgaG9zdG5hbWVzKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpk
ZWxldGVBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNz
UG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IENvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
KCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShz
ZXNzaW9uSUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1
bmN0aW9uKSwgdG9rZW4gPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0
aXZpdHlUb2tlbigpXSgpIG11dGFibGUgewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAg
ICAgfSk7CkBAIC0xMjcsNyArODksNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVs
ZXRlQ29va2llCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVz
TW9kaWZpZWRTaW5jZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdhbGxUaW1lIHRpbWUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8m
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsK
KyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0
aW1lKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCB0b2tl
biA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eVRva2VuKCld
KCkgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTEz
NSw3ICs5Nyw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb28KIAog
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdv
cmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29y
a1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpT
ZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVzKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pLCB0b2tlbiA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJh
Y2tncm91bmRBY3Rpdml0eVRva2VuKCldKCkgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxiYWNrRnVu
Y3Rpb24oKTsKICAgICB9KTsKQEAgLTE0Myw3ICsxMDUsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0Q29va2llcyhQCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRD
b29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNv
b2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7
CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1l
bnRVUkwpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIHRv
a2VuID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5VG9rZW4o
KV0oKSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogICAgIH0pOwpAQCAt
MTUxLDcgKzExMyw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFAK
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFsbENvb2tpZXMoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYm
IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNz
ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Mu
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRBbGxDb29r
aWVzKHNlc3Npb25JRCksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSwgdG9rZW4gPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZp
dHlUb2tlbigpXShWZWN0b3I8Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgewogICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKFdURk1vdmUoY29va2llcykpOwogICAgIH0pOwpAQCAtMTU5LDcgKzEy
MSw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWUKIAogdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYm
KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJv
Y2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9j
ZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0Q29v
a2llcyhzZXNzaW9uSUQsIHVybCksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSwgdG9rZW4gPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5k
QWN0aXZpdHlUb2tlbigpXShWZWN0b3I8Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgewogICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKFdURk1vdmUoY29va2llcykpOwogICAgIH0pOwpAQCAtMTY3
LDEyICsxMjksMTIgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMoUAog
CiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9O
ZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAK
IHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0
d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiYgY2FsbGJhY2spCkBA
IC0yMjMsMTUgKzE4NSw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpjb29raWVzRGlk
Q2gKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koUEFMOjpTZXNzaW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBpZiAoIXByb2Nlc3NQb29sKCktPmlzVXNpbmdUZXN0aW5nTmV0d29ya1Nlc3Np
b24oKSkKLSAgICAgICAgcGVyc2lzdEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNl
bmRpZgotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBu
ZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5l
dHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbY2FsbGJhY2tGdW5jdGlvbiA9
IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIHRva2VuID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0
bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5VG9rZW4oKV0oKSBtdXRhYmxlIHsKICAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbigpOwogICAgIH0pOwpAQCAtMjM5LDcgKzE5Myw3IEBAIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2kKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikK
IHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwg
W2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCB0b2tlbiA9IG5l
dHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eVRva2VuKCldKEhUVFBD
b29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5j
dGlvbihwb2xpY3kpOwogICAgIH0pOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgJKHJldmlzaW9uIDI1MTY4NikKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NiwxMSArNTYsOSBAQCB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJy
CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxIVFRQQ29va2llQWNjZXB0UG9saWN5PiBIVFRQQ29v
a2llQWNjZXB0UG9saWN5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6Q29va2llPiY+IEdldENvb2tpZXNDYWxsYmFjazsKIAotY2xhc3MgV2Vi
Q29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6
VHlwZTo6Q29va2llTWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0
ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBw
dWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwg
cHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7Ci0KLSAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4gY3JlYXRlKFdlYlByb2Nlc3NQb29sKik7CisgICAgc3RhdGljIFdlYkNvb2tpZU1h
bmFnZXJQcm94eSYgc2luZ2xldG9uKCk7CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdlclBy
b3h5KCk7CiAKICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2Vy
Q2xpZW50QmFzZSopOwpAQCAtMTA0LDE3ICsxMDIsMTEgQEAgcHVibGljOgogICAgIHVzaW5nIEFQ
STo6T2JqZWN0OjpkZXJlZjsKIAogcHJpdmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHko
V2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKKyAgICBmcmll
bmQgTmV2ZXJEZXN0cm95ZWQ8V2ViQ29va2llTWFuYWdlclByb3h5PjsKIAogICAgIHZvaWQgY29v
a2llc0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBXZWJDb250ZXh0U3VwcGxl
bWVudAotICAgIHZvaWQgcHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lk
IHByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHBy
b2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBy
ZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVyZWZXZWJDb250
ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIK
ICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2Rl
ciYpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuY3BwCShyZXZpc2lvbiAyNTE2ODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw3ICsyMjAsNiBAQCBXZWJQ
cm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jCiAgICAgLCBtX2F1dG9tYXRpb25D
bGllbnQobWFrZVVuaXF1ZTxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25s
b2FkQ2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSkKICAgICAsIG1f
aGlzdG9yeUNsaWVudChtYWtlVW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+
KCkpCi0gICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3Jl
KFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgpKQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1f
aGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9y
bWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlcj4oKnRoaXMpKQpAQCAtMjY1LDcgKzI2NCw2IEBAIFdl
YlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2MKICAgICBhZGRNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0
aGlzKTsKIAogICAgIC8vIE5PVEU6IFRoZXNlIHN1Yi1vYmplY3RzIG11c3QgYmUgaW5pdGlhbGl6
ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuLgotICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29v
a2llTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5h
Z2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJv
eHk+KCk7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCkBAIC0zMTYsOSArMzE0LDYgQEAgV2Vi
UHJvY2Vzc1Bvb2w6On5XZWJQcm9jZXNzUG9vbCgpCiAgICAgcHJvY2Vzc1Bvb2xDb3VudGVyLmRl
Y3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2h1dERvd25Qcm9jZXNzKCk7Ci0KICNpZiBFTkFCTEUoR0FNRVBB
RCkKICAgICBpZiAoIW1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFkcy5pc0VtcHR5KCkpCiAgICAgICAg
IFVJR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5wcm9jZXNzUG9vbFN0b3BwZWRVc2luZ0dh
bWVwYWRzKCp0aGlzKTsKQEAgLTM3NiwxNiArMzcxLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2V0QXV0b21hdGlvbkNsaWVudAogICAgICAgICBtX2F1dG9tYXRpb25DbGllbnQgPSBXVEZNb3Zl
KGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRMZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLXsKLSNp
ZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQotICAgIGlmICghY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9IFdURk1vdmUo
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgotfQotCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAg
bV9zdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IGVuYWJsZWQ7CkBAIC00MDUsNyArMzkwLDcgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudAogCiBJUEM6OkNvbm5lY3Rp
b24qIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKQogewotICAg
IHJldHVybiBtX25ldHdvcmtQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNvbm5lY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCkBAIC00MTcsOCArNDAy
LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5k
VG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSkpOwogI2lmIFVTRShTT1VQKQotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNl
clByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5n
dWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOwogI2VuZGlmCiB9CiAK
QEAgLTQ1OSwyMDIgKzQ0MywxMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzY3JlZW5Qcm9wZXJ0
aWVzU3RhCiBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUpCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBh
IHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1h
aW4gdGhyZWFkcy4KLSAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNl
IHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCi0gICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KLSAgICBpZiAoIVJ1bkxvb3A6
OmlzTWFpbigpKSB7Ci0gICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3Jr
UHJvY2VzcygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNz
OwotICAgIH0KLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIGlmICh3aXRo
V2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vz
c2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICAgICAgd2l0aFdl
YnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgYXV0byBuZXR3b3JrUHJv
Y2VzcyA9IG1ha2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQcm94eT4oKnRoaXMpOwotCi0gICAgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLQotICAgIGlmIChtX3dl
YnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3RvcihtX3dlYnNpdGVEYXRhU3RvcmUt
PnBlbmRpbmdDb29raWVzKCkpOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVu
ZGluZ0Nvb2tpZXMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNl
QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5zb3VyY2VB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGlj
YXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5zb3VyY2VBcHBs
aWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRpZgotICAgICAgICBtX3dlYnNpdGVE
YXRhU3RvcmUtPm5ldHdvcmtpbmdIYXNCZWd1bigpOwotICAgIH0KLQotICAgIHBhcmFtZXRlcnMu
Y2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVs
KCk7Ci0KLSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9t
UHJvdG9jb2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3Rl
cmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOwotCi0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQ
b29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlRGly
ZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMu
Y29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcgY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNE
aXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkp
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVz
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJl
Y3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgaWYg
KCFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9u
OjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShlbXB0eVN0cmluZygpLCBTYW5k
Ym94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rv
cnkgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuaHN0c1N0b3JhZ2VEaXJlY3Rv
cnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkp
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeShwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmhzdHNTdG9y
YWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihtX3NjaGVtZXNUb1JlZ2lzdGVyQXNT
ZWN1cmUpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0Nv
bnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihtX3NjaGVtZXNUb1JlZ2lzdGVyQXNC
eXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9yKG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0xv
Y2FsKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNv
cHlUb1ZlY3RvcihtX3NjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2Vzcyk7Ci0KLSNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLSAgICAvLyAqKioqKioqKioKLSAgICAvLyBJTVBPUlRBTlQ6IERv
IG5vdCBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGluZGV4ZWQgZGF0YWJhc2Vz
IG9uIGRpc2sgd2l0aG91dCBmaXJzdCBjb25zdWx0aW5nIGEgcmV2aWV3ZXIgZnJvbSBBcHBsZSAo
PHJkYXI6Ly9wcm9ibGVtLzE3NDU0NzEyPikKLSAgICAvLyAqKioqKioqKioKLSAgICBpZiAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBh
cmFtZXRlcnMoKS5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5jcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUocGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwotICAg
IH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmIChtX3dlYnNp
dGVEYXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRTZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnkpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSA9ICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRT
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0gICAgYXV0byBsb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3Rv
cmUtPnJlc29sdmVkTG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAg
aWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCi0gICAgICAgIGxvY2FsU3RvcmFnZURpcmVjdG9y
eSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9y
eSgpOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9y
YWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0g
ICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVE
YXRhU3RvcmUtPnJlc29sdmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwotICAg
IGlmIChwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsK
LQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGJvb2wgZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IGZhbHNlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkSW5j
bHVkZUxvY2FsaG9zdCA9IHRydWU7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlID0gZmFsc2U7Ci0gICAgYm9vbCBlbmFibGVUaGlyZFBhcnR5Q29va2llQmxv
Y2tpbmcgPSBmYWxzZTsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51YWxQcmV2
YWxlbnRSZXNvdXJjZSB7IH07Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAg
ICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVz
dGluZ0V2ZW50ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2Fs
bGJhY2soKTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cykgewotICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vi
c2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAg
ICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdEluUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKLSAgICAg
ICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZTsKLSAg
ICAgICAgICAgIGVuYWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2luZyA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5lbmFibGVUaGlyZFBhcnR5Q29va2llQmxvY2tpbmc7Ci0gICAgICAgICAgICBt
YW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3Jh
Z2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsK
LSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBh
cnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFy
dHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IGF1dG8mIG5l
dHdvcmtDYWNoZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdv
cmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5p
c051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0
d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50
ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0j
ZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAg
ICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gbV93ZWJzaXRlRGF0YVN0b3Jl
LT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hv
dWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zaG91bGRJbmNs
dWRlTG9jYWxob3N0SW5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotICAgICAgICAgICAgZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5lbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlOwotICAgICAgICAgICAgZW5h
YmxlVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmVu
YWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2luZzsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVu
dFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFn
ZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1
b3RhKCk7Ci0KLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAg
ICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9y
eSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAg
ICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlKCktPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0gICAg
ICAgIGF1dG8gbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5lbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5lbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xv
Z1Rlc3RpbmdFdmVudDsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0SW5SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5lbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnTW9kZTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5lbmFibGVUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmcgPSBlbmFibGVUaGlyZFBhcnR5Q29va2llQmxvY2tpbmc7Ci0gICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbnVhbFByZXZhbGVudFJlc291cmNlID0gbWFudWFsUHJldmFsZW50UmVz
b3VyY2U7Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBhcmFtZXRlcnMKLSAg
ICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKLQotICAgIC8v
IEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJh
bWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBuZXR3b3JrUHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3JrUHJvY2Vzc0xhdGVu
Y3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsKLSNlbmRpZgotCi0g
ICAgaWYgKG1fZGlkTmV0d29ya1Byb2Nlc3NDcmFzaCkgewotICAgICAgICBtX2RpZE5ldHdvcmtQ
cm9jZXNzQ3Jhc2ggPSBmYWxzZTsKLSAgICAgICAgcmVpbnN0YXRlTmV0d29ya1Byb2Nlc3NBc3Nl
cnRpb25TdGF0ZSgqbmV0d29ya1Byb2Nlc3MpOwotICAgIH0KLQotICAgIGlmICh3aXRoV2Vic2l0
ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVm
KCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+
Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV0
d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUgc2Vzc2lvbnMgdGhhdCBoYXZlIGJlZW4g
cmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAgICBmb3IgKGF1dG8mIHNlc3Npb25JRCA6
IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHdlYnNp
dGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3Rv
cmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5h
ZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICB9Ci0KLSAgICBtX25ldHdvcmtQcm9j
ZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0gICAgcmV0dXJuICptX25ldHdvcmtQcm9j
ZXNzOworICAgIHJldHVybiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNz
UHJveHkmIG5ldHdvcmtQcm9jZXNzUHJveHksIFZlY3RvcjxzdGQ6OnBhaXI8UmVmUHRyPFdlYlBy
b2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbjo6RGVsYXllZFJlcGx5Pj4mJiBwZW5kaW5nUmVwbGllcykKIHsKLSAgICBBU1NF
UlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJvY2Vzc1Byb3h5ID09
IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwogICAgIG1fZGlkTmV0d29ya1Byb2Nlc3NDcmFzaCA9
IHRydWU7CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVl
cygpKQpAQCAtNjY1LDkgKzQ1OCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9j
ZXNzQ3Jhc2gKICAgICBpZiAobV9hdXRvbWF0aW9uU2Vzc2lvbikKICAgICAgICAgbV9hdXRvbWF0
aW9uU2Vzc2lvbi0+dGVybWluYXRlKCk7CiAKLSAgICAvLyBMZWF2ZSB0aGUgcHJvY2VzcyBwcm94
eSBhcm91bmQgZHVyaW5nIGNsaWVudCBjYWxsLCBzbyB0aGF0IHRoZSBjbGllbnQgY291bGQgcXVl
cnkgdGhlIHByb2Nlc3MgaWRlbnRpZmllci4KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0
cjsKLQogICAgIC8vIEF0dGVtcHQgdG8gcmUtbGF1bmNoLgogICAgIGlmIChwZW5kaW5nUmVwbGll
cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY4MywxNyArNDczLDEyIEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2gKIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vz
c1Byb3h5LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7Ci0gICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vz
cy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShy
ZXBseSkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbih3ZWJQcm9jZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKIH0KIAog
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlz
aFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1By
b3h5JiBwcm94eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIEFTU0VSVF9VTlVTRUQocHJveHksICZwcm94eSA9
PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKLQogICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUg
PSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9u
SUQoc2Vzc2lvbklEKTsKIAogICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewpAQCAtMTI3NSwx
MCArMTA2MCw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2kKICAg
ICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAoc2Vzc2lv
bklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKICAgICAgICAgQVNT
RVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUucGFyYW1ldGVycygpLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKLSAgICAgICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFk
ZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIGRhdGFTdG9yZS5jbGVh
clBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KKyAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuYWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFTdG9yZSkpOworICAgICAgICBk
YXRhU3RvcmUuY2xlYXJQZW5kaW5nQ29va2llcygpOwogICAgIH0KIH0KIApAQCAtMTQyMCw3ICsx
MjAzLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBsdWdpbnMoKQogCiBQcm9jZXNz
SUQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpCiB7Ci0gICAgcmV0
dXJuIG1fbmV0d29ya1Byb2Nlc3MgPyBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmll
cigpIDogMDsKKyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucHJv
Y2Vzc0lkZW50aWZpZXIoKTsKIH0KIAogUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpwcmV3YXJt
ZWRQcm9jZXNzSWRlbnRpZmllcigpCkBAIC0xNTcxLDggKzEzNTQsNyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXRDYWNoZU1vZGVsKENhY2hlCiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVz
c2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYg
KG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwsIHsgfSksIDApOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwsIHsgfSksIDApOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUg
dGltZW91dEludGVydmFsKQpAQCAtMTU4Miw3ICsxMzY0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9v
bDo6c2V0RGVmYXVsdFJlcXVlc3RUaQogCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7
Ci0gICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY3JlYXRl
RG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QpOworICAgIGF1dG8mIGRvd25sb2FkUHJv
eHkgPSBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3Jl
LCAqdGhpcywgcmVxdWVzdCk7CiAgICAgZG93bmxvYWRQcm94eS5zZXRPcmlnaW5hdGluZ1BhZ2Uo
b3JpZ2luYXRpbmdQYWdlKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAgLTE2NjAs
MjUgKzE0NDIsMTEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3RvcE1lbW9yeVNhbXBsZXIoKQog
ICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RvcE1lbW9yeVNh
bXBsZXIoKSk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVzZVRlc3RpbmdOZXR3b3JrU2Vz
c2lvbigpCi17Ci0gICAgQVNTRVJUKG1fcHJvY2Vzc2VzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJU
KCFtX25ldHdvcmtQcm9jZXNzKTsKLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcHJvY2Vzc2VzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24gPSB0cnVlOwotfQot
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpCiB7Ci0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3Nh
Z2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoc3RkOjpmb3J3YXJkPFQ+
KG1lc3NhZ2UpLCBzdGQ6OmZvcndhcmQ8VT4ocmVwbHkpLCAwKTsKKyAgICBpZiAoTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuY2FuU2VuZE1lc3NhZ2UoKSkKKyAgICAgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZFN5bmMoc3RkOjpmb3J3YXJkPFQ+KG1lc3Nh
Z2UpLCBzdGQ6OmZvcndhcmQ8VT4ocmVwbHkpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCBhbGxvd3MpCkBA
IC0xNjg4LDM1ICsxNDU2LDIxIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEFsbG93c0FueVNT
TENlcnQKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKCksIDAp
OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKCksIDApOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCiB7Ci0jaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQotICAgIHdoaWxlICghbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmlzRW1w
dHkoKSkKLSAgICAgICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmJlZ2luKCktPnZhbHVlLT5k
aXNhYmxlU2VydmljZVdvcmtlcnMoKTsKLSNlbmRpZgotCi0gICAgaWYgKCFtX25ldHdvcmtQcm9j
ZXNzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWlu
YXRlKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci0gICAgbV9kaWROZXR3b3Jr
UHJvY2Vzc0NyYXNoID0gdHJ1ZTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdv
cmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpCiB7Ci0gICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzV2ls
bFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygp
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUo
KQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKQpAQCAtMTc0MSwxNSArMTQ5NSwxNCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzeW5jTG9jYWxTdG9yYWdlKENvCiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKCksIDAp
OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpLCAw
KTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjph
bGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJ
bmZvKiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBob3N0KQogewogICAgIGVuc3VyZU5ldHdv
cmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0
ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZp
Y0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwg
aG9zdCksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdXRvbWF0aW9uQ2Fw
YWJpbGl0aWVzKCkgY29uc3QKQEAgLTIzMzYsMTAgKzIwODksNyBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpjbGVhckN1cnJlbnRNb2RpZmllCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0
YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIGZyb21Eb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwgT3B0aW9u
U2V0PENyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRpb25EYXRh
VHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBhZ2VJZGVu
dGlmaWVyIHdlYlBhZ2VJRCkKIHsKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0ZUxvYWRX
aXRoRGF0YVRyYW5zZmVyKHNlc3Npb25JRCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRp
b25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQpOworICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRy
YW5zZmVyKHNlc3Npb25JRCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJh
bnNmZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQpOwogfQogI2VuZGlmCiAKQEAgLTIzNTcs
OCArMjEwNyw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFdlYlByb2Nlc3NIYXNVcGwKICAg
ICBpZiAobV9wcm9jZXNzZXNXaXRoVXBsb2Fkcy5pc0VtcHR5KCkpIHsKICAgICAgICAgUkVMRUFT
RV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJUaGUgbnVtYmVyIG9mIHVwbG9hZHMgaW4gcHJvZ3Jl
c3MgaXMgbm93IG9uZS4gVGFraW5nIE5ldHdvcmtpbmcgYW5kIFVJIHByb2Nlc3MgYXNzZXJ0aW9u
cy4iKTsKIAotICAgICAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPnRha2VVcGxvYWRBc3NlcnRpb24oKTsKKyAgICAgICAgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2luZ2xldG9uKCkudGFrZVVwbG9hZEFzc2VydGlvbigpOwogICAgICAgICAKICAg
ICAgICAgQVNTRVJUKCFtX3VpUHJvY2Vzc1VwbG9hZEFzc2VydGlvbik7CiAgICAgICAgIG1fdWlQ
cm9jZXNzVXBsb2FkQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNzZXJ0aW9uPihnZXRD
dXJyZW50UHJvY2Vzc0lEKCksICJXZWJLaXQgdXBsb2FkcyJfcywgQXNzZXJ0aW9uU3RhdGU6OlVu
Ym91bmRlZE5ldHdvcmtpbmcpOwpAQCAtMjM4Myw4ICsyMTMyLDcgQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJXZWJQcm9jZXNzSGFzVQogICAgIGlmIChtX3Byb2Nlc3Nlc1dpdGhVcGxvYWRz
LmlzRW1wdHkoKSkgewogICAgICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlRo
ZSBudW1iZXIgb2YgdXBsb2FkcyBpbiBwcm9ncmVzcyBpcyBub3cgemVyby4gUmVsZWFzaW5nIE5l
dHdvcmtpbmcgYW5kIFVJIHByb2Nlc3MgYXNzZXJ0aW9ucy4iKTsKIAotICAgICAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmNsZWFyVXBsb2Fk
QXNzZXJ0aW9uKCk7CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNs
ZWFyVXBsb2FkQXNzZXJ0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobV91aVByb2Nl
c3NVcGxvYWRBc3NlcnRpb24pOwogICAgICAgICBtX3VpUHJvY2Vzc1VwbG9hZEFzc2VydGlvbiA9
IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgJ
KHJldmlzaW9uIDI1MTY4NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYgQEAgT0JKQ19DTEFTUyBOU1N0cmlu
ZzsKIAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRvbWF0aW9uQ2xpZW50OwotY2xhc3MgQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRG93bmxvYWRDbGllbnQ7CiBjbGFzcyBI
VFRQQ29va2llU3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNsaWVudDsKQEAgLTE3NCw3ICsx
NzMsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0b3J5Q2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmKTsKICAgICB2b2lkIHNldERvd25s
b2FkQ2xpZW50KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiYmKTsKICAgICB2b2lkIHNl
dEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4m
Jik7Ci0gICAgdm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1
bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmKTsKIAogICAgIHZv
aWQgc2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmlu
ZyYpOwogICAgIGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVu
dGlmaWVyKCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5jdXN0b21XZWJDb250ZW50U2Vydmlj
ZUJ1bmRsZUlkZW50aWZpZXIoKTsgfQpAQCAtMzAyLDggKzMwMCw2IEBAIHB1YmxpYzoKICAgICBB
UEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xpZW50KCkgeyByZXR1cm4g
Km1faGlzdG9yeUNsaWVudDsgfQogICAgIFdlYkNvbnRleHRDbGllbnQmIGNsaWVudCgpIHsgcmV0
dXJuIG1fY2xpZW50OyB9CiAKLSAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCYg
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gKm1fY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50OyB9Ci0KICAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CiAgICAgICAg
IHVuc2lnbmVkIHdrVmlld0NvdW50OwogICAgICAgICB1bnNpZ25lZCB3a1BhZ2VDb3VudDsKQEAg
LTMxMSw5ICszMDcsNiBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBzdGF0aWMgU3RhdGlzdGljcyYg
c3RhdGlzdGljcygpOyAgICAKIAotICAgIHZvaWQgdXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKCk7
Ci0gICAgYm9vbCBpc1VzaW5nVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb247IH0KLQogICAgIHZvaWQgc2V0QWxsb3dz
QW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCk7CiAKICAgICB2b2lkIGNsZWFyQ2Fj
aGVkQ3JlZGVudGlhbHMoKTsKQEAgLTM4MCw3ICszNzMsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBO
ZXR3b3JrIFByb2Nlc3MgTWFuYWdlbWVudAogICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlID0g
bnVsbHB0cik7Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSB7IHJl
dHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSog
bmV0d29ya1Byb2Nlc3MoKSB7IHJldHVybiAmTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCk7IH0KICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5
JiwgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiwgTWVzc2FnZXM6Oldl
YlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5Pj4m
Jik7CiAKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJv
eHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b25EZWxheWVkUmVwbHkmJik7CkBAIC01MjQsNiArNTE3LDggQEAgcHVibGljOgogICAgIHZvaWQg
c2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKICAgICBib29sIHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3VzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3M7IH0KIAorICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlh
bGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisK
IHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIApAQCAtNTM5LDggKzUz
NCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlcXVlc3RXZWJDb250ZW50U3RhdGlzdGljcyhT
dGF0aXN0aWNzUmVxdWVzdCYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwotCiAgICAgdm9pZCBo
YW5kbGVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUs
IGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSk7CiAgICAgdm9pZCBoYW5kbGVTeW5jaHJvbm91
c01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29u
c3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJEYXRh
JiYpPiYmKTsKIApAQCAtNjIzLDcgKzYxNiw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1
ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBt
X2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9u
U2Vzc2lvbj4gbV9hdXRvbWF0aW9uU2Vzc2lvbjsKIApAQCAtNjk1LDcgKzY4Nyw2IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX3Byb2Nlc3NUZXJtaW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKICAg
ICBib29sIG1fZGlkTmV0d29ya1Byb2Nlc3NDcmFzaCB7IGZhbHNlIH07Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7CiAKICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBSZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNrPj4gbV9kaWN0aW9uYXJ5Q2Fs
bGJhY2tzOwogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxTdGF0aXN0aWNzUmVxdWVzdD4+
IG1fc3RhdGlzdGljc1JlcXVlc3RzOwpAQCAtODA0LDE1ICs3OTUsMTUgQEAgcHJpdmF0ZToKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhUJiYgbWVzc2FnZSkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25l
dHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CisgICAgaWYgKE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLmNhblNlbmRNZXNzYWdlKCkpCisgICAgICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAw
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSkKIHsK
ICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQo
c3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRU
UENvb2tpZVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcAkocmV2aXNpb24gMjUxNjg2KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDggKzQwLDYgQEAgbmFtZXNwYWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBD
b29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAg
ICAgOiBtX293bmluZ0RhdGFTdG9yZSh3ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9v
d25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkK
LSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAog
SFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkKQEAgLTQ5LDggKzQ3LDYgQEAgSFRU
UENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMu
aXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwog
ICAgIEFTU0VSVCghbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lz
dGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpjb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTY4LDggKzY0LDggQEAgdm9p
ZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMoQ29tcGxldGlvbgogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0QWxsQ29v
a2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFtwb29sID0gV1RGTW92ZShwb29s
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBj
b29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigp
OworICAgIGNvb2tpZU1hbmFnZXIuZ2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIFtwb29sID0gV1RGTW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBj
b29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29va2llcyk7CiAg
ICAgfSk7CiB9CkBAIC05MCw4ICs4Niw4IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29r
aWVzKGNvbnN0IFYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8qIGNvb2tpZU1h
bmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OwotICAgIGNvb2tpZU1hbmFnZXItPnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCBjb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgIGF1dG8mIGNv
b2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7
CisgICAgY29va2llTWFuYWdlci5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgY29va2llcywgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKICAgICB9KTsKIH0KQEAgLTExMSw4ICsxMDcsOCBAQCB2b2lkIEhUVFBD
b29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWUobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFtwb29sID0gV1RGTW92ZShwb29s
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnNpbmdsZXRvbigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQ29va2llKG1fb3du
aW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBbcG9vbCA9IFdURk1vdmUocG9vbCks
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgfSk7CiB9CkBAIC0xMjcsMjQg
KzEyMywxNiBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyhDCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3Vw
cGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5h
Z2VyLT5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7Cisg
ICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
aW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENvbXBsZXRpb25IYW5k
bGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxD
b29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0g
bV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMo
KTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xpY3kpOwotICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildICgpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2llTWFuYWdlci5zZXRIVFRQ
Q29va2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0
YWJsZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgfSk7CiB9CkBAIC0xODIs
MjEgKzE3MCw3IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKE8KIAog
ICAgIG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIgPSBtYWtlVW5pcXVlPEFQSVdlYkNvb2tp
ZU1hbmFnZXJQcm94eU9ic2VydmVyPigqdGhpcyk7CiAKLSAgICBhdXRvKiBwb29sID0gbV9vd25p
bmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLQot
ICAgIGlmICghcG9vbCkgewotICAgICAgICBBU1NFUlQoIW1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29v
a2llcyk7Ci0KLSAgICAgICAgLy8gTGlzdGVuIGZvciBjb29raWUgbm90aWZpY2F0aW9ucyBpbiB0
aGUgVUlQcm9jZXNzIGluIHRoZSBtZWFudGltZS4KLSAgICAgICAgc3RhcnRPYnNlcnZpbmdDaGFu
Z2VzVG9EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoW3RoaXNdICgpIHsKLSAgICAgICAgICAg
IGNvb2tpZXNEaWRDaGFuZ2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgbV9vYnNlcnZpbmdV
SVByb2Nlc3NDb29raWVzID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1f
b2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkg
PSAmV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG1fb2Jz
ZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKQEAg
LTIzOCwzOSArMjEyLDEwIEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVz
dHIKICAgICBpZiAoIXBvb2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmV2ViS2l0OjpX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG1fb2JzZXJ2ZWRDb29raWVN
YW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKLXZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpyZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAg
QVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAg
bV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gV2ViUHJvY2Vzc1Bvb2w6
OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKFt0aGlzXShXZWJQcm9jZXNzUG9v
bCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+aXNB
c3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3UHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIC8vIE5vdyB0aGF0IGFuIGFzc29jaWF0ZWQgcHJvY2VzcyBwb29sIGV4aXN0
cywgd2UgbmVlZCB0byBmbHVzaCB0aGUgVUkgcHJvY2VzcyBjb29raWUgc3RvcmUKLSAgICAgICAg
Ly8gdG8gbWFrZSBzdXJlIGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgd2l0aGluIHRoZSBuZXcg
cHJvY2VzcyBwb29sLgotICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgp
OwotICAgICAgICBuZXdQcm9jZXNzUG9vbC5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCi0gICAg
ICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKSB7Ci0gICAgICAgICAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbmV3UHJvY2Vzc1Bvb2wuc3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAgICAgIH0KLSAgICAg
ICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIH0pOwot
fQotCi12b2lkIEhUVFBDb29raWVTdG9yZTo6dW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucygpCi17Ci0gICAgaWYgKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRl
bnRpZmllcikKLSAgICAgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJQcm9jZXNzUG9vbENy
ZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsK
LQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IDA7Ci19Ci0K
ICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hEZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7IH0KIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IEhUVFBD
b29raWVTdG9yZTo6Z2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpIHsg
cmV0dXJuIHsgfTsgfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBD
b29raWVTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElIVFRQQ29va2llU3RvcmUuaAkocmV2aXNpb24gMjUxNjg2KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw5
ICs4MCw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRUUENvb2tpZVN0b3JlKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZSYpOwogCi0gICAgdm9pZCByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29s
Tm90aWZpY2F0aW9ucygpOwotICAgIHZvaWQgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucygpOwotCiAgICAgc3RhdGljIHZvaWQgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29v
a2llU3RvcmUoKTsKICAgICBzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gZ2V0QWxsRGVm
YXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwogICAgIHN0YXRpYyB2b2lkIHNldENv
b2tpZUluRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYp
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCShy
ZXZpc2lvbiAyNTE2ODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsOSArNDI2LDkgQEAgdm9pZCBXS0NvbnRleHRQ
cmVjb25uZWN0VG9TZXJ2ZXIoV0tDb250ZQogewogfQogCi1XS0Nvb2tpZU1hbmFnZXJSZWYgV0tD
b250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dFJlZikKK1dLQ29va2ll
TWFuYWdlclJlZiBXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKFdLQ29udGV4dFJlZikKIHsKLSAg
ICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c3VwcGxl
bWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6dG9BUEkoJldlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKSk7CiB9
CiAKIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdL
Q29udGV4dFJlZikKQEAgLTU0NSw5ICs1NDUsOCBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3Jp
cHRHYXJiYWdlQ29sbGVjCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldEphdmFT
Y3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGVuYWJsZSk7CiB9CiAKLXZvaWQgV0tD
b250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KQordm9p
ZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmKQogewotICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT51c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oKTsKIH0K
IAogdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRl
c3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dzKQpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAkocmV2aXNpb24g
MjUxNjg2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dFNldEFsbG93c0FueVNTTEMKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmLCBib29s
KTsKIAogLy8gVGVzdCBvbmx5LiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBhbnkgc2Vjb25kYXJ5
IHByb2Nlc3NlcyBhcmUgc3RhcnRlZC4KLVdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFVzZVRlc3Rp
bmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYgY29udGV4dCk7CitXS19FWFBPUlQgdm9pZCBX
S0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpIFdL
X0NfQVBJX0RFUFJFQ0FURUQ7CiAKIC8vIFRlc3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBiZWZv
cmUgcnVubmluZyBhIHRlc3QuCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhckNhY2hlZENy
ZWRlbnRpYWxzKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCShyZXZpc2lvbiAyNTE2
ODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTk5LDI2ICsxOTksOCBAQCAtICh2b2lkKV9zZXRDYW5IYW5k
bGVIVFRQU1NlcnZlclRydXN0RXZhCiB7CiB9CiAKLXN0YXRpYyBXZWJLaXQ6OkhUVFBDb29raWVB
Y2NlcHRQb2xpY3kgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KE5TSFRUUENvb2tpZUFjY2VwdFBv
bGljeSBwb2xpY3kpCi17Ci0gICAgc3dpdGNoIChzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihwb2xp
Y3kpKSB7Ci0gICAgY2FzZSBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXM6Ci0gICAgICAg
IHJldHVybiBXZWJLaXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6OkFsd2F5c0FjY2VwdDsKLSAg
ICBjYXNlIE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeU5ldmVyOgotICAgICAgICByZXR1cm4gV2Vi
S2l0OjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpOZXZlcjsKLSAgICBjYXNlIE5TSFRUUENvb2tp
ZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOgotICAgICAgICByZXR1cm4g
V2ViS2l0OjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFp
bjsKLSAgICBjYXNlIE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeUV4Y2x1c2l2ZWx5RnJvbU1haW5E
b2N1bWVudERvbWFpbjoKLSAgICAgICAgcmV0dXJuIFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBv
bGljeTo6RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwotICAgIH0KLQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBXZWJLaXQ6OkhUVFBDb29raWVBY2NlcHRQ
b2xpY3k6OkFsd2F5c0FjY2VwdDsKLX0KLQogLSAodm9pZClfc2V0Q29va2llQWNjZXB0UG9saWN5
OihOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kpcG9saWN5CiB7Ci0gICAgX3Byb2Nlc3NQb29sLT5z
dXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIHRvSFRUUENv
b2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CiB9CiAKIC0gKGlkKV9vYmplY3RG
b3JCdW5kbGVQYXJhbWV0ZXI6KE5TU3RyaW5nICopcGFyYW1ldGVyCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25T
ZXNzaW9uLmNwcAkocmV2aXNpb24gMjUxNjg2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
NTcsOCArMTM1Nyw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2sK
ICAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJodHRwT25seSJfcywgY29va2llLmh0
dHBPbmx5KSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RF
VEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2h0dHBPbmx5JyB3YXMgbm90
IGZvdW5kLiIpOwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0g
bV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAg
Y29va2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lv
bklEKCksIHsgY29va2llIH0sIFtjYWxsYmFjayA9IGNhbGxiYWNrLmNvcHlSZWYoKV0oKSB7Cisg
ICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5zZXRDb29raWVzKHBhZ2UtPndl
YnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrID0gY2Fs
bGJhY2suY29weVJlZigpXSgpIHsKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAg
ICAgfSk7CiB9CkBAIC0xMzc0LDggKzEzNzMsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpkZWxldGVBbGxDb29rCiAKICAgICBTdHJpbmcgaG9zdCA9IGFjdGl2ZVVSTC5ob3N0KCkudG9T
dHJpbmcoKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1f
cHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNv
b2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFT
dG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVk
ZWQoaG9zdCkgfSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5kZWxl
dGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQo
KSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwogfQog
CiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRTZXNzaW9uUGVybWlzc2lvbnMoRXJyb3JT
dHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpTZXNzaW9uUGVybWlzc2lvbkRhdGE+PiYgb3V0X3Blcm1pc3Npb25zKQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tCShyZXZpc2lvbiAyNTE2ODYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQcm9jZXNzUG9vbENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDcgQEAg
c3RhdGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZAogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVz
c2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByb2Nl
c3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKICAgICBpZiAoIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52
YWx1ZSgpKQpAQCAtMTM5LDggKzEzOCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3Jt
SW5pdGlhbGl6ZSgKIAogICAgIGlmICghW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZh
dWx0c10gYm9vbEZvcktleTpAIldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0p
CiAgICAgICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKLQotICAgIHNldExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4oKSk7CiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAt
MjczLDI0ICsyNzAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVO
CiAKICAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdOwogCi0gICAgewotICAgICAgICBib29sIGlzU2FmYXJpID0gZmFsc2U7
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpJ
T1NBcHBsaWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKTsKLSNlbGlmIFBMQVRGT1JNKE1BQykKLSAg
ICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlvbjo6aXNTYWZhcmkoKTsKLSNl
bmRpZgotICAgICAgICBpZiAoaXNTYWZhcmkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBQcm94
eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJLaXQy
SFRUUFByb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBzUHJveHkgPSBV
UkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBT
UHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcGFyYW1ldGVycy5l
bmFibGVMZWdhY3lUTFMgPSB0cnVlOwotICAgIGlmIChpZCB2YWx1ZSA9IFtkZWZhdWx0cyBvYmpl
Y3RGb3JLZXk6QCJXZWJLaXRFbmFibGVMZWdhY3lUTFMiXSkKLSAgICAgICAgcGFyYW1ldGVycy5l
bmFibGVMZWdhY3lUTFMgPSBbdmFsdWUgYm9vbFZhbHVlXTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5lbmFibGVMZWdh
Y3lUTFMgPSBwYXJhbWV0ZXJzLmVuYWJsZUxlZ2FjeVRMUzsKLQogICAgIHBhcmFtZXRlcnMubmV0
d29ya0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAog
ICAgIHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVm
YXVsdHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1
bHRzS2V5XTsKQEAgLTMwMSw4ICsyODAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9y
bUluaXRpYWxpemVOCiAgICAgcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRp
ZmllciA9IGlkZW50aWZ5aW5nRGF0YUZyb21Db29raWVTdG9yYWdlKFtbTlNIVFRQQ29va2llU3Rv
cmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gX2Nvb2tpZVN0b3JhZ2VdKTsKICNlbmRpZgog
Ci0gICAgcGFyYW1ldGVycy5zdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IHN0b3JhZ2VBY2Nlc3NB
UElFbmFibGVkKCk7Ci0KICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0g
W2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5h
bERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5j
cmVhdGVDRlN0cmluZygpLmdldCgpXV07CiAKICAgICBwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tB
dHRyaWJ1dGlvbkRlYnVnTW9kZSA9IFtkZWZhdWx0cyBib29sRm9yS2V5OltOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiRXhwZXJpbWVudGFsJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6YWRDbGlj
a0F0dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCld
XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRQcm94eU1hcC5jcHAJKHJldmlzaW9uIDI1MTY4NikKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA5LDkgKzEwOSw2IEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hl
ZCgKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1
NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3dubG9h
ZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxh
c3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQcm9j
ZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAgIEFT
U0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKICAgICBtX3Byb2Nlc3Mt
PnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHAJKHJldmlzaW9uIDI1MTY4NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAK
ICNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9v
bC5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQ
cm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmgiCkBAIC04MSwxOCArODAsMzAgQEAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlQ2FsbGJhY2tJ
RCgpCiAgICAgcmV0dXJuICsrY2FsbGJhY2tJRDsKIH0KIAotTmV0d29ya1Byb2Nlc3NQcm94eTo6
TmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCi0gICAgOiBB
dXhpbGlhcnlQcm9jZXNzUHJveHkocHJvY2Vzc1Bvb2wuYWx3YXlzUnVuc0F0QmFja2dyb3VuZFBy
aW9yaXR5KCkpCi0gICAgLCBtX3Byb2Nlc3NQb29sKHByb2Nlc3NQb29sKQorTmV0d29ya1Byb2Nl
c3NQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8TmV0d29ya1Byb2Nlc3NQcm94eT4gcHJvY2VzczsKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtd
IHsKKyAgICAgICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsK
KyAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0g
IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KCk7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0
ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnks
IHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CisgICAgICAgIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2VzcyhwYXJhbWV0ZXJzKTsKKyAgICAgICAgcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0
ZXJzID0gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsKKyAgICAg
ICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3
b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKSwgMCk7CisgICAgfSk7CisgICAgcmV0dXJuIHByb2Nlc3Mu
Z2V0KCk7CisgICAgcmV0dXJuIHByb2Nlc3M7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5l
dHdvcmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KCkKICNpZiBF
TkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQogICAgICwgbV9jdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKICNlbmRpZgotICAgICwgbV90aHJvdHRsZXIoKnRoaXMs
IHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1f
dGhyb3R0bGVyKCp0aGlzLCBmYWxzZSkKIHsKICAgICBjb25uZWN0KCk7Ci0KLSAgICBpZiAoYXV0
byogd2Vic2l0ZURhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKQot
ICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmVzLnNldCh3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgbWFrZVJlZigqd2Vic2l0ZURhdGFTdG9yZSkpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1By
b3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94eSgpCkBAIC0xMTYsMTEgKzEyNyw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW8KIHsKICAgICBsYXVuY2hPcHRpb25zLnBy
b2Nlc3NUeXBlID0gUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBB
dXhpbGlhcnlQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7Ci0K
LSAgICBpZiAocHJvY2Vzc1Bvb2woKS5zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNo
RmFpbEZvclRlc3RpbmcoKSkgewotICAgICAgICBwcm9jZXNzUG9vbCgpLnNldFNob3VsZE1ha2VO
ZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhmYWxzZSk7Ci0gICAgICAgIGxh
dW5jaE9wdGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7
Ci0gICAgfQogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rpb25XaWxsT3Bl
bihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCkBAIC0xODEsMTIgKzE4NywxMiBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJCiAgICAgfQogfQogCi1Eb3dubG9h
ZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVE
YXRhU3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVl
c3QpCitEb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFBy
b3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQ
b29sLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsKICAgICBpZiAo
IW1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwID0gbWFrZVVu
aXF1ZTxEb3dubG9hZFByb3h5TWFwPigqdGhpcyk7CiAKLSAgICByZXR1cm4gbV9kb3dubG9hZFBy
b3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgbV9wcm9jZXNzUG9vbCwgcmVz
b3VyY2VSZXF1ZXN0KTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3du
bG9hZFByb3h5KGRhdGFTdG9yZSwgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9u
U2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjU2LDkgKzI2
Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3MKICAgICAgICAg
ICAgIHJlcXVlc3QucmVwbHkoeyB9KTsKICAgICB9CiAgICAgbV9jb25uZWN0aW9uUmVxdWVzdHMu
Y2xlYXIoKTsKLQotICAgIC8vIFRlbGwgdGhlIG5ldHdvcmsgcHJvY2VzcyBtYW5hZ2VyIHRvIGZv
cmdldCBhYm91dCB0aGlzIG5ldHdvcmsgcHJvY2VzcyBwcm94eS4gVGhpcyB3aWxsIGNhdXNlIHVz
IHRvIGJlIGRlbGV0ZWQuCi0gICAgbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
KnRoaXMsIFdURk1vdmUocGVuZGluZ1JlcXVlc3RzKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0YXRlcygpCkBAIC0yNzgsOSArMjgxLDYgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzcwogICAgIGlmIChkaXNwYXRjaE1lc3Nh
Z2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3By
b2Nlc3NQb29sLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5l
Y3Rpb24sIGRlY29kZXIpOwogfQogCkBAIC0yOTQsOCArMjk0LDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkaWRSZWNlaXZlU3luYwogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRp
ZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7Ci0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9v
bCA9IG1ha2VSZWYobV9wcm9jZXNzUG9vbCk7Ci0KICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFw
KQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsKICNpZiBFTkFCTEUo
TEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQpAQCAtMzUwLDExICszNDgsNiBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoIXRvcE9yaWdpbiB8fCAhbV9wcm9jZXNzUG9vbC5pc1NlcnZpY2VXb3Jr
ZXJQYWdlSUQocGFnZUlEKSkgewotICAgICAgICBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVu
Z2Uoc2Vzc2lvbklELCBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICBXZWJQYWdlUHJveHk6OmZvck1vc3RWaXNpYmxlV2ViUGFn
ZUlmQW55KHNlc3Npb25JRCwgKnRvcE9yaWdpbiwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIodGhpcyksIHNlc3Npb25JRCwgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBXVEZNb3ZlKGF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKV0oYXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlm
ICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00MDEsMTEgKzM5NCw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmMKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgY29ubmVjdGlvblJlcXVlc3QucmVwbHkoeyB9KTsKICAgICB9Ci0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Npb25FbmFi
bGVkKCkpCi0gICAgICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5k
aWYKICAgICAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29ubmVjdGlv
bl90IGNvbm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSkKQEAg
LTExNTIsMTEgKzExNDAsNiBAQCBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojp3CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fd2Vic2l0ZURhdGFTdG9yZXMuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAKLSAgICBpZiAoYXV0byogd2Vic2l0
ZURhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKSB7Ci0gICAgICAg
IGlmIChzZXNzaW9uSUQgPT0gd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpCi0gICAgICAg
ICAgICByZXR1cm4gd2Vic2l0ZURhdGFTdG9yZTsKLSAgICB9Ci0KICAgICBpZiAoc2Vzc2lvbklE
ICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCkBAIC0xMjMwLDcgKzEyMTMsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmdldFNhbmRib3hFeHRlCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1By
b2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKQogewotICAgIG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9t
YWluKSwgc2Vzc2lvbklEKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3JrZXJD
b250ZXh0Q29ubmVjdGlvbk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVy
IGlkZW50aWZpZXIpCkBAIC0xMjQwLDYgKzEyMjIsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5Ojp3b3JrZXJDb250ZXh0QwogfQogI2VuZGlmCiAKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJikKK3sKK30KKwogdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpyZXF1ZXN0U3RvcmFnZVNwYWNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGN1cnJlbnRR
dW90YSwgdWludDY0X3QgY3VycmVudFNpemUsIHVpbnQ2NF90IHNwYWNlUmVxdWlyZWQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8dWludDY0X3Q+IHF1b3RhKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBhdXRvKiBzdG9yZSA9IHdlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lv
bklEKHNlc3Npb25JRCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjUxNjg2KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDEwIEBACiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHkuaCIKICNlbmRpZgogCituYW1lc3BhY2UgQVBJIHsKK2NsYXNzIEN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudDsKK30KKwogbmFtZXNwYWNlIFBBTCB7CiBjbGFzcyBTZXNz
aW9uSUQ7CiB9CkBAIC02Miw3ICs2Niw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBE
b3dubG9hZFByb3h5OwogY2xhc3MgRG93bmxvYWRQcm94eU1hcDsKLWNsYXNzIFdlYlByb2Nlc3NQ
b29sOwogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MgOiBib29sOwogZW51
bSBjbGFzcyBTdG9yYWdlQWNjZXNzU3RhdHVzIDogdWludDhfdDsKIGVudW0gY2xhc3MgV2Vic2l0
ZURhdGFGZXRjaE9wdGlvbjsKQEAgLTg2LDEyICs4OSwxMyBAQCBwdWJsaWM6CiAgICAgdXNpbmcg
RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47
CiAgICAgdXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAK
LSAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJik7CisgICAg
c3RhdGljIE5ldHdvcmtQcm9jZXNzUHJveHkmIHNpbmdsZXRvbigpOworICAgIGV4cGxpY2l0IE5l
dHdvcmtQcm9jZXNzUHJveHkoKTsKICAgICB+TmV0d29ya1Byb2Nlc3NQcm94eSgpOwogCiAgICAg
dm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2Fn
ZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJl
cGx5JiYpOwogCi0gICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRl
RGF0YVN0b3JlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgRG93bmxv
YWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgV2ViUHJvY2Vz
c1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKIAogICAgIHZvaWQgZmV0
Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4s
IE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChXZWJzaXRlRGF0YSk+JiYpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNz
aW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2RpZmllZFNpbmNl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMTcy
LDcgKzE3Niw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHRlc3RQcm9jZXNzSW5jb21pbmdTeW5jTWVz
c2FnZXNXaGVuV2FpdGluZ0ZvclN5bmNSZXBseShXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6VGVzdFByb2Nlc3NJbmNvbWluZ1N5bmNNZXNzYWdl
c1doZW5XYWl0aW5nRm9yU3luY1JlcGx5RGVsYXllZFJlcGx5JiYpOwogCiAgICAgUHJvY2Vzc1Ro
cm90dGxlciYgdGhyb3R0bGVyKCkgeyByZXR1cm4gbV90aHJvdHRsZXI7IH0KLSAgICBXZWJQcm9j
ZXNzUG9vbCYgcHJvY2Vzc1Bvb2woKSB7IHJldHVybiBtX3Byb2Nlc3NQb29sOyB9CiAKICNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIHZvaWQgZGlkRGVzdHJveVdlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Jik7CkBAIC0x
OTYsNiArMTk5LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lD
dXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVG
b3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKIAorICAgIHZvaWQgc2V0TGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudD4mJik7CisKIHByaXZhdGU6CiAgICAgLy8gQXV4aWxpYXJ5
UHJvY2Vzc1Byb3h5CiAgICAgdm9pZCBnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6
TGF1bmNoT3B0aW9ucyYpIG92ZXJyaWRlOwpAQCAtMjU5LDggKzI2NCw2IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCwg
UmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bv
b2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBzdHJ1Y3QgQ29ubmVjdGlvblJlcXVlc3QgewogICAg
ICAgICBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4gd2ViUHJvY2VzczsKICAgICAgICAgTWVzc2Fn
ZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJl
cGx5IHJlcGx5OwpAQCAtMjg5LDYgKzI5Miw5IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6
OlNlc3Npb25JRCwgUmVmUHRyPFdlYnNpdGVEYXRhU3RvcmU+PiBtX3dlYnNpdGVEYXRhU3RvcmVz
OwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNzQXNzZXJ0aW9uPiBtX3VwbG9hZEFz
c2VydGlvbjsKKyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQorICAg
IHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2Nv
bHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24gMjUxNjg2KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxOSArNDIsMTYgQEAgTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6On5MZWdhYwogICAgIGludmFsaWRhdGUoKTsK
IH0KIAotdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5n
KHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKK3ZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0
TG9hZGluZyh1aW50NjRfdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikKIHsKLSAg
ICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQoKS5zdGFydExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3Qp
OwogfQogCi12b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGlu
Zyh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElEKQordm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eTo6c3RvcExvYWRpbmcodWludDY0X3QpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vz
c1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RvcExv
YWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNz
UHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5pbnZhbGlk
YXRlKCp0aGlzKTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6
d2FzUmVkaXJlY3RlZFRvUmVxdWVzdCh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAkocmV2aXNp
b24gMjUxNjg2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDEzICs4MSwyMiBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmFsbG93V2Vic2l0ZURhdGFSCiAgICAgYWxsb3dzV2Vic2l0ZURhdGFS
ZWNvcmRzRm9yQWxsT3JpZ2lucyA9IHRydWU7CiB9CiAKLXN0YXRpYyBIYXNoTWFwPFBBTDo6U2Vz
c2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkKK3N0YXRp
YyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIGFsbERhdGFTdG9y
ZXMoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPj4g
bWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKK1ZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKQoreworICAg
IFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gYWxsUGFyYW1ldGVyczsKKyAgICBh
bGxQYXJhbWV0ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYWxsRGF0YVN0b3JlcygpLnNpemUo
KSk7CisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAg
ICAgICAgYWxsUGFyYW1ldGVycy51bmNoZWNrZWRBcHBlbmQoc3RvcmUtPnBhcmFtZXRlcnMoKSk7
CisgICAgcmV0dXJuIGFsbFBhcmFtZXRlcnM7Cit9CisKIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiBX
ZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50KCkKIHsKICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
OjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vzc2lvbklEOjpnZW5lcmF0ZUVwaGVt
ZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTMsNyArMTIyLDcgQEAgV2Vic2l0ZURhdGFTdG9yZTo6
V2Vic2l0ZURhdGFTdG9yZShSZWY8VwogI2VuZGlmCiB7CiAgICAgV1RGOjpzZXRQcm9jZXNzUHJp
dmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklE
TWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0
aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTI1LDEzICsx
MzQsMTIgQEAgV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQogCiAgICAgcGxh
dGZvcm1EZXN0cm95KCk7CiAKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NFUlQobm9uRGVmYXVsdERhdGFTdG9y
ZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOwotICAgICAgICBub25EZWZhdWx0RGF0YVN0
b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklE
KTsKLSAgICAgICAgfQorICAgIEFTU0VSVChhbGxEYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklE
KSA9PSB0aGlzKTsKKyAgICBhbGxEYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKKyAg
ICAvLyBGSVhNRTogVGhpcyBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZS4KKyAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Cisg
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQorICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbW92ZVNlc3Npb24obV9zZXNz
aW9uSUQpOwogICAgIH0KIH0KIApAQCAtMTYyLDE3ICsxNzAsMTUgQEAgYm9vbCBXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRQogICAgIHJldHVybiAhIWdsb2JhbERlZmF1bHREYXRh
U3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNl
c3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25EZWZhdWx0RGF0YVN0b3Jl
cygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgfQorICAgIGF1dG8gcmVzdWx0ID0gYWxsRGF0YVN0
b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQs
IHJlc3VsdC5pc05ld0VudHJ5KTsKIH0KIAogV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFT
dG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCkKIHsKLSAgICByZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9u
SUQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gYWxsRGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNz
UHJveHkmIHByb2Nlc3MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCShyZXZpc2lvbiAyNTE2ODcpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxNiw2ICsyMTYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Fzc29j
aWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYpIGNvbnN0OwogCiAgICAgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMgcGFyYW1ldGVycygpOworICAgIHN0YXRpYyBWZWN0b3I8V2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM+IHBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKCk7CiAKICAgICBW
ZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5nQ29va2llcygpIGNvbnN0OwogICAgIHZvaWQg
YWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKQEAgLTMxOCw3ICszMTks
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJp
bmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpOwog
ICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0
b3JhZ2VEaXJlY3RvcnksIGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
PiYpOwogCi0gICAgdm9pZCBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAgIHZv
aWQgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAKICAgICBjb25zdCBQQUw6OlNlc3Npb25J
RCBtX3Nlc3Npb25JRDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383180</attachid>
            <date>2019-11-08 16:52:16 -0800</date>
            <delta_ts>2019-11-09 17:57:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20191109005214.patch</filename>
            <type>text/plain</type>
            <size>94604</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTIyNjApCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBAQAorMjAxOS0xMS0wOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBhIE5ldHdv
cmtQcm9jZXNzUHJveHkgc2luZ2xldG9uIGluc3RlYWQgb2Ygb25lIHBlciBXZWJQcm9jZXNzUG9v
bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToK
KyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhU
VFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tp
ZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3Jl
Ojpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoQVBJOjpI
VFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoQVBJ
OjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6CisgICAgICAgIChX
S0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9zZXRDb29raWVBY2Nl
cHRQb2xpY3k6XSk6CisgICAgICAgICh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tp
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNN
b2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpw
cm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250
ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6CisgICAgICAg
IChXZWJLaXQ6Om1fd2ViUHJvY2Vzc0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6On5XZWJQcm9jZXNzUG9vbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0
Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9O
ZXR3b3JraW5nUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVh
ckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyTGVnYWN5UHJpdmF0ZUJy
b3dzaW5nTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFs
bG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRXZWJQcm9jZXNzSGFzVXBsb2Fkcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVhcldlYlByb2Nlc3NIYXNVcGxv
YWRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMTktMTEtMDggIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtl
IERvd25sb2FkSUQgYW4gT2JqZWN0SWRlbnRpZmllcgpJbmRleDogU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDI1MjI2MCkKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDMsMjIgKzMwMywyMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFs
aXplTmV0d29ya1ByCiAgICAgICAgIG1lbW9yeVByZXNzdXJlSGFuZGxlci5pbnN0YWxsKCk7CiAg
ICAgfQogCi0gICAgc2V0Q2FjaGVNb2RlbChwYXJhbWV0ZXJzLmNhY2hlTW9kZWwsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5l
dHdvcmtDYWNoZURpcmVjdG9yeSk7Ci0KICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQogICAgIG1faXNJVFBEYXRhYmFzZUVuYWJsZWQgPSBwYXJhbWV0ZXJzLnNob3VsZEVuYWJs
ZUlUUERhdGFiYXNlOwogI2VuZGlmCiAKICAgICBXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJs
ZWQocGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUpOwogCi0gICAg
U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBzZXNzaW9uSUQg
PSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5zZXNzaW9uSUQ7Ci0gICAgc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNz
aW9uOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRh
dGFTdG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAg
ICAgICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5zZXNzaW9uSUQ7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAg
YWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CisgICAgICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBk
YXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlm
CisgICAgICAgIGluaXRpYWxpemVTdG9yYWdlUXVvdGEoZGF0YVN0b3JlUGFyYW1ldGVycyk7Cisg
ICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3Rv
cmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIFJlbW90ZU5ldHdvcmtpbmdD
b250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbigqdGhpcywgV1RGTW92ZShkYXRh
U3RvcmVQYXJhbWV0ZXJzKSk7CisgICAgfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQog
ICAgIGlmIChwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50KCkpIHsKQEAg
LTMyNiwxNCArMzI1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQ
cgogICAgICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSks
IHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CiAgICAgfQogI2VuZGlmCi0gICAgaW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKLQotICAgIG1fc3RvcmFnZU1hbmFnZXJT
ZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvKiBk
ZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkpOwotICAgIGF1dG8qIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IGRlZmF1bHRTZXNz
aW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tp
ZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMp
Ci0gICAgICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7CiAKICAg
ICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAg
ICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNDE5LDEyICs0MTAsNiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjCiAKIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAgIGRlZmF1bHRTdG9yYWdl
U2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuY2xlYXJDcmVkZW50aWFscygpOwotICAgIGlm
IChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpKQotICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+Y2xlYXJD
cmVkZW50aWFscygpOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0K
ICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW10gKGF1dG8mIG5ldHdvcmtTZXNzaW9uKSB7CiAg
ICAgICAgIGlmIChhdXRvIHN0b3JhZ2VTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24ubmV0d29ya1N0
b3JhZ2VTZXNzaW9uKCkpCiAgICAgICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVudGlhbFN0
b3JhZ2UoKS5jbGVhckNyZWRlbnRpYWxzKCk7CkBAIC01MjQsMjEgKzUwOSwxMSBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0CiAKIFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiogTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uKGNvbnN0IFBBTDo6U2Vz
c2lvbklEJiBzZXNzaW9uSUQpIGNvbnN0CiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICByZXR1cm4gJmRlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpOwogICAgIHJldHVybiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMuZ2V0KHNl
c3Npb25JRCk7CiB9CiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29ya1By
b2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb24pCi0gICAgICAgIG1fZGVmYXVsdE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiA9IHBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgcmV0
dXJuICptX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247Ci19Ci0KIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKT4mIGZ1bmN0b3IpCiB7Ci0gICAgZnVuY3Rv
cihkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSk7CiAgICAgZm9yIChhdXRvJiBzdG9yYWdlU2Vzc2lv
biA6IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy52YWx1ZXMoKSkKICAgICAgICAgZnVuY3Rvcigq
c3RvcmFnZVNlc3Npb24pOwogfQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuaAkocmV2aXNpb24gMjUyMjYwKQorKysgU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyAr
MTY2LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7
CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3Qg
UEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4mJik7CkBAIC0zNDIsNyArMzQxLDYgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0OwogCiAgICAgdm9pZCB0ZXJtaW5hdGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHBs
YXRmb3JtVGVybWluYXRlKCk7CkBAIC00ODIsNyArNDgwLDYgQEAgcHJpdmF0ZToKIAogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1f
bmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vz
c2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8
U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAyNTIxODEpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjplCiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwogICAgIGVuY29kZXIgPDwgc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7CiAjZW5k
aWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGVuY29k
ZXIgPDwgZGF0YVN0b3JlUGFyYW1ldGVyczsKICNpZiBVU0UoU09VUCkKICAgICBlbmNvZGVyLmVu
Y29kZUVudW0oY29va2llQWNjZXB0UG9saWN5KTsKICAgICBlbmNvZGVyIDw8IGlnbm9yZVRMU0Vy
cm9yczsKQEAgLTEyMiwxMSArMTIyLDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAgICBPcHRpb25h
bDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7
Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIWRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQorICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycz4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiBk
YXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGlmICghZGF0YVN0b3JlUGFyYW1ldGVycykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9
IFdURk1vdmUoKmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKKyAgICByZXN1bHQuZGF0YVN0
b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAjaWYgVVNF
KFNPVVApCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmNvb2tpZUFjY2VwdFBv
bGljeSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCShyZXZpc2lvbiAyNTIx
ODEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RydWN0IE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIAogICAgIGJvb2wgc3RvcmFnZUFjY2Vzc0FQ
SUVuYWJsZWQ7CiAjZW5kaWYKIAotICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIGRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gZGF0YVN0b3JlUGFyYW1ldGVyczsKICAgICAKICNpZiBVU0UoU09VUCkKICAgICBIVFRQ
Q29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSB7IEhUVFBDb29raWVBY2NlcHRQ
b2xpY3k6OkFsd2F5c0FjY2VwdCB9OwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJT
b3VwLmNwcAkocmV2aXNpb24gMjUyMTgxKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgogI2luY2x1ZGUgPGxp
YnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTYyLDcgKzYzLDcgQEAgdm9pZCBX
ZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDbwogCiBIVFRQQ29va2llQWNjZXB0UG9s
aWN5IFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgp
CiB7Ci0gICAgc3dpdGNoIChzb3VwX2Nvb2tpZV9qYXJfZ2V0X2FjY2VwdF9wb2xpY3kobV9wcm9j
ZXNzLmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmNvb2tpZVN0b3JhZ2UoKSkpIHsKKyAgICBzd2l0
Y2ggKHNvdXBfY29va2llX2phcl9nZXRfYWNjZXB0X3BvbGljeShtX3Byb2Nlc3Muc3RvcmFnZVNl
c3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSktPmNvb2tpZVN0b3JhZ2Uo
KSkpIHsKICAgICBjYXNlIFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfQUxXQVlTOgogICAgICAgICBy
ZXR1cm4gSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNjZXB0OwogICAgIGNhc2UgU09V
UF9DT09LSUVfSkFSX0FDQ0VQVF9ORVZFUjoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0JKHJldmlz
aW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a1Byb2Nlc3NDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtODYsOSArODYsNiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBh
cmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5wYXJlbnRCdW5k
bGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgogI2VuZGlmCiAKICAgICBfQ0ZOZXR3b3JrU2V0QVRT
Q29udGV4dChwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKQEAgLTExNSwxMSAr
MTEyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgIFtO
U1VSTENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3
b3JrUHJvY2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVT
RShTT1VSQ0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCShy
ZXZpc2lvbiAyNTIxODEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0
d29ya1Byb2Nlc3NDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogewogfQogCi1zdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBt
YWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFsbG93U3Bl
Y2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRp
ZmljYXRlSW5mbywgY29uc3QgU3RyaW5nJiBob3N0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NT
b3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAv
TmV0d29ya1Byb2Nlc3NTb3VwLmNwcAkocmV2aXNpb24gMjUyMTgxKQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NSwxMSArMTQ1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplTgogICAgIH0pOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0
b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFn
ZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19
Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRM
U0Vycm9ycykKIHsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OnNldFNob3VsZElnbm9yZVRMU0Vy
cm9ycyhpZ25vcmVUTFNFcnJvcnMpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjUyMTgxKQorKysg
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw5ICs0NCw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnM6OmVuY29kZSgKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGVuY29kZXIg
PDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGVuY29kZXIgPDwg
aW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtOTksMTQgKzk2LDYgQEAg
T3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYgogICAgIGlmICghaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlPiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlOwotICAgIGlmICghaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdU
Rk1vdmUoKmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgJKHJl
dmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDkgKzU3LDYgQEAgc3RydWN0IFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAg
ICBTdHJpbmcgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAyNTIxODEpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNs
dWRlICJBUElTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9u
YWxDYWxsYmFja0lELmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKQEAgLTM5LDIwICs0MCwx
NSBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY29u
c3QgY2hhciogV2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSgpCitXZWJDb29r
aWVNYW5hZ2VyUHJveHkmIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkKIHsKLSAg
ICByZXR1cm4gIldlYkNvb2tpZU1hbmFnZXJQcm94eSI7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gbWFuYWdlcjsKKyAgICByZXR1cm4gbWFuYWdlcjsK
IH0KIAotUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gV2ViQ29va2llTWFuYWdlclByb3h5Ojpj
cmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQorV2ViQ29va2llTWFuYWdlclByb3h5
OjpXZWJDb29raWVNYW5hZ2VyUHJveHkoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdl
YkNvb2tpZU1hbmFnZXJQcm94eShwcm9jZXNzUG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2Vy
UHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wp
Ci0gICAgOiBXZWJDb250ZXh0U3VwcGxlbWVudChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250
ZXh0U3VwcGxlbWVudDo6cHJvY2Vzc1Bvb2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0
aGlzKTsKIH0KIAogV2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5
KCkKQEAgLTY1LDQzICs2MSw5IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFs
aXplQ2wKICAgICBtX2NsaWVudC5pbml0aWFsaXplKGNsaWVudCk7CiB9CiAKLS8vIFdlYkNvbnRl
eHRTdXBwbGVtZW50Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERl
c3Ryb3llZCgpCi17Ci0gICAgVmVjdG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJzOwotICAgIGZvciAo
YXV0byYgb2JzZXJ2ZXJTZXQgOiBtX2Nvb2tpZU9ic2VydmVycy52YWx1ZXMoKSkgewotICAgICAg
ICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJTZXQpCi0gICAgICAgICAgICBvYnNlcnZl
cnMuYXBwZW5kKG9ic2VydmVyKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDog
b2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlci0+bWFuYWdlckRlc3Ryb3llZCgpOwotCi0gICAg
QVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQot
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vz
c1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnJlZldlYkNvbnRl
eHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6cmVmKCk7Ci19Ci0KLXZvaWQgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkKLXsKLSAgICBB
UEk6Ok9iamVjdDo6ZGVyZWYoKTsKLX0KLQogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6Omdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewot
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklE
KSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBhY3Rpdml0
eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViQ29v
a2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyJfcyldKFZlY3RvcjxTdHJp
bmc+JiYgaG9zdG5hbWVzKSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihXVEZN
b3ZlKGhvc3RuYW1lcykpOwogICAgIH0pOwpAQCAtMTA5LDE3ICs3MSwxNyBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5z
ZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBob3N0
bmFtZXMpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25J
RCwgaG9zdG5hbWVzKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxl
dGVBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9v
bCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSk7CisgICAg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IENvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJh
Y2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCkt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNz
aW9uSUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0
aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llIl9zKV0oKSBtdXRhYmxl
IHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogICAgIH0pOwpAQCAtMTI3LDcgKzg5LDcg
QEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nl
c3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vz
cy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFs
bENvb2tpZXNNb2RpZmllZFNpbmNlKHNlc3Npb25JRCwgdGltZSksIFtjYWxsYmFja0Z1bmN0aW9u
ID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50
aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVs
ZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UiX3MpXSgpIG11dGFibGUgewogICAgICAgICBjYWxs
YmFja0Z1bmN0aW9uKCk7CiAgICAgfSk7CkBAIC0xMzUsNyArOTcsNyBAQCB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29vCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5
OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tp
ZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9u
KQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2ll
cyksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYWN0aXZp
dHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyJfcyldKCkgbXV0YWJsZSB7CiAgICAgICAgIGNh
bGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTE0Myw3ICsxMDUsNyBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENv
b2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVS
TCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAg
YXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBt
YWluRG9jdW1lbnRVUkwpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbiksIGFjdGl2aXR5ID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFj
dGl2aXR5KCJXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMiX3MpXSgpIG11dGFibGUg
ewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgfSk7CkBAIC0xNTEsNyArMTEzLDcg
QEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUAogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5j
dGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklE
KSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBhY3Rpdml0
eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViQ29v
a2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzIl9zKV0oVmVjdG9yPENvb2tpZT4mJiBjb29r
aWVzKSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihXVEZNb3ZlKGNvb2tpZXMp
KTsKICAgICB9KTsKQEAgLTE1OSw3ICsxMjEsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6Z2V0QWxsQ29va2llCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBh
dXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBbY2FsbGJhY2tG
dW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFjdGl2aXR5ID0gbmV0d29ya1By
b2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmdldENvb2tpZXMiX3MpXShWZWN0b3I8Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgewog
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKFdURk1vdmUoY29va2llcykpOwogICAgIH0pOwpAQCAt
MTY3LDEyICsxMjksMTIgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMo
UAogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFu
Z2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5k
VG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdl
cyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAog
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiYgY2FsbGJhY2sp
CkBAIC0yMjMsMTUgKzE4NSw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpjb29raWVz
RGlkQ2gKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3koUEFMOjpTZXNzaW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBpZiAoIXByb2Nlc3NQb29sKCktPmlzVXNpbmdUZXN0aW5nTmV0d29ya1Nl
c3Npb24oKSkKLSAgICAgICAgcGVyc2lzdEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsK
LSNlbmRpZgotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQ
Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRv
JiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAg
IG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbY2FsbGJhY2tGdW5jdGlv
biA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFjdGl2aXR5ID0gbmV0d29ya1Byb2Nlc3Mu
dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3kiX3MpXSgpIG11dGFibGUgewogICAgICAgICBjYWxsYmFj
a0Z1bmN0aW9uKCk7CiAgICAgfSk7CkBAIC0yMzksNyArMTkzLDcgQEAgdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnNldEhUVFBDb29raQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewot
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgpLCBbY2Fs
bGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFjdGl2aXR5ID0gbmV0
d29ya1Byb2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kiX3MpXShIVFRQQ29va2llQWNjZXB0
UG9saWN5IHBvbGljeSkgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24ocG9saWN5
KTsKICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eS5oCShyZXZpc2lvbiAyNTIxODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTEgKzU2
LDkgQEAgdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycgogdHlwZWRlZiBH
ZW5lcmljQ2FsbGJhY2s8SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tpZUFjY2VwdFBv
bGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNsYXNzIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNvb2tp
ZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUgSVBDOjpNZXNz
YWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQSTo6
T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHByaXZhdGUgSVBD
OjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBw
bGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IGNy
ZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBXZWJDb29raWVNYW5hZ2VyUHJveHkm
IHNpbmdsZXRvbigpOwogICAgIHZpcnR1YWwgfldlYkNvb2tpZU1hbmFnZXJQcm94eSgpOwogCiAg
ICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2Uq
KTsKQEAgLTEwNCwxNyArMTAyLDExIEBAIHB1YmxpYzoKICAgICB1c2luZyBBUEk6Ok9iamVjdDo6
ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQ
b29sKik7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5KCk7CisgICAgZnJpZW5kIE5ldmVyRGVz
dHJveWVkPFdlYkNvb2tpZU1hbmFnZXJQcm94eT47CiAKICAgICB2b2lkIGNvb2tpZXNEaWRDaGFu
Z2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLSAgICB2
b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlk
Q2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xv
c2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZvaWQgcmVmV2ViQ29udGV4
dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmV2ViQ29udGV4dFN1cHBsZW1l
bnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCiAgICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlk
ZTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAko
cmV2aXNpb24gMjUyMjU5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNyArMjIzLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6
OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvYwogICAgICwgbV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VV
bmlxdWU8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PigpKQogICAgICwgbV9kb3dubG9hZENsaWVudCht
YWtlVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+KCkpCiAgICAgLCBtX2hpc3RvcnlDbGll
bnQobWFrZVVuaXF1ZTxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PigpKQotICAgICwg
bV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4oKSkKICAgICAsIG1fdmlzaXRlZExpbmtTdG9yZShWaXNpdGVkTGlu
a1N0b3JlOjpjcmVhdGUoKSkKICNpZiBQTEFURk9STShNQUMpCiAgICAgLCBtX2hpZ2hQZXJmb3Jt
YW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyKG1ha2VVbmlxdWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhp
Y3NVc2FnZVNhbXBsZXI+KCp0aGlzKSkKQEAgLTI2Niw3ICsyNjUsNiBAQCBXZWJQcm9jZXNzUG9v
bDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jCiAgICAgYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzUG9vbDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiAKICAg
ICAvLyBOT1RFOiBUaGVzZSBzdWItb2JqZWN0cyBtdXN0IGJlIGluaXRpYWxpemVkIGFmdGVyIG1f
bWVzc2FnZVJlY2VpdmVyTWFwLi4KLSAgICBhZGRTdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5Pigp
OwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5PigpOwogI2lm
IEVOQUJMRShNRURJQV9TRVNTSU9OKQpAQCAtMzE3LDkgKzMxNSw2IEBAIFdlYlByb2Nlc3NQb29s
Ojp+V2ViUHJvY2Vzc1Bvb2woKQogICAgIHByb2Nlc3NQb29sQ291bnRlci5kZWNyZW1lbnQoKTsK
ICNlbmRpZgogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNodXREb3duUHJvY2VzcygpOwotCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgaWYg
KCFtX3Byb2Nlc3Nlc1VzaW5nR2FtZXBhZHMuaXNFbXB0eSgpKQogICAgICAgICBVSUdhbWVwYWRQ
cm92aWRlcjo6c2luZ2xldG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1lcGFkcygqdGhp
cyk7CkBAIC0zNzcsMTYgKzM3Miw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEF1dG9tYXRp
b25DbGllbnQKICAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0gV1RGTW92ZShhdXRvbWF0aW9u
Q2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi17Ci0jaWYgRU5BQkxFKExF
R0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKLSAgICBpZiAoIWN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBtYWtl
VW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBXVEZNb3ZlKGN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0
U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIG1fc3RvcmFnZUFj
Y2Vzc0FQSUVuYWJsZWQgPSBlbmFibGVkOwpAQCAtNDA2LDcgKzM5MSw3IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnQKIAogSVBDOjpDb25uZWN0aW9uKiBXZWJQcm9j
ZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkKIHsKLSAgICByZXR1cm4gbV9u
ZXR3b3JrUHJvY2Vzcy0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5jb25uZWN0aW9uKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
Omxhbmd1YWdlQ2hhbmdlZCh2b2lkKiBjb250ZXh0KQpAQCAtNDE4LDggKzQwMyw3IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCgpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vz
c2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpKTsKICNpZiBVU0UoU09VUCkKLSAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRM
YW5ndWFnZXMoKSksIDApOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdl
ZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKICNlbmRpZgogfQogCkBAIC00NTcsMjAz
ICs0NDEsMTMgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVuUHJvcGVydGllc1N0YQogI2Vu
ZGlmCiB9CiAKLU5ldHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3
b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKK05ldHdv
cmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJz
aXRlRGF0YVN0b3JlKikKIHsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAot
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNp
bmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgotICAgIC8vIFdlIHNob3VsZCByZW1v
dmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIg
QVBJcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAw
MjQ2LgotICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKLSAgICAgICAgY2FsbE9uTWFpblJ1
bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAg
ICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIH0pOwotICAgICAgICBy
ZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpIHsKLSAgICAgICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3Jl
KSk7Ci0gICAgICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2ll
cygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9
Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9jZXNzID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1By
b3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJh
bWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gY29weVRvVmVj
dG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vi
c2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOwotICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigpOwotI2Vu
ZGlmCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya2luZ0hhc0JlZ3VuKCk7Ci0g
ICAgfQotCi0gICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6
OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKLQotICAgIGZvciAoYXV0byYgc2NoZW1lIDogZ2xv
YmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCi0gICAgICAgIHBhcmFt
ZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVt
ZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFN0cmluZyBjb29raWVTdG9yYWdl
RGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAg
ICBpZiAoIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFn
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKLQotICAgIFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNz
UG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIGlmICghY29udGFpbmVyQ2Fj
aGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFy
YW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAg
U3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5k
bGVEaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkp
Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJl
Y3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVu
dEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlG
aWxlKGVtcHR5U3RyaW5nKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxv
YkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgcGFyYW1l
dGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0
b24oKS5oc3RzU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyYW1ldGVycy5oc3RzU3Rv
cmFnZURpcmVjdG9yeS5pc051bGwoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0g
ICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29weVRvVmVjdG9y
KExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzU2Vj
dXJlKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0Nv
bnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6
c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBv
bGljeSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNv
cHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVn
aXN0ZXJBc0xvY2FsKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05v
QWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5z
Y2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLSAgICAvLyAqKioqKioqKioKLSAgICAvLyBJTVBPUlRBTlQ6IERvIG5vdCBjaGFuZ2Ug
dGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGluZGV4ZWQgZGF0YWJhc2VzIG9uIGRpc2sgd2l0
aG91dCBmaXJzdCBjb25zdWx0aW5nIGEgcmV2aWV3ZXIgZnJvbSBBcHBsZSAoPHJkYXI6Ly9wcm9i
bGVtLzE3NDU0NzEyPikKLSAgICAvLyAqKioqKioqKioKLSAgICBpZiAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5p
bmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGly
ZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5jcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwotICAgIH0KLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUp
Ci0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9
IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnkpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeSA9ICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRTZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0gICAgYXV0byBsb2NhbFN0b3JhZ2VEaXJl
Y3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVk
TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFsb2NhbFN0
b3JhZ2VEaXJlY3RvcnkpCi0gICAgICAgIGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5
ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJl
c29sdmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwotICAgIGlmIChwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKLQotICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IGZhbHNlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0xvZ1Rlc3RpbmdFdmVudCA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkSW5jbHVkZUxvY2FsaG9z
dCA9IHRydWU7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2Rl
ID0gZmFsc2U7Ci0gICAgYm9vbCBlbmFibGVUaGlyZFBhcnR5Q29va2llQmxvY2tpbmcgPSBmYWxz
ZTsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZSB7IH07Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0g
d2l0aFdlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNl
bmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAg
ICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURhdGFTdG9y
ZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNo
b3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkSW5j
bHVkZUxvY2FsaG9zdEluUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKLSAgICAgICAgICAgIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZTsKLSAgICAgICAgICAgIGVu
YWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2luZyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5l
bmFibGVUaGlyZFBhcnR5Q29va2llQmxvY2tpbmc7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdp
dGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3Rv
cmFnZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEoKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURp
cmVjdG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVj
dG9yeSgpOwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewot
ICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGly
ZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdv
cmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gbV93ZWJzaXRl
RGF0YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAg
ICAgaWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJz
KCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxv
Y2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0
SW5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5lbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlOwotICAgICAgICAgICAgZW5hYmxlVGhpcmRQYXJ0
eUNvb2tpZUJsb2NraW5nID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmVuYWJsZVRoaXJkUGFy
dHlDb29raWVCbG9ja2luZzsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW51YWxQcmV2
YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0KLSAg
ICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIW5ldHdv
cmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0Nh
Y2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgICAgIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCktPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0gICAgICAgIGF1dG8gbmV0
d29ya0NhY2hlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdE5ldHdvcmtDYWNo
ZURpcmVjdG9yeSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3
b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0
ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICB9Ci0K
LSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5lbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljczsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5lbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9n
VGVzdGluZ0V2ZW50ID0gZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVu
dDsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0SW5SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzID0gc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5lbmFibGVSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWdNb2RlID0gZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
TW9kZTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5lbmFibGVUaGlyZFBhcnR5Q29va2llQmxvY2tpbmcgPSBlbmFibGVU
aGlyZFBhcnR5Q29va2llQmxvY2tpbmc7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbnVhbFByZXZhbGVudFJlc291cmNlID0gbWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0KLSAg
ICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBhcmFtZXRlcnMKLSAgICBwbGF0Zm9ybUlu
aXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKLQotICAgIC8vIEluaXRpYWxpemUg
dGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKSwgMCk7
Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3JrUHJvY2Vzc0xhdGVuY3lRT1MoKSwgbmV0
d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsKLSNlbmRpZgotCi0gICAgbmV0d29ya1By
b2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKLQotICAgIGlmICh3aXRoV2Vic2l0ZURh
dGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3
aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xl
YXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV0d29y
ayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUgc2Vzc2lvbnMgdGhhdCBoYXZlIGJlZW4gcmVn
aXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAgICBmb3IgKGF1dG8mIHNlc3Npb25JRCA6IG1f
c2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHdlYnNpdGVE
YXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVG
b3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRT
ZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICB9Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNz
ID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0gICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNz
OworICAgIHJldHVybiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJv
eHkmIG5ldHdvcmtQcm9jZXNzUHJveHksIFZlY3RvcjxzdGQ6OnBhaXI8UmVmUHRyPFdlYlByb2Nl
c3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbjo6RGVsYXllZFJlcGx5Pj4mJiBwZW5kaW5nUmVwbGllcykKIHsKLSAgICBBU1NFUlQo
bV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJvY2Vzc1Byb3h5ID09IG1f
bmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9z
dXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+cHJvY2Vzc0RpZENsb3Nl
KCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNjYyLDkgKzQ1Niw2IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2gKICAgICBpZiAobV9hdXRvbWF0aW9uU2Vzc2lv
bikKICAgICAgICAgbV9hdXRvbWF0aW9uU2Vzc2lvbi0+dGVybWluYXRlKCk7CiAKLSAgICAvLyBM
ZWF2ZSB0aGUgcHJvY2VzcyBwcm94eSBhcm91bmQgZHVyaW5nIGNsaWVudCBjYWxsLCBzbyB0aGF0
IHRoZSBjbGllbnQgY291bGQgcXVlcnkgdGhlIHByb2Nlc3MgaWRlbnRpZmllci4KLSAgICBtX25l
dHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKLQogICAgIC8vIEF0dGVtcHQgdG8gcmUtbGF1bmNoLgog
ICAgIGlmIChwZW5kaW5nUmVwbGllcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY4
MCwxNyArNDcxLDEyIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2gK
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlBy
b2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpH
ZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQogewotICAg
IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwot
Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHdlYlBy
b2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbih3ZWJQcm9jZXNzUHJveHksIFdU
Rk1vdmUocmVwbHkpKTsKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJv
Y2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiBwcm94eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdp
c3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIEFTU0VSVF9V
TlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKLQogICAgIGF1
dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1
bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKIAogICAgIGlmICghd2Vic2l0ZURh
dGFTdG9yZSkgewpAQCAtMTI3NCwxMCArMTA2MCw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBh
Z2VCZWdpblVzaW5nV2Vic2kKICAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9u
SUQoKTsKICAgICBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpIHsKICAgICAgICAgQVNTRVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRh
U3RvcmUucGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0g
c2Vzc2lvbklEKTsKLSAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAg
ICAgICAgIGRhdGFTdG9yZS5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuYWRkU2Vzc2lvbihtYWtlUmVmKGRh
dGFTdG9yZSkpOworICAgICAgICBkYXRhU3RvcmUuY2xlYXJQZW5kaW5nQ29va2llcygpOwogICAg
IH0KIH0KIApAQCAtMTQxOSw3ICsxMjAzLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVz
aFBsdWdpbnMoKQogCiBQcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRl
bnRpZmllcigpCiB7Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MgPyBtX25ldHdvcmtQcm9j
ZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKKyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkucHJvY2Vzc0lkZW50aWZpZXIoKTsKIH0KIAogUHJvY2Vzc0lEIFdl
YlByb2Nlc3NQb29sOjpwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpCkBAIC0xNTcwLDE2ICsx
MzU0LDEzIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwoQ2FjaGUKIAogICAg
IHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChj
YWNoZU1vZGVsKSk7CiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwo
Y2FjaGVNb2RlbCwgeyB9KSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2Rl
bCwgeyB9KSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWxTeW5j
aHJvbm91c2x5Rm9yVGVzdGluZyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAgICAgdXBkYXRl
QmFja0ZvcndhcmRDYWNoZUNhcGFjaXR5KCk7Ci0KLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
LSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsg
fSwgeyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVz
dGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFsKQpA
QCAtMTU4OSw3ICsxMzcwLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVl
c3RUaQogCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94
eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7Ci0gICAgYXV0byYgZG93bmxv
YWRQcm94eSA9IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRh
U3RvcmUsIHJlcXVlc3QpOworICAgIGF1dG8mIGRvd25sb2FkUHJveHkgPSBlbnN1cmVOZXR3b3Jr
UHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCAqdGhpcywgcmVxdWVzdCk7
CiAgICAgZG93bmxvYWRQcm94eS5zZXRPcmlnaW5hdGluZ1BhZ2Uob3JpZ2luYXRpbmdQYWdlKTsK
ICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAgLTE2NjcsMjUgKzE0NDgsMTEgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c3RvcE1lbW9yeVNhbXBsZXIoKQogICAgIHNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RvcE1lbW9yeVNhbXBsZXIoKSk7CiB9CiAKLXZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpCi17Ci0gICAgQVNT
RVJUKG1fcHJvY2Vzc2VzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX25ldHdvcmtQcm9jZXNz
KTsKLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIW1fcHJvY2Vzc2VzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaG91
bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24gPSB0cnVlOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFN5bmNUb05ldHdvcmtp
bmdQcm9jZXNzKFQmJiBtZXNzYWdlLCBVJiYgcmVwbHkpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCBzdGQ6OmZv
cndhcmQ8VT4ocmVwbHkpLCAwKTsKKyAgICBpZiAoTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuY2FuU2VuZE1lc3NhZ2UoKSkKKyAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2VuZFN5bmMoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCBzdGQ6OmZvcndhcmQ8
VT4ocmVwbHkpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCBhbGxvd3MpCkBAIC0xNjk1LDggKzE0NjIsNiBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBbGxvd3NBbnlTU0xDZXJ0CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscygpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQpAQCAtMTcwNSwyNCArMTQ3MCwxNCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvCiAgICAgd2hpbGUgKCFt
X3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuaXNFbXB0eSgpKQogICAgICAgICBtX3NlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMuYmVnaW4oKS0+dmFsdWUtPmRpc2FibGVTZXJ2aWNlV29ya2VycygpOwogI2Vu
ZGlmCi0KLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNz
ID0gbnVsbHB0cjsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Rm9yVGVzdGluZygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkKQEAgLTE3
NDcsMTUgKzE1MDIsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3luY0xvY2FsU3RvcmFnZShD
bwogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2Fs
U3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xv
Y2FsU3RvcmFnZSgpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdM
b2NhbFN0b3JhZ2UoKSwgMCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0
IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
ICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZv
ckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2Vy
dGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBk
YXRlQXV0b21hdGlvbkNhcGFiaWxpdGllcygpIGNvbnN0CkBAIC0yMjgxLDEwICsyMDM1LDcgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZQogI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9z
c1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
dG9Eb21haW4sIE9wdGlvblNldDxDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFn
PiBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQ
cm94eUlELCBQYWdlSWRlbnRpZmllciB3ZWJQYWdlSUQpCiB7Ci0gICAgaWYgKCFtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRDb21t
aXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRv
RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlE
KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5kaWRDb21taXRDcm9zc1Np
dGVMb2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRvRG9tYWluLCBu
YXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlEKTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5n
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWluLCBjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgdGhpcmRQYXJ0eURvbWFpbiwgYm9vbCBzaG91bGRTY2hlZHVsZU5vdGlmaWNh
dGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MjMxMCw4ICsyMDYxLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0V2ViUHJvY2Vzc0hhc1Vw
bAogICAgIGlmIChtX3Byb2Nlc3Nlc1dpdGhVcGxvYWRzLmlzRW1wdHkoKSkgewogICAgICAgICBS
RUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlRoZSBudW1iZXIgb2YgdXBsb2FkcyBpbiBw
cm9ncmVzcyBpcyBub3cgb25lLiBUYWtpbmcgTmV0d29ya2luZyBhbmQgVUkgcHJvY2VzcyBhc3Nl
cnRpb25zLiIpOwogCi0gICAgICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+dGFrZVVwbG9hZEFzc2VydGlvbigpOworICAgICAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS50YWtlVXBsb2FkQXNzZXJ0aW9uKCk7CiAgICAgICAg
IAogICAgICAgICBBU1NFUlQoIW1fdWlQcm9jZXNzVXBsb2FkQXNzZXJ0aW9uKTsKICAgICAgICAg
bV91aVByb2Nlc3NVcGxvYWRBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+
KGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIldlYktpdCB1cGxvYWRzIl9zLCBBc3NlcnRpb25TdGF0
ZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CkBAIC0yMzM2LDggKzIwODYsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpjbGVhcldlYlByb2Nlc3NIYXNVCiAgICAgaWYgKG1fcHJvY2Vzc2VzV2l0aFVw
bG9hZHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9u
LCAiVGhlIG51bWJlciBvZiB1cGxvYWRzIGluIHByb2dyZXNzIGlzIG5vdyB6ZXJvLiBSZWxlYXNp
bmcgTmV0d29ya2luZyBhbmQgVUkgcHJvY2VzcyBhc3NlcnRpb25zLiIpOwogCi0gICAgICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+Y2xlYXJV
cGxvYWRBc3NlcnRpb24oKTsKKyAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuY2xlYXJVcGxvYWRBc3NlcnRpb24oKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChtX3Vp
UHJvY2Vzc1VwbG9hZEFzc2VydGlvbik7CiAgICAgICAgIG1fdWlQcm9jZXNzVXBsb2FkQXNzZXJ0
aW9uID0gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuaAkocmV2aXNpb24gMjUyMjU5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNiBAQCBPQkpDX0NMQVNTIE5T
U3RyaW5nOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFz
cyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNs
YXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTc0
LDcgKzE3Myw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlx
dWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0
RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZv
aWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xp
ZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAg
ICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRT
ZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBAIC0zMDQsOCArMzAyLDYgQEAgcHVibGljOgog
ICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGllbnQoKSB7IHJl
dHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYgY2xpZW50KCkg
eyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKICAg
ICAgICAgdW5zaWduZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdrUGFnZUNvdW50
OwpAQCAtMzEzLDkgKzMwOSw2IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHN0YXRpYyBTdGF0aXN0
aWNzJiBzdGF0aXN0aWNzKCk7ICAgIAogCi0gICAgdm9pZCB1c2VUZXN0aW5nTmV0d29ya1Nlc3Np
b24oKTsKLSAgICBib29sIGlzVXNpbmdUZXN0aW5nTmV0d29ya1Nlc3Npb24oKSBjb25zdCB7IHJl
dHVybiBtX3Nob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbjsgfQotCiAgICAgdm9pZCBzZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sKTsKIAogICAgIHZvaWQgY2xl
YXJDYWNoZWRDcmVkZW50aWFscygpOwpAQCAtMzgyLDcgKzM3NSw3IEBAIHB1YmxpYzoKIAogICAg
IC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50CiAgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYg
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3Rv
cmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2Vzcygp
IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7IH0KKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5KiBuZXR3b3JrUHJvY2VzcygpIHsgcmV0dXJuICZOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKTsgfQogICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNz
UHJveHkmLCBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+LCBNZXNzYWdl
czo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVw
bHk+PiYmKTsKIAogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nl
c3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKQEAgLTUyOCw2ICs1MjEsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOwogICAgIGJvb2wg
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQogCisgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1J
bml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMm
KTsKKwogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCkBAIC01NDMs
OCArNTM4LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVxdWVzdFdlYkNvbnRlbnRTdGF0aXN0
aWNzKFN0YXRpc3RpY3NSZXF1ZXN0Jik7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2
b2lkIGhhbmRsZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
TmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNo
cm9ub3VzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1l
LCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNl
ckRhdGEmJik+JiYpOwogCkBAIC02MjcsNyArNjIwLDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1dG9tYXRpb25DbGllbnQ7CiAgICAg
VW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+IG1faGlzdG9yeUNs
aWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogCiAgICAgUmVmUHRyPFdlYkF1dG9t
YXRpb25TZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwogCkBAIC02OTQsOCArNjg2LDYgQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkIHsgdHJ1ZSB9
OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1By
b2Nlc3M7Ci0KICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNr
Pj4gbV9kaWN0aW9uYXJ5Q2FsbGJhY2tzOwogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxT
dGF0aXN0aWNzUmVxdWVzdD4+IG1fc3RhdGlzdGljc1JlcXVlc3RzOwogCkBAIC03OTUsMTUgKzc4
NSwxNSBAQCBwcml2YXRlOgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKQogewotICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsK
KyAgICBpZiAoTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuY2FuU2VuZE1lc3NhZ2Uo
KSkKKyAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChzdGQ6OmZv
cndhcmQ8VD4obWVzc2FnZSksIDApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNz
YXJ5KFQmJiBtZXNzYWdlKQogewogICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3Nh
Z2UpLCAwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCShyZXZpc2lvbiAy
NTIxODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3Jl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsNiBAQCBuYW1lc3BhY2UgQVBJIHsKIEhU
VFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYg
d2Vic2l0ZURhdGFTdG9yZSkKICAgICA6IG1fb3duaW5nRGF0YVN0b3JlKHdlYnNpdGVEYXRhU3Rv
cmUpCiB7Ci0gICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVT
dG9yYWdlT3BlcmF0aW9ucygpKQotICAgICAgICByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90
aWZpY2F0aW9ucygpOwogfQogCiBIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUoKQpA
QCAtNDksOCArNDcsNiBAQCBIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUoKQogICAg
IEFTU0VSVChtX29ic2VydmVycy5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCghbV9vYnNlcnZlZENv
b2tpZU1hbmFnZXJQcm94eSk7CiAgICAgQVNTRVJUKCFtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyKTsKLQotICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsK
IH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtNjgsOCArNjQsOCBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llcyhDb21wbGV0aW9u
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9v
bC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29r
aWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
W3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11
dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2llTWFuYWdlci5nZXRBbGxDb29raWVzKG1f
b3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgewogICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihjb29raWVzKTsKICAgICB9KTsKIH0KQEAgLTkwLDggKzg2LDggQEAgdm9pZCBIVFRQ
Q29va2llU3RvcmU6OnNldENvb2tpZXMoY29uc3QgVgogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZXMsIFtwb29sID0gV1RGTW92ZShwb29s
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0
YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCks
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFi
bGUgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogICAgIH0pOwogfQpAQCAtMTExLDgg
KzEwNyw4IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUoY29uc3QKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBw
bGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFn
ZXItPmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwg
W3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2llTWFuYWdl
ci5kZWxldGVDb29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFtw
b29sID0gV1RGTW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAg
ICB9KTsKIH0KQEAgLTEyNywyNCArMTIzLDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpkZWxl
dGVBbGxDb29raWVzKEMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8qIGNvb2tp
ZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpKTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRl
QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1F
OiBUaGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6
OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViS2l0OjpIVFRQQ29va2llQWNjZXB0UG9saWN5
IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1f
b3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAg
c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeUluRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKHBv
bGljeSk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFu
YWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBj
b29raWVNYW5hZ2VyLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
ICAgICB9KTsKIH0KQEAgLTE4MiwyMSArMTcwLDcgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OnJl
Z2lzdGVyT2JzZXJ2ZXIoTwogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IG1h
a2VVbmlxdWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAg
IGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9y
YWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCghbV9v
YnNlcnZpbmdVSVByb2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tp
ZSBub3RpZmljYXRpb25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAgICAg
ICBzdGFydE9ic2VydmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShbdGhp
c10gKCkgewotICAgICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwotICAgICAgICB9KTsKLQot
ICAgICAgICBtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1
cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZl
ZENvb2tpZU1hbmFnZXJQcm94eSA9ICZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2lu
Z2xldG9uKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNl
cnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94
eU9ic2VydmVyKTsKIH0KIApAQCAtMjM4LDM5ICsyMTIsMTAgQEAgdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmNvb2tpZU1hbmFnZXJEZXN0cgogICAgIGlmICghcG9vbCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSA9ICZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CiAg
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmlu
Z0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsK
IH0KIAotdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCkKLXsKLSAgICBBU1NFUlQoIW1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVy
SWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZp
ZXIgPSBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIo
W3RoaXNdKFdlYlByb2Nlc3NQb29sJiBuZXdQcm9jZXNzUG9vbCkgewotICAgICAgICBpZiAoIW1f
b3duaW5nRGF0YVN0b3JlLT5pc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChuZXdQcm9jZXNzUG9vbCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gTm93IHRoYXQgYW4gYXNzb2NpYXRl
ZCBwcm9jZXNzIHBvb2wgZXhpc3RzLCB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBVSSBwcm9jZXNzIGNv
b2tpZSBzdG9yZQotICAgICAgICAvLyB0byBtYWtlIHN1cmUgYW55IGNoYW5nZXMgYXJlIHJlZmxl
Y3RlZCB3aXRoaW4gdGhlIG5ldyBwcm9jZXNzIHBvb2wuCi0gICAgICAgIGZsdXNoRGVmYXVsdFVJ
UHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIG5ld1Byb2Nlc3NQb29sLmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCk7Ci0KLSAgICAgICAgaWYgKG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIp
IHsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBuZXdQcm9jZXNz
UG9vbC5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgICAg
ICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVy
KTsKLSAgICAgICAgfQotICAgICAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmlj
YXRpb25zKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVy
Rm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBpZiAobV9wcm9jZXNzUG9v
bENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKQotICAgICAgICBXZWJQcm9jZXNzUG9vbDo6dW5y
ZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihtX3Byb2Nlc3NQb29sQ3JlYXRpb25M
aXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJ
ZGVudGlmaWVyID0gMDsKLX0KLQogI2lmICFQTEFURk9STShDT0NPQSkKIHZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpIHsgfQogVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4gSFRUUENvb2tpZVN0b3JlOjpnZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29v
a2llU3RvcmVDb29raWVzKCkgeyByZXR1cm4geyB9OyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCShyZXZpc2lvbiAyNTIxODEp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQ
Q29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lz
dGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVy
Rm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0KICAgICBzdGF0aWMgdm9pZCBmbHVz
aERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7CiAg
ICAgc3RhdGljIHZvaWQgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29u
c3QgV2ViQ29yZTo6Q29va2llJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHAJKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNiw5ICs0MjYs
OSBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRlCiB7CiB9CiAKLVdL
Q29va2llTWFuYWdlclJlZiBXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmKQorV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIo
V0tDb250ZXh0UmVmKQogewotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBs
KGNvbnRleHRSZWYpLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
KTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnNpbmdsZXRvbigpKTsKIH0KIAogV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdl
dFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmKQpAQCAtNTQ1LDkgKzU0NSw4IEBAIHZvaWQg
V0tDb250ZXh0U2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWMKICAgICBXZWJLaXQ6OnRvSW1wbChj
b250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoZW5h
YmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oV0tDb250
ZXh0UmVmIGNvbnRleHQpCit2b2lkIFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihX
S0NvbnRleHRSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnVzZVRlc3RpbmdO
ZXR3b3JrU2Vzc2lvbigpOwogfQogCiB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRp
ZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhXS0NvbnRleHRSZWYgY29udGV4dCwgYm9vbCBhbGxv
d3MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
UHJpdmF0ZS5oCShyZXZpc2lvbiAyNTIyNTgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAg
V0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQwogV0tfRVhQT1JUIHZvaWQg
V0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGlu
ZyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQg
YmVmb3JlIGFueSBzZWNvbmRhcnkgcHJvY2Vzc2VzIGFyZSBzdGFydGVkLgotV0tfRVhQT1JUIHZv
aWQgV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBjb250ZXh0
KTsKK1dLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0Nv
bnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIAogLy8gVGVzdCBvbmx5LiBT
aG91bGQgYmUgY2FsbGVkIGJlZm9yZSBydW5uaW5nIGEgdGVzdC4KIFdLX0VYUE9SVCB2b2lkIFdL
Q29udGV4dENsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tDb250ZXh0UmVmIGNvbnRleHQpOwpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bv
b2wubW0JKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1Byb2Nlc3NQb29sLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMjYgKzIwMCw4IEBA
IC0gKHZvaWQpX3NldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmEKIHsKIH0KIAotc3RhdGlj
IFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3ko
TlNIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkKLXsKLSAgICBzd2l0Y2ggKHN0YXRpY19j
YXN0PE5TVUludGVnZXI+KHBvbGljeSkpIHsKLSAgICBjYXNlIE5TSFRUUENvb2tpZUFjY2VwdFBv
bGljeUFsd2F5czoKLSAgICAgICAgcmV0dXJuIFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBvbGlj
eTo6QWx3YXlzQWNjZXB0OwotICAgIGNhc2UgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5TmV2ZXI6
Ci0gICAgICAgIHJldHVybiBXZWJLaXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6Ok5ldmVyOwot
ICAgIGNhc2UgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21h
aW46Ci0gICAgICAgIHJldHVybiBXZWJLaXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6Ok9ubHlG
cm9tTWFpbkRvY3VtZW50RG9tYWluOwotICAgIGNhc2UgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5
RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOgotICAgICAgICByZXR1cm4gV2ViS2l0
OjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21h
aW47Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFdlYktp
dDo6SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNjZXB0OwotfQotCiAtICh2b2lkKV9z
ZXRDb29raWVBY2NlcHRQb2xpY3k6KE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSlwb2xpY3kKIHsK
LSAgICBfcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsK
IH0KIAogLSAoaWQpX29iamVjdEZvckJ1bmRsZVBhcmFtZXRlcjooTlNTdHJpbmcgKilwYXJhbWV0
ZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCShyZXZpc2lvbiAyNTIxODEpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM1Nyw4ICsxMzU3LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6YWRkU2luZ2xlQ29vawogICAgIGlmICghY29va2llT2JqZWN0LmdldEJvb2xlYW4oImh0
dHBPbmx5Il9zLCBjb29raWUuaHR0cE9ubHkpKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRl
ciAnaHR0cE9ubHknIHdhcyBub3QgZm91bmQuIik7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKHBhZ2UtPndlYnNp
dGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrID0gY2FsbGJh
Y2suY29weVJlZigpXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigp
LnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tp
ZSB9LCBbY2FsbGJhY2sgPSBjYWxsYmFjay5jb3B5UmVmKCldKCkgewogICAgICAgICBjYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsKIH0KQEAgLTEzNzQsOCArMTM3Myw3IEBAIHZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2sKIAogICAgIFN0cmluZyBob3N0ID0g
YWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5
KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
cyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlB
ZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnNpbmdsZXRvbigpLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURh
dGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZO
ZWVkZWQoaG9zdCkgfSk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldFNlc3Np
b25QZXJtaXNzaW9ucyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT4+JiBvdXRfcGVy
bWlzc2lvbnMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNz
UG9vbENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlByb2Nlc3NQb29sQ29jb2EubW0JKHJldmlzaW9uIDI1MjE4MSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0JKHdvcmtpbmcgY29weSkK
QEAgLTEwOCw4ICsxMDgsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVl
ZGVkCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRl
KCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVk
KCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFByb2Nlc3NTdXBw
cmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKIAogI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGlmICghbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNh
YmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCkpCkBAIC0xMzksOCArMTM4LDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKAogCiAgICAgaWYgKCFbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2ViS2l0U3VwcHJlc3NNZW1v
cnlQcmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1lbW9yeVByZXNzdXJlSGFuZGxl
cigpOwotCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlx
dWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKTsKIH0KIAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCkBAIC0yNzMsMjQgKzI3MCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZU4KIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtO
U1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJv
b2wgaXNTYWZhcmkgPSBmYWxzZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBp
c1NhZmFyaSA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01vYmlsZVNhZmFyaSgpOwotI2Vs
aWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0
aW9uOjppc1NhZmFyaSgpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSkgewotICAgICAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuaHR0cFByb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5
OihOU1N0cmluZyAqKVdlYktpdDJIVFRQUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuaHR0cHNQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNT
dHJpbmcgKilXZWJLaXQySFRUUFNQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBwYXJhbWV0ZXJzLmVuYWJsZUxlZ2FjeVRMUyA9IHRydWU7Ci0gICAgaWYgKGlkIHZh
bHVlID0gW2RlZmF1bHRzIG9iamVjdEZvcktleTpAIldlYktpdEVuYWJsZUxlZ2FjeVRMUyJdKQot
ICAgICAgICBwYXJhbWV0ZXJzLmVuYWJsZUxlZ2FjeVRMUyA9IFt2YWx1ZSBib29sVmFsdWVdOwot
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmVuYWJsZUxlZ2FjeVRMUyA9IHBhcmFtZXRlcnMuZW5hYmxlTGVnYWN5VExTOwot
CiAgICAgcGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dCA9IGFkb3B0Q0YoX0NGTmV0d29ya0Nv
cHlBVFNDb250ZXh0KCkpOwogCiAgICAgcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVBy
ZXNzdXJlSGFuZGxlciA9IFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdFN1cHByZXNzTWVtb3J5
UHJlc3N1cmVIYW5kbGVyRGVmYXVsdHNLZXldOwpAQCAtMzAxLDggKzI4MCw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBwYXJhbWV0ZXJzLnVpUHJvY2Vz
c0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyID0gaWRlbnRpZnlpbmdEYXRhRnJvbUNvb2tpZVN0b3Jh
Z2UoW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBfY29va2ll
U3RvcmFnZV0pOwogI2VuZGlmCiAKLSAgICBwYXJhbWV0ZXJzLnN0b3JhZ2VBY2Nlc3NBUElFbmFi
bGVkID0gc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoKTsKLQogICAgIHBhcmFtZXRlcnMuc2hvdWxk
RW5hYmxlSVRQRGF0YWJhc2UgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIkludGVybmFsRGVidWclQCIsIFdlYlByZWZlcmVuY2VzS2V5Ojppc0lUUERh
dGFiYXNlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKIAogICAgIHBhcmFt
ZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xG
b3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlBy
ZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3Jl
YXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAkocmV2aXNpb24gMjUyMjYw
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksOSArMTA5LDYgQEAgdm9pZCBEb3dubG9hZFByb3h5
TWFwOjpkb3dubG9hZEZpbmlzaGVkKAogCiAgICAgUkVMRUFTRV9MT0coTG9hZGluZywgIlJlbW92
aW5nIGRvd25sb2FkICUiIFBSSXU2NCAiIGZyb20gVUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAi
LCBkb3dubG9hZElELnRvVUludDY0KCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5
IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAg
YXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNz
UG9vbCgpKTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7
CiAKICAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxv
YWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELnRvVUludDY0KCkpOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyNTIxODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw3ICs1MCw2IEBACiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCi0jaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5oIgpAQCAtODEsMTggKzgwLDMwIEBAIHN0YXRpYyB1aW50NjRfdCBn
ZW5lcmF0ZUNhbGxiYWNrSUQoKQogICAgIHJldHVybiArK2NhbGxiYWNrSUQ7CiB9CiAKLU5ldHdv
cmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nl
c3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHByb2Nlc3NQb29sLmFsd2F5c1J1
bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9jZXNzUG9vbChwcm9jZXNzUG9v
bCkKK05ldHdvcmtQcm9jZXNzUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE5ldHdvcmtQcm9jZXNzUHJveHk+IHByb2Nl
c3M7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9v
bmNlKG9uY2VGbGFnLCBbXSB7CisgICAgICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzIHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeSA9ICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSgpOworICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1J
bml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgICAgIHBhcmFtZXRlcnMu
ZGF0YVN0b3JlUGFyYW1ldGVycyA9IFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxs
U3RvcmVzKCk7CisgICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOworICAgIH0pOworICAg
IHJldHVybiBwcm9jZXNzLmdldCgpOworICAgIHJldHVybiBwcm9jZXNzOworfQorCitOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KCkKKyAgICA6IEF1eGlsaWFyeVByb2Nl
c3NQcm94eSgpCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKICAg
ICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMpCiAjZW5kaWYKLSAgICAsIG1f
dGhyb3R0bGVyKCp0aGlzLCBwcm9jZXNzUG9vbC5zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0
aW9uKCkpCisgICAgLCBtX3Rocm90dGxlcigqdGhpcywgZmFsc2UpCiB7CiAgICAgY29ubmVjdCgp
OwotCi0gICAgaWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29sLndlYnNp
dGVEYXRhU3RvcmUoKSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5zZXQod2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIG1ha2VSZWYoKndlYnNpdGVEYXRhU3RvcmUpKTsKIH0KIAog
TmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkoKQpAQCAtMTE2LDExICsx
MjcsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvCiB7CiAgICAg
bGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6
Ok5ldHdvcms7CiAgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKGxh
dW5jaE9wdGlvbnMpOwotCi0gICAgaWYgKHByb2Nlc3NQb29sKCkuc2hvdWxkTWFrZU5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wo
KS5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFs
c2UpOwotICAgICAgICBsYXVuY2hPcHRpb25zLnNob3VsZE1ha2VQcm9jZXNzTGF1bmNoRmFpbEZv
clRlc3RpbmcgPSB0cnVlOwotICAgIH0KIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpj
b25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTgxLDEy
ICsxODcsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSQogICAg
IH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxv
YWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVzb3VyY2VSZXF1ZXN0KQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6
Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nl
c3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVl
c3QpCiB7CiAgICAgaWYgKCFtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQ
cm94eU1hcCA9IG1ha2VVbmlxdWU8RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0
dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1f
cHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCk7CisgICAgcmV0dXJuIG1fZG93bmxvYWRQcm94
eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHByb2Nlc3NQb29sLCByZXNvdXJj
ZVJlcXVlc3QpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZldGNoV2Vic2l0ZURh
dGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBk
YXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTI1Niw5ICsyNjIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQ
cm9jZXNzCiAgICAgICAgICAgICByZXF1ZXN0LnJlcGx5KHsgfSk7CiAgICAgfQogICAgIG1fY29u
bmVjdGlvblJlcXVlc3RzLmNsZWFyKCk7Ci0KLSAgICAvLyBUZWxsIHRoZSBuZXR3b3JrIHByb2Nl
c3MgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhpcyBuZXR3b3JrIHByb2Nlc3MgcHJveHkuIFRo
aXMgd2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgotICAgIG1fcHJvY2Vzc1Bvb2wubmV0d29y
a1Byb2Nlc3NDcmFzaGVkKCp0aGlzLCBXVEZNb3ZlKHBlbmRpbmdSZXF1ZXN0cykpOwogfQogCiB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNsZWFyQ2FsbGJhY2tTdGF0ZXMoKQpAQCAtMjc4LDkg
KzI4MSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3MKICAgICBp
ZiAoZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVj
b2RlcikpCi0gICAgICAgIHJldHVybjsKLQogICAgIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc1By
b3h5TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIApAQCAtMjk0LDggKzI5NCw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZVN5bmMKIAogdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewotICAgIGF1dG8gcHJv
dGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwotCiAgICAgaWYgKG1f
ZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlkYXRl
KCk7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKQEAgLTM1MCwx
MSArMzQ4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0b3BPcmlnaW4gfHwgIW1fcHJvY2Vzc1Bv
b2wuaXNTZXJ2aWNlV29ya2VyUGFnZUlEKHBhZ2VJRCkpIHsKLSAgICAgICAgcHJvY2Vzc0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKHNlc3Npb25JRCwgV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgV2ViUGFnZVByb3h5Ojpmb3JN
b3N0VmlzaWJsZVdlYlBhZ2VJZkFueShzZXNzaW9uSUQsICp0b3BPcmlnaW4sIFt0aGlzLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIGF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlID0gV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSldKGF1dG8qIHBhZ2UpIG11dGFi
bGUgewogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDAx
LDExICszOTQsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jCiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbm5lY3Rpb25SZXF1ZXN0LnJlcGx5KHsgfSk7CiAg
ICAgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wucHJvY2Vz
c1N1cHByZXNzaW9uRW5hYmxlZCgpKQotICAgICAgICBzZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFi
bGVkKHRydWUpOwotI2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBp
ZiAoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uID0gdGhpcy0+Y29ubmVjdGlvbigpLT54cGND
b25uZWN0aW9uKCkpCkBAIC0xMTUyLDExICsxMTQwLDYgQEAgV2Vic2l0ZURhdGFTdG9yZSogTmV0
d29ya1Byb2Nlc3NQcm94eTo6dwogICAgIGlmIChpdGVyYXRvciAhPSBtX3dlYnNpdGVEYXRhU3Rv
cmVzLmVuZCgpKQogICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogCi0gICAg
aWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29sLndlYnNpdGVEYXRhU3Rv
cmUoKSkgewotICAgICAgICBpZiAoc2Vzc2lvbklEID09IHdlYnNpdGVEYXRhU3RvcmUtPnNlc3Np
b25JRCgpKQotICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAgfQotCiAg
ICAgaWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTIyMCw3ICsxMjAzLDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpnZXRTYW5kYm94RXh0ZQogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5l
Y3Rpb25Ub05ldHdvcmtQcm9jZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21h
aW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBtX3Byb2Nlc3NQb29sLmVzdGFi
bGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgV1RGTW92
ZShyZWdpc3RyYWJsZURvbWFpbiksIHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6d29ya2VyQ29udGV4dENvbm5lY3Rpb25Ob0xvbmdlck5lZWRlZChXZWJDb3JlOjpQ
cm9jZXNzSWRlbnRpZmllciBpZGVudGlmaWVyKQpAQCAtMTIzMCw2ICsxMjEyLDEwIEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2VyQ29udGV4dEMKIH0KICNlbmRpZgogCit2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYpCit7Cit9
CisKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVxdWVzdFN0b3JhZ2VTcGFjZShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCB1
aW50NjRfdCBjdXJyZW50UXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTaXplLCB1aW50NjRfdCBzcGFj
ZVJlcXVpcmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPHVpbnQ2NF90PiBxdW90
YSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byogc3RvcmUgPSB3ZWJzaXRlRGF0
YVN0b3JlRnJvbVNlc3Npb25JRChzZXNzaW9uSUQpOwpAQCAtMTMzMCwyMSArMTMxNiw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TG9jYWxTdG9yYWcKIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCkKIHsKLSAgICBpZiAocHJvY2Vzc1Bv
b2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKLSAgICAgICAgaWYgKCFQcm9jZXNz
VGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJv
Y2Vzc2VzKSkgewotICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJv
dHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGZvcmVncm91bmQgdmll
dyhzKSJfcyk7Ci0gICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJv
Y2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKSwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKCkpIHsKLSAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkQmFja2dy
b3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewotICAgICAgICAgICAg
bV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZp
dHkoIk5ldHdvcmtpbmcgZm9yIGZvcmVncm91bmQgYmFja2dyb3VuZCB2aWV3KHMpIl9zKTsKLSAg
ICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNp
dGlvblRvQmFja2dyb3VuZCgpLCAwKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gbnVsbHB0cjsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjUyMTgxKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDEwIEBACiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHkuaCIKICNlbmRpZgogCituYW1lc3BhY2UgQVBJIHsKK2NsYXNzIEN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudDsKK30KKwogbmFtZXNwYWNlIFBBTCB7CiBjbGFzcyBTZXNz
aW9uSUQ7CiB9CkBAIC02Miw3ICs2Niw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBE
b3dubG9hZFByb3h5OwogY2xhc3MgRG93bmxvYWRQcm94eU1hcDsKLWNsYXNzIFdlYlByb2Nlc3NQ
b29sOwogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MgOiBib29sOwogZW51
bSBjbGFzcyBTdG9yYWdlQWNjZXNzU3RhdHVzIDogdWludDhfdDsKIGVudW0gY2xhc3MgV2Vic2l0
ZURhdGFGZXRjaE9wdGlvbjsKQEAgLTg2LDEyICs4OSwxMyBAQCBwdWJsaWM6CiAgICAgdXNpbmcg
RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47
CiAgICAgdXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAK
LSAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJik7CisgICAg
c3RhdGljIE5ldHdvcmtQcm9jZXNzUHJveHkmIHNpbmdsZXRvbigpOworICAgIGV4cGxpY2l0IE5l
dHdvcmtQcm9jZXNzUHJveHkoKTsKICAgICB+TmV0d29ya1Byb2Nlc3NQcm94eSgpOwogCiAgICAg
dm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2Fn
ZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJl
cGx5JiYpOwogCi0gICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRl
RGF0YVN0b3JlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgRG93bmxv
YWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgV2ViUHJvY2Vz
c1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKIAogICAgIHZvaWQgZmV0
Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4s
IE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChXZWJzaXRlRGF0YSk+JiYpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNz
aW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2RpZmllZFNpbmNl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMTcy
LDggKzE3Niw2IEBAIHB1YmxpYzoKICAgICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSB7
IHJldHVybiBtX3Rocm90dGxlcjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigp
OwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNz
UG9vbDsgfQotCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRpZERl
c3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eSYpOwogI2VuZGlmCkBAIC0xOTYsNiArMTk4LDggQEAgcHVibGljOgogICAgIHZvaWQg
cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJp
bmcmKTsKIAorICAgIHZvaWQgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0
ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJik7CisKIHBy
aXZhdGU6CiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5CiAgICAgdm9pZCBnZXRMYXVuY2hP
cHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYpIG92ZXJyaWRlOwpAQCAtMjU5
LDggKzI2Myw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShQQUw6OlNlc3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+
JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBzdHJ1Y3Qg
Q29ubmVjdGlvblJlcXVlc3QgewogICAgICAgICBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4gd2Vi
UHJvY2VzczsKICAgICAgICAgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5IHJlcGx5OwpAQCAtMjkwLDYgKzI5Miw5IEBAIHBy
aXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgUmVmUHRyPFdlYnNpdGVEYXRhU3Rv
cmU+PiBtX3dlYnNpdGVEYXRhU3RvcmVzOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9j
ZXNzQXNzZXJ0aW9uPiBtX3VwbG9hZEFzc2VydGlvbjsKKyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RP
TV9QUk9UT0NPTF9NQU5BR0VSKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CisjZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3Vz
dG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAkocmV2aXNp
b24gMjUyMTgxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90
b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MiwxOSArNDIsMTYgQEAgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6On5M
ZWdhYwogICAgIGludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3ZvaWQgTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyh1aW50NjRfdCwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JikKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bv
b2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdGFydExvYWRpbmcoKnRoaXMsIGN1
c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOwogfQogCi12b2lkIExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElEKQordm9p
ZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RvcExvYWRpbmcodWludDY0X3Qp
CiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOwog
fQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkK
IHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6d2FzUmVkaXJlY3RlZFRvUmVxdWVzdCh1aW50NjRfdCBj
dXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmNwcAkocmV2aXNpb24gMjUyMjU5KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgxLDEzICs4MSwyMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFsbG93V2Vic2l0ZURhdGFS
CiAgICAgYWxsb3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lucyA9IHRydWU7CiB9CiAK
LXN0YXRpYyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIG5vbkRl
ZmF1bHREYXRhU3RvcmVzKCkKK3N0YXRpYyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRl
RGF0YVN0b3JlKj4mIGFsbERhdGFTdG9yZXMoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVUlU
aHJlYWQoKSk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8UEFMOjpTZXNzaW9u
SUQsIFdlYnNpdGVEYXRhU3RvcmUqPj4gbWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKK1ZlY3Rv
cjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVy
c0Zyb21BbGxTdG9yZXMoKQoreworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cz4gYWxsUGFyYW1ldGVyczsKKyAgICBhbGxQYXJhbWV0ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoYWxsRGF0YVN0b3JlcygpLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERh
dGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgYWxsUGFyYW1ldGVycy51bmNoZWNrZWRBcHBl
bmQoc3RvcmUtPnBhcmFtZXRlcnMoKSk7CisgICAgcmV0dXJuIGFsbFBhcmFtZXRlcnM7Cit9CisK
IFJlZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0
ZW50KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNp
dGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6
U2Vzc2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTMsNyArMTIy
LDcgQEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8VwogI2VuZGlmCiB7
CiAgICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1h
eWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklE
TWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwpAQCAtMTI1LDEzICsxMzQsMTIgQEAgV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNp
dGVEYXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAKLSAgICBpZiAobV9zZXNz
aW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBB
U1NFUlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOwot
ICAgICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7Ci0gICAg
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5y
ZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQorICAgIEFTU0VSVChhbGxEYXRh
U3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKKyAgICBhbGxEYXRhU3RvcmVzKCku
cmVtb3ZlKG1fc2Vzc2lvbklEKTsKKyAgICAvLyBGSVhNRTogVGhpcyBvbmx5IG5lZWRzIHRvIGJl
IGRvbmUgb25jZS4KKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6
OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQorICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwogICAgIH0KIH0KIApAQCAtMTYyLDE3ICsx
NzAsMTUgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRQogICAgIHJl
dHVybiAhIWdsb2JhbERlZmF1bHREYXRhU3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9
IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1
bHQgPSBub25EZWZhdWx0RGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAg
ICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgfQorICAg
IGF1dG8gcmVzdWx0ID0gYWxsRGF0YVN0b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Cisg
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKIH0KIAogV2Vic2l0
ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3Jl
Rm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICByZXR1cm4gc2Vz
c2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25EZWZhdWx0
RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gYWxsRGF0
YVN0b3JlcygpLmdldChzZXNzaW9uSUQpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
Z2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5o
CShyZXZpc2lvbiAyNTIyNTkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxOCw2ICsyMTgsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYp
IGNvbnN0OwogCiAgICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgcGFyYW1ldGVycygpOwor
ICAgIHN0YXRpYyBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IHBhcmFtZXRlcnNG
cm9tQWxsU3RvcmVzKCk7CiAKICAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5nQ29v
a2llcygpIGNvbnN0OwogICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpD
b29raWUmKTsKQEAgLTMyMCw3ICszMjEsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJl
bW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIFdh
bGxUaW1lIG1vZGlmaWVkU2luY2UpOwogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhj
b25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIGNvbnN0IEhhc2hTZXQ8V2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYpOwogCi0gICAgdm9pZCBtYXliZVJlZ2lzdGVyV2l0
aFNlc3Npb25JRE1hcCgpOworICAgIHZvaWQgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAK
ICAgICBjb25zdCBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383233</attachid>
            <date>2019-11-09 17:57:25 -0800</date>
            <delta_ts>2019-11-09 20:36:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20191110015723.patch</filename>
            <type>text/plain</type>
            <size>118615</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBAQAorMjAxOS0xMS0wOSAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBhIE5ldHdv
cmtQcm9jZXNzUHJveHkgc2luZ2xldG9uIGluc3RlYWQgb2Ygb25lIHBlciBXZWJQcm9jZXNzUG9v
bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToK
KyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhU
VFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tp
ZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3Jl
Ojpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoQVBJOjpI
VFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoQVBJ
OjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6CisgICAgICAgIChX
S0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9zZXRDb29raWVBY2Nl
cHRQb2xpY3k6XSk6CisgICAgICAgICh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tp
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNN
b2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpw
cm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250
ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6CisgICAgICAg
IChXZWJLaXQ6Om1fd2ViUHJvY2Vzc0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6On5XZWJQcm9jZXNzUG9vbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0
Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9O
ZXR3b3JraW5nUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVh
ckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyTGVnYWN5UHJpdmF0ZUJy
b3dzaW5nTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFs
bG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRXZWJQcm9jZXNzSGFzVXBsb2Fkcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVhcldlYlByb2Nlc3NIYXNVcGxv
YWRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMTktMTEtMDggIEpv
bmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIyNTIyNjAuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwMyw3ICszMDMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1By
CiAgICAgICAgIG1lbW9yeVByZXNzdXJlSGFuZGxlci5pbnN0YWxsKCk7CiAgICAgfQogCi0gICAg
c2V0Q2FjaGVNb2RlbChwYXJhbWV0ZXJzLmNhY2hlTW9kZWwsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURp
cmVjdG9yeSk7CisgICAgLy8gRklYTUU6IEkgc3RpbGwgbmVlZCB0byBzZXQgdGhlIGNhY2hlIG1v
ZGVsIGZyb20gTGVnYWN5R2xvYmFsU2V0dGluZ3MsIGJ1dCB3aXRoIHRoZSBwYXRoIGZyb20gdGhl
IGZpcnN0IHBlcnNpc3RlbnQgZGF0YSBzdG9yZS4KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCiAgICAgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCA9IHBhcmFtZXRlcnMuc2hv
dWxkRW5hYmxlSVRQRGF0YWJhc2U7CkBAIC0zMTEsMTQgKzMxMSwxNSBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1ByCiAKICAgICBXZWJDb3JlOjpSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZUVuYWJsZWQocGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUpOwog
Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBzZXNz
aW9uSUQgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7Ci0gICAgc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7Ci0KKyAgICBmb3IgKGF1
dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMp
IHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lv
bklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwog
I2VuZGlmCisgICAgICAgIGluaXRpYWxpemVTdG9yYWdlUXVvdGEoZGF0YVN0b3JlUGFyYW1ldGVy
cyk7CisgICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIGRhdGFTdG9y
ZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmxv
Y2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIFJlbW90ZU5ldHdv
cmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbigqdGhpcywgV1RGTW92
ZShkYXRhU3RvcmVQYXJhbWV0ZXJzKSk7CisgICAgfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQogICAgIGlmIChwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50KCkp
IHsKQEAgLTMyNiwxNCArMzI3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5l
dHdvcmtQcgogICAgICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlF
bmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAgICAgfQogI2VuZGlmCi0gICAgaW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKLQotICAgIG1fc3RvcmFnZU1h
bmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBh
dXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpOwotICAgIGF1dG8qIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IGRlZmF1
bHRTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGNvb2tpZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nv
b2tpZXMpCi0gICAgICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7
CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQog
ICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNDE5LDEyICs0
MTIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjCiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAgIGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuY2xlYXJDcmVkZW50aWFscygpOwot
ICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpKQotICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+
Y2xlYXJDcmVkZW50aWFscygpOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0KICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW10gKGF1dG8mIG5ldHdvcmtTZXNzaW9u
KSB7CiAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24ubmV0
d29ya1N0b3JhZ2VTZXNzaW9uKCkpCiAgICAgICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVu
dGlhbFN0b3JhZ2UoKS5jbGVhckNyZWRlbnRpYWxzKCk7CkBAIC00OTEsOCArNDc4LDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdAogdm9pZCBOZXR3b3JrUHJvY2Vz
czo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNo
b3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFz
ZSkKICNlbmRpZgogewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3Jh
Z2VTZXNzaW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5p
c05ld0VudHJ5KQogICAgICAgICByZXR1cm47CkBAIC01MjQsMjEgKzUwOSwxMSBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0CiAKIFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiogTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uKGNvbnN0IFBBTDo6U2Vz
c2lvbklEJiBzZXNzaW9uSUQpIGNvbnN0CiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICByZXR1cm4gJmRlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpOwogICAgIHJldHVybiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMuZ2V0KHNl
c3Npb25JRCk7CiB9CiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29ya1By
b2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb24pCi0gICAgICAgIG1fZGVmYXVsdE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiA9IHBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgcmV0
dXJuICptX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247Ci19Ci0KIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKT4mIGZ1bmN0b3IpCiB7Ci0gICAgZnVuY3Rv
cihkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSk7CiAgICAgZm9yIChhdXRvJiBzdG9yYWdlU2Vzc2lv
biA6IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy52YWx1ZXMoKSkKICAgICAgICAgZnVuY3Rvcigq
c3RvcmFnZVNlc3Npb24pOwogfQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuaAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyAr
MTY2LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7
CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3Qg
UEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4mJik7CkBAIC0zNDIsNyArMzQxLDYgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0OwogCiAgICAgdm9pZCB0ZXJtaW5hdGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHBs
YXRmb3JtVGVybWluYXRlKCk7CkBAIC00ODIsNyArNDgwLDYgQEAgcHJpdmF0ZToKIAogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1f
bmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vz
c2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8
U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjplCiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwogICAgIGVuY29kZXIgPDwgc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7CiAjZW5k
aWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGVuY29k
ZXIgPDwgZGF0YVN0b3JlUGFyYW1ldGVyczsKICNpZiBVU0UoU09VUCkKICAgICBlbmNvZGVyLmVu
Y29kZUVudW0oY29va2llQWNjZXB0UG9saWN5KTsKICAgICBlbmNvZGVyIDw8IGlnbm9yZVRMU0Vy
cm9yczsKQEAgLTEyMiwxMSArMTIyLDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAgICBPcHRpb25h
bDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7
Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIWRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQorICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycz4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiBk
YXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGlmICghZGF0YVN0b3JlUGFyYW1ldGVycykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9
IFdURk1vdmUoKmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKKyAgICByZXN1bHQuZGF0YVN0
b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAjaWYgVVNF
KFNPVVApCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmNvb2tpZUFjY2VwdFBv
bGljeSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCShyZXZpc2lvbiAyNTIy
NzQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RydWN0IE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIAogICAgIGJvb2wgc3RvcmFnZUFjY2Vzc0FQ
SUVuYWJsZWQ7CiAjZW5kaWYKIAotICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIGRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gZGF0YVN0b3JlUGFyYW1ldGVyczsKICAgICAKICNpZiBVU0UoU09VUCkKICAgICBIVFRQ
Q29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSB7IEhUVFBDb29raWVBY2NlcHRQ
b2xpY3k6OkFsd2F5c0FjY2VwdCB9OwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJT
b3VwLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgogI2luY2x1ZGUgPGxp
YnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTYyLDcgKzYzLDcgQEAgdm9pZCBX
ZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDbwogCiBIVFRQQ29va2llQWNjZXB0UG9s
aWN5IFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgp
CiB7Ci0gICAgc3dpdGNoIChzb3VwX2Nvb2tpZV9qYXJfZ2V0X2FjY2VwdF9wb2xpY3kobV9wcm9j
ZXNzLmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmNvb2tpZVN0b3JhZ2UoKSkpIHsKKyAgICBzd2l0
Y2ggKHNvdXBfY29va2llX2phcl9nZXRfYWNjZXB0X3BvbGljeShtX3Byb2Nlc3Muc3RvcmFnZVNl
c3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSktPmNvb2tpZVN0b3JhZ2Uo
KSkpIHsKICAgICBjYXNlIFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfQUxXQVlTOgogICAgICAgICBy
ZXR1cm4gSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNjZXB0OwogICAgIGNhc2UgU09V
UF9DT09LSUVfSkFSX0FDQ0VQVF9ORVZFUjoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0JKHJldmlz
aW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a1Byb2Nlc3NDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtODYsOSArODYsNiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBh
cmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5wYXJlbnRCdW5k
bGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgogI2VuZGlmCiAKICAgICBfQ0ZOZXR3b3JrU2V0QVRT
Q29udGV4dChwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKQEAgLTExNSwxMSAr
MTEyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgIFtO
U1VSTENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3
b3JrUHJvY2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVT
RShTT1VSQ0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCShy
ZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0
d29ya1Byb2Nlc3NDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogewogfQogCi1zdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBt
YWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFsbG93U3Bl
Y2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRp
ZmljYXRlSW5mbywgY29uc3QgU3RyaW5nJiBob3N0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5n
Q29udGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21h
Yy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTYwLDEwICs2MCw2IEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHQ6OmVuc3VyZVdlYnMKIAogICAgIG5ldHdvcmtQcm9jZXNzLmVuc3VyZVNlc3Npb24oc2Vzc2lv
bklELCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5n
TmV0d29ya1Nlc3Npb24sIG1ha2VTdHJpbmcoYmFzZSwgJy4nLCBzZXNzaW9uSUQudG9VSW50NjQo
KSksIFdURk1vdmUodWlQcm9jZXNzQ29va2llU3RvcmFnZSkpOwogCi0gICAgYXV0byogc2Vzc2lv
biA9IG5ldHdvcmtQcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgZm9yIChj
b25zdCBhdXRvJiBjb29raWUgOiBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzKQotICAgICAgICBz
ZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKLQogICAgIG5ldHdvcmtQcm9jZXNzLnNldFNlc3Np
b24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKG5ldHdvcmtQcm9jZXNzLCBXVEZN
b3ZlKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1By
b2Nlc3NTb3VwLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
NSwxMSArMTQ1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgog
ICAgIH0pOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykK
IHsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OnNldFNob3VsZElnbm9yZVRMU0Vycm9ycyhpZ25v
cmVUTFNFcnJvcnMpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCwxMyArNDAsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNv
ZGUoCiAgICAgZW5jb2RlciA8PCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2Rl
ciA8PCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNv
b2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nv
b2tpZXM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4
ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTgxLDEyICs3Nyw2IEBAIE9wdGlv
bmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWIKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxl
ID0gV1RGTW92ZSgqY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgT3B0
aW9uYWw8VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4+IHBlbmRpbmdDb29raWVzOwotICAgIGRlY29k
ZXIgPj4gcGVuZGluZ0Nvb2tpZXM7Ci0gICAgaWYgKCFwZW5kaW5nQ29va2llcykKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gV1RG
TW92ZSgqcGVuZGluZ0Nvb2tpZXMpOwotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAg
ICAgT3B0aW9uYWw8U3RyaW5nPiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgZGVjb2Rl
ciA+PiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CkBAIC05OSwxNCArODksNiBAQCBPcHRpb25h
bDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2ViCiAgICAgaWYgKCFpbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUg
PSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwot
ICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmlu
ZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgq
aW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlm
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAkocmV2aXNpb24g
MjUyMjc0KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTUgKzUxLDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2ll
U3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0
b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBl
bmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAg
IFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0
YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1
ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdl
cy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJPcHRpb25h
bENhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNp
bmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzksMjAgKzQwLDE1
IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jb25z
dCBjaGFyKiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkKK1dlYkNvb2tp
ZU1hbmFnZXJQcm94eSYgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKQogewotICAg
IHJldHVybiAiV2ViQ29va2llTWFuYWdlclByb3h5IjsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8V2ViQ29va2llTWFuYWdlclByb3h5PiBtYW5hZ2VyOworICAgIHJldHVybiBtYW5hZ2VyOwog
fQogCi1SZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNy
ZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6
OldlYkNvb2tpZU1hbmFnZXJQcm94eSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
Q29va2llTWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkK
LSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRl
eHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRo
aXMpOwogfQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHko
KQpAQCAtNjUsNDMgKzYxLDkgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxp
emVDbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4
dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVz
dHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChh
dXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2JzZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAg
IGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlclNldCkKLSAgICAgICAgICAgIG9ic2VydmVy
cy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQotICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBv
YnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5tYW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBB
U1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNz
UHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4
dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQ
STo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0g
ICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uSUQp
LCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFjdGl2aXR5
ID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzIl9zKV0oVmVjdG9yPFN0cmlu
Zz4mJiBob3N0bmFtZXMpIG11dGFibGUgewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKFdURk1v
dmUoaG9zdG5hbWVzKSk7CiAgICAgfSk7CkBAIC0xMDksMTcgKzcxLDE3IEBAIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXMKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQogewotICAgIHByb2Nlc3NQb29sKCktPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3Ru
YW1lcykpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklE
LCBob3N0bmFtZXMpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0
ZUFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29s
KCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQpKTsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Y29uc3QgQ29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFj
a0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Np
b25JRCwgY29va2llKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pLCBhY3Rpdml0eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rp
dml0eSgiV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUiX3MpXSgpIG11dGFibGUg
ewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgfSk7CkBAIC0xMjcsNyArODksNyBA
QCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llCiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIFdhbGxUaW1lIHRpbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNz
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxs
Q29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgW2NhbGxiYWNrRnVuY3Rpb24g
PSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBhY3Rpdml0eSA9IG5ldHdvcmtQcm9jZXNzLnRo
cm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxl
dGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSJfcyldKCkgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxi
YWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTEzNSw3ICs5Nyw3IEBAIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpkZWxldGVBbGxDb28KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2ll
PiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVz
KSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBhY3Rpdml0
eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzIl9zKV0oKSBtdXRhYmxlIHsKICAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbigpOwogICAgIH0pOwpAQCAtMTQzLDcgKzEwNSw3IEBAIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFAKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29v
a2llPiYgY29va2llcywgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3VtZW50VVJM
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBh
dXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1h
aW5Eb2N1bWVudFVSTCksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0
aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyJfcyldKCkgbXV0YWJsZSB7
CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTE1MSw3ICsxMTMsNyBA
QCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQCiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0
aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQp
LCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFjdGl2aXR5
ID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEFsbENvb2tpZXMiX3MpXShWZWN0b3I8Q29va2llPiYmIGNvb2tp
ZXMpIG11dGFibGUgewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKFdURk1vdmUoY29va2llcykp
OwogICAgIH0pOwpAQCAtMTU5LDcgKzEyMSw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRBbGxDb29raWUKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFtjYWxsYmFja0Z1
bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJv
Y2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6Z2V0Q29va2llcyJfcyldKFZlY3RvcjxDb29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CiAg
ICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oV1RGTW92ZShjb29raWVzKSk7CiAgICAgfSk7CkBAIC0x
NjcsMTIgKzEyOSwxMiBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyhQ
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0K
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9O
ZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCksIDApOwogfQogCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4mJiBjYWxsYmFjaykK
QEAgLTIyMywxNSArMTg1LDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNE
aWRDaAogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShQQUw6OlNlc3Npb25JRCwgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIGlmICghcHJvY2Vzc1Bvb2woKS0+aXNVc2luZ1Rlc3RpbmdOZXR3b3JrU2Vz
c2lvbigpKQotICAgICAgICBwZXJzaXN0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpOwot
I2VuZGlmCi0jaWYgVVNFKFNPVVApCi0gICAgcHJvY2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBD
b29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNlbmRpZgotCi0gICAgYXV0byYgbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8m
IG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAg
bmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtjYWxsYmFja0Z1bmN0aW9u
ID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50
aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeSJfcyldKCkgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxiYWNr
RnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTIzOSw3ICsxOTMsNyBAQCB2b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2V0SFRUUENvb2tpCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0g
ICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KCksIFtjYWxs
YmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3
b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSJfcyldKEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kgcG9saWN5KSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihwb2xpY3kp
OwogICAgIH0pOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdl
clByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2ll
TWFuYWdlclByb3h5LmgJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMSArNTYs
OSBAQCB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyCiB0eXBlZGVmIEdl
bmVyaWNDYWxsYmFjazxIVFRQQ29va2llQWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0UG9s
aWN5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiY+IEdldENvb2tpZXNDYWxsYmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFuYWdl
clByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2ll
TWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlciB7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpP
YmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6
Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBs
ZW1lbnROYW1lKCk7Ci0KLSAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3Jl
YXRlKFdlYlByb2Nlc3NQb29sKik7CisgICAgc3RhdGljIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYg
c2luZ2xldG9uKCk7CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdlclByb3h5KCk7CiAKICAg
ICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSop
OwpAQCAtMTA0LDE3ICsxMDIsMTEgQEAgcHVibGljOgogICAgIHVzaW5nIEFQSTo6T2JqZWN0Ojpk
ZXJlZjsKIAogcHJpdmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bv
b2wqKTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKKyAgICBmcmllbmQgTmV2ZXJEZXN0
cm95ZWQ8V2ViQ29va2llTWFuYWdlclByb3h5PjsKIAogICAgIHZvaWQgY29va2llc0RpZENoYW5n
ZShQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAotICAgIHZv
aWQgcHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRD
bG9zZShXZWJQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9z
ZShOZXR3b3JrUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJDb250ZXh0
U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVu
dCgpIG92ZXJyaWRlOwotCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lkIGRp
ZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRl
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCShy
ZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw2ICsyMTYsMTEgQEAgc3RhdGljIEhhc2hTZXQ8
U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdAogICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxT
dHJpbmc+IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxl
cnMoKQoreworICAgIHJldHVybiBjb3B5VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0
b21Qcm90b2NvbEhhbmRsZXJzKCkpOworfQorCiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bv
b2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBt
X2NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdl
R3JvdXAoV2ViUGFnZUdyb3VwOjpjcmVhdGUoKSkKQEAgLTIyMyw3ICsyMjgsNiBAQCBXZWJQcm9j
ZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jCiAgICAgLCBtX2F1dG9tYXRpb25DbGll
bnQobWFrZVVuaXF1ZTxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2Fk
Q2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlz
dG9yeUNsaWVudChtYWtlVW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkp
Ci0gICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZp
c2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgpKQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGln
aFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFu
Y2VHcmFwaGljc1VzYWdlU2FtcGxlcj4oKnRoaXMpKQpAQCAtMjY2LDcgKzI3MCw2IEBAIFdlYlBy
b2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2MKICAgICBhZGRNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlz
KTsKIAogICAgIC8vIE5PVEU6IFRoZXNlIHN1Yi1vYmplY3RzIG11c3QgYmUgaW5pdGlhbGl6ZWQg
YWZ0ZXIgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuLgotICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2Vy
UHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+
KCk7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCkBAIC0zMTcsOSArMzIwLDYgQEAgV2ViUHJv
Y2Vzc1Bvb2w6On5XZWJQcm9jZXNzUG9vbCgpCiAgICAgcHJvY2Vzc1Bvb2xDb3VudGVyLmRlY3Jl
bWVudCgpOwogI2VuZGlmCiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2h1dERvd25Qcm9jZXNzKCk7Ci0KICNpZiBFTkFCTEUoR0FNRVBBRCkK
ICAgICBpZiAoIW1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFkcy5pc0VtcHR5KCkpCiAgICAgICAgIFVJ
R2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5wcm9jZXNzUG9vbFN0b3BwZWRVc2luZ0dhbWVw
YWRzKCp0aGlzKTsKQEAgLTM3NywxNiArMzc3LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0
QXV0b21hdGlvbkNsaWVudAogICAgICAgICBtX2F1dG9tYXRpb25DbGllbnQgPSBXVEZNb3ZlKGF1
dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRMZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLXsKLSNpZiBF
TkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQotICAgIGlmICghY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9IFdURk1vdmUoY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgotfQotCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9z
dG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IGVuYWJsZWQ7CkBAIC00MDYsNyArMzk2LDcgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudAogCiBJUEM6OkNvbm5lY3Rpb24q
IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKQogewotICAgIHJl
dHVybiBtX25ldHdvcmtQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNvbm5lY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCkBAIC00MTgsOCArNDA4LDcg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9B
bGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXND
aGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSkpOwogI2lmIFVTRShTT1VQKQotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclBy
ZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOwogI2VuZGlmCiB9CiAKQEAg
LTQ1NywyMDMgKzQ0NiwxMyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzY3JlZW5Qcm9wZXJ0aWVz
U3RhCiAjZW5kaWYKIH0KIAotTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmVu
c3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3Jl
KQorTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKFdlYnNpdGVEYXRhU3RvcmUqKQogewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3Ig
YXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCi0gICAgLy8gV2Ugc2hv
dWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNr
IG9uIG91ciBBUElzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDAyNDYuCi0gICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgewotICAgICAgICBjYWxs
T25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0gewotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgfSk7Ci0g
ICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykgewotICAgICAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVE
YXRhU3RvcmUpKTsKLSAgICAgICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRp
bmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNz
OwotICAgIH0KLQotICAgIGF1dG8gbmV0d29ya1Byb2Nlc3MgPSBtYWtlVW5pcXVlPE5ldHdvcmtQ
cm9jZXNzUHJveHk+KCp0aGlzKTsKLQotICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzIHBhcmFtZXRlcnM7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBj
b3B5VG9WZWN0b3IobV93ZWJzaXRlRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLSAgICAg
ICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
ciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+c291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVy
KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllciA9
IG1fd2Vic2l0ZURhdGFTdG9yZS0+c291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVy
KCk7Ci0jZW5kaWYKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JraW5nSGFzQmVn
dW4oKTsKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxT
ZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRvJiBzY2hl
bWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAg
ICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBl
bmQoc2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5nIGNvb2tp
ZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9y
eSgpOwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdl
YlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb250
YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0KLSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBh
cmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0b3J5Lmlz
RW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1
bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRl
cnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRl
bXBvcmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdy
aXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAg
ICBwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6
OnNpbmdsZXRvbigpLmhzdHNTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJz
LmhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5oc3RzU3RvcmFn
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0KLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5
VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lz
dGVyQXNTZWN1cmUoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlw
YXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNl
Y3VyaXR5UG9saWN5KCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xv
Y2FsID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hl
bWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotICAgIC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90
IGNoYW5nZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24g
ZGlzayB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRh
cjovL3Byb2JsZW0vMTc0NTQ3MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1l
dGVycygpLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5Lmlz
RW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFk
V3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgfQot
I2VuZGlmCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKG1fd2Vic2l0ZURh
dGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5ID0gIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGxvY2FsU3Rv
cmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+
cmVzb2x2ZWRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAo
IWxvY2FsU3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0g
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7
Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7Ci0gICAgaWYg
KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAg
ICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwotCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYm9vbCBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91bGRJbmNsdWRl
TG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUgPSBmYWxzZTsKLSAgICBib29sIGVuYWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2lu
ZyA9IGZhbHNlOwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIG1hbnVhbFByZXZhbGVu
dFJlc291cmNlIHsgfTsKLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5n
RXZlbnQgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFj
aygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7
Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IHdpdGhXZWJzaXRl
RGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAg
ICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5z
aG91bGRJbmNsdWRlTG9jYWxob3N0SW5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotICAgICAgICAg
ICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5lbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlOwotICAgICAg
ICAgICAgZW5hYmxlVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nID0gbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmVuYWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2luZzsKLSAgICAgICAgICAgIG1hbnVh
bFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1
b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlP
cmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9y
aWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICAKLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29y
a0NhY2hlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0Nh
Y2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVs
bCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3Jr
Q2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3Jp
dGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRp
ZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAg
ICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBh
cmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJ
bmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVM
b2NhbGhvc3RJblJlc291cmNlTG9hZFN0YXRpc3RpY3M7Ci0gICAgICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGU7Ci0gICAgICAgICAgICBlbmFibGVU
aGlyZFBhcnR5Q29va2llQmxvY2tpbmcgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxl
VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVz
b3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVv
dGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEo
KTsKLQotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlm
ICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5u
ZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBT
YW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICAg
ICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHREYXRhU3RvcmUoKS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAg
YXV0byBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0
d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9y
eSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
ICAgIH0KLQotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVz
dGluZ0V2ZW50OwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3RJblJlc291cmNlTG9h
ZFN0YXRpc3RpY3MgPSBzaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmVuYWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2luZyA9
IGVuYWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2luZzsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBtYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZTsKLQotICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVycwotICAgIHBs
YXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwotCi0gICAgLy8gSW5p
dGlhbGl6ZSB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRl
cnMpLCAwKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdvcmtQcm9jZXNzTGF0ZW5jeVFP
UygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDApOwotI2VuZGlmCi0KLSAgICBu
ZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwotCi0gICAgaWYgKHdpdGhX
ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1h
a2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0
b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRo
ZSBuZXR3b3JrIHByb2Nlc3Mga25vd3MgYWJvdXQgYWxsIHRoZSBzZXNzaW9ucyB0aGF0IGhhdmUg
YmVlbiByZWdpc3RlcmVkIGJlZm9yZSBpdCBzdGFydGVkLgotICAgIGZvciAoYXV0byYgc2Vzc2lv
bklEIDogbV9zZXNzaW9uVG9QYWdlSURzTWFwLmtleXMoKSkgewotICAgICAgICBpZiAoYXV0byog
d2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERh
dGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPmFkZFNlc3Npb24oKndlYnNpdGVEYXRhU3RvcmUpOwotICAgIH0KLQotICAgIG1fbmV0d29y
a1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdvcmtQcm9jZXNzKTsKLSAgICByZXR1cm4gKm1fbmV0d29y
a1Byb2Nlc3M7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwog
fQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1By
b2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSwgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHk+PiYmIHBlbmRpbmdSZXBsaWVzKQordm9pZCBX
ZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkm
IG5ldHdvcmtQcm9jZXNzUHJveHkpCiB7Ci0gICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwot
ICAgIEFTU0VSVCgmbmV0d29ya1Byb2Nlc3NQcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgp
KTsKLQogICAgIGZvciAoYXV0byYgc3VwcGxlbWVudCA6IG1fc3VwcGxlbWVudHMudmFsdWVzKCkp
CiAgICAgICAgIHN1cHBsZW1lbnQtPnByb2Nlc3NEaWRDbG9zZSgmbmV0d29ya1Byb2Nlc3NQcm94
eSk7CiAKQEAgLTY2MiwxNiArNDYxLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1By
b2Nlc3NDcmFzaAogICAgIGlmIChtX2F1dG9tYXRpb25TZXNzaW9uKQogICAgICAgICBtX2F1dG9t
YXRpb25TZXNzaW9uLT50ZXJtaW5hdGUoKTsKIAotICAgIC8vIExlYXZlIHRoZSBwcm9jZXNzIHBy
b3h5IGFyb3VuZCBkdXJpbmcgY2xpZW50IGNhbGwsIHNvIHRoYXQgdGhlIGNsaWVudCBjb3VsZCBx
dWVyeSB0aGUgcHJvY2VzcyBpZGVudGlmaWVyLgotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxs
cHRyOwotCi0gICAgLy8gQXR0ZW1wdCB0byByZS1sYXVuY2guCi0gICAgaWYgKHBlbmRpbmdSZXBs
aWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8mIG5ld05ldHdvcmtQcm9j
ZXNzID0gZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBmb3IgKGF1dG8mIHJlcGx5IDogcGVu
ZGluZ1JlcGxpZXMpCi0gICAgICAgIG5ld05ldHdvcmtQcm9jZXNzLmdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigqcmVwbHkuZmlyc3QsIFdURk1vdmUocmVwbHkuc2Vjb25kKSk7Ci0KICNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgd2hpbGUgKCFtX3NlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMuaXNFbXB0eSgpKQogICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYmVnaW4oKS0+
dmFsdWUtPmRpc2FibGVTZXJ2aWNlV29ya2VycygpOwpAQCAtNjgwLDE3ICs0NjksMTIgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaAogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9j
ZXNzUHJveHksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCiB7Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0KLSAgICBtX25ldHdvcmtQcm9j
ZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3Zl
KHJlcGx5KSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZ2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOwogfQog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJs
aXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNz
UHJveHkmIHByb3h5LCBSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5
ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgYXV0byogd2Vic2l0ZURhdGFTdG9y
ZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Np
b25JRChzZXNzaW9uSUQpOwogCiAgICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7CkBAIC0xMjc0
LDEwICsxMDU4LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaQog
ICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogICAgIGlmIChzZXNz
aW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewogICAgICAgICBB
U1NFUlQoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IGRhdGFTdG9yZS5wYXJhbWV0ZXJzKCku
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCA9PSBzZXNzaW9uSUQpOwotICAgICAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFTdG9yZSkpOwotICAgICAgICAgICAgZGF0YVN0b3JlLmNs
ZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQorICAgICAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5hZGRTZXNzaW9uKG1ha2VSZWYoZGF0YVN0b3JlKSk7CiAgICAgfQog
fQogCkBAIC0xNDE5LDcgKzEyMDAsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1
Z2lucygpCiAKIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKCkKIHsKLSAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2VzcyA/IG1fbmV0d29ya1Byb2Nlc3Mt
PnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOworICAgIHJldHVybiBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5wcm9jZXNzSWRlbnRpZmllcigpOwogfQogCiBQcm9jZXNzSUQgV2ViUHJv
Y2Vzc1Bvb2w6OnByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyKCkKQEAgLTE1NzAsMTYgKzEzNTEs
MTMgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZQogCiAgICAgc2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hl
TW9kZWwpKTsKIAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNo
ZU1vZGVsLCB7IH0pLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsLCB7
IH0pLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9u
b3VzbHlGb3JUZXN0aW5nKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIHsKICAgICB1cGRhdGVCYWNr
Rm9yd2FyZENhY2hlQ2FwYWNpdHkoKTsKLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7
IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5n
KGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERl
ZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCkBAIC0x
NTg5LDcgKzEzNjcsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRp
CiAKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKIHsKLSAgICBhdXRvJiBkb3dubG9hZFBy
b3h5ID0gZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9y
ZSwgcmVxdWVzdCk7CisgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1ZXN0KTsKICAg
ICBkb3dubG9hZFByb3h5LnNldE9yaWdpbmF0aW5nUGFnZShvcmlnaW5hdGluZ1BhZ2UpOwogICAg
IHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTY2NywyNSArMTQ0NSwxMSBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAotdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6dXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkKLXsKLSAgICBBU1NFUlQo
bV9wcm9jZXNzZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fbmV0d29ya1Byb2Nlc3MpOwot
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
bV9wcm9jZXNzZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3VsZFVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiA9IHRydWU7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1By
b2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2Fy
ZDxVPihyZXBseSksIDApOworICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5jYW5TZW5kTWVzc2FnZSgpKQorICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihy
ZXBseSksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKQEAgLTE2OTUsOCArMTQ1OSw2IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEFsbG93c0FueVNTTENlcnQKIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKCksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCkBAIC0xNzA1LDI0ICsxNDY3LDE0IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm8KICAgICB3aGlsZSAoIW1fc2Vy
dmljZVdvcmtlclByb2Nlc3Nlcy5pc0VtcHR5KCkpCiAgICAgICAgIG1fc2VydmljZVdvcmtlclBy
b2Nlc3Nlcy5iZWdpbigpLT52YWx1ZS0+ZGlzYWJsZVNlcnZpY2VXb3JrZXJzKCk7CiAjZW5kaWYK
LQotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBu
dWxscHRyOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxs
U3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3Jr
UHJvY2Vzc0RpZFJlc3VtZSgpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKQpAQCAtMTc0Nywx
NSArMTQ5OSwxNCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzeW5jTG9jYWxTdG9yYWdlKENvCiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9y
YWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxT
dG9yYWdlKCksIDApOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2Fs
U3RvcmFnZSgpLCAwKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2Vi
Q2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBob3N0KQogewogICAg
IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9z
dChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZp
Y2F0ZUluZm8oKSwgaG9zdCksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVB
dXRvbWF0aW9uQ2FwYWJpbGl0aWVzKCkgY29uc3QKQEAgLTIyODEsMTAgKzIwMzIsNyBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpjbGVhckN1cnJlbnRNb2RpZmllCiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENyb3NzU2l0
ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b0Rv
bWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6OkZsYWc+IG5h
dmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFnZVByb3h5
SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKIHsKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nl
c3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRpZENvbW1pdENy
b3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25JRCwgZnJvbURvbWFpbiwgdG9Eb21h
aW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQpOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmRpZENvbW1pdENyb3NzU2l0ZUxv
YWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25JRCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmln
YXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQpOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3RpbmcoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiB0aGlyZFBhcnR5RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9u
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yMzEw
LDggKzIwNTgsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRXZWJQcm9jZXNzSGFzVXBsCiAg
ICAgaWYgKG1fcHJvY2Vzc2VzV2l0aFVwbG9hZHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIFJFTEVB
U0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiVGhlIG51bWJlciBvZiB1cGxvYWRzIGluIHByb2dy
ZXNzIGlzIG5vdyBvbmUuIFRha2luZyBOZXR3b3JraW5nIGFuZCBVSSBwcm9jZXNzIGFzc2VydGlv
bnMuIik7CiAKLSAgICAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotICAgICAgICBtX25l
dHdvcmtQcm9jZXNzLT50YWtlVXBsb2FkQXNzZXJ0aW9uKCk7CisgICAgICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnRha2VVcGxvYWRBc3NlcnRpb24oKTsKICAgICAgICAgCiAg
ICAgICAgIEFTU0VSVCghbV91aVByb2Nlc3NVcGxvYWRBc3NlcnRpb24pOwogICAgICAgICBtX3Vp
UHJvY2Vzc1VwbG9hZEFzc2VydGlvbiA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4oZ2V0
Q3VycmVudFByb2Nlc3NJRCgpLCAiV2ViS2l0IHVwbG9hZHMiX3MsIEFzc2VydGlvblN0YXRlOjpV
bmJvdW5kZWROZXR3b3JraW5nKTsKQEAgLTIzMzYsOCArMjA4Myw3IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmNsZWFyV2ViUHJvY2Vzc0hhc1UKICAgICBpZiAobV9wcm9jZXNzZXNXaXRoVXBsb2Fk
cy5pc0VtcHR5KCkpIHsKICAgICAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJU
aGUgbnVtYmVyIG9mIHVwbG9hZHMgaW4gcHJvZ3Jlc3MgaXMgbm93IHplcm8uIFJlbGVhc2luZyBO
ZXR3b3JraW5nIGFuZCBVSSBwcm9jZXNzIGFzc2VydGlvbnMuIik7CiAKLSAgICAgICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5jbGVhclVwbG9h
ZEFzc2VydGlvbigpOworICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5j
bGVhclVwbG9hZEFzc2VydGlvbigpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKG1fdWlQcm9j
ZXNzVXBsb2FkQXNzZXJ0aW9uKTsKICAgICAgICAgbV91aVByb2Nlc3NVcGxvYWRBc3NlcnRpb24g
PSBudWxscHRyOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5o
CShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw2IEBAIE9CSkNfQ0xBU1MgTlNTdHJp
bmc7CiAKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXV0b21hdGlvbkNsaWVudDsKLWNsYXNzIEN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKIGNsYXNzIERvd25sb2FkQ2xpZW50OwogY2xhc3Mg
SFRUUENvb2tpZVN0b3JlOwogY2xhc3MgSW5qZWN0ZWRCdW5kbGVDbGllbnQ7CkBAIC0xNzQsNyAr
MTczLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGlzdG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4mJik7CiAgICAgdm9pZCBzZXREb3du
bG9hZENsaWVudChVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4mJik7CiAgICAgdm9pZCBz
ZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+
JiYpOwotICAgIHZvaWQgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6
dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJik7CiAKICAgICB2
b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJp
bmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRl
bnRpZmllcigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+Y3VzdG9tV2ViQ29udGVudFNlcnZp
Y2VCdW5kbGVJZGVudGlmaWVyKCk7IH0KQEAgLTMwNCw4ICszMDIsNiBAQCBwdWJsaWM6CiAgICAg
QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJu
ICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJDb250ZXh0Q2xpZW50JiBjbGllbnQoKSB7IHJl
dHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQm
IGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIGNvbnN0IHsgcmV0dXJuICptX2N1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAgICAgc3RydWN0IFN0YXRpc3RpY3MgewogICAgICAg
ICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAgICAgICAgdW5zaWduZWQgd2tQYWdlQ291bnQ7CkBA
IC0zMTMsOSArMzA5LDYgQEAgcHVibGljOgogICAgIH07CiAgICAgc3RhdGljIFN0YXRpc3RpY3Mm
IHN0YXRpc3RpY3MoKTsgICAgCiAKLSAgICB2b2lkIHVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigp
OwotICAgIGJvb2wgaXNVc2luZ1Rlc3RpbmdOZXR3b3JrU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uOyB9Ci0KICAgICB2b2lkIHNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wpOwogCiAgICAgdm9pZCBjbGVhckNh
Y2hlZENyZWRlbnRpYWxzKCk7CkBAIC0zODIsOCArMzc1LDggQEAgcHVibGljOgogCiAgICAgLy8g
TmV0d29yayBQcm9jZXNzIE1hbmFnZW1lbnQKICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBlbnN1
cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSA9
IG51bGxwdHIpOwotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzKCkgeyBy
ZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKTsgfQotICAgIHZvaWQgbmV0d29ya1Byb2Nlc3ND
cmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxXZWJQ
cm9jZXNzUHJveHk+LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb25EZWxheWVkUmVwbHk+PiYmKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBu
ZXR3b3JrUHJvY2VzcygpIHsgcmV0dXJuICZOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KTsgfQorICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkm
KTsKIAogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94
eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bkRlbGF5ZWRSZXBseSYmKTsKIApAQCAtNTI4LDYgKzUyMSw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7CiAgICAgYm9vbCB1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV91c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9CiAKKyAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwor
ICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFu
ZGxlcnMoKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCkBA
IC01NDMsOCArNTM5LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVxdWVzdFdlYkNvbnRlbnRT
dGF0aXN0aWNzKFN0YXRpc3RpY3NSZXF1ZXN0Jik7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlh
bGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0K
ICAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRs
ZVN5bmNocm9ub3VzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVXNlckRhdGEmJik+JiYpOwogCkBAIC02MjcsNyArNjIxLDYgQEAgcHJpdmF0ZToKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1dG9tYXRpb25DbGllbnQ7
CiAgICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+IG1faGlz
dG9yeUNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogCiAgICAgUmVmUHRyPFdl
YkF1dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwogCkBAIC02OTQsOCArNjg3
LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkIHsg
dHJ1ZSB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0
d29ya1Byb2Nlc3M7Ci0KICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RGljdGlvbmFyeUNh
bGxiYWNrPj4gbV9kaWN0aW9uYXJ5Q2FsbGJhY2tzOwogICAgIEhhc2hNYXA8dWludDY0X3QsIFJl
ZlB0cjxTdGF0aXN0aWNzUmVxdWVzdD4+IG1fc3RhdGlzdGljc1JlcXVlc3RzOwogCkBAIC03OTUs
MTUgKzc4NiwxNSBAQCBwcml2YXRlOgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNzYWdlKQogewotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkp
Ci0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2Up
LCAwKTsKKyAgICBpZiAoTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuY2FuU2VuZE1l
c3NhZ2UoKSkKKyAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChz
dGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lm
TmVjZXNzYXJ5KFQmJiBtZXNzYWdlKQogewogICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0g
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoc3RkOjpmb3J3YXJkPFQ+
KG1lc3NhZ2UpLCAwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCShyZXZp
c2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsNiBAQCBuYW1lc3BhY2UgQVBJ
IHsKIEhUVFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKICAgICA6IG1fb3duaW5nRGF0YVN0b3JlKHdlYnNpdGVE
YXRhU3RvcmUpCiB7Ci0gICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JD
b29raWVTdG9yYWdlT3BlcmF0aW9ucygpKQotICAgICAgICByZWdpc3RlckZvck5ld1Byb2Nlc3NQ
b29sTm90aWZpY2F0aW9ucygpOwogfQogCiBIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3Rv
cmUoKQpAQCAtNDksMTAyICs0Nyw0NCBAQCBIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3Rv
cmUoKQogICAgIEFTU0VSVChtX29ic2VydmVycy5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCghbV9v
YnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSk7CiAgICAgQVNTRVJUKCFtX2Nvb2tpZU1hbmFnZXJQ
cm94eU9ic2VydmVyKTsKLQotICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMoKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bv
b2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAg
ICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBhbGxDb29raWVzOwotICAgICAgICBpZiAobV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpCi0gICAgICAgICAgICBhbGxDb29raWVzID0gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nv
b2tpZVN0b3JlQ29va2llcygpOwotICAgICAgICBhbGxDb29raWVzLmFwcGVuZFZlY3RvcihtX293
bmluZ0RhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBhbGxDb29raWVzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKGFsbENvb2tpZXMpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmdldEFsbENvb2tpZXMobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8
V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFu
YWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBj
b29raWVNYW5hZ2VyLmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoY29va2llcyk7CiAgICAgfSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0
b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0
byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VP
cGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY29va2ll
IDogY29va2llcykgewotICAgICAgICAgICAgLy8gRklYTUU6IHBlbmRpbmdDb29raWVzIHVzZWQg
Zm9yIGRlZmF1bHRTZXNzaW9uIGJlY2F1c2Ugc2Vzc2lvbiBjb29raWVzIGNhbm5vdCBiZSBwcm9w
YWdhdGVkIHRvIE5ldHdvcmsgUHJvY2VzcyB3aXRoIHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVu
dGlmaWVyLgotICAgICAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9
PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikK
LSAgICAgICAgICAgICAgICBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShj
b29raWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0
b3JlLT5hZGRQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZXMsIFtw
b29sID0gV1RGTW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2Vy
LnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWVzLCBbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgfSk7CiB9CiAKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpkZWxldGVDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
KiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9w
ZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpICYm
ICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgIGRlbGV0ZUNvb2tpZUZyb21EZWZhdWx0VUlQ
cm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9v
d25pbmdEYXRhU3RvcmUtPnJlbW92ZVBlbmRpbmdDb29raWUoY29va2llKTsKLQotICAgICAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBj
b29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWUobV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFtwb29sID0gV1RGTW92ZShwb29sKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICBh
dXRvJiBjb29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmds
ZXRvbigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgY29va2llLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
ICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8q
IHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgZGVsZXRlQ29va2ll
c0luRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVB
bGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgYXV0byYgY29v
a2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsK
KyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNl
c3Npb25JRCgpKTsKICAgICAvLyBGSVhNRTogVGhlIENvbXBsZXRpb25IYW5kbGVyIHNob3VsZCBi
ZSBwYXNzZWQgdG8gV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzLgogICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdlYktp
dDo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRh
U3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAo
IXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNF
cGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1
bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xpY3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwg
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFi
bGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2llTWFuYWdlci5zZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgfSk7CiB9CkBAIC0xODIsMjEgKzEyMiw3IEBA
IHZvaWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKE8KIAogICAgIG1fY29va2ll
TWFuYWdlclByb3h5T2JzZXJ2ZXIgPSBtYWtlVW5pcXVlPEFQSVdlYkNvb2tpZU1hbmFnZXJQcm94
eU9ic2VydmVyPigqdGhpcyk7CiAKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUt
PnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLQotICAgIGlmICghcG9v
bCkgewotICAgICAgICBBU1NFUlQoIW1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyk7Ci0KLSAg
ICAgICAgLy8gTGlzdGVuIGZvciBjb29raWUgbm90aWZpY2F0aW9ucyBpbiB0aGUgVUlQcm9jZXNz
IGluIHRoZSBtZWFudGltZS4KLSAgICAgICAgc3RhcnRPYnNlcnZpbmdDaGFuZ2VzVG9EZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmUoW3RoaXNdICgpIHsKLSAgICAgICAgICAgIGNvb2tpZXNEaWRD
aGFuZ2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29r
aWVzID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmV2ViS2l0OjpX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG1fb2JzZXJ2ZWRDb29raWVN
YW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKQEAgLTIzMSw0NiArMTU3
LDEwIEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRGlkQ2hhbmdlKCkKIHZvaWQgSFRU
UENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKCkKIHsKICAgICBtX29ic2VydmVk
Q29va2llTWFuYWdlclByb3h5LT51bnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAgbV9vYnNl
cnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG51bGxwdHI7Ci0KLSAgICBhdXRvKiBwb29sID0gbV9v
d25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsK
LQotICAgIGlmICghcG9vbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vYnNlcnZlZENvb2tp
ZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1h
bmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIAotdm9pZCBIVFRQQ29va2ll
U3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBB
U1NFUlQoIW1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBt
X3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSBXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIoW3RoaXNdKFdlYlByb2Nlc3NQb29s
JiBuZXdQcm9jZXNzUG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5pc0Fz
c29jaWF0ZWRQcm9jZXNzUG9vbChuZXdQcm9jZXNzUG9vbCkpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgLy8gTm93IHRoYXQgYW4gYXNzb2NpYXRlZCBwcm9jZXNzIHBvb2wgZXhpc3Rz
LCB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBVSSBwcm9jZXNzIGNvb2tpZSBzdG9yZQotICAgICAgICAv
LyB0byBtYWtlIHN1cmUgYW55IGNoYW5nZXMgYXJlIHJlZmxlY3RlZCB3aXRoaW4gdGhlIG5ldyBw
cm9jZXNzIHBvb2wuCi0gICAgICAgIGZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7
Ci0gICAgICAgIG5ld1Byb2Nlc3NQb29sLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0KLSAgICAg
ICAgaWYgKG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpIHsKLSAgICAgICAgICAgIG1fb2Jz
ZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBuZXdQcm9jZXNzUG9vbC5zdXBwbGVtZW50PFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tp
ZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lv
bklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICAgICAgfQotICAgICAg
ICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgSFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCkKLXsKLSAgICBpZiAobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVu
dGlmaWVyKQotICAgICAgICBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3RlclByb2Nlc3NQb29sQ3Jl
YXRpb25MaXN0ZW5lcihtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwot
Ci0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gMDsKLX0KLQog
I2lmICFQTEFURk9STShDT0NPQSkKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmbHVzaERlZmF1bHRV
SVByb2Nlc3NDb29raWVTdG9yZSgpIHsgfQogVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gSFRUUENv
b2tpZVN0b3JlOjpnZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCkgeyBy
ZXR1cm4geyB9OyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENv
b2tpZVN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUhUVFBDb29raWVTdG9yZS5oCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkg
KzgwLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7Ci0KICAgICBzdGF0aWMgdm9pZCBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29r
aWVTdG9yZSgpOwogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBnZXRBbGxEZWZh
dWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Q29v
a2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJl
dmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNiw5ICs0MjYsOSBAQCB2b2lkIFdLQ29udGV4dFBy
ZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRlCiB7CiB9CiAKLVdLQ29va2llTWFuYWdlclJlZiBXS0Nv
bnRleHRHZXRDb29raWVNYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQorV0tDb29raWVN
YW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmKQogewotICAg
IHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0FQSSgmV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpKTsKIH0K
IAogV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tD
b250ZXh0UmVmKQpAQCAtNTQ1LDkgKzU0NSw4IEBAIHZvaWQgV0tDb250ZXh0U2V0SmF2YVNjcmlw
dEdhcmJhZ2VDb2xsZWMKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNj
cmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0Nv
bnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpCit2b2lk
IFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYpCiB7Ci0gICAg
V2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwogfQog
CiB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVz
dGluZyhXS0NvbnRleHRSZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiAy
NTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250
ZXh0U2V0QWxsb3dzQW55U1NMQwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55
U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wp
OwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBzZWNvbmRhcnkg
cHJvY2Vzc2VzIGFyZSBzdGFydGVkLgotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VXNlVGVzdGlu
Z05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKK1dLX0VYUE9SVCB2b2lkIFdL
Q29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tf
Q19BUElfREVQUkVDQVRFRDsKIAogLy8gVGVzdCBvbmx5LiBTaG91bGQgYmUgY2FsbGVkIGJlZm9y
ZSBydW5uaW5nIGEgdGVzdC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENsZWFyQ2FjaGVkQ3Jl
ZGVudGlhbHMoV0tDb250ZXh0UmVmIGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0JKHJldmlzaW9uIDI1MjI3
NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMjYgKzIwMCw4IEBAIC0gKHZvaWQpX3NldENhbkhhbmRs
ZUhUVFBTU2VydmVyVHJ1c3RFdmEKIHsKIH0KIAotc3RhdGljIFdlYktpdDo6SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3koTlNIVFRQQ29va2llQWNjZXB0UG9s
aWN5IHBvbGljeSkKLXsKLSAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PE5TVUludGVnZXI+KHBvbGlj
eSkpIHsKLSAgICBjYXNlIE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5czoKLSAgICAgICAg
cmV0dXJuIFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNjZXB0OwotICAg
IGNhc2UgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5TmV2ZXI6Ci0gICAgICAgIHJldHVybiBXZWJL
aXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6Ok5ldmVyOwotICAgIGNhc2UgTlNIVFRQQ29va2ll
QWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW46Ci0gICAgICAgIHJldHVybiBX
ZWJLaXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6Ok9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWlu
OwotICAgIGNhc2UgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRv
Y3VtZW50RG9tYWluOgotICAgICAgICByZXR1cm4gV2ViS2l0OjpIVFRQQ29va2llQWNjZXB0UG9s
aWN5OjpFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW47Ci0gICAgfQotCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBv
bGljeTo6QWx3YXlzQWNjZXB0OwotfQotCiAtICh2b2lkKV9zZXRDb29raWVBY2NlcHRQb2xpY3k6
KE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSlwb2xpY3kKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnN1
cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgdG9IVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKIH0KIAogLSAoaWQpX29iamVjdEZv
ckJ1bmRsZVBhcmFtZXRlcjooTlNTdHJpbmcgKilwYXJhbWV0ZXIKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIu
Y3BwCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsOCArNjMsNyBA
QCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKIAogICAgIH5fV2ViS2l0Q29v
a2llTWFuYWdlclByaXZhdGUoKQogICAgIHsKLSAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhkYXRhTWFuYWdlcikp
Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOwor
ICAgICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tpZU9ic2Vy
dmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOwogICAgIH0KIAogICAgIFdlYktpdFdl
YnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbmFnZXI7CkBAIC0xNDAsMTEgKzEzOSw5IEBAIFdlYktp
dENvb2tpZU1hbmFnZXIqIHdlYmtpdENvb2tpZU1hbmFnZXIKIHsKICAgICBXZWJLaXRDb29raWVN
YW5hZ2VyKiBtYW5hZ2VyID0gV0VCS0lUX0NPT0tJRV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJL
SVRfVFlQRV9DT09LSUVfTUFOQUdFUiwgbnVsbHB0cikpOwogICAgIG1hbmFnZXItPnByaXYtPmRh
dGFNYW5hZ2VyID0gZGF0YU1hbmFnZXI7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRh
TWFuYWdlcikpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFu
YWdlclByb3h5PigpLT5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCBbbWFuYWdlcl0gewotICAgICAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2Vy
LCBzaWduYWxzW0NIQU5HRURdLCAwKTsKLSAgICAgICAgfSk7Ci0gICAgfQorICAgIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5h
Z2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW21hbmFnZXJdIHsKKyAgICAgICAgZ19zaWduYWxfZW1p
dChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAwKTsKKyAgICB9KTsKICAgICByZXR1cm4gbWFu
YWdlcjsKIH0KIApAQCAtMTc0LDggKzE3MSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X3NldF9wZXJzaXN0ZW4KICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0
YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxl
bmFtZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZShzdG9yYWdlKSk7CisgICAg
V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5zZXRDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE4OSw4ICsxODUs
NyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvCiB7CiAgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOwogCi0gICAg
Zm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nl
c3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmds
ZXRvbigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklE
KCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CiB9CiAKIC8q
KgpAQCAtMjExLDE0ICsyMDYsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNj
ZXB0X3BvCiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXco
bWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwogCi0gICAgLy8gVGhl
IHBvbGljeSBpcyB0aGUgc2FtZSBpbiBhbGwgcHJvY2VzcyBwb29scyBoYXZpbmcgdGhlIHNhbWUg
c2Vzc2lvbiBJRCwgc28ganVzdCBhc2sgYW55LgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29s
cyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2
LT5kYXRhTWFuYWdlcik7Ci0gICAgaWYgKHByb2Nlc3NQb29scy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQoKSwgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUND
RVBUX05PX1RISVJEX1BBUlRZKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHByb2Nl
c3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldEhUVFBD
b29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKKyAgICBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5n
ZXQoKSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBA
IC0yNjMsMTEgKzI1MSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUo
V2UKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0
YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNr
LCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8g
dGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRo
ZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9j
ZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAg
ICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5z
ZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShj
b29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgp
LCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7
CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9
KTsKIH0KQEAgLTMxNCwxMSArMjk4LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0
X2Nvb2tpZXMoVwogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAogICAgIEdSZWZQdHI8R1Rh
c2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2Fs
bGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJv
bS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8g
b2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0
IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJz
aXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIp
OwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3Ry
aW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8
V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2luZ2xldG9uKCkuZ2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVS
TCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSB7CiAgICAgICAgIEdMaXN0KiBjb29r
aWVzTGlzdCA9IG51bGxwdHI7CiAgICAgICAgIGZvciAoYXV0byYgY29va2llIDogY29va2llcykK
ICAgICAgICAgICAgIGNvb2tpZXNMaXN0ID0gZ19saXN0X3ByZXBlbmQoY29va2llc0xpc3QsIGNv
b2tpZS50b1NvdXBDb29raWUoKSk7CkBAIC0zNzIsMTEgKzM1Miw3IEBAIHZvaWQgd2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7
CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdl
ciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBh
cmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sg
cmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNv
IGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vz
c1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXIt
PnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2Vi
Q29va2llTWFuYWdlclByb3h5PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lv
bklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkg
eworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRlQ29va2llKG1h
bmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sg
PSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2su
Z2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAJKHJl
dmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2Vi
QXV0b21hdGlvblNlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU3LDggKzEzNTcsNyBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29rCiAgICAgaWYgKCFjb29r
aWVPYmplY3QuZ2V0Qm9vbGVhbigiaHR0cE9ubHkiX3MsIGNvb2tpZS5odHRwT25seSkpCiAgICAg
ICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQ
YXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdodHRwT25seScgd2FzIG5vdCBmb3VuZC4iKTsKIAot
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wt
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tp
ZSB9LCBbY2FsbGJhY2sgPSBjYWxsYmFjay5jb3B5UmVmKCldKCkgeworICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3Jl
KCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFjayA9IGNhbGxiYWNrLmNvcHlSZWYo
KV0oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAt
MTM3NCw4ICsxMzczLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29v
awogCiAgICAgU3RyaW5nIGhvc3QgPSBhY3RpdmVVUkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAg
ICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5z
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5k
ZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9u
SUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwor
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9t
YWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKIH0KIAogdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6Z2V0U2Vzc2lvblBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRy
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBl
cm1pc3Npb25EYXRhPj4mIG91dF9wZXJtaXNzaW9ucykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkocmV2aXNpb24g
MjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xD
b2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA4LDggKzEwOCw3IEBAIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRl
UHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQot
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25F
bmFibGVkKCkpOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFt
X3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTEz
OSw4ICsxMzgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoCiAK
ICAgICBpZiAoIVtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JL
ZXk6QCJXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciJdKQogICAgICAgICBpbnN0
YWxsTWVtb3J5UHJlc3N1cmVIYW5kbGVyKCk7Ci0KLSAgICBzZXRMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ+KCkpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTI3MywyNCArMjcwLDYg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTgogCiAgICAgTlNVc2Vy
RGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XTsKIAotICAgIHsKLSAgICAgICAgYm9vbCBpc1NhZmFyaSA9IGZhbHNlOwotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246
OmlzTW9iaWxlU2FmYXJpKCk7Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGlzU2FmYXJp
ID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCk7Ci0jZW5kaWYKLSAgICAgICAg
aWYgKGlzU2FmYXJpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCks
IFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1
bHRzS2V5XSk7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVm
YXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNL
ZXldKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHBhcmFtZXRlcnMuZW5hYmxlTGVnYWN5VExT
ID0gdHJ1ZTsKLSAgICBpZiAoaWQgdmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OkAiV2Vi
S2l0RW5hYmxlTGVnYWN5VExTIl0pCi0gICAgICAgIHBhcmFtZXRlcnMuZW5hYmxlTGVnYWN5VExT
ID0gW3ZhbHVlIGJvb2xWYWx1ZV07Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxlTGVnYWN5VExTID0gcGFyYW1l
dGVycy5lbmFibGVMZWdhY3lUTFM7Ci0KICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0
ID0gYWRvcHRDRihfQ0ZOZXR3b3JrQ29weUFUU0NvbnRleHQoKSk7CiAKICAgICBwYXJhbWV0ZXJz
LnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyID0gW2RlZmF1bHRzIGJvb2xGb3JL
ZXk6V2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXJEZWZhdWx0c0tleV07CkBAIC0z
MDEsOCArMjgwLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTgog
ICAgIHBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIgPSBpZGVudGlm
eWluZ0RhdGFGcm9tQ29va2llU3RvcmFnZShbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRU
UENvb2tpZVN0b3JhZ2VdIF9jb29raWVTdG9yYWdlXSk7CiAjZW5kaWYKIAotICAgIHBhcmFtZXRl
cnMuc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQgPSBzdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCgpOwot
CiAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IFtkZWZhdWx0cyBib29s
Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2Vi
UHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKV1dOwogCiAgICAgcGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1
Z01vZGUgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IkV4cGVyaW1lbnRhbCVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmFkQ2xpY2tBdHRyaWJ1dGlvbkRl
YnVnTW9kZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlN
YXAuY3BwCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw5ICsxMDks
NiBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQoCiAKICAgICBSRUxF
QVNFX0xPRyhMb2FkaW5nLCAiUmVtb3ZpbmcgZG93bmxvYWQgJSIgUFJJdTY0ICIgZnJvbSBVSVBy
b2Nlc3MgRG93bmxvYWRQcm94eU1hcCIsIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKIAotICAg
IC8vIFRoZSBEb3dubG9hZFByb3h5IG1heSBiZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0
byB0aGUgcHJvY2VzcyBwb29sLgotICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtl
UmVmUHRyKG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKSk7Ci0KICAgICBBU1NFUlQobV9kb3dubG9h
ZHMuY29udGFpbnMoZG93bmxvYWRJRCkpOwogCiAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
ZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAy
NTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJMZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjZW5kaWYKKyNpbmNsdWRlICJMZWdh
Y3lHbG9iYWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3
b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uSW5mby5oIgpAQCAtNTAsNyArNTEsNiBAQAogI2luY2x1ZGUgIldlYlBh
Z2VNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3NNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSAi
V2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKQEAgLTgxLDE4ICs4
MSw4MSBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVDYWxsYmFja0lEKCkKICAgICByZXR1cm4g
KytjYWxsYmFja0lEOwogfQogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1By
b3h5KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQ
cm94eShwcm9jZXNzUG9vbC5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAs
IG1fcHJvY2Vzc1Bvb2wocHJvY2Vzc1Bvb2wpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdv
cmtQcm9jZXNzUHJveHk+JiBnbG9iYWxOZXR3b3JrUHJvY2VzcygpCit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gbmV0d29y
a1Byb2Nlc3M7CisgICAgcmV0dXJuIG5ldHdvcmtQcm9jZXNzOworfQorCitOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKQoreworICAgIGlmICghZ2xv
YmFsTmV0d29ya1Byb2Nlc3MoKSkgeworICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpID0g
bWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigpOworICAgICAgICBnbG9iYWxOZXR3b3Jr
UHJvY2VzcygpLT5zZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgfQor
ICAgIHJldHVybiAqZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKTsKK30KKwordm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjphdHRlbXB0UmVsYXVuY2hBZnRlckNyYXNoSWZOZWNlc3NhcnkoVmVjdG9yPHN0
ZDo6cGFpcjxSZWY8V2ViUHJvY2Vzc1Byb3h5PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6
R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5Pj4mJiBwZW5kaW5nUmVxdWVz
dHMpCit7CisgICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSA9IG51bGxwdHI7CisgICAgaWYgKHBl
bmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBuZXdO
ZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOworICAgIGZv
ciAoYXV0byYgcmVxdWVzdCA6IHBlbmRpbmdSZXF1ZXN0cykKKyAgICAgICAgbmV3TmV0d29ya1By
b2Nlc3MuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHJlcXVlc3QuZmlyc3QuZ2V0KCksIFdU
Rk1vdmUocmVxdWVzdC5zZWNvbmQpKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fy
b3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCisgICAg
Ly8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0
aW9uIGNoZWNrIG9uIG91ciBBUElzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDAyNDYuCisgICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgeworICAg
ICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXNdIHsKKyAgICAgICAgICAgIHNlbmRD
cmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyNpZiBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCisgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0
aW9uRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnkoKTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOworI2VuZGlmCisgICAgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVj
dG9yeSA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5oc3RzU3RvcmFnZURpcmVj
dG9yeSgpOworICAgIGlmICghcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwo
KSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGly
ZWN0b3J5KHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaHN0c1N0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6
c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJz
LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBj
b3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1Jl
Z2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVy
cy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFs
U2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBw
YXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihM
ZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNj
ZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdz
OjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQ
cm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAg
ICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBw
ZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVj
dG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9y
YWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOworICAgIGlmIChTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJv
Y2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0Rp
cmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRl
cnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3Ry
aW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVE
aXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRi
b3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgcGFyYW1ldGVycy5k
YXRhU3RvcmVQYXJhbWV0ZXJzID0gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxT
dG9yZXMoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKK30KKworCitOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KCkKKyAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eSgpCiAj
aWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKICAgICAsIG1fY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMpCiAjZW5kaWYKLSAgICAsIG1fdGhyb3R0bGVyKCp0
aGlzLCBwcm9jZXNzUG9vbC5zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisgICAg
LCBtX3Rocm90dGxlcigqdGhpcywgZmFsc2UpCiB7CiAgICAgY29ubmVjdCgpOwotCi0gICAgaWYg
KGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUo
KSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5zZXQod2Vic2l0ZURhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIG1ha2VSZWYoKndlYnNpdGVEYXRhU3RvcmUpKTsKIH0KIAogTmV0d29ya1Byb2Nl
c3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkoKQpAQCAtMTE2LDExICsxNzksNiBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvCiB7CiAgICAgbGF1bmNoT3B0aW9u
cy5wcm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Ok5ldHdvcms7CiAg
ICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9wdGlvbnMp
OwotCi0gICAgaWYgKHByb2Nlc3NQb29sKCkuc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2woKS5zZXRTaG91bGRN
YWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOwotICAgICAg
ICBsYXVuY2hPcHRpb25zLnNob3VsZE1ha2VQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB0
cnVlOwotICAgIH0KIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2ls
bE9wZW4oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTgxLDEyICsyMzksMTIgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSQogICAgIH0KIH0KIAotRG93
bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJz
aXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VS
ZXF1ZXN0KQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxv
YWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9j
ZXNzUG9vbCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCiB7CiAgICAg
aWYgKCFtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1h
a2VVbmlxdWU8RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxv
YWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2ws
IHJlc291cmNlUmVxdWVzdCk7CisgICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRl
RG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHByb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QpOwog
fQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9w
dGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTI0Nywx
OCArMzA1LDIwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3MKIHsK
ICAgICBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0
cjxXZWJQcm9jZXNzUHJveHk+LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseT4+IHBlbmRpbmdSZXF1ZXN0czsKKyAgICBW
ZWN0b3I8c3RkOjpwYWlyPFJlZjxXZWJQcm9jZXNzUHJveHk+LCBNZXNzYWdlczo6V2ViUHJvY2Vz
c1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseT4+IHBlbmRp
bmdSZXF1ZXN0czsKICAgICBwZW5kaW5nUmVxdWVzdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X2Nvbm5lY3Rpb25SZXF1ZXN0cy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgcmVxdWVzdCA6IG1f
Y29ubmVjdGlvblJlcXVlc3RzLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChyZXF1ZXN0LndlYlBy
b2Nlc3MpCi0gICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMudW5jaGVja2VkQXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKG1ha2VSZWZQdHIocmVxdWVzdC53ZWJQcm9jZXNzLmdldCgpKSwgV1RGTW92ZShy
ZXF1ZXN0LnJlcGx5KSkpOworICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3RzLnVuY2hlY2tlZEFw
cGVuZCh7ICpyZXF1ZXN0LndlYlByb2Nlc3MsIFdURk1vdmUocmVxdWVzdC5yZXBseSkgfSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlcXVlc3QucmVwbHkoeyB9KTsKICAgICB9CiAgICAg
bV9jb25uZWN0aW9uUmVxdWVzdHMuY2xlYXIoKTsKLQotICAgIC8vIFRlbGwgdGhlIG5ldHdvcmsg
cHJvY2VzcyBtYW5hZ2VyIHRvIGZvcmdldCBhYm91dCB0aGlzIG5ldHdvcmsgcHJvY2VzcyBwcm94
eS4gVGhpcyB3aWxsIGNhdXNlIHVzIHRvIGJlIGRlbGV0ZWQuCi0gICAgbV9wcm9jZXNzUG9vbC5u
ZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMsIFdURk1vdmUocGVuZGluZ1JlcXVlc3RzKSk7Cisg
ICAgCisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9j
ZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgq
dGhpcyk7CisgICAgCisgICAgYXR0ZW1wdFJlbGF1bmNoQWZ0ZXJDcmFzaElmTmVjZXNzYXJ5KFdU
Rk1vdmUocGVuZGluZ1JlcXVlc3RzKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
Y2xlYXJDYWxsYmFja1N0YXRlcygpCkBAIC0yNzgsOSArMzM4LDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzcwogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVj
dGlvbiwgZGVjb2RlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29s
LmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRl
Y29kZXIpOwogfQogCkBAIC0yOTQsOCArMzUxLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRSZWNlaXZlU3luYwogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZENsb3NlKElQ
Qzo6Q29ubmVjdGlvbiYpCiB7Ci0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VS
ZWYobV9wcm9jZXNzUG9vbCk7Ci0KICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAg
ICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsKICNpZiBFTkFCTEUoTEVHQUNZX0NV
U1RPTV9QUk9UT0NPTF9NQU5BR0VSKQpAQCAtMzUwLDExICs0MDUsNiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAoIXRvcE9yaWdpbiB8fCAhbV9wcm9jZXNzUG9vbC5pc1NlcnZpY2VXb3JrZXJQYWdlSUQo
cGFnZUlEKSkgewotICAgICAgICBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uoc2Vzc2lv
bklELCBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBXZWJQYWdlUHJveHk6OmZvck1vc3RWaXNpYmxlV2ViUGFnZUlmQW55KHNl
c3Npb25JRCwgKnRvcE9yaWdpbiwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyks
IHNlc3Npb25JRCwgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBXVEZNb3ZlKGF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKV0oYXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1Ro
aXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00MDEsMTEgKzQ1MSw2IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmMKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
Y29ubmVjdGlvblJlcXVlc3QucmVwbHkoeyB9KTsKICAgICB9Ci0KLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCi0g
ICAgICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKICAgICAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29ubmVjdGlvbl90IGNvbm5l
Y3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSkKQEAgLTExNTIsMTEg
KzExOTcsNiBAQCBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3CiAgICAg
aWYgKGl0ZXJhdG9yICE9IG1fd2Vic2l0ZURhdGFTdG9yZXMuZW5kKCkpCiAgICAgICAgIHJldHVy
biBpdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAKLSAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9y
ZSA9IG1fcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKSB7Ci0gICAgICAgIGlmIChzZXNz
aW9uSUQgPT0gd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpCi0gICAgICAgICAgICByZXR1
cm4gd2Vic2l0ZURhdGFTdG9yZTsKLSAgICB9Ci0KICAgICBpZiAoc2Vzc2lvbklEICE9IFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CkBAIC0xMjIwLDcgKzEyNjAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldFNhbmRi
b3hFeHRlCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoUmVn
aXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklEKQogewotICAgIG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgc2Vz
c2lvbklEKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3JrZXJDb250ZXh0Q29u
bmVjdGlvbk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIGlkZW50aWZp
ZXIpCkBAIC0xMjMwLDYgKzEyNjksMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3Jr
ZXJDb250ZXh0QwogfQogI2VuZGlmCiAKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0TGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudD4mJikKK3sKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpyZXF1ZXN0U3RvcmFnZVNwYWNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qg
V2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGN1cnJlbnRRdW90YSwgdWlu
dDY0X3QgY3VycmVudFNpemUsIHVpbnQ2NF90IHNwYWNlUmVxdWlyZWQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoT3B0aW9uYWw8dWludDY0X3Q+IHF1b3RhKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBhdXRvKiBzdG9yZSA9IHdlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKHNlc3Np
b25JRCk7CkBAIC0xMzMwLDIxICsxMzczLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpn
ZXRMb2NhbFN0b3JhZwogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NB
c3NlcnRpb24oKQogewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91bmRXZWJQcm9j
ZXNzZXMoKSkgewotICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRGb3JlZ3Jv
dW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7Ci0gICAgICAgICAgICBt
X2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0
eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsKLSAgICAgICAgICAgIHNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvRm9yZWdy
b3VuZCgpLCAwKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChw
cm9jZXNzUG9vbCgpLmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewotICAgICAgICBpZiAo
IVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZy
b21XZWJQcm9jZXNzZXMpKSB7Ci0gICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3Nl
cyA9IHRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgZm9yZWdy
b3VuZCBiYWNrZ3JvdW5kIHZpZXcocykiX3MpOwotICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9CYWNrZ3JvdW5kKCksIDApOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9hY3Rpdml0eUZyb21XZWJQ
cm9jZXNzZXMgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5oCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTAg
QEAKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5oIgogI2VuZGlm
CiAKK25hbWVzcGFjZSBBUEkgeworY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Owor
fQorCiBuYW1lc3BhY2UgUEFMIHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTYyLDcgKzY2LDYg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERvd25sb2FkUHJveHk7CiBjbGFzcyBEb3du
bG9hZFByb3h5TWFwOwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBlbnVtIGNsYXNzIFNob3VsZEdy
YW5kZmF0aGVyU3RhdGlzdGljcyA6IGJvb2w7CiBlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NTdGF0
dXMgOiB1aW50OF90OwogZW51bSBjbGFzcyBXZWJzaXRlRGF0YUZldGNoT3B0aW9uOwpAQCAtODYs
MTIgKzg5LDEzIEBAIHB1YmxpYzoKICAgICB1c2luZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nl
c3MgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKICAgICB1c2luZyBPcGVuZXJEb21haW4g
PSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKIAotICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9j
ZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmKTsKKyAgICBzdGF0aWMgTmV0d29ya1Byb2Nlc3NQcm94
eSYgc2luZ2xldG9uKCk7CisgICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eSgpOwogICAg
IH5OZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CiAKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7CiAKLSAgICBEb3dubG9hZFBy
b3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFBy
b3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lv
bklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0
Y2hPcHRpb24+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAgICAg
dm9pZCBkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4sIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0xNzIsOCArMTc2LDYgQEAgcHVibGljOgogICAg
IFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcigpIHsgcmV0dXJuIG1fdGhyb3R0bGVyOyB9CiAg
ICAgdm9pZCB1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYg
cHJvY2Vzc1Bvb2woKSB7IHJldHVybiBtX3Byb2Nlc3NQb29sOyB9Ci0KICNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQogICAgIHZvaWQgZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5KFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Jik7CiAjZW5kaWYKQEAgLTE5
Niw3ICsxOTgsMTIgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lD
dXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVG
b3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKIAorICAgIHZvaWQgc2V0TGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudD4mJik7CisKIHByaXZhdGU6CisgICAgdm9pZCBzZW5kQ3Jl
YXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgc3RhdGljIHZvaWQgYXR0ZW1wdFJl
bGF1bmNoQWZ0ZXJDcmFzaElmTmVjZXNzYXJ5KFZlY3RvcjxzdGQ6OnBhaXI8UmVmPFdlYlByb2Nl
c3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbkRlbGF5ZWRSZXBseT4+JiYpOworCiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5
CiAgICAgdm9pZCBnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9u
cyYpIG92ZXJyaWRlOwogICAgIHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlv
biYpIG92ZXJyaWRlOwpAQCAtMjU5LDggKzI2Niw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBy
b2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCwgUmVmPEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIG1fcHJvY2Vz
c1Bvb2w7Ci0KICAgICBzdHJ1Y3QgQ29ubmVjdGlvblJlcXVlc3QgewogICAgICAgICBXZWFrUHRy
PFdlYlByb2Nlc3NQcm94eT4gd2ViUHJvY2VzczsKICAgICAgICAgTWVzc2FnZXM6OldlYlByb2Nl
c3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5IHJlcGx5OwpA
QCAtMjkwLDYgKzI5NSw5IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwg
UmVmUHRyPFdlYnNpdGVEYXRhU3RvcmU+PiBtX3dlYnNpdGVEYXRhU3RvcmVzOwogICAgIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNzQXNzZXJ0aW9uPiBtX3VwbG9hZEFzc2VydGlvbjsKKyNp
ZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQorICAgIHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5LmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxOSArNDIsMTYgQEAgTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHk6On5MZWdhYwogICAgIGludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKHVpbnQ2NF90IGN1
c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
K3ZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyh1aW50
NjRfdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikKIHsKLSAgICBtX25ldHdvcmtQ
cm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5z
dGFydExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOwogfQogCi12b2lk
IExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyh1aW50NjRfdCBj
dXN0b21Qcm90b2NvbElEKQordm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6
c3RvcExvYWRpbmcodWludDY0X3QpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nl
c3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMs
IGN1c3RvbVByb3RvY29sSUQpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vz
c1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsK
IH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6d2FzUmVkaXJlY3Rl
ZFRvUmVxdWVzdCh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJl
ZGlyZWN0UmVzcG9uc2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAkocmV2aXNpb24gMjUyMjc0KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDEzICs4MSwyMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmFsbG93V2Vic2l0ZURhdGFSCiAgICAgYWxsb3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxs
T3JpZ2lucyA9IHRydWU7CiB9CiAKLXN0YXRpYyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJz
aXRlRGF0YVN0b3JlKj4mIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkKK3N0YXRpYyBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIGFsbERhdGFTdG9yZXMoKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPj4gbWFwOwogICAgIHJl
dHVybiBtYXA7CiB9CiAKK1ZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0
ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKQoreworICAgIFZlY3RvcjxXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gYWxsUGFyYW1ldGVyczsKKyAgICBhbGxQYXJhbWV0ZXJz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYWxsRGF0YVN0b3JlcygpLnNpemUoKSk7CisgICAgZm9y
IChhdXRvKiBzdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgYWxsUGFy
YW1ldGVycy51bmNoZWNrZWRBcHBlbmQoc3RvcmUtPnBhcmFtZXRlcnMoKSk7CisgICAgcmV0dXJu
IGFsbFBhcmFtZXRlcnM7Cit9CisKIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0
b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBX
ZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQ
ZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vzc2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25J
RCgpKSk7CkBAIC0xMTMsNyArMTIyLDcgQEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFT
dG9yZShSZWY8VwogI2VuZGlmCiB7CiAgICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQ
cml2aWxlZ2VzKCkpOwotICAgIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAg
cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTI1LDE0ICsxMzQsOSBAQCBXZWJz
aXRlRGF0YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCiAKICAgICBwbGF0Zm9ybURlc3Ryb3ko
KTsKIAotICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKSB7Ci0gICAgICAgIEFTU0VSVChub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChtX3Nl
c3Npb25JRCkgPT0gdGhpcyk7Ci0gICAgICAgIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkucmVtb3Zl
KG1fc2Vzc2lvbklEKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nl
c3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAgICAgICB9
Ci0gICAgfQorICAgIEFTU0VSVChhbGxEYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0
aGlzKTsKKyAgICBhbGxEYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsK
IH0KIAogc3RhdGljIFJlZlB0cjxXZWJzaXRlRGF0YVN0b3JlPiYgZ2xvYmFsRGVmYXVsdERhdGFT
dG9yZSgpCkBAIC0xNjIsMTcgKzE2NiwxNSBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHREYXRhU3RvcmVFCiAgICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpOwogfQog
Ci12b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkK
K3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKIHsKLSAg
ICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkg
ewotICAgICAgICBhdXRvIHJlc3VsdCA9IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vz
c2lvbklELCB0aGlzKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05l
d0VudHJ5KTsKLSAgICB9CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1f
c2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3
RW50cnkpOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGlu
Z05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCkgOiBudWxscHRy
OworICAgIHJldHVybiBhbGxEYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2Vz
cykKQEAgLTE4OCwxMiArMTkwLDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVy
UHJvY2VzcwogICAgIG1fcHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKIH0KIAotV2ViUHJvY2Vz
c1Bvb2wqIFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMoKQotewotICAgIGF1dG8gcG9vbHMgPSBwcm9jZXNzUG9vbHMoMSwgZmFsc2UpOwotICAg
IHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7
Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3Nh
cnkoKQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC0yMDM0LDI5ICsy
MDMwLDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZAogfQogI2Vu
ZGlmCiAKLVZlY3RvcjxXZWJDb3JlOjpDb29raWU+IFdlYnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdD
b29raWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29weVRvVmVjdG9yKG1fcGVuZGluZ0Nvb2tp
ZXMpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUoY29uc3Qg
V2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmVJ
ZihbJmNvb2tpZV0oYXV0byYgcGVuZGluZ0Nvb2tpZSkgewotICAgICAgICByZXR1cm4gcGVuZGlu
Z0Nvb2tpZS5pc0tleUVxdWFsKGNvb2tpZSk7Ci0gICAgfSk7Ci0gICAgbV9wZW5kaW5nQ29va2ll
cy5hZGQoY29va2llKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5n
Q29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nv
b2tpZXMucmVtb3ZlKGNvb2tpZSk7Ci19Ci0gICAgCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNs
ZWFyUGVuZGluZ0Nvb2tpZXMoKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMuY2xlYXIoKTsKLX0K
LQogdWludDY0X3QgV2Vic2l0ZURhdGFTdG9yZTo6cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VR
dW90YSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHdoZXRoZXIgYWxsb3dpbmcg
dG8gc2V0IGEgcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSBmcm9tIGEgV2Vic2l0ZURh
dGFTdG9yZS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjE0LDE1ICsyMTQsMTAgQEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRIYXNoU2Fs
dFN0b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29s
Rm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKICAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nl
c3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7CiAKICAgICBXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycyBwYXJhbWV0ZXJzKCk7Ci0KLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5k
aW5nQ29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJD
b3JlOjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29y
ZTo6Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CisgICAgc3RhdGlj
IFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVyc0Zyb21BbGxTdG9y
ZXMoKTsKIAogICAgIHZvaWQgc2V0Qm91bmRJbnRlcmZhY2VJZGVudGlmaWVyKFN0cmluZyYmIGlk
ZW50aWZpZXIpIHsgbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24tPnNldEJvdW5kSW50ZXJmYWNlSWRl
bnRpZmllcihXVEZNb3ZlKGlkZW50aWZpZXIpKTsgfQogICAgIGNvbnN0IFN0cmluZyYgYm91bmRJ
bnRlcmZhY2VJZGVudGlmaWVyKCkgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24tPmJv
dW5kSW50ZXJmYWNlSWRlbnRpZmllcigpOyB9CkBAIC0zMjAsNyArMzE1LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsKICAgICBzdGF0aWMgdm9p
ZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5
LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKIAotICAgIHZv
aWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2b2lkIHJlZ2lzdGVyV2l0
aFNlc3Npb25JRE1hcCgpOwogCiAgICAgY29uc3QgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7
CiAKQEAgLTM0OCw4ICszNDMsNiBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkN1cmxQcm94eVNl
dHRpbmdzIG1fcHJveHlTZXR0aW5nczsKICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpD
b29raWU+IG1fcGVuZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vz
c1Byb3h5PiBtX3Byb2Nlc3NlczsKIAogICAgIGJvb2wgbV9uZXR3b3JraW5nSGFzQmVndW4geyBm
YWxzZSB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2Ev
V2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQkocmV2aXNp
b24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2Ev
V2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsOCArMTY4LDYg
QEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdAogICAgIHBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRp
ZmllciA9IHNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOwogICAgIHBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRl
bnRpZmllciA9IHNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigpOwogCi0gICAg
cGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdDb29raWVz
KTsKLQogICAgIGlmICghY29va2llRmlsZS5pc0VtcHR5KCkpCiAgICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShGaWxlU3lzdGVtOjpkaXJl
Y3RvcnlOYW1lKGNvb2tpZUZpbGUpLCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5z
aW9uSGFuZGxlKTsKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0NoYW5nZUxvZwkocmV2aXNpb24gMjUyMzEwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTktMTEtMDkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBVc2UgYSBOZXR3b3JrUHJvY2Vzc1By
b3h5IHNpbmdsZXRvbiBpbnN0ZWFkIG9mIG9uZSBwZXIgV2ViUHJvY2Vzc1Bvb2wKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzU0NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbToKKyAgICAgICAgKC1bQ2hlY2tT
ZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0pOgorICAgICAgICAoLVtDaGVj
a1Nlc3Npb25Db29raWVVSURlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0pOgorICAgICAgICAoVEVT
VCk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmlldzpydW5K
YXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlv
bkhhbmRsZXI6XSk6IERlbGV0ZWQuCisKIDIwMTktMTEtMDkgIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgogCiAgICAgICAgIENsaWNreSBPcmJpbmcgc3VwcG9ydC5hcHBsZS5jb20gY2F0
ZWdvcmllcyBzaG93cyBhIFBORyBpbnN0ZWFkIG9mIHRoZSB3ZWIgcGFnZSBwcmV2aWV3LCB0YXBw
aW5nIGxvYWRzIGltYWdlIGFzc2V0IG9ubHkgaW5zdGVhZCBvZiB3ZWIgcGFnZQpJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRU
UENvb2tpZVN0b3JlLm1tCShyZXZpc2lvbiAyNTIyNzQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0
ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAj
aW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tIVFRQQ29v
a2llU3RvcmUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgpAQCAt
NDc1LDggKzQ3Niw2IEBAIC0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW4K
IH0KIEBlbmQKIAotLy8gRklYTUU6IG9uIGlPUywgVUkgcHJvY2VzcyBzaG91bGQgYmUgdXNpbmcg
dGhlIHNhbWUgY29va2llIGZpbGUgYXMgdGhlIG5ldHdvcmsgcHJvY2VzcyBmb3IgZGVmYXVsdCBz
ZXNzaW9uLgotI2lmIFBMQVRGT1JNKE1BQykKIGVudW0gY2xhc3MgU2hvdWxkRW5hYmxlUHJvY2Vz
c1ByZXdhcm1pbmcgeyBObywgWWVzIH07CiB2b2lkIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91
dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEVuYWJsZVBy
b2Nlc3NQcmV3YXJtaW5nKQogewpAQCAtNTg1LDIwICs1ODQsNjUgQEAgVEVTVChXZWJLaXQsIFdL
SFRUUENvb2tpZVN0b3JlV2l0aG91dFBybwogICAgIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91
dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nOjpZZXMpOwogfQogCi0j
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBAaW50ZXJmYWNlIENoZWNrU2Vzc2lvbkNvb2tpZVVJ
RGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVnYXRlPgorLSAoTlNTdHJpbmcgKilhbGVydENv
b2tpZUhUTUw7CistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlOwogQGVuZAogCi1AaW1wbGVt
ZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZQorQGltcGxlbWVudGF0aW9uIENo
ZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgeworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX21l
c3NhZ2U7Cit9CisKIC0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZh
U2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVk
QnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
dm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBFWFBFQ1RfU1RSRVEoIlNlc3Npb25Db29r
aWVOYW1lPUNvb2tpZVZhbHVlIiwgbWVzc2FnZS5VVEY4U3RyaW5nKTsKLSAgICBmaW5pc2hlZCA9
IHRydWU7CisgICAgX21lc3NhZ2UgPSBtZXNzYWdlOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
CiB9CisKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2UKK3sKKyAgICB3aGlsZSAoIV9tZXNz
YWdlKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOworICAgIHJl
dHVybiBfbWVzc2FnZS5hdXRvcmVsZWFzZSgpOworfQorCistIChOU1N0cmluZyAqKWFsZXJ0Q29v
a2llSFRNTAoreworICAgIHJldHVybiBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5j
b29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSAr
KykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFs
ZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKK30KKwogQGVuZAogCitURVNUKFdl
YktpdCwgV0tIVFRQQ29va2llU3RvcmVNdWx0aXBsZVZpZXdzKQoreworICAgIFRlc3RXS1dlYlZp
ZXcgKndlYlZpZXcxID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3
ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nl
c3MiXTsKKworICAgIE5TSFRUUENvb2tpZSAqc2Vzc2lvbkNvb2tpZSA9IFtOU0hUVFBDb29raWUg
Y29va2llV2l0aFByb3BlcnRpZXM6QHsKKyAgICAgICAgTlNIVFRQQ29va2llUGF0aDogQCIvIiwK
KyAgICAgICAgTlNIVFRQQ29va2llTmFtZTogQCJTZXNzaW9uQ29va2llTmFtZSIsCisgICAgICAg
IE5TSFRUUENvb2tpZVZhbHVlOiBAIkNvb2tpZVZhbHVlIiwKKyAgICAgICAgTlNIVFRQQ29va2ll
RG9tYWluOiBAIjEyNy4wLjAuMSIsCisgICAgfV07CisKKyAgICBfX2Jsb2NrIGJvb2wgc2V0Q29v
a2llRG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3MS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRh
U3RvcmUuaHR0cENvb2tpZVN0b3JlIHNldENvb2tpZTpzZXNzaW9uQ29va2llIGNvbXBsZXRpb25I
YW5kbGVyOl57CisgICAgICAgIHNldENvb2tpZURvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0Q29va2llRG9uZSk7CisKKyAgICBhdXRvIGRlbGVn
YXRlID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBuZXddKTsKKyAgICBb
d2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldzEg
bG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwg
VVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVR
KFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1
ZSIpOworICAgIAorICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcyID0gW1tUZXN0V0tXZWJWaWV3
IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MiBzZXRVSURlbGVnYXRlOmRlbGVnYXRl
LmdldCgpXTsKKyAgICBbd2ViVmlldzIgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29v
a2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEi
XV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNz
aW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworfQorCiBURVNUKFdlYktpdCwgV0tIVFRQQ29v
a2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogewogICAgIFJldGFp
blB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IGVwaGVtZXJhbFN0b3JlV2l0aENvb2tpZXMgPSBbV0tX
ZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOwpAQCAtNjIzLDkgKzY2Nyw4
IEBAIFRFU1QoV2ViS2l0LCBXS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm8KICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKICAgICBmaW5pc2hlZCA9IGZhbHNlOwogICAg
IAotICAgIE5TU3RyaW5nICphbGVydENvb2tpZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMg
PSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVz
Lmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2ll
cy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKLSAgICBbd2Vi
VmlldyBsb2FkSFRNTFN0cmluZzphbGVydENvb2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0
aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZmaW5pc2hlZCk7CisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFs
ZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcu
MC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0s
ICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVD
b29raWVzRXF1YWwoTlNIVFRQQ29va2llICpmaXJzdCwgTlNIVFRQQ29va2llICpzZWNvbmQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383235</attachid>
            <date>2019-11-09 20:36:45 -0800</date>
            <delta_ts>2019-11-10 03:17:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20191110043643.patch</filename>
            <type>text/plain</type>
            <size>125217</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBAQAorMjAxOS0xMS0wOSAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBhIE5ldHdv
cmtQcm9jZXNzUHJveHkgc2luZ2xldG9uIGluc3RlYWQgb2Ygb25lIHBlciBXZWJQcm9jZXNzUG9v
bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToK
KyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhU
VFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tp
ZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3Jl
Ojpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoQVBJOjpI
VFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoQVBJ
OjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6CisgICAgICAgIChX
S0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9zZXRDb29raWVBY2Nl
cHRQb2xpY3k6XSk6CisgICAgICAgICh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tp
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNN
b2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpw
cm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250
ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6CisgICAgICAg
IChXZWJLaXQ6Om1fd2ViUHJvY2Vzc0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6On5XZWJQcm9jZXNzUG9vbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0
Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9O
ZXR3b3JraW5nUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVh
ckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyTGVnYWN5UHJpdmF0ZUJy
b3dzaW5nTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFs
bG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRXZWJQcm9jZXNzSGFzVXBsb2Fkcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVhcldlYlByb2Nlc3NIYXNVcGxv
YWRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMTktMTEtMDggIEpv
bmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIyNTIyNjAuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwMyw3ICszMDMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1By
CiAgICAgICAgIG1lbW9yeVByZXNzdXJlSGFuZGxlci5pbnN0YWxsKCk7CiAgICAgfQogCi0gICAg
c2V0Q2FjaGVNb2RlbChwYXJhbWV0ZXJzLmNhY2hlTW9kZWwsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURp
cmVjdG9yeSk7CisgICAgLy8gRklYTUU6IEkgc3RpbGwgbmVlZCB0byBzZXQgdGhlIGNhY2hlIG1v
ZGVsIGZyb20gTGVnYWN5R2xvYmFsU2V0dGluZ3MsIGJ1dCB3aXRoIHRoZSBwYXRoIGZyb20gdGhl
IGZpcnN0IHBlcnNpc3RlbnQgZGF0YSBzdG9yZS4KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCiAgICAgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCA9IHBhcmFtZXRlcnMuc2hv
dWxkRW5hYmxlSVRQRGF0YWJhc2U7CkBAIC0zMTEsMTQgKzMxMSwxNSBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1ByCiAKICAgICBXZWJDb3JlOjpSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZUVuYWJsZWQocGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUpOwog
Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBzZXNz
aW9uSUQgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7Ci0gICAgc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7Ci0KKyAgICBmb3IgKGF1
dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMp
IHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lv
bklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwog
I2VuZGlmCisgICAgICAgIGluaXRpYWxpemVTdG9yYWdlUXVvdGEoZGF0YVN0b3JlUGFyYW1ldGVy
cyk7CisgICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIGRhdGFTdG9y
ZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmxv
Y2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIFJlbW90ZU5ldHdv
cmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbigqdGhpcywgV1RGTW92
ZShkYXRhU3RvcmVQYXJhbWV0ZXJzKSk7CisgICAgfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQogICAgIGlmIChwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50KCkp
IHsKQEAgLTMyNiwxNCArMzI3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5l
dHdvcmtQcgogICAgICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlF
bmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAgICAgfQogI2VuZGlmCi0gICAgaW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKLQotICAgIG1fc3RvcmFnZU1h
bmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBh
dXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpOwotICAgIGF1dG8qIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IGRlZmF1
bHRTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGNvb2tpZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nv
b2tpZXMpCi0gICAgICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7
CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQog
ICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNDE5LDEyICs0
MTIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjCiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAgIGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuY2xlYXJDcmVkZW50aWFscygpOwot
ICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpKQotICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+
Y2xlYXJDcmVkZW50aWFscygpOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0KICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW10gKGF1dG8mIG5ldHdvcmtTZXNzaW9u
KSB7CiAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24ubmV0
d29ya1N0b3JhZ2VTZXNzaW9uKCkpCiAgICAgICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVu
dGlhbFN0b3JhZ2UoKS5jbGVhckNyZWRlbnRpYWxzKCk7CkBAIC00OTEsOCArNDc4LDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdAogdm9pZCBOZXR3b3JrUHJvY2Vz
czo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNo
b3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFz
ZSkKICNlbmRpZgogewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3Jh
Z2VTZXNzaW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5p
c05ld0VudHJ5KQogICAgICAgICByZXR1cm47CkBAIC01MjQsMjEgKzUwOSwxMSBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0CiAKIFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiogTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uKGNvbnN0IFBBTDo6U2Vz
c2lvbklEJiBzZXNzaW9uSUQpIGNvbnN0CiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICByZXR1cm4gJmRlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpOwogICAgIHJldHVybiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMuZ2V0KHNl
c3Npb25JRCk7CiB9CiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29ya1By
b2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb24pCi0gICAgICAgIG1fZGVmYXVsdE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiA9IHBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgcmV0
dXJuICptX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247Ci19Ci0KIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKT4mIGZ1bmN0b3IpCiB7Ci0gICAgZnVuY3Rv
cihkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSk7CiAgICAgZm9yIChhdXRvJiBzdG9yYWdlU2Vzc2lv
biA6IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy52YWx1ZXMoKSkKICAgICAgICAgZnVuY3Rvcigq
c3RvcmFnZVNlc3Npb24pOwogfQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuaAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyAr
MTY2LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7
CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3Qg
UEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4mJik7CkBAIC0zNDIsNyArMzQxLDYgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0OwogCiAgICAgdm9pZCB0ZXJtaW5hdGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHBs
YXRmb3JtVGVybWluYXRlKCk7CkBAIC00ODIsNyArNDgwLDYgQEAgcHJpdmF0ZToKIAogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1f
bmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vz
c2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8
U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjplCiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwogICAgIGVuY29kZXIgPDwgc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7CiAjZW5k
aWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGVuY29k
ZXIgPDwgZGF0YVN0b3JlUGFyYW1ldGVyczsKICNpZiBVU0UoU09VUCkKICAgICBlbmNvZGVyLmVu
Y29kZUVudW0oY29va2llQWNjZXB0UG9saWN5KTsKICAgICBlbmNvZGVyIDw8IGlnbm9yZVRMU0Vy
cm9yczsKQEAgLTEyMiwxMSArMTIyLDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAgICBPcHRpb25h
bDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7
Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIWRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQorICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycz4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiBk
YXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGlmICghZGF0YVN0b3JlUGFyYW1ldGVycykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9
IFdURk1vdmUoKmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKKyAgICByZXN1bHQuZGF0YVN0
b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAjaWYgVVNF
KFNPVVApCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmNvb2tpZUFjY2VwdFBv
bGljeSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCShyZXZpc2lvbiAyNTIy
NzQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RydWN0IE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIAogICAgIGJvb2wgc3RvcmFnZUFjY2Vzc0FQ
SUVuYWJsZWQ7CiAjZW5kaWYKIAotICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIGRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gZGF0YVN0b3JlUGFyYW1ldGVyczsKICAgICAKICNpZiBVU0UoU09VUCkKICAgICBIVFRQ
Q29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSB7IEhUVFBDb29raWVBY2NlcHRQ
b2xpY3k6OkFsd2F5c0FjY2VwdCB9OwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJT
b3VwLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL3NvdXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgogI2luY2x1ZGUgPGxp
YnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTYyLDcgKzYzLDcgQEAgdm9pZCBX
ZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDbwogCiBIVFRQQ29va2llQWNjZXB0UG9s
aWN5IFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgp
CiB7Ci0gICAgc3dpdGNoIChzb3VwX2Nvb2tpZV9qYXJfZ2V0X2FjY2VwdF9wb2xpY3kobV9wcm9j
ZXNzLmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmNvb2tpZVN0b3JhZ2UoKSkpIHsKKyAgICBzd2l0
Y2ggKHNvdXBfY29va2llX2phcl9nZXRfYWNjZXB0X3BvbGljeShtX3Byb2Nlc3Muc3RvcmFnZVNl
c3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSktPmNvb2tpZVN0b3JhZ2Uo
KSkpIHsKICAgICBjYXNlIFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfQUxXQVlTOgogICAgICAgICBy
ZXR1cm4gSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNjZXB0OwogICAgIGNhc2UgU09V
UF9DT09LSUVfSkFSX0FDQ0VQVF9ORVZFUjoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0JKHJldmlz
aW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a1Byb2Nlc3NDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtODYsOSArODYsNiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBh
cmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5wYXJlbnRCdW5k
bGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgogI2VuZGlmCiAKICAgICBfQ0ZOZXR3b3JrU2V0QVRT
Q29udGV4dChwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKQEAgLTExNSwxMSAr
MTEyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgIFtO
U1VSTENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3
b3JrUHJvY2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVT
RShTT1VSQ0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCShy
ZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0
d29ya1Byb2Nlc3NDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogewogfQogCi1zdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBt
YWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFsbG93U3Bl
Y2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRp
ZmljYXRlSW5mbywgY29uc3QgU3RyaW5nJiBob3N0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5n
Q29udGV4dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21h
Yy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTYwLDEwICs2MCw2IEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHQ6OmVuc3VyZVdlYnMKIAogICAgIG5ldHdvcmtQcm9jZXNzLmVuc3VyZVNlc3Npb24oc2Vzc2lv
bklELCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5n
TmV0d29ya1Nlc3Npb24sIG1ha2VTdHJpbmcoYmFzZSwgJy4nLCBzZXNzaW9uSUQudG9VSW50NjQo
KSksIFdURk1vdmUodWlQcm9jZXNzQ29va2llU3RvcmFnZSkpOwogCi0gICAgYXV0byogc2Vzc2lv
biA9IG5ldHdvcmtQcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgZm9yIChj
b25zdCBhdXRvJiBjb29raWUgOiBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzKQotICAgICAgICBz
ZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKLQogICAgIG5ldHdvcmtQcm9jZXNzLnNldFNlc3Np
b24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKG5ldHdvcmtQcm9jZXNzLCBXVEZN
b3ZlKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1By
b2Nlc3NTb3VwLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
NSwxMSArMTQ1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgog
ICAgIH0pOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykK
IHsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OnNldFNob3VsZElnbm9yZVRMU0Vycm9ycyhpZ25v
cmVUTFNFcnJvcnMpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCwxMyArNDAsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNv
ZGUoCiAgICAgZW5jb2RlciA8PCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2Rl
ciA8PCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNv
b2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nv
b2tpZXM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4
ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTgxLDEyICs3Nyw2IEBAIE9wdGlv
bmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWIKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxl
ID0gV1RGTW92ZSgqY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgT3B0
aW9uYWw8VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4+IHBlbmRpbmdDb29raWVzOwotICAgIGRlY29k
ZXIgPj4gcGVuZGluZ0Nvb2tpZXM7Ci0gICAgaWYgKCFwZW5kaW5nQ29va2llcykKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gV1RG
TW92ZSgqcGVuZGluZ0Nvb2tpZXMpOwotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAg
ICAgT3B0aW9uYWw8U3RyaW5nPiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgZGVjb2Rl
ciA+PiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CkBAIC05OSwxNCArODksNiBAQCBPcHRpb25h
bDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2ViCiAgICAgaWYgKCFpbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUg
PSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGU+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwot
ICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGU7Ci0gICAgaWYgKCFpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmlu
ZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgq
aW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlm
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAkocmV2aXNpb24g
MjUyMjc0KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTUgKzUxLDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycyB7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2ll
U3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0
b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBl
bmRpbmdDb29raWVzOwogICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVyczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAg
IFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0
YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1
ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdl
cy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJPcHRpb25h
bENhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNp
bmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzksMjAgKzQwLDE1
IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jb25z
dCBjaGFyKiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkKK1dlYkNvb2tp
ZU1hbmFnZXJQcm94eSYgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKQogewotICAg
IHJldHVybiAiV2ViQ29va2llTWFuYWdlclByb3h5IjsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8V2ViQ29va2llTWFuYWdlclByb3h5PiBtYW5hZ2VyOworICAgIHJldHVybiBtYW5hZ2VyOwog
fQogCi1SZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNy
ZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6
OldlYkNvb2tpZU1hbmFnZXJQcm94eSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
Q29va2llTWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkK
LSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRl
eHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRo
aXMpOwogfQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHko
KQpAQCAtNjUsNDMgKzYxLDkgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxp
emVDbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4
dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVz
dHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChh
dXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2JzZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAg
IGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlclNldCkKLSAgICAgICAgICAgIG9ic2VydmVy
cy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQotICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBv
YnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5tYW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBB
U1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNz
UHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4
dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQ
STo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0g
ICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uSUQp
LCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFjdGl2aXR5
ID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzIl9zKV0oVmVjdG9yPFN0cmlu
Zz4mJiBob3N0bmFtZXMpIG11dGFibGUgewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKFdURk1v
dmUoaG9zdG5hbWVzKSk7CiAgICAgfSk7CkBAIC0xMDksMTcgKzcxLDE3IEBAIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXMKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQogewotICAgIHByb2Nlc3NQb29sKCktPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3Ru
YW1lcykpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklE
LCBob3N0bmFtZXMpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0
ZUFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29s
KCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQpKTsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Y29uc3QgQ29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFj
a0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Np
b25JRCwgY29va2llKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pLCBhY3Rpdml0eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rp
dml0eSgiV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUiX3MpXSgpIG11dGFibGUg
ewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgfSk7CkBAIC0xMjcsNyArODksNyBA
QCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llCiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIFdhbGxUaW1lIHRpbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNz
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxs
Q29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgW2NhbGxiYWNrRnVuY3Rpb24g
PSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBhY3Rpdml0eSA9IG5ldHdvcmtQcm9jZXNzLnRo
cm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxl
dGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSJfcyldKCkgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxi
YWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTEzNSw3ICs5Nyw3IEBAIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpkZWxldGVBbGxDb28KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2ll
PiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBjb29raWVz
KSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBhY3Rpdml0
eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzIl9zKV0oKSBtdXRhYmxlIHsKICAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbigpOwogICAgIH0pOwpAQCAtMTQzLDcgKzEwNSw3IEBAIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFAKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29v
a2llPiYgY29va2llcywgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3VtZW50VVJM
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBh
dXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1h
aW5Eb2N1bWVudFVSTCksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0
aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyJfcyldKCkgbXV0YWJsZSB7
CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTE1MSw3ICsxMTMsNyBA
QCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQCiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0
aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNzaW9uSUQp
LCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFjdGl2aXR5
ID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEFsbENvb2tpZXMiX3MpXShWZWN0b3I8Q29va2llPiYmIGNvb2tp
ZXMpIG11dGFibGUgewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKFdURk1vdmUoY29va2llcykp
OwogICAgIH0pOwpAQCAtMTU5LDcgKzEyMSw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5
OjpnZXRBbGxDb29raWUKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFtjYWxsYmFja0Z1
bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJv
Y2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6Z2V0Q29va2llcyJfcyldKFZlY3RvcjxDb29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CiAg
ICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oV1RGTW92ZShjb29raWVzKSk7CiAgICAgfSk7CkBAIC0x
NjcsMTIgKzEyOSwxMiBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyhQ
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRU
b05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0K
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9O
ZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCksIDApOwogfQogCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4mJiBjYWxsYmFjaykK
QEAgLTIyMywxNSArMTg1LDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNE
aWRDaAogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShQQUw6OlNlc3Npb25JRCwgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIGlmICghcHJvY2Vzc1Bvb2woKS0+aXNVc2luZ1Rlc3RpbmdOZXR3b3JrU2Vz
c2lvbigpKQotICAgICAgICBwZXJzaXN0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpOwot
I2VuZGlmCi0jaWYgVVNFKFNPVVApCi0gICAgcHJvY2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBD
b29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNlbmRpZgotCi0gICAgYXV0byYgbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8m
IG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAg
bmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtjYWxsYmFja0Z1bmN0aW9u
ID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50
aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0
SFRUUENvb2tpZUFjY2VwdFBvbGljeSJfcyldKCkgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxiYWNr
RnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTIzOSw3ICsxOTMsNyBAQCB2b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2V0SFRUUENvb2tpCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0g
ICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KCksIFtjYWxs
YmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3
b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSJfcyldKEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kgcG9saWN5KSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihwb2xpY3kp
OwogICAgIH0pOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdl
clByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2ll
TWFuYWdlclByb3h5LmgJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMSArNTYs
OSBAQCB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyCiB0eXBlZGVmIEdl
bmVyaWNDYWxsYmFjazxIVFRQQ29va2llQWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0UG9s
aWN5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiY+IEdldENvb2tpZXNDYWxsYmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFuYWdl
clByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2ll
TWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlciB7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpP
YmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6
Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBs
ZW1lbnROYW1lKCk7Ci0KLSAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3Jl
YXRlKFdlYlByb2Nlc3NQb29sKik7CisgICAgc3RhdGljIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYg
c2luZ2xldG9uKCk7CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdlclByb3h5KCk7CiAKICAg
ICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSop
OwpAQCAtMTA0LDE3ICsxMDIsMTEgQEAgcHVibGljOgogICAgIHVzaW5nIEFQSTo6T2JqZWN0Ojpk
ZXJlZjsKIAogcHJpdmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bv
b2wqKTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKKyAgICBmcmllbmQgTmV2ZXJEZXN0
cm95ZWQ8V2ViQ29va2llTWFuYWdlclByb3h5PjsKIAogICAgIHZvaWQgY29va2llc0RpZENoYW5n
ZShQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAotICAgIHZv
aWQgcHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRD
bG9zZShXZWJQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9z
ZShOZXR3b3JrUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJDb250ZXh0
U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVu
dCgpIG92ZXJyaWRlOwotCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lkIGRp
ZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRl
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCShy
ZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw2ICsyMTYsMTEgQEAgc3RhdGljIEhhc2hTZXQ8
U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdAogICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxT
dHJpbmc+IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxl
cnMoKQoreworICAgIHJldHVybiBjb3B5VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0
b21Qcm90b2NvbEhhbmRsZXJzKCkpOworfQorCiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bv
b2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBt
X2NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdl
R3JvdXAoV2ViUGFnZUdyb3VwOjpjcmVhdGUoKSkKQEAgLTIyMyw3ICsyMjgsNiBAQCBXZWJQcm9j
ZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jCiAgICAgLCBtX2F1dG9tYXRpb25DbGll
bnQobWFrZVVuaXF1ZTxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2Fk
Q2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlz
dG9yeUNsaWVudChtYWtlVW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkp
Ci0gICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZp
c2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgpKQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGln
aFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFu
Y2VHcmFwaGljc1VzYWdlU2FtcGxlcj4oKnRoaXMpKQpAQCAtMjY2LDcgKzI3MCw2IEBAIFdlYlBy
b2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2MKICAgICBhZGRNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlz
KTsKIAogICAgIC8vIE5PVEU6IFRoZXNlIHN1Yi1vYmplY3RzIG11c3QgYmUgaW5pdGlhbGl6ZWQg
YWZ0ZXIgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuLgotICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2Vy
UHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+
KCk7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCkBAIC0zMTcsOSArMzIwLDYgQEAgV2ViUHJv
Y2Vzc1Bvb2w6On5XZWJQcm9jZXNzUG9vbCgpCiAgICAgcHJvY2Vzc1Bvb2xDb3VudGVyLmRlY3Jl
bWVudCgpOwogI2VuZGlmCiAKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2h1dERvd25Qcm9jZXNzKCk7Ci0KICNpZiBFTkFCTEUoR0FNRVBBRCkK
ICAgICBpZiAoIW1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFkcy5pc0VtcHR5KCkpCiAgICAgICAgIFVJ
R2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5wcm9jZXNzUG9vbFN0b3BwZWRVc2luZ0dhbWVw
YWRzKCp0aGlzKTsKQEAgLTM3NywxNiArMzc3LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0
QXV0b21hdGlvbkNsaWVudAogICAgICAgICBtX2F1dG9tYXRpb25DbGllbnQgPSBXVEZNb3ZlKGF1
dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRMZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLXsKLSNpZiBF
TkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQotICAgIGlmICghY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9IFdURk1vdmUoY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsKLSNlbmRpZgotfQotCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9z
dG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IGVuYWJsZWQ7CkBAIC00MDYsNyArMzk2LDcgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudAogCiBJUEM6OkNvbm5lY3Rpb24q
IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKQogewotICAgIHJl
dHVybiBtX25ldHdvcmtQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNvbm5lY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCkBAIC00MTgsOCArNDA4LDcg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9B
bGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXND
aGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSkpOwogI2lmIFVTRShTT1VQKQotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclBy
ZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOwogI2VuZGlmCiB9CiAKQEAg
LTQ1NywyMDMgKzQ0NiwxMyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzY3JlZW5Qcm9wZXJ0aWVz
U3RhCiAjZW5kaWYKIH0KIAotTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmVu
c3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3Jl
KQorTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKFdlYnNpdGVEYXRhU3RvcmUqKQogewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3Ig
YXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCi0gICAgLy8gV2Ugc2hv
dWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNr
IG9uIG91ciBBUElzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDAyNDYuCi0gICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgewotICAgICAgICBjYWxs
T25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0gewotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgfSk7Ci0g
ICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykgewotICAgICAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAg
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVE
YXRhU3RvcmUpKTsKLSAgICAgICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRp
bmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNz
OwotICAgIH0KLQotICAgIGF1dG8gbmV0d29ya1Byb2Nlc3MgPSBtYWtlVW5pcXVlPE5ldHdvcmtQ
cm9jZXNzUHJveHk+KCp0aGlzKTsKLQotICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzIHBhcmFtZXRlcnM7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBj
b3B5VG9WZWN0b3IobV93ZWJzaXRlRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLSAgICAg
ICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
ciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+c291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVy
KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllciA9
IG1fd2Vic2l0ZURhdGFTdG9yZS0+c291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVy
KCk7Ci0jZW5kaWYKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5uZXR3b3JraW5nSGFzQmVn
dW4oKTsKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxT
ZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0gICAgZm9yIChhdXRvJiBzY2hl
bWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAg
ICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBl
bmQoc2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU3RyaW5nIGNvb2tp
ZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9y
eSgpOwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdl
YlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb250
YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0KLSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBh
cmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50QnVuZGxlRGlyZWN0b3J5Lmlz
RW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1
bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRl
cnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRl
bXBvcmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdy
aXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAg
ICBwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6
OnNpbmdsZXRvbigpLmhzdHNTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJz
LmhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5oc3RzU3RvcmFn
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7Ci0KLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5
VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lz
dGVyQXNTZWN1cmUoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlw
YXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNl
Y3VyaXR5UG9saWN5KCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xv
Y2FsID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hl
bWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotICAgIC8vICoqKioqKioqKgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90
IGNoYW5nZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24g
ZGlzayB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRh
cjovL3Byb2JsZW0vMTc0NTQ3MTI+KQotICAgIC8vICoqKioqKioqKgotICAgIGlmIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1l
dGVycygpLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5Lmlz
RW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFk
V3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgfQot
I2VuZGlmCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKG1fd2Vic2l0ZURh
dGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5ID0gIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGxvY2FsU3Rv
cmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+
cmVzb2x2ZWRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAo
IWxvY2FsU3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0g
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7
Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7Ci0gICAgaWYg
KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAg
ICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwotCi0g
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYm9vbCBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91bGRJbmNsdWRl
TG9jYWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUgPSBmYWxzZTsKLSAgICBib29sIGVuYWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2lu
ZyA9IGZhbHNlOwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIG1hbnVhbFByZXZhbGVu
dFJlc291cmNlIHsgfTsKLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5n
RXZlbnQgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFj
aygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7
Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IHdpdGhXZWJzaXRl
RGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAg
ICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5z
aG91bGRJbmNsdWRlTG9jYWxob3N0SW5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotICAgICAgICAg
ICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5lbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlOwotICAgICAg
ICAgICAgZW5hYmxlVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nID0gbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmVuYWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2luZzsKLSAgICAgICAgICAgIG1hbnVh
bFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1
b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlP
cmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9y
aWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICAKLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29y
a0NhY2hlRGlyZWN0b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0Nh
Y2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVs
bCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3Jr
Q2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3Jp
dGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRp
ZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAg
ICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBh
cmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJ
bmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVM
b2NhbGhvc3RJblJlc291cmNlTG9hZFN0YXRpc3RpY3M7Ci0gICAgICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGU7Ci0gICAgICAgICAgICBlbmFibGVU
aGlyZFBhcnR5Q29va2llQmxvY2tpbmcgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxl
VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVz
b3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVv
dGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEo
KTsKLQotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlm
ICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5u
ZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBT
YW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICAg
ICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHREYXRhU3RvcmUoKS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAg
YXV0byBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0
d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9y
eSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
ICAgIH0KLQotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVz
dGluZ0V2ZW50OwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3RJblJlc291cmNlTG9h
ZFN0YXRpc3RpY3MgPSBzaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmVuYWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2luZyA9
IGVuYWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2luZzsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBtYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZTsKLQotICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVycwotICAgIHBs
YXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwotCi0gICAgLy8gSW5p
dGlhbGl6ZSB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRl
cnMpLCAwKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdvcmtQcm9jZXNzTGF0ZW5jeVFP
UygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDApOwotI2VuZGlmCi0KLSAgICBu
ZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwotCi0gICAgaWYgKHdpdGhX
ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1h
a2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0
b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRo
ZSBuZXR3b3JrIHByb2Nlc3Mga25vd3MgYWJvdXQgYWxsIHRoZSBzZXNzaW9ucyB0aGF0IGhhdmUg
YmVlbiByZWdpc3RlcmVkIGJlZm9yZSBpdCBzdGFydGVkLgotICAgIGZvciAoYXV0byYgc2Vzc2lv
bklEIDogbV9zZXNzaW9uVG9QYWdlSURzTWFwLmtleXMoKSkgewotICAgICAgICBpZiAoYXV0byog
d2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERh
dGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPmFkZFNlc3Npb24oKndlYnNpdGVEYXRhU3RvcmUpOwotICAgIH0KLQotICAgIG1fbmV0d29y
a1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdvcmtQcm9jZXNzKTsKLSAgICByZXR1cm4gKm1fbmV0d29y
a1Byb2Nlc3M7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwog
fQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1By
b2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSwgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHk+PiYmIHBlbmRpbmdSZXBsaWVzKQordm9pZCBX
ZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkm
IG5ldHdvcmtQcm9jZXNzUHJveHkpCiB7Ci0gICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwot
ICAgIEFTU0VSVCgmbmV0d29ya1Byb2Nlc3NQcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgp
KTsKLQogICAgIGZvciAoYXV0byYgc3VwcGxlbWVudCA6IG1fc3VwcGxlbWVudHMudmFsdWVzKCkp
CiAgICAgICAgIHN1cHBsZW1lbnQtPnByb2Nlc3NEaWRDbG9zZSgmbmV0d29ya1Byb2Nlc3NQcm94
eSk7CiAKQEAgLTY2MiwxNiArNDYxLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1By
b2Nlc3NDcmFzaAogICAgIGlmIChtX2F1dG9tYXRpb25TZXNzaW9uKQogICAgICAgICBtX2F1dG9t
YXRpb25TZXNzaW9uLT50ZXJtaW5hdGUoKTsKIAotICAgIC8vIExlYXZlIHRoZSBwcm9jZXNzIHBy
b3h5IGFyb3VuZCBkdXJpbmcgY2xpZW50IGNhbGwsIHNvIHRoYXQgdGhlIGNsaWVudCBjb3VsZCBx
dWVyeSB0aGUgcHJvY2VzcyBpZGVudGlmaWVyLgotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxs
cHRyOwotCi0gICAgLy8gQXR0ZW1wdCB0byByZS1sYXVuY2guCi0gICAgaWYgKHBlbmRpbmdSZXBs
aWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8mIG5ld05ldHdvcmtQcm9j
ZXNzID0gZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBmb3IgKGF1dG8mIHJlcGx5IDogcGVu
ZGluZ1JlcGxpZXMpCi0gICAgICAgIG5ld05ldHdvcmtQcm9jZXNzLmdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigqcmVwbHkuZmlyc3QsIFdURk1vdmUocmVwbHkuc2Vjb25kKSk7Ci0KICNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgd2hpbGUgKCFtX3NlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMuaXNFbXB0eSgpKQogICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYmVnaW4oKS0+
dmFsdWUtPmRpc2FibGVTZXJ2aWNlV29ya2VycygpOwpAQCAtNjgwLDE3ICs0NjksMTIgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaAogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9j
ZXNzUHJveHksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCiB7Ci0gICAgZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0KLSAgICBtX25ldHdvcmtQcm9j
ZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3Zl
KHJlcGx5KSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZ2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOwogfQog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJs
aXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNz
UHJveHkmIHByb3h5LCBSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5
ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgYXV0byogd2Vic2l0ZURhdGFTdG9y
ZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Np
b25JRChzZXNzaW9uSUQpOwogCiAgICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7CkBAIC0xMjc0
LDEwICsxMDU4LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaQog
ICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwogICAgIGlmIChzZXNz
aW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewogICAgICAgICBB
U1NFUlQoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IGRhdGFTdG9yZS5wYXJhbWV0ZXJzKCku
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCA9PSBzZXNzaW9uSUQpOwotICAgICAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFTdG9yZSkpOwotICAgICAgICAgICAgZGF0YVN0b3JlLmNs
ZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQorICAgICAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5hZGRTZXNzaW9uKG1ha2VSZWYoZGF0YVN0b3JlKSk7CiAgICAgfQog
fQogCkBAIC0xNDE5LDcgKzEyMDAsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1
Z2lucygpCiAKIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKCkKIHsKLSAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2VzcyA/IG1fbmV0d29ya1Byb2Nlc3Mt
PnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOworICAgIHJldHVybiBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5wcm9jZXNzSWRlbnRpZmllcigpOwogfQogCiBQcm9jZXNzSUQgV2ViUHJv
Y2Vzc1Bvb2w6OnByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyKCkKQEAgLTE1NzAsMTYgKzEzNTEs
MTMgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZQogCiAgICAgc2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hl
TW9kZWwpKTsKIAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNo
ZU1vZGVsLCB7IH0pLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsLCB7
IH0pLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9u
b3VzbHlGb3JUZXN0aW5nKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIHsKICAgICB1cGRhdGVCYWNr
Rm9yd2FyZENhY2hlQ2FwYWNpdHkoKTsKLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7
IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5n
KGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERl
ZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCkBAIC0x
NTg5LDcgKzEzNjcsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRp
CiAKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKIHsKLSAgICBhdXRvJiBkb3dubG9hZFBy
b3h5ID0gZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9y
ZSwgcmVxdWVzdCk7CisgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1ZXN0KTsKICAg
ICBkb3dubG9hZFByb3h5LnNldE9yaWdpbmF0aW5nUGFnZShvcmlnaW5hdGluZ1BhZ2UpOwogICAg
IHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTY2NywyNSArMTQ0NSwxMSBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAotdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6dXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkKLXsKLSAgICBBU1NFUlQo
bV9wcm9jZXNzZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fbmV0d29ya1Byb2Nlc3MpOwot
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
bV9wcm9jZXNzZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3VsZFVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiA9IHRydWU7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1By
b2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2Fy
ZDxVPihyZXBseSksIDApOworICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5jYW5TZW5kTWVzc2FnZSgpKQorICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihy
ZXBseSksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKQEAgLTE2OTUsOCArMTQ1OSw3IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEFsbG93c0FueVNTTENlcnQKIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKCksIDApOworICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNhY2hl
ZENyZWRlbnRpYWxzKCksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVO
ZXR3b3JrUHJvY2VzcygpCkBAIC0xNzA1LDI0ICsxNDY4LDE3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm8KICAgICB3aGlsZSAoIW1fc2VydmljZVdvcmtlclByb2Nl
c3Nlcy5pc0VtcHR5KCkpCiAgICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5iZWdpbigp
LT52YWx1ZS0+ZGlzYWJsZVNlcnZpY2VXb3JrZXJzKCk7CiAjZW5kaWYKLQotICAgIGlmICghbV9u
ZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnRlcm1pbmF0ZSgpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnRlcm1pbmF0ZSgpOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JU
ZXN0aW5nKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+c2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZFByb2Nlc3NXaWxsU3VzcGVu
ZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRO
ZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0g
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlclByb2Nlc3Nlcygp
CkBAIC0xNzQ3LDE1ICsxNTAzLDE0IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bmNMb2NhbFN0
b3JhZ2UoQ28KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3Np
bmdMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJMZWdhY3lQcml2YXRlQnJv
d3NpbmdMb2NhbFN0b3JhZ2UoKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyTGVnYWN5UHJpdmF0ZUJy
b3dzaW5nTG9jYWxTdG9yYWdlKCksIDApOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9z
dChjb25zdCBXZWJDZXJ0aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhv
c3QpCiB7CiAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlm
aWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNh
dGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnVwZGF0ZUF1dG9tYXRpb25DYXBhYmlsaXRpZXMoKSBjb25zdApAQCAtMjI4MSwxMCArMjAz
Niw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ3VycmVudE1vZGlmaWUKICNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIHRvRG9tYWluLCBPcHRpb25TZXQ8Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zl
cjo6RmxhZz4gbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciB3
ZWJQYWdlUHJveHlJRCwgUGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKQogewotICAgIGlmICghbV9u
ZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+
ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9t
YWluLCB0b0RvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdl
YlBhZ2VJRCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGlkQ29tbWl0
Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0b0Rv
bWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRm9y
VGVzdGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZmlyc3RQYXJ0eURvbWFpbiwgY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mIHRoaXJkUGFydHlEb21haW4sIGJvb2wgc2hvdWxkU2NoZWR1bGVO
b3RpZmljYXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTIzMTAsOCArMjA2Miw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFdlYlByb2Nl
c3NIYXNVcGwKICAgICBpZiAobV9wcm9jZXNzZXNXaXRoVXBsb2Fkcy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJUaGUgbnVtYmVyIG9mIHVwbG9h
ZHMgaW4gcHJvZ3Jlc3MgaXMgbm93IG9uZS4gVGFraW5nIE5ldHdvcmtpbmcgYW5kIFVJIHByb2Nl
c3MgYXNzZXJ0aW9ucy4iKTsKIAotICAgICAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0g
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRha2VVcGxvYWRBc3NlcnRpb24oKTsKKyAgICAgICAg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkudGFrZVVwbG9hZEFzc2VydGlvbigpOwog
ICAgICAgICAKICAgICAgICAgQVNTRVJUKCFtX3VpUHJvY2Vzc1VwbG9hZEFzc2VydGlvbik7CiAg
ICAgICAgIG1fdWlQcm9jZXNzVXBsb2FkQXNzZXJ0aW9uID0gbWFrZVVuaXF1ZTxQcm9jZXNzQXNz
ZXJ0aW9uPihnZXRDdXJyZW50UHJvY2Vzc0lEKCksICJXZWJLaXQgdXBsb2FkcyJfcywgQXNzZXJ0
aW9uU3RhdGU6OlVuYm91bmRlZE5ldHdvcmtpbmcpOwpAQCAtMjMzNiw4ICsyMDg3LDcgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJXZWJQcm9jZXNzSGFzVQogICAgIGlmIChtX3Byb2Nlc3Nl
c1dpdGhVcGxvYWRzLmlzRW1wdHkoKSkgewogICAgICAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3Vz
cGVuc2lvbiwgIlRoZSBudW1iZXIgb2YgdXBsb2FkcyBpbiBwcm9ncmVzcyBpcyBub3cgemVyby4g
UmVsZWFzaW5nIE5ldHdvcmtpbmcgYW5kIFVJIHByb2Nlc3MgYXNzZXJ0aW9ucy4iKTsKIAotICAg
ICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PmNsZWFyVXBsb2FkQXNzZXJ0aW9uKCk7CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLmNsZWFyVXBsb2FkQXNzZXJ0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBBU1NF
UlQobV91aVByb2Nlc3NVcGxvYWRBc3NlcnRpb24pOwogICAgICAgICBtX3VpUHJvY2Vzc1VwbG9h
ZEFzc2VydGlvbiA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmgJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDYgQEAgT0JKQ19D
TEFTUyBOU1N0cmluZzsKIAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRvbWF0aW9uQ2xpZW50
OwotY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogY2xhc3MgRG93bmxvYWRDbGll
bnQ7CiBjbGFzcyBIVFRQQ29va2llU3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNsaWVudDsK
QEAgLTE3NCw3ICsxNzMsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0b3J5Q2xpZW50KHN0
ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmKTsKICAgICB2
b2lkIHNldERvd25sb2FkQ2xpZW50KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiYmKTsK
ICAgICB2b2lkIHNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21h
dGlvbkNsaWVudD4mJik7Ci0gICAgdm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYm
KTsKIAogICAgIHZvaWQgc2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVy
KGNvbnN0IFN0cmluZyYpOwogICAgIGNvbnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZp
Y2VCdW5kbGVJZGVudGlmaWVyKCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT5jdXN0b21XZWJD
b250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKTsgfQpAQCAtMzA0LDggKzMwMiw2IEBAIHB1
YmxpYzoKICAgICBBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xpZW50
KCkgeyByZXR1cm4gKm1faGlzdG9yeUNsaWVudDsgfQogICAgIFdlYkNvbnRleHRDbGllbnQmIGNs
aWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKLSAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgY29uc3QgeyByZXR1cm4g
Km1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OyB9Ci0KICAgICBzdHJ1Y3QgU3RhdGlzdGlj
cyB7CiAgICAgICAgIHVuc2lnbmVkIHdrVmlld0NvdW50OwogICAgICAgICB1bnNpZ25lZCB3a1Bh
Z2VDb3VudDsKQEAgLTMxMyw5ICszMDksNiBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBzdGF0aWMg
U3RhdGlzdGljcyYgc3RhdGlzdGljcygpOyAgICAKIAotICAgIHZvaWQgdXNlVGVzdGluZ05ldHdv
cmtTZXNzaW9uKCk7Ci0gICAgYm9vbCBpc1VzaW5nVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb247IH0KLQogICAgIHZv
aWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCk7CiAKICAgICB2
b2lkIGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKQEAgLTM4Miw4ICszNzUsOCBAQCBwdWJsaWM6
CiAKICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFuYWdlbWVudAogICAgIE5ldHdvcmtQcm9jZXNz
UHJveHkmIGVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRl
RGF0YVN0b3JlID0gbnVsbHB0cik7Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1By
b2Nlc3MoKSB7IHJldHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9Ci0gICAgdm9pZCBuZXR3
b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFZlY3RvcjxzdGQ6OnBhaXI8
UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseT4+JiYpOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzKCkgeyByZXR1cm4gJk5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpOyB9CisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1By
b2Nlc3NQcm94eSYpOwogCiAgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2Vi
UHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCkBAIC01MjgsNiArNTIxLDE3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7CiAg
ICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4g
bV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9CiAKKyAgICBzdGF0aWMgdm9pZCBw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycyYpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzV2l0aEN1c3Rv
bVByb3RvY29sSGFuZGxlcnMoKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgc3Rh
dGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBw
YXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNo
ZXNEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3Rv
cnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwor
I2VuZGlmCisKIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIApAQCAt
NTQzLDggKzU0Nyw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlcXVlc3RXZWJDb250ZW50U3Rh
dGlzdGljcyhTdGF0aXN0aWNzUmVxdWVzdCYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwotCiAg
ICAgdm9pZCBoYW5kbGVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSk7CiAgICAgdm9pZCBoYW5kbGVT
eW5jaHJvbm91c01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
TmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFVzZXJEYXRhJiYpPiYmKTsKIApAQCAtNTY5LDE0ICs1NzEsNiBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCB1c2VzU2luZ2xlV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmlndXJhdGlv
bi0+dXNlc1NpbmdsZVdlYlByb2Nlc3MoKTsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMg
U3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgbmV0d29y
a2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hl
c0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0
b3J5KCk7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcmVnaXN0ZXJO
b3RpZmljYXRpb25PYnNlcnZlcnMoKTsKICAgICB2b2lkIHVucmVnaXN0ZXJOb3RpZmljYXRpb25P
YnNlcnZlcnMoKTsKQEAgLTYyNyw3ICs2MjEsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+IG1fYXV0b21hdGlvbkNsaWVudDsKICAgICBVbmlx
dWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4gbV9kb3dubG9hZENsaWVudDsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4gbV9oaXN0b3J5Q2xpZW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4g
bV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiAKICAgICBSZWZQdHI8V2ViQXV0b21hdGlv
blNlc3Npb24+IG1fYXV0b21hdGlvblNlc3Npb247CiAKQEAgLTY5NCw4ICs2ODcsNiBAQCBwcml2
YXRlOgogCiAgICAgYm9vbCBtX3Byb2Nlc3NUZXJtaW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2Vz
czsKLQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBt
X2RpY3Rpb25hcnlDYWxsYmFja3M7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFN0YXRp
c3RpY3NSZXF1ZXN0Pj4gbV9zdGF0aXN0aWNzUmVxdWVzdHM7CiAKQEAgLTc5NSwxNSArNzg2LDE1
IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCiB7Ci0gICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOworICAg
IGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5jYW5TZW5kTWVzc2FnZSgpKQor
ICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKHN0ZDo6Zm9yd2Fy
ZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3Nhcnko
VCYmIG1lc3NhZ2UpCiB7CiAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSks
IDApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAJKHJldmlzaW9uIDI1MjI3
NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw2IEBAIG5hbWVzcGFjZSBBUEkgewogSFRUUENv
b2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJz
aXRlRGF0YVN0b3JlKQogICAgIDogbV9vd25pbmdEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkK
IHsKLSAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3Jh
Z2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmlj
YXRpb25zKCk7CiB9CiAKIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCkBAIC00
OSwxMDQgKzQ3LDQwIEBAIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCiAgICAg
QVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFtX29ic2VydmVkQ29v
a2llTWFuYWdlclByb3h5KTsKICAgICBBU1NFUlQoIW1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2
ZXIpOwotCi0gICAgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwog
fQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tp
ZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+IGFsbENvb2tpZXM7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAg
ICAgICAgICAgIGFsbENvb2tpZXMgPSBnZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVD
b29raWVzKCk7Ci0gICAgICAgIGFsbENvb2tpZXMuYXBwZW5kVmVjdG9yKG1fb3duaW5nRGF0YVN0
b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLQotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGFsbENv
b2tpZXNdICgpIG11dGFibGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoYWxsQ29v
a2llcyk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byog
Y29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+Z2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIFtwb29sID0gV1RGTW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOworICAgIGNvb2tpZU1hbmFn
ZXIuZ2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgewogICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihjb29raWVzKTsKICAgICB9KTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldENv
b2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0g
bV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMo
KTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29raWVz
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogcGVuZGluZ0Nvb2tpZXMgdXNlZCBmb3IgZGVmYXVs
dFNlc3Npb24gYmVjYXVzZSBzZXNzaW9uIGNvb2tpZXMgY2Fubm90IGJlIHByb3BhZ2F0ZWQgdG8g
TmV0d29yayBQcm9jZXNzIHdpdGggdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuCi0g
ICAgICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAg
ICAgICAgIHNldENvb2tpZUluRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9vd25pbmdEYXRhU3RvcmUtPmFkZFBl
bmRpbmdDb29raWUoY29va2llKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29r
aWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llcywgW3Bvb2wgPSBXVEZN
b3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKKyAg
ICBhdXRvJiBjb29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNp
bmdsZXRvbigpOworICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmIGNvb2tpZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JD
b29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKQotICAgICAgICAgICAgZGVsZXRlQ29va2ll
RnJvbURlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb29raWUp
OwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZSht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgW3Bvb2wgPSBXVEZNb3ZlKHBv
b2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1dG8m
IGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9u
KCk7CisgICAgY29va2llTWFuYWdlci5kZWxldGVDb29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNl
c3Npb25JRCgpLCBjb29raWUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0Rh
dGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlm
ICghcG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5p
c0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgZGVsZXRlQ29va2llc0luRGVmYXVsdFVJUHJvY2Vz
c0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRv
KiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVBbGxDb29raWVzKG1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2Vy
LmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKICAgICAv
LyBGSVhNRTogVGhlIENvbXBsZXRpb25IYW5kbGVyIHNob3VsZCBiZSBwYXNzZWQgdG8gV2ViQ29v
a2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzLgogICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdlYktpdDo6SFRUUENvb2tpZUFjY2Vw
dFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29s
Rm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAg
aWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAg
ICAgICAgIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVT
dG9yZShwb2xpY3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byog
Y29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2llTWFuYWdl
ci5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgcG9saWN5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIGNsYXNzIEFQSVdl
YkNvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyIDogcHVibGljIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6T2JzZXJ2ZXIgewpAQCAtMTgyLDIxICsxMTYsNyBAQCB2b2lkIEhUVFBDb29raWVTdG9yZTo6
cmVnaXN0ZXJPYnNlcnZlcihPCiAKICAgICBtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyID0g
bWFrZVVuaXF1ZTxBUElXZWJDb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcj4oKnRoaXMpOwogCi0g
ICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgQVNTRVJUKCFt
X29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMpOwotCi0gICAgICAgIC8vIExpc3RlbiBmb3IgY29v
a2llIG5vdGlmaWNhdGlvbnMgaW4gdGhlIFVJUHJvY2VzcyBpbiB0aGUgbWVhbnRpbWUuCi0gICAg
ICAgIHN0YXJ0T2JzZXJ2aW5nQ2hhbmdlc1RvRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKFt0
aGlzXSAoKSB7Ci0gICAgICAgICAgICBjb29raWVzRGlkQ2hhbmdlKCk7Ci0gICAgICAgIH0pOwot
Ci0gICAgICAgIG1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyA9IHRydWU7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+
c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2Vy
dmVkQ29va2llTWFuYWdlclByb3h5ID0gJldlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
aW5nbGV0b24oKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9i
c2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclBy
b3h5T2JzZXJ2ZXIpOwogfQogCkBAIC0yMzEsNDYgKzE1MSwxMCBAQCB2b2lkIEhUVFBDb29raWVT
dG9yZTo6Y29va2llc0RpZENoYW5nZSgpCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llTWFu
YWdlckRlc3Ryb3llZCgpCiB7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+dW5y
ZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2ll
TWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkg
PSBudWxscHRyOwotCi0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNz
UG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0KLSAgICBpZiAoIXBvb2wpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5z
dXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2
ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNp
bmdsZXRvbigpOwogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2Jz
ZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJv
eHlPYnNlcnZlcik7CiB9CiAKLXZvaWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3RlckZvck5ld1By
b2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAgQVNTRVJUKCFtX3Byb2Nlc3NQb29sQ3Jl
YXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlz
dGVuZXJJZGVudGlmaWVyID0gV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVh
dGlvbkxpc3RlbmVyKFt0aGlzXShXZWJQcm9jZXNzUG9vbCYgbmV3UHJvY2Vzc1Bvb2wpIHsKLSAg
ICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wobmV3
UHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE5vdyB0aGF0
IGFuIGFzc29jaWF0ZWQgcHJvY2VzcyBwb29sIGV4aXN0cywgd2UgbmVlZCB0byBmbHVzaCB0aGUg
VUkgcHJvY2VzcyBjb29raWUgc3RvcmUKLSAgICAgICAgLy8gdG8gbWFrZSBzdXJlIGFueSBjaGFu
Z2VzIGFyZSByZWZsZWN0ZWQgd2l0aGluIHRoZSBuZXcgcHJvY2VzcyBwb29sLgotICAgICAgICBm
bHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwotICAgICAgICBuZXdQcm9jZXNzUG9v
bC5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotCi0gICAgICAgIGlmIChtX2Nvb2tpZU1hbmFnZXJQ
cm94eU9ic2VydmVyKSB7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5
ID0gbmV3UHJvY2Vzc1Bvb2wuc3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVy
T2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2Vy
UHJveHlPYnNlcnZlcik7Ci0gICAgICAgIH0KLSAgICAgICAgdW5yZWdpc3RlckZvck5ld1Byb2Nl
c3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIH0pOwotfQotCi12b2lkIEhUVFBDb29raWVTdG9y
ZTo6dW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpCi17Ci0gICAgaWYg
KG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcikKLSAgICAgICAgV2ViUHJv
Y2Vzc1Bvb2w6OnVucmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIobV9wcm9jZXNz
UG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVh
dGlvbkxpc3RlbmVySWRlbnRpZmllciA9IDA7Ci19Ci0KICNpZiAhUExBVEZPUk0oQ09DT0EpCiB2
b2lkIEhUVFBDb29raWVTdG9yZTo6Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKSB7
IH0KIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IEhUVFBDb29raWVTdG9yZTo6Z2V0QWxsRGVmYXVs
dFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpIHsgcmV0dXJuIHsgfTsgfQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAkocmV2
aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29r
aWVTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw5ICs4MCw2IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgSFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYpOwogCi0g
ICAgdm9pZCByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIHZv
aWQgdW5yZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotCiAgICAgc3Rh
dGljIHZvaWQgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKICAgICBzdGF0aWMg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
Q29va2llcygpOwogICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUluRGVmYXVsdFVJUHJvY2Vzc0Nv
b2tpZVN0b3JlKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MjYsOSArNDI2LDkgQEAgdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9TZXJ2ZXIoV0tDb250
ZQogewogfQogCi1XS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihX
S0NvbnRleHRSZWYgY29udGV4dFJlZikKK1dLQ29va2llTWFuYWdlclJlZiBXS0NvbnRleHRHZXRD
b29raWVNYW5hZ2VyKFdLQ29udGV4dFJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShX
ZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKSk7CiB9CiAKIFdLV2Vic2l0ZURhdGFTdG9yZVJl
ZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZikKQEAgLTU0NSw5ICs1
NDUsOCBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjCiAgICAgV2Vi
S2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGlt
ZXJFbmFibGVkKGVuYWJsZSk7CiB9CiAKLXZvaWQgV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtT
ZXNzaW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KQordm9pZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0
d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmKQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQp
LT51c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oKTsKIH0KIAogdm9pZCBXS0NvbnRleHRTZXRBbGxv
d3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRl
eHQsIGJvb2wgYWxsb3dzKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tD
b250ZXh0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dFByaXZhdGUuaAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05
Nyw3ICs5Nyw3IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTEMKIFdL
X0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vydmlj
ZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmLCBib29sKTsKIAogLy8gVGVzdCBvbmx5LiBTaG91
bGQgYmUgY2FsbGVkIGJlZm9yZSBhbnkgc2Vjb25kYXJ5IHByb2Nlc3NlcyBhcmUgc3RhcnRlZC4K
LVdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRl
eHRSZWYgY29udGV4dCk7CitXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0d29y
a1Nlc3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiAKIC8v
IFRlc3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgcnVubmluZyBhIHRlc3QuCiBXS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLQ29udGV4dFJlZiBj
b250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nl
c3NQb29sLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1Byb2Nlc3NQb29sLm1tCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjAw
LDI2ICsyMDAsOCBAQCAtICh2b2lkKV9zZXRDYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhCiB7
CiB9CiAKLXN0YXRpYyBXZWJLaXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgdG9IVFRQQ29va2ll
QWNjZXB0UG9saWN5KE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCi17Ci0gICAgc3dp
dGNoIChzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihwb2xpY3kpKSB7Ci0gICAgY2FzZSBOU0hUVFBD
b29raWVBY2NlcHRQb2xpY3lBbHdheXM6Ci0gICAgICAgIHJldHVybiBXZWJLaXQ6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3k6OkFsd2F5c0FjY2VwdDsKLSAgICBjYXNlIE5TSFRUUENvb2tpZUFjY2Vw
dFBvbGljeU5ldmVyOgotICAgICAgICByZXR1cm4gV2ViS2l0OjpIVFRQQ29va2llQWNjZXB0UG9s
aWN5OjpOZXZlcjsKLSAgICBjYXNlIE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFp
bkRvY3VtZW50RG9tYWluOgotICAgICAgICByZXR1cm4gV2ViS2l0OjpIVFRQQ29va2llQWNjZXB0
UG9saWN5OjpPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKLSAgICBjYXNlIE5TSFRUUENvb2tp
ZUFjY2VwdFBvbGljeUV4Y2x1c2l2ZWx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjoKLSAgICAgICAg
cmV0dXJuIFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6RXhjbHVzaXZlbHlGcm9tTWFp
bkRvY3VtZW50RG9tYWluOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBXZWJLaXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6OkFsd2F5c0FjY2VwdDsKLX0K
LQogLSAodm9pZClfc2V0Q29va2llQWNjZXB0UG9saWN5OihOU0hUVFBDb29raWVBY2NlcHRQb2xp
Y3kpcG9saWN5CiB7Ci0gICAgX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5PigpLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kp
LCBbXSgpIHsgfSk7CiB9CiAKIC0gKGlkKV9vYmplY3RGb3JCdW5kbGVQYXJhbWV0ZXI6KE5TU3Ry
aW5nICopcGFyYW1ldGVyCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRDb29raWVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjUyMjc0KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYzLDcgQEAgc3RydWN0IF9XZWJLaXRDb29raWVN
YW5hZ2VyUHJpdmF0ZSB7CiAKICAgICB+X1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlKCkKICAg
ICB7Ci0gICAgICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJHZXRQcm9jZXNzUG9vbHMoZGF0YU1hbmFnZXIpKQotICAgICAgICAgICAgcHJvY2Vzc1Bv
b2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVPYnNlcnZl
ckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsKKyAgICAgICAgV2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgp
LCBudWxscHRyKTsKICAgICB9CiAKICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFN
YW5hZ2VyOwpAQCAtMTQwLDExICsxMzksOSBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRD
b29raWVNYW5hZ2VyCiB7CiAgICAgV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciA9IFdFQktJ
VF9DT09LSUVfTUFOQUdFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQ09PS0lFX01BTkFHRVIs
IG51bGxwdHIpKTsKICAgICBtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlciA9IGRhdGFNYW5hZ2Vy
OwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKSB7Ci0gICAgICAgIHBy
b2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2ll
T2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW21hbmFnZXJdIHsK
LSAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7
Ci0gICAgICAgIH0pOwotICAgIH0KKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRv
bigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tDSEFO
R0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1hbmFnZXI7CiB9CiAKQEAgLTE3NCw4ICsx
NzEsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVuCiAgICAgaWYg
KHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xz
KG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFn
ZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJz
aXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2luZ2xldG9uKCkuc2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6
OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0
b3JhZ2UpKTsKIH0KIAogLyoqCkBAIC0xODksOCArMTg1LDcgQEAgdm9pZCB3ZWJraXRfY29va2ll
X21hbmFnZXJfc2V0X2FjY2VwdF9wbwogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wg
OiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+
ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7
CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5zZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQ
b2xpY3kocG9saWN5KSwgW10oKSB7IH0pOwogfQogCiAvKioKQEAgLTIxMSwxNCArMjA2LDcgQEAg
dm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wbwogCiAgICAgR1JlZlB0cjxH
VGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBj
YWxsYmFjaywgdXNlckRhdGEpKTsKIAotICAgIC8vIFRoZSBwb2xpY3kgaXMgdGhlIHNhbWUgaW4g
YWxsIHByb2Nlc3MgcG9vbHMgaGF2aW5nIHRoZSBzYW1lIHNlc3Npb24gSUQsIHNvIGp1c3QgYXNr
IGFueS4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIGlm
IChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGdfdGFza19yZXR1cm5faW50KHRh
c2suZ2V0KCksIFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFn
ZXItPnByaXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKEhUVFBDb29raWVB
Y2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0
b24oKS5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgp
LCBbdGFzayA9IFdURk1vdmUodGFzayldKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7
CiAgICAgICAgIGdfdGFza19yZXR1cm5faW50KHRhc2suZ2V0KCksIHRvV2ViS2l0Q29va2llQWNj
ZXB0UG9saWN5KHBvbGljeSkpOwogICAgIH0pOwogfQpAQCAtMjYzLDExICsyNTEsNyBAQCB2b2lk
IHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKFdlCiAgICAgZ19yZXR1cm5faWZfZmFp
bChjb29raWUpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tf
bmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8v
IENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFz
ZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhl
bSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1
dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29s
cyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBw
bGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llcyhtYW5hZ2VyLT5wcml2
LT5zZXNzaW9uSUQoKSwgeyBXZWJDb3JlOjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1v
dmUodGFzayldKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0
Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJDb3JlOjpDb29raWUoY29v
a2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJu
X2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9CkBAIC0zMTQsMTEgKzI5OCw3
IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzKFcKICAgICBnX3JldHVy
bl9pZl9mYWlsKHVyaSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdf
dGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0g
ICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRh
dGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2Vz
cyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29u
c3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vz
c1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0t
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVzKG1hbmFnZXIt
PnByaXYtPnNlc3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0
YXNrID0gV1RGTW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tp
ZXMpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldENvb2tpZXMo
bWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1
cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2ll
PiYgY29va2llcykgewogICAgICAgICBHTGlzdCogY29va2llc0xpc3QgPSBudWxscHRyOwogICAg
ICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpCiAgICAgICAgICAgICBjb29raWVzTGlz
dCA9IGdfbGlzdF9wcmVwZW5kKGNvb2tpZXNMaXN0LCBjb29raWUudG9Tb3VwQ29va2llKCkpOwpA
QCAtMzcyLDExICszNTIsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29v
a2llCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4g
dGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFj
aywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3Rv
IHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0
aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJv
Y2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVE
YXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0g
ICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+
ZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUo
Y29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnNpbmdsZXRvbigpLmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQo
KSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAg
ICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM1Nyw4ICsxMzU3LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6YWRkU2luZ2xlQ29vawogICAgIGlmICghY29va2llT2JqZWN0LmdldEJvb2xlYW4oImh0
dHBPbmx5Il9zLCBjb29raWUuaHR0cE9ubHkpKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRl
ciAnaHR0cE9ubHknIHdhcyBub3QgZm91bmQuIik7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKHBhZ2UtPndlYnNp
dGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrID0gY2FsbGJh
Y2suY29weVJlZigpXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigp
LnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tp
ZSB9LCBbY2FsbGJhY2sgPSBjYWxsYmFjay5jb3B5UmVmKCldKCkgewogICAgICAgICBjYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsKIH0KQEAgLTEzNzQsOCArMTM3Myw3IEBAIHZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2sKIAogICAgIFN0cmluZyBob3N0ID0g
YWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5
KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
cyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlB
ZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnNpbmdsZXRvbigpLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURh
dGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZO
ZWVkZWQoaG9zdCkgfSk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldFNlc3Np
b25QZXJtaXNzaW9ucyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT4+JiBvdXRfcGVy
bWlzc2lvbnMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNz
UG9vbENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlByb2Nlc3NQb29sQ29jb2EubW0JKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0JKHdvcmtpbmcgY29weSkK
QEAgLTEwOCw4ICsxMDgsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVl
ZGVkCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRl
KCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVk
KCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFByb2Nlc3NTdXBw
cmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKIAogI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGlmICghbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNh
YmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCkpCkBAIC0xMzksOCArMTM4LDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKAogCiAgICAgaWYgKCFbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2ViS2l0U3VwcHJlc3NNZW1v
cnlQcmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1lbW9yeVByZXNzdXJlSGFuZGxl
cigpOwotCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlx
dWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKTsKIH0KIAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCkBAIC0yNzMsMjQgKzI3MCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZU4KIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtO
U1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAgIGJv
b2wgaXNTYWZhcmkgPSBmYWxzZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBp
c1NhZmFyaSA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01vYmlsZVNhZmFyaSgpOwotI2Vs
aWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6Ok1hY0FwcGxpY2F0
aW9uOjppc1NhZmFyaSgpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSkgewotICAgICAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuaHR0cFByb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5
OihOU1N0cmluZyAqKVdlYktpdDJIVFRQUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuaHR0cHNQcm94eSA9IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNT
dHJpbmcgKilXZWJLaXQySFRUUFNQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBwYXJhbWV0ZXJzLmVuYWJsZUxlZ2FjeVRMUyA9IHRydWU7Ci0gICAgaWYgKGlkIHZh
bHVlID0gW2RlZmF1bHRzIG9iamVjdEZvcktleTpAIldlYktpdEVuYWJsZUxlZ2FjeVRMUyJdKQot
ICAgICAgICBwYXJhbWV0ZXJzLmVuYWJsZUxlZ2FjeVRMUyA9IFt2YWx1ZSBib29sVmFsdWVdOwot
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmVuYWJsZUxlZ2FjeVRMUyA9IHBhcmFtZXRlcnMuZW5hYmxlTGVnYWN5VExTOwot
CiAgICAgcGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dCA9IGFkb3B0Q0YoX0NGTmV0d29ya0Nv
cHlBVFNDb250ZXh0KCkpOwogCiAgICAgcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVBy
ZXNzdXJlSGFuZGxlciA9IFtkZWZhdWx0cyBib29sRm9yS2V5OldlYktpdFN1cHByZXNzTWVtb3J5
UHJlc3N1cmVIYW5kbGVyRGVmYXVsdHNLZXldOwpAQCAtMzAxLDggKzI4MCw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBwYXJhbWV0ZXJzLnVpUHJvY2Vz
c0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyID0gaWRlbnRpZnlpbmdEYXRhRnJvbUNvb2tpZVN0b3Jh
Z2UoW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBfY29va2ll
U3RvcmFnZV0pOwogI2VuZGlmCiAKLSAgICBwYXJhbWV0ZXJzLnN0b3JhZ2VBY2Nlc3NBUElFbmFi
bGVkID0gc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoKTsKLQogICAgIHBhcmFtZXRlcnMuc2hvdWxk
RW5hYmxlSVRQRGF0YWJhc2UgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIkludGVybmFsRGVidWclQCIsIFdlYlByZWZlcmVuY2VzS2V5Ojppc0lUUERh
dGFiYXNlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKIAogICAgIHBhcmFt
ZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xG
b3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlBy
ZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3Jl
YXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAkocmV2aXNpb24gMjUyMjc0
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksOSArMTA5LDYgQEAgdm9pZCBEb3dubG9hZFByb3h5
TWFwOjpkb3dubG9hZEZpbmlzaGVkKAogCiAgICAgUkVMRUFTRV9MT0coTG9hZGluZywgIlJlbW92
aW5nIGRvd25sb2FkICUiIFBSSXU2NCAiIGZyb20gVUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAi
LCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAKLSAgICAvLyBUaGUgRG93bmxvYWRQcm94eSBt
YXkgYmUgaG9sZGluZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIHByb2Nlc3MgcG9vbC4KLSAg
ICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZlB0cihtX3Byb2Nlc3MtPnByb2Nl
c3NQb29sKCkpOwotCiAgICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQp
KTsKIAogICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3du
bG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgp
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
ck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlN
ZXNzYWdlcy5oIgogI2VuZGlmCisjaW5jbHVkZSAiTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFn
ZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIK
QEAgLTUwLDcgKzUxLDYgQEAKICNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKLSNpbmNs
dWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmgiCkBAIC02OSw2ICs2OSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9z
cGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNs
dWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNlbmRpZgorCiAjZGVm
aW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9u
LCBjb25uZWN0aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtODEsMTggKzg1LDg0IEBA
IHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZUNhbGxiYWNrSUQoKQogICAgIHJldHVybiArK2NhbGxi
YWNrSUQ7CiB9CiAKLU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2Vi
UHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHBy
b2Nlc3NQb29sLmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9j
ZXNzUG9vbChwcm9jZXNzUG9vbCkKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nl
c3NQcm94eT4mIGdsb2JhbE5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8c3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBuZXR3b3JrUHJvY2Vz
czsKKyAgICByZXR1cm4gbmV0d29ya1Byb2Nlc3M7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHkm
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpCit7CisgICAgaWYgKCFnbG9iYWxOZXR3
b3JrUHJvY2VzcygpKSB7CisgICAgICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNzKCkgPSBtYWtlVW5p
cXVlPE5ldHdvcmtQcm9jZXNzUHJveHk+KCk7CisgICAgICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNz
KCktPnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICB9CisgICAgcmV0
dXJuICpnbG9iYWxOZXR3b3JrUHJvY2VzcygpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeShWZWN0b3I8c3RkOjpwYWly
PFJlZjxXZWJQcm9jZXNzUHJveHk+LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHk+PiYmIHBlbmRpbmdSZXF1ZXN0cykKK3sK
KyAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpID0gbnVsbHB0cjsKKyAgICBpZiAocGVuZGluZ1Jl
cXVlc3RzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIG5ld05ldHdvcmtQ
cm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CisgICAgZm9yIChhdXRv
JiByZXF1ZXN0IDogcGVuZGluZ1JlcXVlc3RzKQorICAgICAgICBuZXdOZXR3b3JrUHJvY2Vzcy5n
ZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24ocmVxdWVzdC5maXJzdC5nZXQoKSwgV1RGTW92ZShy
ZXF1ZXN0LnNlY29uZCkpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVh
dGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZv
ciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KKyAgICAvLyBXZSBz
aG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hl
Y2sgb24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAgICAgIGNh
bGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10geworICAgICAgICAgICAgc2VuZENyZWF0aW9u
UGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKKyAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSgpOworICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CisjZW5kaWYKKyAgICBwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0g
TGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmhzdHNTdG9yYWdlRGlyZWN0b3J5KCk7
CisgICAgaWYgKCFwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKQorICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rvcnko
cGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0
b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOworICAgIHBhcmFtZXRlcnMudXJsU2No
ZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1Zl
Y3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJB
c0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNj
aGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5n
czo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOworICAgIHBhcmFtZXRl
cnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUds
b2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7
CisgICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLmNhY2hlTW9kZWwoKTsKKyAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IFdlYlByb2Nlc3NQ
b29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKKyAgICAgICAgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2No
ZW1lKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChTdHJpbmcgY29va2llU3Rv
cmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7
ICFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CisgICAgaWYgKFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9v
bDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOyAhY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5
LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVh
ZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250
YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgcGFy
ZW50QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVjdG9y
eSgpOyAhcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKKyNlbmRpZgorICAgIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKKyAgICBwYXJhbWV0ZXJzLmRhdGFTdG9y
ZVBhcmFtZXRlcnMgPSBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzRnJvbUFsbFN0b3Jlcygp
OworICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1By
b2Nlc3MocGFyYW1ldGVycyksIDApOworfQorCisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdv
cmtQcm9jZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KCkKICNpZiBFTkFC
TEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQogICAgICwgbV9jdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eSgqdGhpcykKICNlbmRpZgotICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIHBy
b2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fdGhy
b3R0bGVyKCp0aGlzLCBmYWxzZSkKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAsIG1fY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50PigpKQorI2VuZGlmCiB7CiAgICAgY29ubmVjdCgpOwotCi0gICAgaWYgKGF1dG8q
IHdlYnNpdGVEYXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKSkKLSAg
ICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5zZXQod2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIG1ha2VSZWYoKndlYnNpdGVEYXRhU3RvcmUpKTsKIH0KIAogTmV0d29ya1Byb2Nlc3NQcm94
eTo6fk5ldHdvcmtQcm9jZXNzUHJveHkoKQpAQCAtMTE2LDExICsxODYsNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvCiB7CiAgICAgbGF1bmNoT3B0aW9ucy5wcm9j
ZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Ok5ldHdvcms7CiAgICAgQXV4
aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9wdGlvbnMpOwotCi0g
ICAgaWYgKHByb2Nlc3NQb29sKCkuc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZh
aWxGb3JUZXN0aW5nKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2woKS5zZXRTaG91bGRNYWtlTmV4
dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOwotICAgICAgICBsYXVu
Y2hPcHRpb25zLnNob3VsZE1ha2VQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB0cnVlOwot
ICAgIH0KIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4o
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTgxLDEyICsyNDYsMTIgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSQogICAgIH0KIH0KIAotRG93bmxvYWRQ
cm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0
YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0
KQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94
eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCiB7CiAgICAgaWYgKCFt
X2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlx
dWU8RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94
eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291
cmNlUmVxdWVzdCk7CisgICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxv
YWRQcm94eShkYXRhU3RvcmUsIHByb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QpOwogfQogCiB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9wdGlvblNl
dDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQgKFdlYnNpdGVEYXRhKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTI0NywxOCArMzEy
LDIwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nlc3MKIHsKICAgICBj
bGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxXZWJQ
cm9jZXNzUHJveHk+LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseT4+IHBlbmRpbmdSZXF1ZXN0czsKKyAgICBWZWN0b3I8
c3RkOjpwYWlyPFJlZjxXZWJQcm9jZXNzUHJveHk+LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5
OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseT4+IHBlbmRpbmdSZXF1
ZXN0czsKICAgICBwZW5kaW5nUmVxdWVzdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2Nvbm5l
Y3Rpb25SZXF1ZXN0cy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgcmVxdWVzdCA6IG1fY29ubmVj
dGlvblJlcXVlc3RzLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChyZXF1ZXN0LndlYlByb2Nlc3Mp
Ci0gICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMudW5jaGVja2VkQXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKG1ha2VSZWZQdHIocmVxdWVzdC53ZWJQcm9jZXNzLmdldCgpKSwgV1RGTW92ZShyZXF1ZXN0
LnJlcGx5KSkpOworICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3RzLnVuY2hlY2tlZEFwcGVuZCh7
ICpyZXF1ZXN0LndlYlByb2Nlc3MsIFdURk1vdmUocmVxdWVzdC5yZXBseSkgfSk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHJlcXVlc3QucmVwbHkoeyB9KTsKICAgICB9CiAgICAgbV9jb25u
ZWN0aW9uUmVxdWVzdHMuY2xlYXIoKTsKLQotICAgIC8vIFRlbGwgdGhlIG5ldHdvcmsgcHJvY2Vz
cyBtYW5hZ2VyIHRvIGZvcmdldCBhYm91dCB0aGlzIG5ldHdvcmsgcHJvY2VzcyBwcm94eS4gVGhp
cyB3aWxsIGNhdXNlIHVzIHRvIGJlIGRlbGV0ZWQuCi0gICAgbV9wcm9jZXNzUG9vbC5uZXR3b3Jr
UHJvY2Vzc0NyYXNoZWQoKnRoaXMsIFdURk1vdmUocGVuZGluZ1JlcXVlc3RzKSk7CisgICAgCisg
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9v
bHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7
CisgICAgCisgICAgYXR0ZW1wdFJlbGF1bmNoQWZ0ZXJDcmFzaElmTmVjZXNzYXJ5KFdURk1vdmUo
cGVuZGluZ1JlcXVlc3RzKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJD
YWxsYmFja1N0YXRlcygpCkBAIC0yNzgsOSArMzQ1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpkaWRSZWNlaXZlTWVzcwogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwg
ZGVjb2RlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29sLmRpc3Bh
dGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
ZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIp
OwogfQogCkBAIC0yOTQsOCArMzU4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRS
ZWNlaXZlU3luYwogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZENsb3NlKElQQzo6Q29u
bmVjdGlvbiYpCiB7Ci0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWYobV9w
cm9jZXNzUG9vbCk7Ci0KICAgICBpZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rv
d25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9Q
Uk9UT0NPTF9NQU5BR0VSKQpAQCAtMzUwLDExICs0MTIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmRpZFJlY2VpdmVBdXRoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
IXRvcE9yaWdpbiB8fCAhbV9wcm9jZXNzUG9vbC5pc1NlcnZpY2VXb3JrZXJQYWdlSUQocGFnZUlE
KSkgewotICAgICAgICBwcm9jZXNzQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uoc2Vzc2lvbklELCBX
VEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KICAgICBXZWJQYWdlUHJveHk6OmZvck1vc3RWaXNpYmxlV2ViUGFnZUlmQW55KHNlc3Npb25J
RCwgKnRvcE9yaWdpbiwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Np
b25JRCwgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKV0oYXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC00MDEsMTEgKzQ1OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6ZGlkRmluaXNoTGF1bmMKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29ubmVj
dGlvblJlcXVlc3QucmVwbHkoeyB9KTsKICAgICB9Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCi0gICAgICAg
IHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKICAgICAKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24g
PSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSkKQEAgLTExNTIsMTEgKzEyMDQs
NiBAQCBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3CiAgICAgaWYgKGl0
ZXJhdG9yICE9IG1fd2Vic2l0ZURhdGFTdG9yZXMuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdGVy
YXRvci0+dmFsdWUuZ2V0KCk7CiAKLSAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IG1f
cHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uSUQg
PT0gd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpCi0gICAgICAgICAgICByZXR1cm4gd2Vi
c2l0ZURhdGFTdG9yZTsKLSAgICB9Ci0KICAgICBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0x
MjIwLDcgKzEyNjcsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldFNhbmRib3hFeHRl
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpl
c3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoUmVnaXN0cmFi
bGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
ewotICAgIG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05l
dHdvcmtQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgc2Vzc2lvbklE
KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3JrZXJDb250ZXh0Q29ubmVjdGlv
bk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBA
IC0xMzMwLDIxICsxMzc2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMb2NhbFN0
b3JhZwogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24o
KQogewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkg
ewotICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRGb3JlZ3JvdW5kQWN0aXZp
dHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7Ci0gICAgICAgICAgICBtX2FjdGl2aXR5
RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0eSgiTmV0d29y
a2luZyBmb3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsKLSAgICAgICAgICAgIHNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvRm9yZWdyb3VuZCgpLCAw
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChwcm9jZXNzUG9v
bCgpLmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewotICAgICAgICBpZiAoIVByb2Nlc3NU
aHJvdHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9j
ZXNzZXMpKSB7Ci0gICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90
dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3VuZCBiYWNr
Z3JvdW5kIHZpZXcocykiX3MpOwotICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9CYWNrZ3JvdW5kKCksIDApOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMg
PSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCShy
ZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTAgQEAKICNpbmNs
dWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5oIgogI2VuZGlmCiAKK25hbWVz
cGFjZSBBUEkgeworY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OworfQorCiBuYW1l
c3BhY2UgUEFMIHsKIGNsYXNzIFNlc3Npb25JRDsKIH0KQEAgLTYyLDcgKzY2LDYgQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiAKIGNsYXNzIERvd25sb2FkUHJveHk7CiBjbGFzcyBEb3dubG9hZFByb3h5
TWFwOwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVy
U3RhdGlzdGljcyA6IGJvb2w7CiBlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NTdGF0dXMgOiB1aW50
OF90OwogZW51bSBjbGFzcyBXZWJzaXRlRGF0YUZldGNoT3B0aW9uOwpAQCAtODYsMTIgKzg5LDEz
IEBAIHB1YmxpYzoKICAgICB1c2luZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKICAgICB1c2luZyBPcGVuZXJEb21haW4gPSBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbjsKIAotICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJveHko
V2ViUHJvY2Vzc1Bvb2wmKTsKKyAgICBzdGF0aWMgTmV0d29ya1Byb2Nlc3NQcm94eSYgc2luZ2xl
dG9uKCk7CisgICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eSgpOwogICAgIH5OZXR3b3Jr
UHJvY2Vzc1Byb3h5KCk7CiAKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihX
ZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7CiAKLSAgICBEb3dubG9hZFByb3h5JiBjcmVh
dGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNp
dGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYpOwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAgICAgdm9pZCBkZWxl
dGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4s
IFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcik7CkBAIC0xNzIsOCArMTc2LDYgQEAgcHVibGljOgogICAgIFByb2Nlc3NU
aHJvdHRsZXImIHRocm90dGxlcigpIHsgcmV0dXJuIG1fdGhyb3R0bGVyOyB9CiAgICAgdm9pZCB1
cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bv
b2woKSB7IHJldHVybiBtX3Byb2Nlc3NQb29sOyB9Ci0KICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRF
TlNJT05TKQogICAgIHZvaWQgZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
KFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Jik7CiAjZW5kaWYKQEAgLTE5Niw3ICsxOTgs
MTQgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90
b2NvbChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lD
dXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKIAorI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9N
X1BST1RPQ09MX01BTkFHRVIpCisgICAgQVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQq
IGxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIHsgcmV0dXJuIG1fY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50LmdldCgpOyB9CisjZW5kaWYKKyAgICAKIHByaXZhdGU6CisgICAg
dm9pZCBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgc3RhdGljIHZv
aWQgYXR0ZW1wdFJlbGF1bmNoQWZ0ZXJDcmFzaElmTmVjZXNzYXJ5KFZlY3RvcjxzdGQ6OnBhaXI8
UmVmPFdlYlByb2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseT4+JiYpOworCiAgICAgLy8gQXV4aWxpYXJ5
UHJvY2Vzc1Byb3h5CiAgICAgdm9pZCBnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6
TGF1bmNoT3B0aW9ucyYpIG92ZXJyaWRlOwogICAgIHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQ
Qzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwpAQCAtMjU5LDggKzI2OCw2IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCwg
UmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bv
b2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBzdHJ1Y3QgQ29ubmVjdGlvblJlcXVlc3QgewogICAg
ICAgICBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4gd2ViUHJvY2VzczsKICAgICAgICAgTWVzc2Fn
ZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJl
cGx5IHJlcGx5OwpAQCAtMjkwLDYgKzI5Nyw5IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxQQUw6
OlNlc3Npb25JRCwgUmVmUHRyPFdlYnNpdGVEYXRhU3RvcmU+PiBtX3dlYnNpdGVEYXRhU3RvcmVz
OwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNzQXNzZXJ0aW9uPiBtX3VwbG9hZEFz
c2VydGlvbjsKKyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQorICAg
IHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2Nv
bHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNyArNDQsMjAgQEAgTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6On5MZWdhYwogCiB2b2lkIExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5OjpzdGFydExvYWRpbmcodWludDY0X3QgY3VzdG9tUHJvdG9j
b2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1f
bmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7Cisg
ICAgaWYgKGF1dG8qIGNsaWVudCA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmxl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpKQorICAgICAgICBjbGllbnQtPnN0YXJ0
TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKHVpbnQ2NF90IGN1c3Rv
bVByb3RvY29sSUQpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCku
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVBy
b3RvY29sSUQpOworICAgIGlmIChhdXRvKiBjbGllbnQgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS5sZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSkKKyAgICAgICAg
Y2xpZW50LT5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CiB9CiAKIHZvaWQg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQogewotICAgIG1f
bmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCgpLmludmFsaWRhdGUoKnRoaXMpOworICAgIGlmIChhdXRvKiBjbGllbnQgPSBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5sZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQoKSkKKyAgICAgICAgY2xpZW50LT5pbnZhbGlkYXRlKCp0aGlzKTsKIH0KIAogdm9pZCBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6d2FzUmVkaXJlY3RlZFRvUmVxdWVzdCh1aW50
NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2Up
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0
b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgxLDEzICs4MSwyMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFsbG93V2Vic2l0
ZURhdGFSCiAgICAgYWxsb3dzV2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lucyA9IHRydWU7
CiB9CiAKLXN0YXRpYyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4m
IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkKK3N0YXRpYyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBX
ZWJzaXRlRGF0YVN0b3JlKj4mIGFsbERhdGFTdG9yZXMoKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KGlzVUlUaHJlYWQoKSk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8UEFMOjpT
ZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPj4gbWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAK
K1ZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZTo6cGFy
YW1ldGVyc0Zyb21BbGxTdG9yZXMoKQoreworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycz4gYWxsUGFyYW1ldGVyczsKKyAgICBhbGxQYXJhbWV0ZXJzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoYWxsRGF0YVN0b3JlcygpLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBzdG9yZSA6
IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICAgICAgYWxsUGFyYW1ldGVycy51bmNoZWNr
ZWRBcHBlbmQoc3RvcmUtPnBhcmFtZXRlcnMoKSk7CisgICAgcmV0dXJuIGFsbFBhcmFtZXRlcnM7
Cit9CisKIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25Q
ZXJzaXN0ZW50KCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3Jl
KFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyks
IFBBTDo6U2Vzc2lvbklEOjpnZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTMs
NyArMTIyLDcgQEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8VwogI2Vu
ZGlmCiB7CiAgICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwot
ICAgIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vz
c2lvbklETWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwpAQCAtMTI1LDE0ICsxMzQsOSBAQCBXZWJzaXRlRGF0YVN0b3JlOjp+
V2Vic2l0ZURhdGFTdG9yZSgpCiAKICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIAotICAgIGlmICht
X3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAg
ICAgIEFTU0VSVChub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhp
cyk7Ci0gICAgICAgIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsK
LSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAgICAgICB9Ci0gICAgfQorICAgIEFT
U0VSVChhbGxEYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKKyAgICBhbGxE
YXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKIH0KIAogc3RhdGljIFJl
ZlB0cjxXZWJzaXRlRGF0YVN0b3JlPiYgZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpCkBAIC0xNjIs
MTcgKzE2NiwxNSBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFCiAg
ICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpOwogfQogCi12b2lkIFdlYnNpdGVE
YXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3ZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKIHsKLSAgICBpZiAobV9zZXNzaW9u
SUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBhdXRv
IHJlc3VsdCA9IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsK
LSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICB9
CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlz
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogfQogCiBX
ZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRh
U3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHJldHVy
biBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5vbkRl
ZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCkgOiBudWxscHRyOworICAgIHJldHVybiBh
bGxEYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKQEAgLTE4OCwxMiAr
MTkwLDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJvY2VzcwogICAgIG1f
cHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKIH0KIAotV2ViUHJvY2Vzc1Bvb2wqIFdlYnNpdGVE
YXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKQotewotICAg
IGF1dG8gcG9vbHMgPSBwcm9jZXNzUG9vbHMoMSwgZmFsc2UpOwotICAgIHJldHVybiBwb29scy5p
c0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKQogewogICAgIGlm
IChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC0yMDM0LDI5ICsyMDMwLDYgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZAogfQogI2VuZGlmCiAKLVZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+IFdlYnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gY29weVRvVmVjdG9yKG1fcGVuZGluZ0Nvb2tpZXMpOwotfQotCi12b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2ll
JiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmVJZihbJmNvb2tpZV0oYXV0
byYgcGVuZGluZ0Nvb2tpZSkgewotICAgICAgICByZXR1cm4gcGVuZGluZ0Nvb2tpZS5pc0tleUVx
dWFsKGNvb2tpZSk7Ci0gICAgfSk7Ci0gICAgbV9wZW5kaW5nQ29va2llcy5hZGQoY29va2llKTsK
LX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0IFdl
YkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlKGNv
b2tpZSk7Ci19Ci0gICAgCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tp
ZXMoKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMuY2xlYXIoKTsKLX0KLQogdWludDY0X3QgV2Vi
c2l0ZURhdGFTdG9yZTo6cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpIGNvbnN0CiB7
CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHdoZXRoZXIgYWxsb3dpbmcgdG8gc2V0IGEgcGVyVGhp
cmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSBmcm9tIGEgV2Vic2l0ZURhdGFTdG9yZS4KQEAgLTIx
MDEsNiArMjA3NCwxMCBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0
CiAKICAgICBwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogCisjaWYg
VVNFKFNPVVApCisgICAgV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigp
LmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCgpLCBwYXJhbWV0ZXJzLmNvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgcGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFn
ZVR5cGUpOworI2VuZGlmCisgICAgCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmgJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjE0LDE1ICsyMTQsMTAgQEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2Um
IGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKTsKICAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdl
YlByb2Nlc3NQb29sJikgY29uc3Q7CiAKICAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBw
YXJhbWV0ZXJzKCk7Ci0KLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5nQ29va2ll
cygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2ll
Jik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CisgICAgc3RhdGljIFZlY3RvcjxX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsKIAog
ICAgIHZvaWQgc2V0Qm91bmRJbnRlcmZhY2VJZGVudGlmaWVyKFN0cmluZyYmIGlkZW50aWZpZXIp
IHsgbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24tPnNldEJvdW5kSW50ZXJmYWNlSWRlbnRpZmllcihX
VEZNb3ZlKGlkZW50aWZpZXIpKTsgfQogICAgIGNvbnN0IFN0cmluZyYgYm91bmRJbnRlcmZhY2VJ
ZGVudGlmaWVyKCkgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24tPmJvdW5kSW50ZXJm
YWNlSWRlbnRpZmllcigpOyB9CkBAIC0zMjAsNyArMzE1LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGly
ZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVN
ZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBjb25zdCBI
YXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKIAotICAgIHZvaWQgbWF5YmVS
ZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2b2lkIHJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCgpOwogCiAgICAgY29uc3QgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAKQEAgLTM0
OCw4ICszNDMsNiBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkN1cmxQcm94eVNldHRpbmdzIG1f
cHJveHlTZXR0aW5nczsKICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1f
cGVuZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBt
X3Byb2Nlc3NlczsKIAogICAgIGJvb2wgbV9uZXR3b3JraW5nSGFzQmVndW4geyBmYWxzZSB9OwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURh
dGFTdG9yZUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQkocmV2aXNpb24gMjUyMjc0
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURh
dGFTdG9yZUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsOCArMTY4LDYgQEAgV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdAogICAgIHBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IHNv
dXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOwogICAgIHBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllciA9
IHNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigpOwogCi0gICAgcGFyYW1ldGVy
cy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdDb29raWVzKTsKLQogICAg
IGlmICghY29va2llRmlsZS5pc0VtcHR5KCkpCiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShGaWxlU3lzdGVtOjpkaXJlY3RvcnlOYW1l
KGNvb2tpZUZpbGUpLCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxl
KTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJz
aXRlRGF0YVN0b3JlU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAJKHJldmlzaW9uIDI1
MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0
ZURhdGFTdG9yZVNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3IKIHsKICAgICBhdXRvJiBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsK
IAotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFn
ZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwg
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisgICAg
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2ll
UGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVy
c2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCShy
ZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eVNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAK
KyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFu
YWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKIApAQCAtMzQsNyAr
MzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUgc3Rv
cmFnZVR5cGUpCiB7CiAgICAgbV9jb29raWVQZXJzaXN0ZW50U3RvcmFnZU1hcC5zZXQoc2Vzc2lv
bklELCBzdGQ6Om1ha2VfcGFpcihzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKLSAgICBwcm9j
ZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBzdG9yYWdlUGF0aCwg
c3RvcmFnZVR5cGUpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5k
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShz
ZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3Jh
Z2VUeXBlJiBzdG9yYWdlVHlwZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAJKHJldmlzaW9uIDI1MjI3NCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsMTMgKzM3LDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKLSAgICBOZXR3b3Jr
U2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzID0gcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnM7Ci0gICAgc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlKGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIGRlZmF1
bHRTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIGRlZmF1bHRT
ZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAgIC8vIEZJ
WE1FOiBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5IHNob3VsZCBiZSBtb3ZlZCB0byB0
aGUgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAvLyBGSVhNRTogbV9pZ25vcmVUTFNFcnJvcnMgc2hv
dWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlIG9yIHJlbW92ZWQuCisgICAgLy8g
RklYTUU6IG1fbmV0d29ya1Byb3h5U2V0dGluZ3Mgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJz
aXRlRGF0YVN0b3JlLgogCi0gICAgcGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2lu
aXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5OwotICAgIHBhcmFtZXRlcnMuaWdub3JlVExTRXJy
b3JzID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAgcGFyYW1ldGVycy5sYW5ndWFnZXMgPSB1c2Vy
UHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgcGFyYW1ldGVycy5wcm94eVNldHRpbmdzID0gbV9u
ZXR3b3JrUHJveHlTZXR0aW5nczsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3Jl
VExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUyMzEwKQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTktMTEtMDkgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBVc2Ug
YSBOZXR3b3JrUHJvY2Vzc1Byb3h5IHNpbmdsZXRvbiBpbnN0ZWFkIG9mIG9uZSBwZXIgV2ViUHJv
Y2Vzc1Bvb2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwMzU0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbToK
KyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0p
OgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIGFsZXJ0Q29va2llSFRN
TF0pOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVs
ZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRl
ZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisKIDIwMTktMTEtMDkgIERl
YW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIENsaWNreSBPcmJpbmcgc3Vw
cG9ydC5hcHBsZS5jb20gY2F0ZWdvcmllcyBzaG93cyBhIFBORyBpbnN0ZWFkIG9mIHRoZSB3ZWIg
cGFnZSBwcmV2aWV3LCB0YXBwaW5nIGxvYWRzIGltYWdlIGFzc2V0IG9ubHkgaW5zdGVhZCBvZiB3
ZWIgcGFnZQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UTFNE
ZXByZWNhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tCShyZXZpc2lvbiAyNTIyNzQpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw5IEBACiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1w
b3J0ICJXZWJDb3JlVGVzdFN1cHBvcnQuaCIKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTIwMCw3ICsyMDIsOCBAQCBURVNUKFdlYktpdCwgVExT
VmVyc2lvbk5ldHdvcmtTZXNzaW9uKQogICAgICAgICBUQ1BTZXJ2ZXIgc2VydmVyKFRDUFNlcnZl
cjo6UHJvdG9jb2w6OkhUVFBTLCBbXShTU0wgKnNzbCkgewogICAgICAgICAgICAgRVhQRUNUX0ZB
TFNFKHNzbCk7CiAgICAgICAgIH0sIHRsczFfMSk7Ci0gICAgICAgIGF1dG8gd2ViVmlldyA9IG1h
a2VXZWJWaWV3V2l0aChbV0tXZWJzaXRlRGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdKTsKKyAg
ICAgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBb
W1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVh
c2VdOworICAgICAgICBhdXRvIHdlYlZpZXcgPSBtYWtlV2ViVmlld1dpdGgoW1tbV0tXZWJzaXRl
RGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dIGF1
dG9yZWxlYXNlXSk7CiAgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3Qg
cmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCJodHRwczovLzEyNy4wLjAuMTolZC8iLCBzZXJ2ZXIucG9ydCgpXV1dXTsKICAgICAg
ICAgW2RlbGVnYXRlIHdhaXRGb3JEaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uXTsKICAgICB9
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tp
ZVN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0JKHJldmlzaW9uIDI1MjI3NCkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0JKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMu
aCIKICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIlRlc3RXS1dl
YlZpZXcuaCIKICNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPFdlYktp
dC9XS0hUVFBDb29raWVTdG9yZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2
YXRlLmg+CkBAIC01MSw2ICs1Miw3IEBAIC0gKHZvaWQpY29va2llc0RpZENoYW5nZUluQ29va2ll
U3RvcmU6KFcKIC0gKHZvaWQpY29va2llc0RpZENoYW5nZUluQ29va2llU3RvcmU6KFdLSFRUUENv
b2tpZVN0b3JlICopY29va2llU3RvcmUKIHsKICAgICBBU1NFUlRfRVEoY29va2llU3RvcmUsIGds
b2JhbENvb2tpZVN0b3JlLmdldCgpKTsKKyAgICBXVEZMb2dBbHdheXMoIklOQ1JFTUVOVElORyBD
QUxMQkFDS1MiKTsKICAgICArK29ic2VydmVyQ2FsbGJhY2tzOwogfQogCkBAIC00NzUsOCArNDc3
LDYgQEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bgogfQogQGVuZAog
Ci0vLyBGSVhNRTogb24gaU9TLCBVSSBwcm9jZXNzIHNob3VsZCBiZSB1c2luZyB0aGUgc2FtZSBj
b29raWUgZmlsZSBhcyB0aGUgbmV0d29yayBwcm9jZXNzIGZvciBkZWZhdWx0IHNlc3Npb24uCi0j
aWYgUExBVEZPUk0oTUFDKQogZW51bSBjbGFzcyBTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWlu
ZyB7IE5vLCBZZXMgfTsKIHZvaWQgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bv
b2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdh
cm1pbmcpCiB7CkBAIC01ODUsMjAgKzU4NSw2NSBAQCBURVNUKFdlYktpdCwgV0tIVFRQQ29va2ll
U3RvcmVXaXRob3V0UHJvCiAgICAgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bv
b2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmc6Olllcyk7CiB9CiAKLSNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSA6
IE5TT2JqZWN0IDxXS1VJRGVsZWdhdGU+CistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTDsK
Ky0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2U7CiBAZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBD
aGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlCitAaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9u
Q29va2llVUlEZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfbWVzc2FnZTsKK30K
KwogLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVy
dFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOihX
S0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21w
bGV0aW9uSGFuZGxlcgogewotICAgIEVYUEVDVF9TVFJFUSgiU2Vzc2lvbkNvb2tpZU5hbWU9Q29v
a2llVmFsdWUiLCBtZXNzYWdlLlVURjhTdHJpbmcpOwotICAgIGZpbmlzaGVkID0gdHJ1ZTsKKyAg
ICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KKworLSAo
TlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZQoreworICAgIHdoaWxlICghX21lc3NhZ2UpCisgICAg
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgcmV0dXJuIF9tZXNz
YWdlLmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MCit7
CisgICAgcmV0dXJuIEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxp
dCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tp
ZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2ll
cy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOworfQorCiBAZW5kCiAKK1RFU1QoV2ViS2l0LCBXS0hU
VFBDb29raWVTdG9yZU11bHRpcGxlVmlld3MpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmll
dzEgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcxIHN5
bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJvY2VzcyJdOworCisg
ICAgTlNIVFRQQ29va2llICpzZXNzaW9uQ29va2llID0gW05TSFRUUENvb2tpZSBjb29raWVXaXRo
UHJvcGVydGllczpAeworICAgICAgICBOU0hUVFBDb29raWVQYXRoOiBAIi8iLAorICAgICAgICBO
U0hUVFBDb29raWVOYW1lOiBAIlNlc3Npb25Db29raWVOYW1lIiwKKyAgICAgICAgTlNIVFRQQ29v
a2llVmFsdWU6IEAiQ29va2llVmFsdWUiLAorICAgICAgICBOU0hUVFBDb29raWVEb21haW46IEAi
MTI3LjAuMC4xIiwKKyAgICB9XTsKKworICAgIF9fYmxvY2sgYm9vbCBzZXRDb29raWVEb25lID0g
ZmFsc2U7CisgICAgW3dlYlZpZXcxLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZS5odHRw
Q29va2llU3RvcmUgc2V0Q29va2llOnNlc3Npb25Db29raWUgY29tcGxldGlvbkhhbmRsZXI6XnsK
KyAgICAgICAgc2V0Q29va2llRG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZzZXRDb29raWVEb25lKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9w
dE5TKFtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIG5ld10pOworICAgIFt3ZWJWaWV3MSBz
ZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3MSBsb2FkSFRNTFN0
cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRl
IHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CisgICAg
CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzIgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRv
cmVsZWFzZV07CisgICAgW3dlYlZpZXcyIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwor
ICAgIFt3ZWJWaWV3MiBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBi
YXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVO
YW1lPUNvb2tpZVZhbHVlIik7Cit9CisKIFRFU1QoV2ViS2l0LCBXS0hUVFBDb29raWVTdG9yZVdp
dGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiB7CiAgICAgUmV0YWluUHRyPFdLV2Vi
c2l0ZURhdGFTdG9yZT4gZXBoZW1lcmFsU3RvcmVXaXRoQ29va2llcyA9IFtXS1dlYnNpdGVEYXRh
U3RvcmUgbm9uUGVyc2lzdGVudERhdGFTdG9yZV07CkBAIC02MjMsOSArNjY4LDggQEAgVEVTVChX
ZWJLaXQsIFdLSFRUUENvb2tpZVN0b3JlV2l0aG91dFBybwogICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0gZmFsc2U7CiAgICAgCi0gICAgTlNT
dHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50
LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBp
ICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsg
YWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOwotICAgIFt3ZWJWaWV3IGxvYWRI
VE1MU3RyaW5nOmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cDovLzEyNy4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlz
aGVkKTsKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVI
VE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsK
KyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25D
b29raWVOYW1lPUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRpYyBib29sIGFyZUNvb2tpZXNFcXVh
bChOU0hUVFBDb29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUgKnNlY29uZCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383242</attachid>
            <date>2019-11-10 03:17:56 -0800</date>
            <delta_ts>2019-11-10 03:24:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20191110111752.patch</filename>
            <type>text/plain</type>
            <size>132809</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBAQAorMjAxOS0xMS0wOSAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBhIE5ldHdv
cmtQcm9jZXNzUHJveHkgc2luZ2xldG9uIGluc3RlYWQgb2Ygb25lIHBlciBXZWJQcm9jZXNzUG9v
bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToK
KyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhU
VFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tp
ZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3Jl
Ojpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoQVBJOjpI
VFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoQVBJ
OjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6CisgICAgICAgIChX
S0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9zZXRDb29raWVBY2Nl
cHRQb2xpY3k6XSk6CisgICAgICAgICh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tp
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNN
b2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpw
cm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250
ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6CisgICAgICAg
IChXZWJLaXQ6Om1fd2ViUHJvY2Vzc0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6On5XZWJQcm9jZXNzUG9vbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0
Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9O
ZXR3b3JraW5nUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVh
ckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyTGVnYWN5UHJpdmF0ZUJy
b3dzaW5nTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFs
bG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRXZWJQcm9jZXNzSGFzVXBsb2Fkcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVhcldlYlByb2Nlc3NIYXNVcGxv
YWRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMTktMTEtMDggIEpv
bmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIyNTIyNjAuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwMyw3ICszMDMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1By
CiAgICAgICAgIG1lbW9yeVByZXNzdXJlSGFuZGxlci5pbnN0YWxsKCk7CiAgICAgfQogCi0gICAg
c2V0Q2FjaGVNb2RlbChwYXJhbWV0ZXJzLmNhY2hlTW9kZWwsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURp
cmVjdG9yeSk7CisgICAgLy8gRklYTUU6IEkgc3RpbGwgbmVlZCB0byBzZXQgdGhlIGNhY2hlIG1v
ZGVsIGZyb20gTGVnYWN5R2xvYmFsU2V0dGluZ3MsIGJ1dCB3aXRoIHRoZSBwYXRoIGZyb20gdGhl
IGZpcnN0IHBlcnNpc3RlbnQgZGF0YSBzdG9yZS4KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCiAgICAgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCA9IHBhcmFtZXRlcnMuc2hv
dWxkRW5hYmxlSVRQRGF0YWJhc2U7CkBAIC0zMTEsMTQgKzMxMSwxNSBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1ByCiAKICAgICBXZWJDb3JlOjpSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZUVuYWJsZWQocGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUpOwog
Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBzZXNz
aW9uSUQgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7Ci0gICAgc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7Ci0KKyAgICBmb3IgKGF1
dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMp
IHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lv
bklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwog
I2VuZGlmCisgICAgICAgIGluaXRpYWxpemVTdG9yYWdlUXVvdGEoZGF0YVN0b3JlUGFyYW1ldGVy
cyk7CisgICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIGRhdGFTdG9y
ZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmxv
Y2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIFJlbW90ZU5ldHdv
cmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbigqdGhpcywgV1RGTW92
ZShkYXRhU3RvcmVQYXJhbWV0ZXJzKSk7CisgICAgfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQogICAgIGlmIChwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50KCkp
IHsKQEAgLTMyNiwxNCArMzI3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5l
dHdvcmtQcgogICAgICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlF
bmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAgICAgfQogI2VuZGlmCi0gICAgaW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKLQotICAgIG1fc3RvcmFnZU1h
bmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBh
dXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpOwotICAgIGF1dG8qIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IGRlZmF1
bHRTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGNvb2tpZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nv
b2tpZXMpCi0gICAgICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7
CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQog
ICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNDE5LDEyICs0
MTIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjCiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAgIGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuY2xlYXJDcmVkZW50aWFscygpOwot
ICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpKQotICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+
Y2xlYXJDcmVkZW50aWFscygpOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0KICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW10gKGF1dG8mIG5ldHdvcmtTZXNzaW9u
KSB7CiAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24ubmV0
d29ya1N0b3JhZ2VTZXNzaW9uKCkpCiAgICAgICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVu
dGlhbFN0b3JhZ2UoKS5jbGVhckNyZWRlbnRpYWxzKCk7CkBAIC00OTEsOCArNDc4LDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdAogdm9pZCBOZXR3b3JrUHJvY2Vz
czo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNo
b3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFz
ZSkKICNlbmRpZgogewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3Jh
Z2VTZXNzaW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5p
c05ld0VudHJ5KQogICAgICAgICByZXR1cm47CkBAIC01MjQsMjEgKzUwOSwxMSBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0CiAKIFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiogTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uKGNvbnN0IFBBTDo6U2Vz
c2lvbklEJiBzZXNzaW9uSUQpIGNvbnN0CiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICByZXR1cm4gJmRlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpOwogICAgIHJldHVybiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMuZ2V0KHNl
c3Npb25JRCk7CiB9CiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29ya1By
b2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb24pCi0gICAgICAgIG1fZGVmYXVsdE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiA9IHBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgcmV0
dXJuICptX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247Ci19Ci0KIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKT4mIGZ1bmN0b3IpCiB7Ci0gICAgZnVuY3Rv
cihkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSk7CiAgICAgZm9yIChhdXRvJiBzdG9yYWdlU2Vzc2lv
biA6IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy52YWx1ZXMoKSkKICAgICAgICAgZnVuY3Rvcigq
c3RvcmFnZVNlc3Npb24pOwogfQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuaAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyAr
MTY2LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7
CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3Qg
UEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4mJik7CkBAIC0zNDIsNyArMzQxLDYgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0OwogCiAgICAgdm9pZCB0ZXJtaW5hdGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHBs
YXRmb3JtVGVybWluYXRlKCk7CkBAIC00ODIsNyArNDgwLDYgQEAgcHJpdmF0ZToKIAogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1f
bmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vz
c2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8
U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjplCiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwogICAgIGVuY29kZXIgPDwgc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7CiAjZW5k
aWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGVuY29k
ZXIgPDwgZGF0YVN0b3JlUGFyYW1ldGVyczsKICNpZiBVU0UoU09VUCkKICAgICBlbmNvZGVyLmVu
Y29kZUVudW0oY29va2llQWNjZXB0UG9saWN5KTsKICAgICBlbmNvZGVyIDw8IGlnbm9yZVRMU0Vy
cm9yczsKQEAgLTEyMiwxMSArMTIyLDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAgICBPcHRpb25h
bDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7
Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIWRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQorICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycz4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiBk
YXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGlmICghZGF0YVN0b3JlUGFyYW1ldGVycykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9
IFdURk1vdmUoKmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKKyAgICByZXN1bHQuZGF0YVN0
b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAjaWYgVVNF
KFNPVVApCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmNvb2tpZUFjY2VwdFBv
bGljeSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCShyZXZpc2lvbiAyNTIy
NzQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RydWN0IE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIAogICAgIGJvb2wgc3RvcmFnZUFjY2Vzc0FQ
SUVuYWJsZWQ7CiAjZW5kaWYKIAotICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIGRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gZGF0YVN0b3JlUGFyYW1ldGVyczsKICAgICAKICNpZiBVU0UoU09VUCkKICAgICBIVFRQ
Q29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSB7IEhUVFBDb29raWVBY2NlcHRQ
b2xpY3k6OkFsd2F5c0FjY2VwdCB9OwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdlckN1cmwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJD
dXJsLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdlckN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw3ICs1OSwxMiBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENv
CiAKIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1HZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KCkKIHsKLSAgICBjb25zdCBhdXRvJiBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24gPSBtX3Byb2Nlc3MuZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CisgICAgY29uc3Qg
YXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOworICAgIGlmICghbmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6T25seUZyb21NYWluRG9jdW1lbnREb21haW47Cisg
ICAgfQorCiAgICAgc3dpdGNoIChuZXR3b3JrU3RvcmFnZVNlc3Npb24uY29va2llU3RvcmFnZSgp
LmNvb2tpZUFjY2VwdFBvbGljeShuZXR3b3JrU3RvcmFnZVNlc3Npb24pKSB7CiAgICAgY2FzZSBD
b29raWVBY2NlcHRQb2xpY3k6OkFsd2F5czoKICAgICAgICAgcmV0dXJuIEhUVFBDb29raWVBY2Nl
cHRQb2xpY3k6OkFsd2F5c0FjY2VwdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2Vy
U291cC5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KICNpbmNsdWRlIDxs
aWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02Miw3ICs2Myw3IEBAIHZvaWQg
V2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ28KIAogSFRUUENvb2tpZUFjY2VwdFBv
bGljeSBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybUdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
KQogewotICAgIHN3aXRjaCAoc291cF9jb29raWVfamFyX2dldF9hY2NlcHRfcG9saWN5KG1fcHJv
Y2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVTdG9yYWdlKCkpKSB7CisgICAgc3dp
dGNoIChzb3VwX2Nvb2tpZV9qYXJfZ2V0X2FjY2VwdF9wb2xpY3kobV9wcm9jZXNzLnN0b3JhZ2VT
ZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpLT5jb29raWVTdG9yYWdl
KCkpKSB7CiAgICAgY2FzZSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZUzoKICAgICAgICAg
cmV0dXJuIEhUVFBDb29raWVBY2NlcHRQb2xpY3k6OkFsd2F5c0FjY2VwdDsKICAgICBjYXNlIFNP
VVBfQ09PS0lFX0pBUl9BQ0NFUFRfTkVWRVI6CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCShyZXZp
c2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtQcm9jZXNzQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTg2LDkgKzg2LDYgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVu
ZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFU
U0NvbnRleHQocGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMTUsMTEg
KzExMiw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBb
TlNVUkxDYWNoZSBzZXRTaGFyZWRVUkxDYWNoZTp1cmxDYWNoZS5nZXQoKV07CiB9CiAKLXN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNz
OjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogUmV0YWluUHRyPENGRGF0YVJlZj4gTmV0
d29ya1Byb2Nlc3M6OnNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhKCkgY29uc3QKIHsKICNpZiBV
U0UoU09VUkNFX0FQUExJQ0FUSU9OX0FVRElUX0RBVEEpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAko
cmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KIHsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBs
YXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphbGxvd1Nw
ZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0
aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2lu
Z0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9t
YWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC02MCwxMCArNjAsNiBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250
ZXh0OjplbnN1cmVXZWJzCiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Np
b25JRCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGlu
Z05ldHdvcmtTZXNzaW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0
KCkpLCBXVEZNb3ZlKHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Np
b24gPSBuZXR3b3JrUHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAo
Y29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAg
c2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNz
aW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RG
TW92ZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQ
cm9jZXNzU291cC5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDUsMTEgKzE0NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4K
ICAgICB9KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMp
CiB7CiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRTaG91bGRJZ25vcmVUTFNFcnJvcnMoaWdu
b3JlVExTRXJyb3JzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5j
b2RlKAogICAgIGVuY29kZXIgPDwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogICAgIGVuY29k
ZXIgPDwgdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgZW5jb2RlciA8PCBj
b29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAgICBlbmNvZGVyIDw8IHBlbmRpbmdD
b29raWVzOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgZW5jb2RlciA8PCBp
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgZW5jb2RlciA8PCBpbmRl
eGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkBAIC04MSwxMiArNzcsNiBAQCBPcHRp
b25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2ViCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRs
ZSA9IFdURk1vdmUoKmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE9w
dGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb29raWU+PiBwZW5kaW5nQ29va2llczsKLSAgICBkZWNv
ZGVyID4+IHBlbmRpbmdDb29raWVzOwotICAgIGlmICghcGVuZGluZ0Nvb2tpZXMpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IFdU
Rk1vdmUoKnBlbmRpbmdDb29raWVzKTsKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
ICAgIE9wdGlvbmFsPFN0cmluZz4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIGRlY29k
ZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwpAQCAtOTksMTQgKzg5LDYgQEAgT3B0aW9u
YWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYgogICAgIGlmICghaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
ID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlPiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsK
LSAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlOwotICAgIGlmICghaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUo
KmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRp
ZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgJKHJldmlzaW9u
IDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE1ICs1MSwxMSBAQCBzdHJ1Y3QgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMgewogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHVpUHJvY2Vzc0Nvb2tp
ZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjb29raWVT
dG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBw
ZW5kaW5nQ29va2llczsKICAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAg
ICBTdHJpbmcgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQv
Q29jb2EvQVBJT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
Y29hL0FQSU9iamVjdC5tbQkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9TaGFy
ZWQvQ29jb2EvQVBJT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw4IEBAIG5h
bWVzcGFjZSBBUEkgewogCiB2b2lkIE9iamVjdDo6cmVmKCkgY29uc3QKIHsKKyAgICBpZiAoIXdy
YXBwZXIoKSkKKyAgICAgICAgV1RGUmVwb3J0QmFja3RyYWNlKCk7CiAgICAgQ0ZSZXRhaW4oKF9f
YnJpZGdlIENGVHlwZVJlZil3cmFwcGVyKCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDI1MjI3
NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgog
I2luY2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJP
cHRpb25hbENhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzksMjAg
KzQwLDE1IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
Ci1jb25zdCBjaGFyKiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkKK1dl
YkNvb2tpZU1hbmFnZXJQcm94eSYgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKQog
ewotICAgIHJldHVybiAiV2ViQ29va2llTWFuYWdlclByb3h5IjsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8V2ViQ29va2llTWFuYWdlclByb3h5PiBtYW5hZ2VyOworICAgIHJldHVybiBtYW5h
Z2VyOwogfQogCi1SZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmNyZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCitXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94eSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgV2ViQ29va2llTWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNz
UG9vbCkKLSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQotewotICAgIFdl
YkNvbnRleHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhp
cyk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgKnRoaXMpOwogfQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2Vy
UHJveHkoKQpAQCAtNjUsNDMgKzYxLDkgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6Omlu
aXRpYWxpemVDbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAotLy8gV2Vi
Q29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NQ
b29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0gICAg
Zm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2JzZXJ2ZXJzLnZhbHVlcygpKSB7Ci0g
ICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlclNldCkKLSAgICAgICAgICAgIG9i
c2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQotICAgIGZvciAoYXV0byogb2JzZXJ2
ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5tYW5hZ2VyRGVzdHJveWVkKCk7Ci0K
LSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKQotewot
fQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQ
cm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2Vi
Q29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0KLQotdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewot
ICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNz
aW9uSUQpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFj
dGl2aXR5ID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzIl9zKV0oVmVjdG9y
PFN0cmluZz4mJiBob3N0bmFtZXMpIG11dGFibGUgewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9u
KFdURk1vdmUoaG9zdG5hbWVzKSk7CiAgICAgfSk7CkBAIC0xMDksMTcgKzcxLDE3IEBAIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXMKIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQogewotICAgIHByb2Nlc3NQb29s
KCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQs
IGhvc3RuYW1lcykpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQo
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vz
c2lvbklELCBob3N0bmFtZXMpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OmRlbGV0ZUFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nl
c3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQpKTsK
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgQ29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2ll
KHNlc3Npb25JRCwgY29va2llKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pLCBhY3Rpdml0eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91
bmRBY3Rpdml0eSgiV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUiX3MpXSgpIG11
dGFibGUgewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgfSk7CkBAIC0xMjcsNyAr
ODksNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llCiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdhbGxUaW1lIHRpbWUsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3Jr
UHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQ
cm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVs
ZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgW2NhbGxiYWNrRnVu
Y3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBhY3Rpdml0eSA9IG5ldHdvcmtQcm9j
ZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViQ29va2llTWFuYWdlclByb3h5
OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSJfcyldKCkgbXV0YWJsZSB7CiAgICAgICAg
IGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTEzNSw3ICs5Nyw3IEBAIHZvaWQgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb28KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8
Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVu
Y3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBj
b29raWVzKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBh
Y3Rpdml0eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgi
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzIl9zKV0oKSBtdXRhYmxlIHsKICAgICAg
ICAgY2FsbGJhY2tGdW5jdGlvbigpOwogICAgIH0pOwpAQCAtMTQzLDcgKzEwNSw3IEBAIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFAKIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0
b3I8Q29va2llPiYgY29va2llcywgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3Vt
ZW50VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsK
LSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1
cmwsIG1haW5Eb2N1bWVudFVSTCksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3Jv
dW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyJfcyldKCkgbXV0
YWJsZSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTE1MSw3ICsx
MTMsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQCiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFj
a0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNz
aW9uSUQpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFj
dGl2aXR5ID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFsbENvb2tpZXMiX3MpXShWZWN0b3I8Q29va2llPiYm
IGNvb2tpZXMpIG11dGFibGUgewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKFdURk1vdmUoY29v
a2llcykpOwogICAgIH0pOwpAQCAtMTU5LDcgKzEyMSw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpnZXRBbGxDb29raWUKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENv
b2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewot
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFtjYWxs
YmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3
b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Z2V0Q29va2llcyJfcyldKFZlY3RvcjxDb29raWU+JiYgY29va2llcykgbXV0YWJs
ZSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oV1RGTW92ZShjb29raWVzKSk7CiAgICAgfSk7
CkBAIC0xNjcsMTIgKzEyOSwxMiBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29v
a2llcyhQCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tp
ZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCkt
PnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkp
OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAw
KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5z
ZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCksIDApOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFj
ayhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4mJiBjYWxs
YmFjaykKQEAgLTIyMSwxNyArMTgzLDkgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNv
b2tpZXNEaWRDaAogICAgICAgICBvYnNlcnZlci0+Y29va2llc0RpZENoYW5nZSgpOwogfQogCi12
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6
OlNlc3Npb25JRCwgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQordm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBI
VFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKCFwcm9j
ZXNzUG9vbCgpLT5pc1VzaW5nVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkpCi0gICAgICAgIHBlcnNp
c3RIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLSNpZiBVU0UoU09VUCkK
LSAgICBwcm9jZXNzUG9vbCgpLT5zZXRJbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xp
Y3kpOwotI2VuZGlmCi0KLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCkt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kocG9saWN5KSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pLCBhY3Rpdml0eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRB
Y3Rpdml0eSgiV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
Il9zKV0oKSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogICAgIH0pOwpA
QCAtMjM5LDcgKzE5Myw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29v
a2kKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2Vw
dFBvbGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0
d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3
b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pLCBhY3Rpdml0eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigp
LmJhY2tncm91bmRBY3Rpdml0eSgiV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5Il9zKV0oSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIG11dGFibGUg
ewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHBvbGljeSk7CiAgICAgfSk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAkocmV2aXNp
b24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclBy
b3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDExICs1Niw5IEBAIHR5cGVkZWYgR2VuZXJpY0Nh
bGxiYWNrPEFQSTo6QXJyYXkqPiBBcnIKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEhUVFBDb29r
aWVBY2NlcHRQb2xpY3k+IEhUVFBDb29raWVBY2NlcHRQb2xpY3lDYWxsYmFjazsKIHR5cGVkZWYg
R2VuZXJpY0NhbGxiYWNrPGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jj4gR2V0Q29va2ll
c0NhbGxiYWNrOwogCi1jbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpP
YmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHVibGljIFdlYkNv
bnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdl
YkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6
OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKLQotICAgIHN0
YXRpYyBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqKTsK
KyAgICBzdGF0aWMgV2ViQ29va2llTWFuYWdlclByb3h5JiBzaW5nbGV0b24oKTsKICAgICB2aXJ0
dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUNsaWVu
dChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKik7CkBAIC0xMDQsMTcgKzEwMiwxMSBA
QCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpPYmplY3Q6OmRlcmVmOwogCiBwcml2YXRlOgotICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCopOworICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eSgpOworICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+OwogCiAgICAgdm9pZCBjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEKTsKIAot
ICAgIC8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0gICAgdm9pZCBwcm9jZXNzUG9vbERlc3Ryb3ll
ZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSop
IG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkq
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0KICAgICAv
LyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjE2LDYgKzIxNiwxMSBAQCBzdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vu
c2l0CiAgICAgcmV0dXJuIHNldDsKIH0KIAorVmVjdG9yPFN0cmluZz4gV2ViUHJvY2Vzc1Bvb2w6
OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpCit7CisgICAgcmV0dXJuIGNv
cHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSk7
Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICA6IG1fY29uZmlndXJhdGlvbihjb25maWd1
cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVmYXVsdFBhZ2VHcm91cChXZWJQYWdlR3JvdXA6OmNy
ZWF0ZSgpKQpAQCAtMjIzLDcgKzIyOCw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9v
bChBUEk6OlByb2MKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVlPEFQSTo6QXV0
b21hdGlvbkNsaWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVuaXF1ZVJlZjxB
UEk6OkRvd25sb2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1ha2VVbmlxdWU8
QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ+KCkpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9yZTo6Y3JlYXRl
KCkpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VHcmFwaGljc1Vz
YWdlU2FtcGxlcihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVy
PigqdGhpcykpCkBAIC0yNjYsNyArMjcwLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQ
b29sKEFQSTo6UHJvYwogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJvY2Vz
c1Bvb2w6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTogVGhl
c2Ugc3ViLW9iamVjdHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZl
ck1hcC4uCi0gICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAg
YWRkU3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBw
bGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVESUFf
U0VTU0lPTikKQEAgLTMxNyw5ICszMjAsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQ
b29sKCkKICAgICBwcm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0RG93
blByb2Nlc3MoKTsKLQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNzZXNV
c2luZ0dhbWVwYWRzLmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmds
ZXRvbigpLnByb2Nlc3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtMzc3LDE2
ICszNzcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50CiAgICAg
ICAgIG1fYXV0b21hdGlvbkNsaWVudCA9IFdURk1vdmUoYXV0b21hdGlvbkNsaWVudCk7CiB9CiAK
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYgY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotewotI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BS
T1RPQ09MX01BTkFHRVIpCi0gICAgaWYgKCFjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi0g
ICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gbWFrZVVuaXF1ZTxBUEk6OkN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gV1RGTW92ZShjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQpOwotI2VuZGlmCi19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFN0b3JhZ2VBY2Nlc3NB
UElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX3N0b3JhZ2VBY2Nlc3NBUElFbmFibGVk
ID0gZW5hYmxlZDsKQEAgLTQwNiw3ICszOTYsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRD
dXN0b21XZWJDb250ZW50CiAKIElQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5ldHdv
cmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCiB7Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3Mt
PmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuY29ubmVjdGlvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5n
ZWQodm9pZCogY29udGV4dCkKQEAgLTQxOCw4ICs0MDgsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpsYW5ndWFnZUNoYW5nZWQoKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6
V2ViUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExh
bmd1YWdlcygpKSk7CiAjaWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0g
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpV
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAw
KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJl
ZExhbmd1YWdlcygpKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtNDU3LDIwMyArNDQ2LDEzIEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNjcmVlblByb3BlcnRpZXNTdGEKICNlbmRpZgogfQogCi1OZXR3
b3JrUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vi
c2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUpCitOZXR3b3JrUHJvY2Vzc1Byb3h5
JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSop
CiB7Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICAvLyBGSVhNRTog
VGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkg
b24gbm9uLW1haW4gdGhyZWFkcy4KLSAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3
ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KLSAgICBpZiAo
IVJ1bkxvb3A6OmlzTWFpbigpKSB7Ci0gICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgICAgICBlbnN1
cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuICptX25ldHdv
cmtQcm9jZXNzOwotICAgIH0KLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAg
IGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICAg
ICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgYXV0byBu
ZXR3b3JrUHJvY2VzcyA9IG1ha2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQcm94eT4oKnRoaXMpOwot
Ci0gICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLQotICAg
IGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3RvcihtX3dlYnNpdGVE
YXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUt
PmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3Jl
LT5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291
cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5z
b3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRpZgotICAgICAgICBt
X3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtpbmdIYXNCZWd1bigpOwotICAgIH0KLQotICAgIHBh
cmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5j
YWNoZU1vZGVsKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IGdsb2JhbFVSTFNjaGVtZXNX
aXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOwotCi0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdl
YlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb29raWVT
dG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBh
cmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBT
dHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtp
bmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5p
c0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFp
bmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBwYXJlbnRC
dW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7
Ci0gICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94
RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShlbXB0eVN0cmlu
ZygpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnkgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rvcnku
aXNOdWxsKCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxT
ZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKLSAgICBw
YXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQ
b2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNj
aGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAg
cGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgp
KTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlU
b1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0
ZXJBc05vQWNjZXNzKCkpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgLy8g
KioqKioqKioqCi0gICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rvcnkg
c3RydWN0dXJlIGZvciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNrIHdpdGhvdXQgZmlyc3QgY29u
c3VsdGluZyBhIHJldmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8vcHJvYmxlbS8xNzQ1NDcxMj4p
Ci0gICAgLy8gKioqKioqKioqCi0gICAgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlU3lt
TGlua0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRh
U3RvcmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAg
IGlmICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQotICAg
ICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSAgV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0
ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnks
IHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJz
aXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExvY2FsU3RvcmFnZURp
cmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5
KQotICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFn
ZURpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3Jp
dGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0K
LSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKLSAgICBpZiAocGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7Ci0KLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0KLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBm
YWxzZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZl
bnQgPSBmYWxzZTsKLSAgICBib29sIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVlOwotICAg
IGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGZhbHNlOwotICAg
IGJvb2wgZW5hYmxlVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nID0gZmFsc2U7Ci0gICAgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4gbWFudWFsUHJldmFsZW50UmVzb3VyY2UgeyB9OwotICAgIGlm
ICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IHdpdGhXZWJzaXRlRGF0
YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAg
aWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMo
KS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9j
YWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3RJ
blJlc291cmNlTG9hZFN0YXRpc3RpY3M7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGU7Ci0gICAgICAgICAgICBlbmFibGVUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmcgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxlVGhpcmRQYXJ0
eUNvb2tpZUJsb2NraW5nOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbnVhbFByZXZh
bGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHdp
dGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0g
ICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSB3aXRo
V2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAg
ICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3Rv
cnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV93
ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
PSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0j
aWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFz
U3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdEluUmVzb3VyY2VMb2Fk
U3RhdGlzdGljczsKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1
Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnTW9kZTsKLSAgICAgICAgICAgIGVuYWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2lu
ZyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5lbmFibGVUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmc7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFudWFsUHJldmFsZW50UmVzb3VyY2U7
Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2lu
U3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9y
ZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotCi0gICAgICAgIGNvbnN0IGF1
dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRO
ZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3Rv
cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9
IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6
OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotICAgICAgICBhdXRvIG5ldHdvcmtDYWNoZURpcmVj
dG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsK
LSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0
b3J5OwotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hl
RGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdv
cmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgfQotCi0gICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3M7
Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQ7Ci0gICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
c2hvdWxkSW5jbHVkZUxvY2FsaG9zdEluUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHNob3VsZElu
Y2x1ZGVMb2NhbGhvc3Q7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSA9IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGU7Ci0gICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuZW5hYmxlVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nID0gZW5hYmxlVGhpcmRQYXJ0eUNvb2tp
ZUJsb2NraW5nOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSA9IG1hbnVhbFByZXZhbGVudFJlc291cmNlOwotCi0gICAgLy8gQWRkIGFueSBw
bGF0Zm9ybSBzcGVjaWZpYyBwYXJhbWV0ZXJzCi0gICAgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MocGFyYW1ldGVycyk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBuZXR3b3JrIHBy
b2Nlc3MuCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOwotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRRT1MobmV0d29ya1Byb2Nlc3NMYXRlbmN5UU9TKCksIG5ldHdvcmtQcm9jZXNzVGhy
b3VnaHB1dFFPUygpKSwgMCk7Ci0jZW5kaWYKLQotICAgIG5ldHdvcmtQcm9jZXNzLT51cGRhdGVQ
cm9jZXNzQXNzZXJ0aW9uKCk7Ci0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVEYXRh
U3RvcmUpKTsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tp
ZXMoKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIG5ldHdvcmsgcHJvY2VzcyBrbm93
cyBhYm91dCBhbGwgdGhlIHNlc3Npb25zIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYmVmb3Jl
IGl0IHN0YXJ0ZWQuCi0gICAgZm9yIChhdXRvJiBzZXNzaW9uSUQgOiBtX3Nlc3Npb25Ub1BhZ2VJ
RHNNYXAua2V5cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vi
c2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNl
c3Npb25JRCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqd2Vic2l0
ZURhdGFTdG9yZSk7Ci0gICAgfQotCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IFdURk1vdmUobmV0
d29ya1Byb2Nlc3MpOwotICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKKyAgICByZXR1cm4g
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJv
Y2Vzc1Byb3h5LCBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+LCBNZXNz
YWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5
ZWRSZXBseT4+JiYgcGVuZGluZ1JlcGxpZXMpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkK
IHsKLSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJv
Y2Vzc1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBz
dXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+
cHJvY2Vzc0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNjYyLDE2ICs0NjEs
NiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoCiAgICAgaWYgKG1f
YXV0b21hdGlvblNlc3Npb24pCiAgICAgICAgIG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0
ZSgpOwogCi0gICAgLy8gTGVhdmUgdGhlIHByb2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGll
bnQgY2FsbCwgc28gdGhhdCB0aGUgY2xpZW50IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50
aWZpZXIuCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci0KLSAgICAvLyBBdHRlbXB0
IHRvIHJlLWxhdW5jaC4KLSAgICBpZiAocGVuZGluZ1JlcGxpZXMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgYXV0byYgbmV3TmV0d29ya1Byb2Nlc3MgPSBlbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOwotICAgIGZvciAoYXV0byYgcmVwbHkgOiBwZW5kaW5nUmVwbGllcykKLSAgICAgICAg
bmV3TmV0d29ya1Byb2Nlc3MuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCpyZXBseS5maXJz
dCwgV1RGTW92ZShyZXBseS5zZWNvbmQpKTsKLQogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
ICAgICB3aGlsZSAoIW1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5pc0VtcHR5KCkpCiAgICAgICAg
IG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5iZWdpbigpLT52YWx1ZS0+ZGlzYWJsZVNlcnZpY2VX
b3JrZXJzKCk7CkBAIC02ODAsMTggKzQ2OSwxMyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3
b3JrUHJvY2Vzc0NyYXNoCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6Oldl
YlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkm
JiByZXBseSkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIEFTU0VSVChtX25l
dHdvcmtQcm9jZXNzKTsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbih3ZWJQcm9jZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2Vi
UHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJlcGx5KSk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVj
dGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHksIFJlZ2lzdHJh
YmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkK
IHsKLSAgICBBU1NFUlRfVU5VU0VEKHByb3h5LCAmcHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5n
ZXQoKSk7Ci0KLSAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6
ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAg
YXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0
b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiAKICAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUp
IHsKICAgICAgICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUpCkBAIC0xMjcwLDE1ICsxMDU0LDYg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaQogewogICAgIGF1dG8g
cmVzdWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRhU3RvcmUuc2Vzc2lvbklEKCks
IEhhc2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChw
YWdlSUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci0K
LSAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKLSAgICBpZiAoc2Vz
c2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAg
QVNTRVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUucGFyYW1ldGVycygp
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKLSAgICAg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PmFkZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIGRhdGFTdG9yZS5j
bGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRp
ZmllciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAgLTE0MTksNyArMTE5
NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkKIAogUHJvY2Vzc0lE
IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQogewotICAgIHJldHVy
biBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIo
KSA6IDA7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnByb2Nl
c3NJZGVudGlmaWVyKCk7CiB9CiAKIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVk
UHJvY2Vzc0lkZW50aWZpZXIoKQpAQCAtMTU3MCwxNiArMTM0NSwxMyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXRDYWNoZU1vZGVsKENhY2hlCiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVz
c2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYg
KG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwsIHsgfSksIDApOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwsIHsgfSksIDApOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2Fj
aGVNb2RlbCBjYWNoZU1vZGVsKQogewogICAgIHVwZGF0ZUJhY2tGb3J3YXJkQ2FjaGVDYXBhY2l0
eSgpOwotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNo
cm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwg
eyB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0
SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE1ODksNyArMTM2MSw3IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGkKIAogRG93bmxvYWRQcm94eSYg
V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSogb3Jp
Z2luYXRpbmdQYWdlKQogewotICAgIGF1dG8mIGRvd25sb2FkUHJveHkgPSBlbnN1cmVOZXR3b3Jr
UHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0KTsKKyAgICBh
dXRvJiBkb3dubG9hZFByb3h5ID0gZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9h
ZFByb3h5KGRhdGFTdG9yZSwgKnRoaXMsIHJlcXVlc3QpOwogICAgIGRvd25sb2FkUHJveHkuc2V0
T3JpZ2luYXRpbmdQYWdlKG9yaWdpbmF0aW5nUGFnZSk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJv
eHk7CiB9CkBAIC0xNjY3LDI1ICsxNDM5LDExIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BN
ZW1vcnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nl
c3M6OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjp1c2VU
ZXN0aW5nTmV0d29ya1Nlc3Npb24oKQotewotICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5pc0VtcHR5
KCkpOwotICAgIEFTU0VSVCghbV9uZXR3b3JrUHJvY2Vzcyk7Ci0KLSAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Byb2Nlc3Nlcy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNz
aW9uID0gdHJ1ZTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwg
VSYmIHJlcGx5KQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nl
c3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5j
KHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7Cisg
ICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNhblNlbmRNZXNzYWdlKCkp
CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRTeW5jKHN0ZDo6
Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0
KGJvb2wgYWxsb3dzKQpAQCAtMTY5NSw4ICsxNDUzLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2V0QWxsb3dzQW55U1NMQ2VydAogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENy
ZWRlbnRpYWxzKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3Jl
ZGVudGlhbHMoKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKSwgMCk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKQEAg
LTE3MDUsMjQgKzE0NjIsMTcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29y
a1BybwogICAgIHdoaWxlICghbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmlzRW1wdHkoKSkKICAg
ICAgICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmJlZ2luKCktPnZhbHVlLT5kaXNhYmxlU2Vy
dmljZVdvcmtlcnMoKTsKICNlbmRpZgotCi0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0g
ICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rpbmco
KQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseUZvclRlc3RpbmcoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkKQEAgLTE3
NDcsMTUgKzE0OTcsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3luY0xvY2FsU3RvcmFnZShD
bwogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2Fs
U3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xv
Y2FsU3RvcmFnZSgpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdM
b2NhbFN0b3JhZ2UoKSwgMCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0
IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
ICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZv
ckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2Vy
dGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBk
YXRlQXV0b21hdGlvbkNhcGFiaWxpdGllcygpIGNvbnN0CkBAIC0yMjgxLDEwICsyMDMwLDcgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZQogI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9z
c1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
dG9Eb21haW4sIE9wdGlvblNldDxDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFn
PiBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQ
cm94eUlELCBQYWdlSWRlbnRpZmllciB3ZWJQYWdlSUQpCiB7Ci0gICAgaWYgKCFtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRDb21t
aXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRv
RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlE
KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5kaWRDb21taXRDcm9zc1Np
dGVMb2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRvRG9tYWluLCBu
YXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlEKTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5n
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWluLCBjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgdGhpcmRQYXJ0eURvbWFpbiwgYm9vbCBzaG91bGRTY2hlZHVsZU5vdGlmaWNh
dGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MjMxMCw4ICsyMDU2LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0V2ViUHJvY2Vzc0hhc1Vw
bAogICAgIGlmIChtX3Byb2Nlc3Nlc1dpdGhVcGxvYWRzLmlzRW1wdHkoKSkgewogICAgICAgICBS
RUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlRoZSBudW1iZXIgb2YgdXBsb2FkcyBpbiBw
cm9ncmVzcyBpcyBub3cgb25lLiBUYWtpbmcgTmV0d29ya2luZyBhbmQgVUkgcHJvY2VzcyBhc3Nl
cnRpb25zLiIpOwogCi0gICAgICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+dGFrZVVwbG9hZEFzc2VydGlvbigpOworICAgICAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS50YWtlVXBsb2FkQXNzZXJ0aW9uKCk7CiAgICAgICAg
IAogICAgICAgICBBU1NFUlQoIW1fdWlQcm9jZXNzVXBsb2FkQXNzZXJ0aW9uKTsKICAgICAgICAg
bV91aVByb2Nlc3NVcGxvYWRBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+
KGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIldlYktpdCB1cGxvYWRzIl9zLCBBc3NlcnRpb25TdGF0
ZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CkBAIC0yMzM2LDggKzIwODEsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpjbGVhcldlYlByb2Nlc3NIYXNVCiAgICAgaWYgKG1fcHJvY2Vzc2VzV2l0aFVw
bG9hZHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9u
LCAiVGhlIG51bWJlciBvZiB1cGxvYWRzIGluIHByb2dyZXNzIGlzIG5vdyB6ZXJvLiBSZWxlYXNp
bmcgTmV0d29ya2luZyBhbmQgVUkgcHJvY2VzcyBhc3NlcnRpb25zLiIpOwogCi0gICAgICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+Y2xlYXJV
cGxvYWRBc3NlcnRpb24oKTsKKyAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuY2xlYXJVcGxvYWRBc3NlcnRpb24oKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChtX3Vp
UHJvY2Vzc1VwbG9hZEFzc2VydGlvbik7CiAgICAgICAgIG1fdWlQcm9jZXNzVXBsb2FkQXNzZXJ0
aW9uID0gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuaAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNiBAQCBPQkpDX0NMQVNTIE5T
U3RyaW5nOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFz
cyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNs
YXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTc0
LDcgKzE3Myw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlx
dWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0
RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZv
aWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xp
ZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAg
ICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRT
ZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBAIC0zMDQsOCArMzAyLDYgQEAgcHVibGljOgog
ICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGllbnQoKSB7IHJl
dHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYgY2xpZW50KCkg
eyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKICAg
ICAgICAgdW5zaWduZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdrUGFnZUNvdW50
OwpAQCAtMzEzLDkgKzMwOSw2IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHN0YXRpYyBTdGF0aXN0
aWNzJiBzdGF0aXN0aWNzKCk7ICAgIAogCi0gICAgdm9pZCB1c2VUZXN0aW5nTmV0d29ya1Nlc3Np
b24oKTsKLSAgICBib29sIGlzVXNpbmdUZXN0aW5nTmV0d29ya1Nlc3Npb24oKSBjb25zdCB7IHJl
dHVybiBtX3Nob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbjsgfQotCiAgICAgdm9pZCBzZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sKTsKIAogICAgIHZvaWQgY2xl
YXJDYWNoZWRDcmVkZW50aWFscygpOwpAQCAtMzgyLDggKzM3NSw4IEBAIHB1YmxpYzoKIAogICAg
IC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50CiAgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYg
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3Rv
cmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2Vzcygp
IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7IH0KLSAgICB2b2lkIG5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiwgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5Pj4mJik7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eSogbmV0d29ya1Byb2Nlc3MoKSB7IHJldHVybiAmTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCk7IH0KKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1By
b3h5Jik7CiAKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNz
UHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb25EZWxheWVkUmVwbHkmJik7CiAKQEAgLTUyOCw2ICs1MjEsMTcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKICAgICBib29s
IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3VzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7IH0KIAorICAgIHN0YXRpYyB2b2lkIHBsYXRmb3Jt
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
Jik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9j
b2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3Ry
aW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1
bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVj
dG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOwor
ICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CisjZW5kaWYK
KwogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCkBAIC01NDMsOCAr
NTQ3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVxdWVzdFdlYkNvbnRlbnRTdGF0aXN0aWNz
KFN0YXRpc3RpY3NSZXF1ZXN0Jik7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2b2lk
IGhhbmRsZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFt
ZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNocm9u
b3VzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBj
b25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlckRh
dGEmJik+JiYpOwogCkBAIC01NjksMTQgKzU3MSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVz
ZXNTaW5nbGVXZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT51c2Vz
U2luZ2xlV2ViUHJvY2VzcygpOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0
YXRpYyBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcg
cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2Fj
aGVzRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0
b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsK
LSNlbmRpZgotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCByZWdpc3Rlck5vdGlmaWNh
dGlvbk9ic2VydmVycygpOwogICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVy
cygpOwpAQCAtNjI3LDcgKzYyMSw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQ
STo6QXV0b21hdGlvbkNsaWVudD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxB
UEk6OkRvd25sb2FkQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lv
bj4gbV9hdXRvbWF0aW9uU2Vzc2lvbjsKIApAQCAtNjk0LDggKzY4Nyw2IEBAIHByaXZhdGU6CiAK
ICAgICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCB7IHRydWUgfTsKIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwotCiAg
ICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPERpY3Rpb25hcnlDYWxsYmFjaz4+IG1fZGljdGlv
bmFyeUNhbGxiYWNrczsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8U3RhdGlzdGljc1Jl
cXVlc3Q+PiBtX3N0YXRpc3RpY3NSZXF1ZXN0czsKIApAQCAtNzk1LDE1ICs3ODYsMTUgQEAgcHJp
dmF0ZToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CisgICAgaWYgKE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNhblNlbmRNZXNzYWdlKCkpCisgICAgICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1l
c3NhZ2UpLCAwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVz
c2FnZSkKIHsKICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDggKzQwLDYgQEAgbmFtZXNwYWNlIEFQSSB7CiBIVFRQQ29va2llU3Rv
cmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRh
U3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3ZWJzaXRlRGF0YVN0b3JlKQogewotICAg
IGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMo
KTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkKQEAgLTQ5LDEwNCAr
NDcsNDAgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkKICAgICBBU1NFUlQo
bV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIW1fb2JzZXJ2ZWRDb29raWVNYW5h
Z2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0K
LSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIHZv
aWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBh
dXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFn
ZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4gYWxsQ29va2llczsKLSAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICAg
ICAgYWxsQ29va2llcyA9IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMo
KTsKLSAgICAgICAgYWxsQ29va2llcy5hcHBlbmRWZWN0b3IobV9vd25pbmdEYXRhU3RvcmUtPnBl
bmRpbmdDb29raWVzKCkpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgYWxsQ29va2llc10g
KCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihhbGxDb29raWVzKTsK
LSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4m
IGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2llTWFuYWdlci5nZXRB
bGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNv
b2tpZXMpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6c2V0Q29va2llcyhj
b25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmlu
Z0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAg
IGlmICghcG9vbCkgewotICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpIHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vzc2lv
biBiZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3b3Jr
IFByb2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAgICAg
ICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAgICAgICAgICAg
c2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+YWRkUGVuZGluZ0Nv
b2tpZShjb29raWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldENvb2tpZXMobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9v
bCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11
dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1dG8m
IGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9u
KCk7CisgICAgY29va2llTWFuYWdlci5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29v
a2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmIChtX293bmlu
Z0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAgICAgICBkZWxldGVDb29raWVGcm9tRGVm
YXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1fb3duaW5nRGF0YVN0b3JlLT5yZW1vdmVQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0KLSAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
YXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llKG1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2ll
TWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsKKyAg
ICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIGNvb2tpZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBD
b29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1l
cmFsKCkpCi0gICAgICAgICAgICBkZWxldGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2ll
U3RvcmUoKTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tp
ZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpKTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRl
QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1F
OiBUaGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6
OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViS2l0OjpIVFRQQ29va2llQWNjZXB0UG9saWN5
IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1f
b3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAg
c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeUluRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKHBv
bGljeSk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLnNldEhU
VFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBwb2xp
Y3ksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogY2xhc3MgQVBJV2ViQ29va2ll
TWFuYWdlclByb3h5T2JzZXJ2ZXIgOiBwdWJsaWMgV2ViQ29va2llTWFuYWdlclByb3h5OjpPYnNl
cnZlciB7CkBAIC0xODIsMjEgKzExNiw3IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rl
ck9ic2VydmVyKE8KIAogICAgIG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIgPSBtYWtlVW5p
cXVlPEFQSVdlYkNvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyPigqdGhpcyk7CiAKLSAgICBhdXRv
KiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9w
ZXJhdGlvbnMoKTsKLQotICAgIGlmICghcG9vbCkgewotICAgICAgICBBU1NFUlQoIW1fb2JzZXJ2
aW5nVUlQcm9jZXNzQ29va2llcyk7Ci0KLSAgICAgICAgLy8gTGlzdGVuIGZvciBjb29raWUgbm90
aWZpY2F0aW9ucyBpbiB0aGUgVUlQcm9jZXNzIGluIHRoZSBtZWFudGltZS4KLSAgICAgICAgc3Rh
cnRPYnNlcnZpbmdDaGFuZ2VzVG9EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoW3RoaXNdICgp
IHsKLSAgICAgICAgICAgIGNvb2tpZXNEaWRDaGFuZ2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAg
ICAgbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHkgPSAmV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRv
bigpOwogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcik7CiB9CiAKQEAgLTIzMSw0NiArMTUxLDEwIEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpj
b29raWVzRGlkQ2hhbmdlKCkKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVz
dHJveWVkKCkKIHsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT51bnJlZ2lzdGVy
T2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2Vy
UHJveHlPYnNlcnZlcik7Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG51bGxw
dHI7Ci0KLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9y
Q29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLQotICAgIGlmICghcG9vbCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1l
bnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tp
ZU1hbmFnZXJQcm94eSA9ICZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9u
KCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlciht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyKTsKIH0KIAotdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bv
b2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBBU1NFUlQoIW1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxp
c3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklk
ZW50aWZpZXIgPSBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlz
dGVuZXIoW3RoaXNdKFdlYlByb2Nlc3NQb29sJiBuZXdQcm9jZXNzUG9vbCkgewotICAgICAgICBp
ZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5pc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChuZXdQcm9jZXNz
UG9vbCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gTm93IHRoYXQgYW4gYXNz
b2NpYXRlZCBwcm9jZXNzIHBvb2wgZXhpc3RzLCB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBVSSBwcm9j
ZXNzIGNvb2tpZSBzdG9yZQotICAgICAgICAvLyB0byBtYWtlIHN1cmUgYW55IGNoYW5nZXMgYXJl
IHJlZmxlY3RlZCB3aXRoaW4gdGhlIG5ldyBwcm9jZXNzIHBvb2wuCi0gICAgICAgIGZsdXNoRGVm
YXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIG5ld1Byb2Nlc3NQb29sLmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KLSAgICAgICAgaWYgKG1fY29va2llTWFuYWdlclByb3h5T2Jz
ZXJ2ZXIpIHsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBuZXdQ
cm9jZXNzUG9vbC5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwot
ICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZl
cihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9i
c2VydmVyKTsKLSAgICAgICAgfQotICAgICAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSFRUUENvb2tpZVN0b3JlOjp1bnJl
Z2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBpZiAobV9wcm9j
ZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKQotICAgICAgICBXZWJQcm9jZXNzUG9v
bDo6dW5yZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihtX3Byb2Nlc3NQb29sQ3Jl
YXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlz
dGVuZXJJZGVudGlmaWVyID0gMDsKLX0KLQogI2lmICFQTEFURk9STShDT0NPQSkKIHZvaWQgSFRU
UENvb2tpZVN0b3JlOjpmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpIHsgfQogVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4gSFRUUENvb2tpZVN0b3JlOjpnZXRBbGxEZWZhdWx0VUlQcm9j
ZXNzQ29va2llU3RvcmVDb29raWVzKCkgeyByZXR1cm4geyB9OyB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCShyZXZpc2lvbiAy
NTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3Jl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lk
IHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJl
Z2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0KICAgICBzdGF0aWMgdm9p
ZCBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwogICAgIHN0YXRpYyBWZWN0b3I8
V2ViQ29yZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVz
KCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3Rv
cmUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNiw5
ICs0MjYsOSBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRlCiB7CiB9
CiAKLVdLQ29va2llTWFuYWdlclJlZiBXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmKQorV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1h
bmFnZXIoV0tDb250ZXh0UmVmKQogewotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6
dG9JbXBsKGNvbnRleHRSZWYpLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5PigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0OjpXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNpbmdsZXRvbigpKTsKIH0KIAogV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29u
dGV4dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmKQpAQCAtNTQ1LDkgKzU0NSw4IEBA
IHZvaWQgV0tDb250ZXh0U2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWMKICAgICBXZWJLaXQ6OnRv
SW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJs
ZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24o
V0tDb250ZXh0UmVmIGNvbnRleHQpCit2b2lkIFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vz
c2lvbihXS0NvbnRleHRSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbigpOwogfQogCiB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhXS0NvbnRleHRSZWYgY29udGV4dCwgYm9v
bCBhbGxvd3MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tD
b250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3
LDcgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQwogV0tfRVhQT1JU
IHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2Vy
VGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBj
YWxsZWQgYmVmb3JlIGFueSBzZWNvbmRhcnkgcHJvY2Vzc2VzIGFyZSBzdGFydGVkLgotV0tfRVhQ
T1JUIHZvaWQgV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBj
b250ZXh0KTsKK1dLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lv
bihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIAogLy8gVGVzdCBv
bmx5LiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBydW5uaW5nIGEgdGVzdC4KIFdLX0VYUE9SVCB2
b2lkIFdLQ29udGV4dENsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tDb250ZXh0UmVmIGNvbnRleHQp
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJv
Y2Vzc1Bvb2wubW0JKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMjYgKzIw
MCw4IEBAIC0gKHZvaWQpX3NldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmEKIHsKIH0KIAot
c3RhdGljIFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSB0b0hUVFBDb29raWVBY2NlcHRQ
b2xpY3koTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkKLXsKLSAgICBzd2l0Y2ggKHN0
YXRpY19jYXN0PE5TVUludGVnZXI+KHBvbGljeSkpIHsKLSAgICBjYXNlIE5TSFRUUENvb2tpZUFj
Y2VwdFBvbGljeUFsd2F5czoKLSAgICAgICAgcmV0dXJuIFdlYktpdDo6SFRUUENvb2tpZUFjY2Vw
dFBvbGljeTo6QWx3YXlzQWNjZXB0OwotICAgIGNhc2UgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5
TmV2ZXI6Ci0gICAgICAgIHJldHVybiBXZWJLaXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6Ok5l
dmVyOwotICAgIGNhc2UgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1l
bnREb21haW46Ci0gICAgICAgIHJldHVybiBXZWJLaXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6
Ok9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwotICAgIGNhc2UgTlNIVFRQQ29va2llQWNjZXB0
UG9saWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOgotICAgICAgICByZXR1cm4g
V2ViS2l0OjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpFeGNsdXNpdmVseUZyb21NYWluRG9jdW1l
bnREb21haW47Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNjZXB0OwotfQotCiAtICh2
b2lkKV9zZXRDb29raWVBY2NlcHRQb2xpY3k6KE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSlwb2xp
Y3kKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkg
eyB9KTsKIH0KIAogLSAoaWQpX29iamVjdEZvckJ1bmRsZVBhcmFtZXRlcjooTlNTdHJpbmcgKilw
YXJhbWV0ZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMsOCArNjMsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQ
cml2YXRlIHsKIAogICAgIH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKQogICAgIHsKLSAg
ICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdl
dFByb2Nlc3NQb29scyhkYXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJh
Y2soc2Vzc2lvbklEKCksIG51bGxwdHIpOworICAgICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnNpbmdsZXRvbigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxw
dHIpOwogICAgIH0KIAogICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbmFnZXI7
CkBAIC0xNDAsMTEgKzEzOSw5IEBAIFdlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtpdENvb2tpZU1h
bmFnZXIKIHsKICAgICBXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyID0gV0VCS0lUX0NPT0tJ
RV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT09LSUVfTUFOQUdFUiwgbnVsbHB0
cikpOwogICAgIG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyID0gZGF0YU1hbmFnZXI7Ci0gICAg
Zm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nl
c3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpIHsKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVPYnNlcnZl
ckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdlcl0gewotICAgICAg
ICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAwKTsKLSAgICAg
ICAgfSk7Ci0gICAgfQorICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0
Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW21hbmFn
ZXJdIHsKKyAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAw
KTsKKyAgICB9KTsKICAgICByZXR1cm4gbWFuYWdlcjsKIH0KIApAQCAtMTc0LDggKzE3MSw3IEBA
IHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW4KICAgICBpZiAoc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdl
ci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Np
b25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlVHlwZShzdG9yYWdlKSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0
b24oKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVU
RjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkp
OwogfQogCiAvKioKQEAgLTE4OSw4ICsxODUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9zZXRfYWNjZXB0X3BvCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lF
X01BTkFHRVIobWFuYWdlcikpOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFu
YWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKS0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShw
b2xpY3kpLCBbXSgpIHsgfSk7CiB9CiAKIC8qKgpAQCAtMjExLDE0ICsyMDYsNyBAQCB2b2lkIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvCiAKICAgICBHUmVmUHRyPEdUYXNrPiB0
YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNr
LCB1c2VyRGF0YSkpOwogCi0gICAgLy8gVGhlIHBvbGljeSBpcyB0aGUgc2FtZSBpbiBhbGwgcHJv
Y2VzcyBwb29scyBoYXZpbmcgdGhlIHNhbWUgc2Vzc2lvbiBJRCwgc28ganVzdCBhc2sgYW55Lgot
ICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdl
dFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgaWYgKHByb2Nl
c3NQb29scy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQo
KSwgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oSFRUUENvb2tpZUFjY2VwdFBv
bGljeSBwb2xpY3kpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNr
ID0gV1RGTW92ZSh0YXNrKV0oSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAg
ICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQoKSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xp
Y3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0yNjMsMTEgKzI1MSw3IEBAIHZvaWQgd2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2UKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tp
ZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFu
YWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2ll
cyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRp
c2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20s
IHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJv
Y2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFn
ZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Np
b25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNr
KV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5zZXRDb29raWVz
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0s
IFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVh
bih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KQEAgLTMxNCwxMSArMjk4LDcgQEAgdm9p
ZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMoVwogICAgIGdfcmV0dXJuX2lmX2Zh
aWwodXJpKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25l
dyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBD
b29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ug
b24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0g
ZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRv
JiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMo
bWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxl
bWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBX
VEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgewor
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZ2V0Q29va2llcyhtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBb
dGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29r
aWVzKSB7CiAgICAgICAgIEdMaXN0KiBjb29raWVzTGlzdCA9IG51bGxwdHI7CiAgICAgICAgIGZv
ciAoYXV0byYgY29va2llIDogY29va2llcykKICAgICAgICAgICAgIGNvb2tpZXNMaXN0ID0gZ19s
aXN0X3ByZXBlbmQoY29va2llc0xpc3QsIGNvb2tpZS50b1NvdXBDb29raWUoKSk7CkBAIC0zNzIs
MTEgKzM1Miw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUKICAg
ICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0g
YWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2Vy
RGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNh
bWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9j
ZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBv
b2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9j
ZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5kZWxldGVD
b29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUp
LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2luZ2xldG9uKCkuZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBXZWJD
b3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAg
Z190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzU3LDggKzEzNTcsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjph
ZGRTaW5nbGVDb29rCiAgICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigiaHR0cE9ubHki
X3MsIGNvb2tpZS5odHRwT25seSkpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdodHRw
T25seScgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29v
a2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclBy
b3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFT
dG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2sgPSBjYWxsYmFjay5jb3B5
UmVmKCldKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0Q29v
a2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtj
YWxsYmFjayA9IGNhbGxiYWNrLmNvcHlSZWYoKV0oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5k
U3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTM3NCw4ICsxMzczLDcgQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29vawogCiAgICAgU3RyaW5nIGhvc3QgPSBhY3RpdmVV
UkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tp
ZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2Ut
PndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0Rv
dFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2lu
Z2xldG9uKCkuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3Jl
KCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZCho
b3N0KSB9KTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0U2Vzc2lvblBlcm1p
c3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4mIG91dF9wZXJtaXNzaW9u
cykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJv
Y2Vzc1Bvb2xDb2NvYS5tbQkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA4
LDggKzEwOCw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQKIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKQogewot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZXRQ
cm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0UHJvY2Vzc1N1cHByZXNzaW9u
RW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpOwogCiAjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9y
UGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTEzOSw4ICsxMzgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpwbGF0Zm9ybUluaXRpYWxpemUoCiAKICAgICBpZiAoIVtbTlNVc2VyRGVmYXVsdHMgc3Rh
bmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNz
dXJlSGFuZGxlciJdKQogICAgICAgICBpbnN0YWxsTWVtb3J5UHJlc3N1cmVIYW5kbGVyKCk7Ci0K
LSAgICBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpOwogfQogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKQEAgLTI3MywyMyArMjcwLDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZv
cm1Jbml0aWFsaXplTgogCiAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRl
ZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKIAotICAgIHsKLSAgICAgICAgYm9vbCBpc1Nh
ZmFyaSA9IGZhbHNlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlzU2FmYXJp
ID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCk7Ci0jZWxpZiBQTEFU
Rk9STShNQUMpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246Omlz
U2FmYXJpKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGlzU2FmYXJpKSB7Ci0gICAgICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3Ry
aW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5o
dHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAq
KVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAgIH0KLQogICAg
IHBhcmFtZXRlcnMuZW5hYmxlTGVnYWN5VExTID0gdHJ1ZTsKICAgICBpZiAoaWQgdmFsdWUgPSBb
ZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OkAiV2ViS2l0RW5hYmxlTGVnYWN5VExTIl0pCiAgICAgICAg
IHBhcmFtZXRlcnMuZW5hYmxlTGVnYWN5VExTID0gW3ZhbHVlIGJvb2xWYWx1ZV07Ci0gICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuZW5hYmxlTGVnYWN5VExTID0gcGFyYW1ldGVycy5lbmFibGVMZWdhY3lUTFM7CiAKICAgICBw
YXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihfQ0ZOZXR3b3JrQ29weUFUU0Nv
bnRleHQoKSk7CiAKQEAgLTMwMSw4ICsyODQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0
Zm9ybUluaXRpYWxpemVOCiAgICAgcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRl
bnRpZmllciA9IGlkZW50aWZ5aW5nRGF0YUZyb21Db29raWVTdG9yYWdlKFtbTlNIVFRQQ29va2ll
U3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gX2Nvb2tpZVN0b3JhZ2VdKTsKICNlbmRp
ZgogCi0gICAgcGFyYW1ldGVycy5zdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IHN0b3JhZ2VBY2Nl
c3NBUElFbmFibGVkKCk7Ci0KICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNl
ID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRl
cm5hbERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXko
KS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07CiAKICAgICBwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xp
Y2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSA9IFtkZWZhdWx0cyBib29sRm9yS2V5OltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiRXhwZXJpbWVudGFsJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6YWRD
bGlja0F0dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCldXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFBy
b3h5TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eU1hcC5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA5LDkgKzEwOSw2IEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5p
c2hlZCgKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQ
Ukl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3du
bG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhl
IGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQ
cm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAg
IEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKICAgICBtX3Byb2Nl
c3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2lu
Y2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRp
ZgorI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC01MCw3ICs1MSw2IEBA
CiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Bv
b2wuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5oIgpAQCAtNjksNiArNjksMTAgQEAKICNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEku
aD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2RlZmluZSBNRVNTQUdFX0NIRUNL
KGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgY29ubmVjdGlvbigpKQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTgxLDE4ICs4NSw4MyBAQCBzdGF0aWMgdWludDY0X3Qg
Z2VuZXJhdGVDYWxsYmFja0lEKCkKICAgICByZXR1cm4gKytjYWxsYmFja0lEOwogfQogCi1OZXR3
b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJiBwcm9j
ZXNzUG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9jZXNzUG9vbC5hbHdheXNS
dW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vzc1Bvb2wocHJvY2Vzc1Bv
b2wpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+JiBnbG9iYWxO
ZXR3b3JrUHJvY2VzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6dW5pcXVl
X3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gbmV0d29ya1Byb2Nlc3M7CisgICAgcmV0dXJuIG5l
dHdvcmtQcm9jZXNzOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKQoreworICAgIGlmICghZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSkgewor
ICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vz
c1Byb3h5PigpOworICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpLT5zZW5kQ3JlYXRpb25Q
YXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgfQorICAgIHJldHVybiAqZ2xvYmFsTmV0d29y
a1Byb2Nlc3MoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphdHRlbXB0UmVsYXVu
Y2hBZnRlckNyYXNoSWZOZWNlc3NhcnkoVmVjdG9yPHN0ZDo6cGFpcjxSZWY8V2ViUHJvY2Vzc1By
b3h5PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uRGVsYXllZFJlcGx5Pj4mJiBwZW5kaW5nUmVxdWVzdHMpCit7CisgICAgZ2xvYmFsTmV0d29y
a1Byb2Nlc3MoKSA9IG51bGxwdHI7CisgICAgaWYgKHBlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBuZXdOZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOworICAgIGZvciAoYXV0byYgcmVxdWVzdCA6IHBlbmRp
bmdSZXF1ZXN0cykKKyAgICAgICAgbmV3TmV0d29ya1Byb2Nlc3MuZ2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKHJlcXVlc3QuZmlyc3QuZ2V0KCksIFdURk1vdmUocmVxdWVzdC5zZWNvbmQpKTsK
K30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9O
ZXdQcm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8g
RklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJL
aXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCisgICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlz
IG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgor
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCisg
ICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgeworICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFu
ZFdhaXQoW3RoaXNdIHsKKyAgICAgICAgICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1By
b2Nlc3MoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAg
cGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gV2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKKyAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworI2VuZGlm
CisgICAgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5oc3RzU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGlmICghcGFyYW1l
dGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkKKyAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuaHN0c1N0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNv
cHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVn
aXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNC
eXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFs
U2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50
U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFz
TG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNj
aGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdp
c3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2lu
Z2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMu
Y2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVs
KCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dp
dGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1l
c1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBX
ZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURp
cmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcg
Y29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNo
ZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShj
b250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9y
eSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRs
ZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRP
bmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Cisj
ZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MocGFyYW1ldGVycyk7CisgICAgcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gV2Vi
c2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMp
LCAwKTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eSgpCisg
ICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHkoKQogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BS
T1RPQ09MX01BTkFHRVIpCiAgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5KCp0aGlz
KQogI2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIGZhbHNl
KQorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQobWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpCisjZW5k
aWYKIHsKICAgICBjb25uZWN0KCk7Ci0KLSAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9
IG1fcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKQotICAgICAgICBtX3dlYnNpdGVEYXRh
U3RvcmVzLnNldCh3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbWFrZVJlZigqd2Vic2l0
ZURhdGFTdG9yZSkpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQ
cm94eSgpCkBAIC0xMTYsMTEgKzE4NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0
TGF1bmNoT3B0aW8KIHsKICAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0gUHJvY2Vzc0xh
dW5jaGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6
OmdldExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7Ci0KLSAgICBpZiAocHJvY2Vzc1Bvb2wo
KS5zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgewot
ICAgICAgICBwcm9jZXNzUG9vbCgpLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZyhmYWxzZSk7Ci0gICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxkTWFr
ZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7Ci0gICAgfQogfQogCiB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24pCkBAIC0xODEsMTIgKzI0NSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnN5bnRoZXNpemVBcHBJCiAgICAgfQogfQogCi1Eb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCitEb3dubG9hZFByb3h5JiBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsKICAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkK
ICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwID0gbWFrZVVuaXF1ZTxEb3dubG9hZFByb3h5TWFw
PigqdGhpcyk7CiAKLSAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9h
ZFByb3h5KGRhdGFTdG9yZSwgbV9wcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0KTsKKyAgICBy
ZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwg
cHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hP
cHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjQ3LDE4ICszMTEsMjAgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpuZXR3b3JrUHJvY2VzcwogewogICAgIGNsZWFyQ2FsbGJhY2tTdGF0ZXMo
KTsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4sIE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXll
ZFJlcGx5Pj4gcGVuZGluZ1JlcXVlc3RzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVmPFdlYlBy
b2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbjo6RGVsYXllZFJlcGx5Pj4gcGVuZGluZ1JlcXVlc3RzOwogICAgIHBlbmRpbmdS
ZXF1ZXN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY29ubmVjdGlvblJlcXVlc3RzLnNpemUo
KSk7CiAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDogbV9jb25uZWN0aW9uUmVxdWVzdHMudmFsdWVz
KCkpIHsKICAgICAgICAgaWYgKHJlcXVlc3Qud2ViUHJvY2VzcykKLSAgICAgICAgICAgIHBlbmRp
bmdSZXF1ZXN0cy51bmNoZWNrZWRBcHBlbmQoc3RkOjptYWtlX3BhaXIobWFrZVJlZlB0cihyZXF1
ZXN0LndlYlByb2Nlc3MuZ2V0KCkpLCBXVEZNb3ZlKHJlcXVlc3QucmVwbHkpKSk7CisgICAgICAg
ICAgICBwZW5kaW5nUmVxdWVzdHMudW5jaGVja2VkQXBwZW5kKHsgKnJlcXVlc3Qud2ViUHJvY2Vz
cywgV1RGTW92ZShyZXF1ZXN0LnJlcGx5KSB9KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
cmVxdWVzdC5yZXBseSh7IH0pOwogICAgIH0KICAgICBtX2Nvbm5lY3Rpb25SZXF1ZXN0cy5jbGVh
cigpOwotCi0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0
IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8g
YmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhp
cywgV1RGTW92ZShwZW5kaW5nUmVxdWVzdHMpKTsKKyAgICAKKyAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICAKKyAgICBhdHRlbXB0
UmVsYXVuY2hBZnRlckNyYXNoSWZOZWNlc3NhcnkoV1RGTW92ZShwZW5kaW5nUmVxdWVzdHMpKTsK
IH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAg
LTI3OCw5ICszNDQsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNz
CiAgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIpKQotICAgICAgICByZXR1cm47Ci0KICAgICBkaWRSZWNlaXZlTmV0d29ya1By
b2Nlc3NQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKQEAgLTI5NCw4ICsz
NTcsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVTeW5jCiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKLSAgICBh
dXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3Byb2Nlc3NQb29sKTsKLQogICAg
IGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52
YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCkBA
IC0zMDcsNyArMzY4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6
OgogICAgIG1fc3luY0FsbENvb2tpZXNBY3Rpdml0eSA9IG51bGxwdHI7CiAgICAgbV9zeW5jQWxs
Q29va2llc0NvdW50ZXIgPSAwOwogCi0gICAgLy8gVGhpcyB3aWxsIGNhdXNlIHVzIHRvIGJlIGRl
bGV0ZWQuCiAgICAgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiB9CiAKQEAgLTM1MCwxMSArNDEw
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0b3BPcmlnaW4gfHwgIW1fcHJvY2Vzc1Bvb2wuaXNT
ZXJ2aWNlV29ya2VyUGFnZUlEKHBhZ2VJRCkpIHsKLSAgICAgICAgcHJvY2Vzc0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKHNlc3Npb25JRCwgV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgV2ViUGFnZVByb3h5Ojpmb3JNb3N0Vmlz
aWJsZVdlYlBhZ2VJZkFueShzZXNzaW9uSUQsICp0b3BPcmlnaW4sIFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0g
V1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSldKGF1dG8qIHBhZ2UpIG11dGFibGUgewog
ICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDAxLDExICs0
NTYsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jCiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGNvbm5lY3Rpb25SZXF1ZXN0LnJlcGx5KHsgfSk7CiAgICAgfQot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wucHJvY2Vzc1N1cHBy
ZXNzaW9uRW5hYmxlZCgpKQotICAgICAgICBzZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHRy
dWUpOwotI2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoeHBj
X2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uID0gdGhpcy0+Y29ubmVjdGlvbigpLT54cGNDb25uZWN0
aW9uKCkpCkBAIC0xMTI1LDQyICsxMTc1LDI1IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkU3luY0FsbENvb2sKICAgICB9CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRk
U2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKICAgICBpZiAo
Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS0+cGFyYW1ldGVycygpIH0sIDApOwotICAgIGF1
dG8gc2Vzc2lvbklEID0gc3RvcmUtPnNlc3Npb25JRCgpOwotICAgIGlmICghc2Vzc2lvbklELmlz
RXBoZW1lcmFsKCkpIHsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFk
ZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShz
dG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgaWYgKCFzdG9y
ZS5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQorICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmls
ZVVwZ3JhZGUoc3RvcmUucmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiAjZW5k
aWYKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5zZXQoc2Vzc2lvbklELCBXVEZNb3ZlKHN0
b3JlKSk7Ci0gICAgfQogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Np
b24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgp
KQogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24g
eyBzZXNzaW9uSUQgfSwgMCk7Ci0gICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKLSAg
ICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUoc2Vzc2lvbklEKTsKIH0KIAogV2Vic2l0
ZURhdGFTdG9yZSogTmV0d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNz
aW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3dlYnNpdGVEYXRhU3RvcmVzLmZpbmQoc2Vzc2lvbklEKTsKLSAgICBpZiAoaXRlcmF0b3IgIT0g
bV93ZWJzaXRlRGF0YVN0b3Jlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1
ZS5nZXQoKTsKLQotICAgIGlmIChhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9v
bC53ZWJzaXRlRGF0YVN0b3JlKCkpIHsKLSAgICAgICAgaWYgKHNlc3Npb25JRCA9PSB3ZWJzaXRl
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSkKLSAgICAgICAgICAgIHJldHVybiB3ZWJzaXRlRGF0YVN0
b3JlOwotICAgIH0KLQotICAgIGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7CisgICAgcmV0
dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Np
b25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3Jh
Z2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEyMjAsNyArMTI1Myw2
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0U2FuZGJveEV4dGUKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHJl
Z2lzdHJhYmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgbV9wcm9j
ZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mo
KnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCBzZXNzaW9uSUQpOwogfQogCiB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OndvcmtlckNvbnRleHRDb25uZWN0aW9uTm9Mb25nZXJOZWVk
ZWQoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTEzMzAsMjEgKzEz
NjIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExvY2FsU3RvcmFnCiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpCiB7Ci0gICAgaWYg
KHByb2Nlc3NQb29sKCkuaGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7Ci0gICAgICAgIGlm
ICghUHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEZvcmVncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5
RnJvbVdlYlByb2Nlc3NlcykpIHsKLSAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vz
c2VzID0gdGhyb3R0bGVyKCkuZm9yZWdyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5nIGZvciBmb3Jl
Z3JvdW5kIHZpZXcocykiX3MpOwotICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9Gb3JlZ3JvdW5kKCksIDApOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHByb2Nlc3NQb29sKCkuaGFzQmFja2dy
b3VuZFdlYlByb2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxlcjo6aXNW
YWxpZEJhY2tncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcykpIHsKLSAg
ICAgICAgICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCkuYmFja2dy
b3VuZEFjdGl2aXR5KCJOZXR3b3JraW5nIGZvciBmb3JlZ3JvdW5kIGJhY2tncm91bmQgdmlldyhz
KSJfcyk7Ci0gICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vz
c0RpZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IG51bGxwdHI7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDI1MjI3
NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUgIkxlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmgiCiAjZW5kaWYKIAorbmFtZXNwYWNlIEFQSSB7Citj
bGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewog
Y2xhc3MgU2Vzc2lvbklEOwogfQpAQCAtNjIsNyArNjYsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7Ci1jbGFzcyBX
ZWJQcm9jZXNzUG9vbDsKIGVudW0gY2xhc3MgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIDog
Ym9vbDsKIGVudW0gY2xhc3MgU3RvcmFnZUFjY2Vzc1N0YXR1cyA6IHVpbnQ4X3Q7CiBlbnVtIGNs
YXNzIFdlYnNpdGVEYXRhRmV0Y2hPcHRpb247CkBAIC04NiwxMiArODksMTMgQEAgcHVibGljOgog
ICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9v
bCYpOworICAgIHN0YXRpYyBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBzaW5nbGV0b24oKTsKKyAgICBl
eHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHko
KTsKIAogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94
eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bkRlbGF5ZWRSZXBseSYmKTsKIAotICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJv
eHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwor
ICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYs
IFdlYlByb2Nlc3NQb29sJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAg
ICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRh
KFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9k
aWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KTsKQEAgLTE3MiwxMyArMTc2LDExIEBAIHB1YmxpYzoKICAgICBQcm9jZXNzVGhyb3R0bGVyJiB0
aHJvdHRsZXIoKSB7IHJldHVybiBtX3Rocm90dGxlcjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vz
c0Fzc2VydGlvbigpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1
cm4gbV9wcm9jZXNzUG9vbDsgfQotCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAg
ICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eSYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGFkZFNlc3Npb24oUmVm
PFdlYnNpdGVEYXRhU3RvcmU+JiYpOworICAgIHZvaWQgYWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0
b3JlJik7CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKICAgICAKICAg
ICB2b2lkIHRha2VVcGxvYWRBc3NlcnRpb24oKTsKQEAgLTE5NiwxMyArMTk4LDIxIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3Qg
U3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9j
b2woY29uc3QgU3RyaW5nJik7CiAKKyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9N
QU5BR0VSKQorICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KiBsZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSB7IHJldHVybiBtX2N1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudC5nZXQoKTsgfQorI2VuZGlmCisKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZCgpOworCiBwcml2YXRlOgorICAgIHZvaWQgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJv
Y2VzcygpOworICAgIHN0YXRpYyB2b2lkIGF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vz
c2FyeShWZWN0b3I8c3RkOjpwYWlyPFJlZjxXZWJQcm9jZXNzUHJveHk+LCBNZXNzYWdlczo6V2Vi
UHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHk+PiYm
KTsKKwogICAgIC8vIEF1eGlsaWFyeVByb2Nlc3NQcm94eQogICAgIHZvaWQgZ2V0TGF1bmNoT3B0
aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmKSBvdmVycmlkZTsKICAgICB2b2lk
IGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lk
IHByb2Nlc3NXaWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICB2
b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFja1N0YXRl
cygpOwogCiAgICAgLy8gUHJvY2Vzc1Rocm90dGxlckNsaWVudApAQCAtMjU5LDggKzI2OSw2IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6
OlNlc3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAg
V2ViUHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBzdHJ1Y3QgQ29ubmVjdGlvblJl
cXVlc3QgewogICAgICAgICBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4gd2ViUHJvY2VzczsKICAg
ICAgICAgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uRGVsYXllZFJlcGx5IHJlcGx5OwpAQCAtMjg3LDkgKzI5NSwxMCBAQCBwcml2YXRlOgogICAg
IEhhc2hTZXQ8V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkqPiBtX3dlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3hpZXM7CiAjZW5kaWYKIAotICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQs
IFJlZlB0cjxXZWJzaXRlRGF0YVN0b3JlPj4gbV93ZWJzaXRlRGF0YVN0b3JlczsKLSAgICAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UHJvY2Vzc0Fzc2VydGlvbj4gbV91cGxvYWRBc3NlcnRpb247Cisj
aWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTcgKzQ0LDIwIEBAIExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWMKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBtX25ldHdvcmtQcm9j
ZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdGFy
dExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOworICAgIGlmIChhdXRv
KiBjbGllbnQgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5sZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQoKSkKKyAgICAgICAgY2xpZW50LT5zdGFydExvYWRpbmcoKnRo
aXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElE
KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsK
KyAgICBpZiAoYXV0byogY2xpZW50ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
bGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+c3Rv
cExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOwogfQogCiB2b2lkIExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX25ldHdvcmtQcm9j
ZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5pbnZh
bGlkYXRlKCp0aGlzKTsKKyAgICBpZiAoYXV0byogY2xpZW50ID0gTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkubGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkpCisgICAg
ICAgIGNsaWVudC0+aW52YWxpZGF0ZSgqdGhpcyk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHk6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QodWludDY0X3QgY3VzdG9t
UHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2
ICszNiw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5j
bHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2Fj
aGUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJL
aXQySW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldl
YlByb2Nlc3NDYWNoZS5oIgpAQCAtODEsMTMgKzgyLDIyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6YWxsb3dXZWJzaXRlRGF0YVIKICAgICBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxP
cmlnaW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNp
dGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFTdG9yZXMoKQorc3RhdGljIEhhc2hNYXA8UEFM
OjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgYWxsRGF0YVN0b3JlcygpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0
dXJuIG1hcDsKIH0KIAorVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRl
RGF0YVN0b3JlOjpwYXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpCit7CisgICAgVmVjdG9yPFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBhbGxQYXJhbWV0ZXJzOworICAgIGFsbFBhcmFtZXRlcnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhbGxEYXRhU3RvcmVzKCkuc2l6ZSgpKTsKKyAgICBmb3Ig
KGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgICAgICBhbGxQYXJh
bWV0ZXJzLnVuY2hlY2tlZEFwcGVuZChzdG9yZS0+cGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4g
YWxsUGFyYW1ldGVyczsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3Rv
cmU6OmNyZWF0ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdl
YnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0ZShJc1Bl
cnNpc3RlbnQ6Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vzc2lvbklE
KCkpKTsKQEAgLTExMywxMCArMTIzLDExIEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRh
U3RvcmUoUmVmPFcKICNlbmRpZgogewogICAgIFdURjo6c2V0UHJvY2Vzc1ByaXZpbGVnZXMoYWxs
UHJpdmlsZWdlcygpKTsKLSAgICBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAg
IHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwog
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5hZGRTZXNzaW9uKCp0aGlzKTsKIH0KIAogV2Vic2l0ZURhdGFTdG9yZTo6
fldlYnNpdGVEYXRhU3RvcmUoKQpAQCAtMTI1LDE0ICsxMzYsOSBAQCBXZWJzaXRlRGF0YVN0b3Jl
Ojp+V2Vic2l0ZURhdGFTdG9yZSgpCiAKICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIAotICAgIGlm
IChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0g
ICAgICAgIEFTU0VSVChub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0g
dGhpcyk7Ci0gICAgICAgIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklE
KTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAgICAgICB9Ci0gICAgfQorICAg
IEFTU0VSVChhbGxEYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKKyAgICBh
bGxEYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKIH0KIAogc3RhdGlj
IFJlZlB0cjxXZWJzaXRlRGF0YVN0b3JlPiYgZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpCkBAIC0x
NjIsMTcgKzE2OCwxNSBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVF
CiAgICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpOwogfQogCi12b2lkIFdlYnNp
dGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3ZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKIHsKLSAgICBpZiAobV9zZXNz
aW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBh
dXRvIHJlc3VsdCA9IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlz
KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLSAg
ICB9CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0
aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogfQog
Ci1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHRE
YXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQorV2Vic2l0ZURh
dGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCku
Z2V0KHNlc3Npb25JRCkgOiBudWxscHRyOworICAgIHJldHVybiBhbGxEYXRhU3RvcmVzKCkuZ2V0
KHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNz
KFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKQEAgLTE4OCwxMiArMTkyLDYgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJvY2VzcwogICAgIG1fcHJvY2Vzc2VzLnJlbW92ZShw
cm9jZXNzKTsKIH0KIAotV2ViUHJvY2Vzc1Bvb2wqIFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQ
b29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKQotewotICAgIGF1dG8gcG9vbHMgPSBwcm9j
ZXNzUG9vbHMoMSwgZmFsc2UpOwotICAgIHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRy
IDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVz
b2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGly
ZWN0b3JpZXMpCkBAIC0yMDM0LDI5ICsyMDMyLDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpj
bGVhclJlc291cmNlTG9hZAogfQogI2VuZGlmCiAKLVZlY3RvcjxXZWJDb3JlOjpDb29raWU+IFdl
YnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29w
eVRvVmVjdG9yKG1fcGVuZGluZ0Nvb2tpZXMpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAg
bV9wZW5kaW5nQ29va2llcy5yZW1vdmVJZihbJmNvb2tpZV0oYXV0byYgcGVuZGluZ0Nvb2tpZSkg
ewotICAgICAgICByZXR1cm4gcGVuZGluZ0Nvb2tpZS5pc0tleUVxdWFsKGNvb2tpZSk7Ci0gICAg
fSk7Ci0gICAgbV9wZW5kaW5nQ29va2llcy5hZGQoY29va2llKTsKLX0KLQotdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29v
a2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlKGNvb2tpZSk7Ci19Ci0gICAgCi12
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMoKQotewotICAgIG1fcGVu
ZGluZ0Nvb2tpZXMuY2xlYXIoKTsKLX0KLQogdWludDY0X3QgV2Vic2l0ZURhdGFTdG9yZTo6cGVy
VGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IENv
bnNpZGVyIHdoZXRoZXIgYWxsb3dpbmcgdG8gc2V0IGEgcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3Jh
Z2VRdW90YSBmcm9tIGEgV2Vic2l0ZURhdGFTdG9yZS4KQEAgLTIxMDEsNiArMjA3NiwxMCBAQCBX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0CiAKICAgICBwbGF0Zm9ybVNl
dE5ldHdvcmtQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogCisjaWYgVVNFKFNPVVApCisgICAgV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlKHNlc3Npb25JRCgpLCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisjZW5kaWYKKyAgICAKICAg
ICByZXR1cm4gcGFyYW1ldGVyczsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkocmV2aXNp
b24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgog
ICAgIFdlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYm
LCBQQUw6OlNlc3Npb25JRCk7CiAgICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgIHN0YXRp
YyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9u
SUQoUEFMOjpTZXNzaW9uSUQpOworICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGlu
Z0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVy
c2lzdGVudCgpIGNvbnN0IHsgcmV0dXJuICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAg
ICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7
IH0KQEAgLTIxNCwxNSArMjE0LDEwIEBAIHB1YmxpYzoKIAogICAgIERldmljZUlkSGFzaFNhbHRT
dG9yYWdlJiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpIHsgcmV0dXJuIG1fZGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2UuZ2V0KCk7IH0KIAotICAgIFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbEZv
ckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7CiAgICAgYm9vbCBpc0Fzc29jaWF0ZWRQcm9jZXNz
UG9vbChXZWJQcm9jZXNzUG9vbCYpIGNvbnN0OwogCiAgICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMgcGFyYW1ldGVycygpOwotCi0gICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gcGVuZGlu
Z0Nvb2tpZXMoKSBjb25zdDsKLSAgICB2b2lkIGFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29y
ZTo6Q29va2llJik7Ci0gICAgdm9pZCByZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6
OkNvb2tpZSYpOwotICAgIHZvaWQgY2xlYXJQZW5kaW5nQ29va2llcygpOworICAgIHN0YXRpYyBW
ZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IHBhcmFtZXRlcnNGcm9tQWxsU3RvcmVz
KCk7CiAKICAgICB2b2lkIHNldEJvdW5kSW50ZXJmYWNlSWRlbnRpZmllcihTdHJpbmcmJiBpZGVu
dGlmaWVyKSB7IG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLT5zZXRCb3VuZEludGVyZmFjZUlkZW50
aWZpZXIoV1RGTW92ZShpZGVudGlmaWVyKSk7IH0KICAgICBjb25zdCBTdHJpbmcmIGJvdW5kSW50
ZXJmYWNlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLT5ib3Vu
ZEludGVyZmFjZUlkZW50aWZpZXIoKTsgfQpAQCAtMzIwLDcgKzMxNSw3IEBAIHByaXZhdGU6CiAg
ICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3Rv
cmFnZURpcmVjdG9yeSwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZvaWQg
cmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwg
Y29uc3QgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAKLSAgICB2b2lk
IG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgdm9pZCByZWdpc3RlcldpdGhT
ZXNzaW9uSURNYXAoKTsKIAogICAgIGNvbnN0IFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwog
CkBAIC0zNDgsOCArMzQzLDYgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpDdXJsUHJveHlTZXR0
aW5ncyBtX3Byb3h5U2V0dGluZ3M7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29v
a2llPiBtX3BlbmRpbmdDb29raWVzOwotICAgIAogICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQ
cm94eT4gbV9wcm9jZXNzZXM7CiAKICAgICBib29sIG1fbmV0d29ya2luZ0hhc0JlZ3VuIHsgZmFs
c2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dl
YnNpdGVEYXRhU3RvcmVDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0JKHJldmlzaW9u
IDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dl
YnNpdGVEYXRhU3RvcmVDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTY4LDggKzE2OCw2IEBA
IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3QKICAgICBwYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZp
ZXIgPSBzb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKICAgICBwYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50
aWZpZXIgPSBzb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKTsKIAotICAgIHBh
cmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBjb3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7
Ci0KICAgICBpZiAoIWNvb2tpZUZpbGUuaXNFbXB0eSgpKQogICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoRmlsZVN5c3RlbTo6ZGlyZWN0
b3J5TmFtZShjb29raWVGaWxlKSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lv
bkhhbmRsZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3Nv
dXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCShyZXZp
c2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3Vw
L1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29yCiB7CiAgICAgYXV0byYg
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnM7CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbEZvckNvb2tp
ZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdl
YkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNz
aW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBh
dGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUp
OworICAgIFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5nZXRDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3Vw
LmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9X
ZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94
eS5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYkNv
b2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAKQEAg
LTM0LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VU
eXBlIHN0b3JhZ2VUeXBlKQogewogICAgIG1fY29va2llUGVyc2lzdGVudFN0b3JhZ2VNYXAuc2V0
KHNlc3Npb25JRCwgc3RkOjptYWtlX3BhaXIoc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7Ci0g
ICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFn
ZVBhdGgsIHN0b3JhZ2VUeXBlKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0
b3JhZ2Uoc2Vzc2lvbklELCBzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKIH0KIAogdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlVHlwZSYgc3RvcmFnZVR5cGUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCShyZXZpc2lvbiAy
NTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEzICszNywxMSBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAg
TmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVy
cyA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRD
b29raWVQZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklE
LCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBk
ZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAg
ICAvLyBGSVhNRTogbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeSBzaG91bGQgYmUgbW92
ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgLy8gRklYTUU6IG1faWdub3JlVExTRXJy
b3JzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZSBvciByZW1vdmVkLgor
ICAgIC8vIEZJWE1FOiBtX25ldHdvcmtQcm94eVNldHRpbmdzIHNob3VsZCBiZSBtb3ZlZCB0byB0
aGUgV2Vic2l0ZURhdGFTdG9yZS4KIAotICAgIHBhcmFtZXRlcnMuY29va2llQWNjZXB0UG9saWN5
ID0gbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeTsKLSAgICBwYXJhbWV0ZXJzLmlnbm9y
ZVRMU0Vycm9ycyA9IG1faWdub3JlVExTRXJyb3JzOwogICAgIHBhcmFtZXRlcnMubGFuZ3VhZ2Vz
ID0gdXNlclByZWZlcnJlZExhbmd1YWdlcygpOwotICAgIHBhcmFtZXRlcnMucHJveHlTZXR0aW5n
cyA9IG1fbmV0d29ya1Byb3h5U2V0dGluZ3M7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjMxMCkKKysr
IFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE5LTEx
LTA5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgVXNlIGEgTmV0d29ya1Byb2Nlc3NQcm94eSBzaW5nbGV0b24gaW5zdGVhZCBvZiBvbmUgcGVy
IFdlYlByb2Nlc3NQb29sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDM1NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3Rv
cmUubW06CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2FpdEZvck1l
c3NhZ2VdKToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBhbGVydENv
b2tpZUhUTUxdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29r
aWVVSURlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTpp
bml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorCiAyMDE5LTEx
LTA5ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGlja3kgT3Ji
aW5nIHN1cHBvcnQuYXBwbGUuY29tIGNhdGVnb3JpZXMgc2hvd3MgYSBQTkcgaW5zdGVhZCBvZiB0
aGUgd2ViIHBhZ2UgcHJldmlldywgdGFwcGluZyBsb2FkcyBpbWFnZSBhc3NldCBvbmx5IGluc3Rl
YWQgb2Ygd2ViIHBhZ2UKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSW5kZXhlZERCRmlsZU5hbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQkocmV2aXNpb24gMjUyMjc0
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxl
TmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCAtICh2b2lkKXVzZXJDb250
ZW50Q29udHJvbGxlcjooV0tVc2VyQ29uCiAKIEBlbmQKIAotc3RhdGljIHZvaWQgcnVuVGVzdCgp
CitzdGF0aWMgdm9pZCBydW5UZXN0KGJvb2wgb2xkRmlsZVNob3VsZEV4aXN0ID0gdHJ1ZSkKIHsK
ICAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbSW5kZXhlZERCRmlsZU5hbWVNZXNzYWdlSGFu
ZGxlciBhbGxvY10gaW5pdF0pOwogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tX
S1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CkBAIC04Nyw3ICs4Nyw3IEBAIHN0
YXRpYyB2b2lkIHJ1blRlc3QoKQogICAgIE5TVVJMICpvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5
VVJMID0gW29sZFZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50
OiBAImZpbGVfXzAiXTsKICAgICBOU1VSTCAqbmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9
IFtuZXdWZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogQCJm
aWxlX18wIl07CiAgICAgTlNVUkwgKm9sZFZlcnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVS
TCA9IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDp1bnVzZWREYXRhYmFzZU5hbWVdOwotICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9uVW51c2VkRGF0YWJh
c2VEaXJlY3RvcnlVUkwucGF0aF0pOworICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VE
aXJlY3RvcnlVUkwucGF0aF0gPT0gb2xkRmlsZVNob3VsZEV4aXN0KTsKICAgICAKICAgICAvLyBG
b3IgZGF0YWJhc2UgdGhhdCBpcyBvcGVuZWQgYWZ0ZXIgdXBncmFkZSwgaXRzIGZpbGUgc2hvdWxk
IG9ubHkgYmUgaW4gdjEuCiAgICAgTlNVUkwgKm9sZFZlcnNpb25FeGlzdGluZ0RhdGFiYXNlRGly
ZWN0b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQ
YXRoQ29tcG9uZW50OiBleGlzdGluZ0RhdGFiYXNlTmFtZV07CkBAIC0xNTQsNyArMTU0LDcgQEAg
c3RhdGljIHZvaWQgY3JlYXRlRGlyZWN0b3JpZXMoU3RyaW5nIHRlcwogVEVTVChJbmRleGVkREIs
IEluZGV4ZWREQkZpbGVOYW1lKQogewogICAgIGNyZWF0ZURpcmVjdG9yaWVzKCJub25lIik7Ci0g
ICAgcnVuVGVzdCgpOworICAgIHJ1blRlc3QoZmFsc2UpOwogfQogCiBURVNUKEluZGV4ZWREQiwg
SW5kZXhlZERCRmlsZU5hbWVWMCkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvVExTRGVwcmVjYXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UTFNEZXByZWNhdGlvbi5tbQkocmV2aXNpb24gMjUyMjc0
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UTFNEZXByZWNhdGlv
bi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsOSBAQAogI2ltcG9ydCAiVGVzdFdLV2Vi
Vmlldy5oIgogI2ltcG9ydCAiV2ViQ29yZVRlc3RTdXBwb3J0LmgiCiAjaW1wb3J0IDxXZWJLaXQv
V0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3Rv
cmVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CisjaW1wb3J0IDxXZWJLaXQv
X1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0yMDAsNyArMjAyLDggQEAgVEVT
VChXZWJLaXQsIFRMU1ZlcnNpb25OZXR3b3JrU2Vzc2lvbikKICAgICAgICAgVENQU2VydmVyIHNl
cnZlcihUQ1BTZXJ2ZXI6OlByb3RvY29sOjpIVFRQUywgW10oU1NMICpzc2wpIHsKICAgICAgICAg
ICAgIEVYUEVDVF9GQUxTRShzc2wpOwogICAgICAgICB9LCB0bHMxXzEpOwotICAgICAgICBhdXRv
IHdlYlZpZXcgPSBtYWtlV2ViVmlld1dpdGgoW1dLV2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0
YVN0b3JlXSk7CisgICAgICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpjb25m
aWd1cmF0aW9uID0gW1tbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGlu
aXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgYXV0byB3ZWJWaWV3ID0gbWFrZVdlYlZpZXdXaXRo
KFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uXSBhdXRvcmVsZWFzZV0pOwogICAgICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpb
TlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiaHR0cHM6Ly8xMjcuMC4wLjE6JWQvIiwgc2VydmVyLnBvcnQo
KV1dXV07CiAgICAgICAgIFtkZWxlZ2F0ZSB3YWl0Rm9yRGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdh
dGlvbl07CiAgICAgfQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS0hUVFBDb29raWVTdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCShyZXZpc2lvbiAyNTIyNzQp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0
b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbXBvcnQgIlBsYXRm
b3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCisjaW1w
b3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tIVFRQQ29va2llU3RvcmUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1By
b2Nlc3NQb29sUHJpdmF0ZS5oPgpAQCAtNDc1LDggKzQ3Niw2IEBAIC0gKHZvaWQpd2ViVmlldzoo
V0tXZWJWaWV3ICopd2ViVmlldyBydW4KIH0KIEBlbmQKIAotLy8gRklYTUU6IG9uIGlPUywgVUkg
cHJvY2VzcyBzaG91bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29va2llIGZpbGUgYXMgdGhlIG5ldHdv
cmsgcHJvY2VzcyBmb3IgZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBMQVRGT1JNKE1BQykKIGVudW0g
Y2xhc3MgU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBObywgWWVzIH07CiB2b2lkIHJ1
bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQ
cmV3YXJtaW5nIHNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nKQogewpAQCAtNTg1LDIwICs1
ODQsNjUgQEAgVEVTVChXZWJLaXQsIFdLSFRUUENvb2tpZVN0b3JlV2l0aG91dFBybwogICAgIHJ1
bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQ
cmV3YXJtaW5nOjpZZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBAaW50ZXJm
YWNlIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVnYXRl
PgorLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUw7CistIChOU1N0cmluZyAqKXdhaXRGb3JN
ZXNzYWdlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxl
Z2F0ZQorQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgeworICAg
IFJldGFpblB0cjxOU1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0gKHZvaWQpd2ViVmlldzooV0tX
ZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihOU1N0
cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBF
WFBFQ1RfU1RSRVEoIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIiwgbWVzc2FnZS5VVEY4
U3RyaW5nKTsKLSAgICBmaW5pc2hlZCA9IHRydWU7CisgICAgX21lc3NhZ2UgPSBtZXNzYWdlOwog
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3Nh
Z2UKK3sKKyAgICB3aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpzcGluUnVuTG9vcCgpOworICAgIHJldHVybiBfbWVzc2FnZS5hdXRvcmVsZWFzZSgpOworfQor
CistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAgIHJldHVybiBAIjxzY3JpcHQ+
dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7
IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmlt
KCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+
IjsKK30KKwogQGVuZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVNdWx0aXBsZVZp
ZXdzKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0gW1tUZXN0V0tXZWJWaWV3IG5l
d10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJp
bmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5TSFRUUENvb2tpZSAqc2Vzc2lv
bkNvb2tpZSA9IFtOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6QHsKKyAgICAgICAg
TlNIVFRQQ29va2llUGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQQ29va2llTmFtZTogQCJTZXNz
aW9uQ29va2llTmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZhbHVlOiBAIkNvb2tpZVZhbHVl
IiwKKyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4wLjAuMSIsCisgICAgfV07CisK
KyAgICBfX2Jsb2NrIGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3MS5j
b25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tpZVN0b3JlIHNldENvb2tpZTpz
ZXNzaW9uQ29va2llIGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIHNldENvb2tpZURvbmUg
PSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc2V0Q29va2ll
RG9uZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQ2hlY2tTZXNzaW9uQ29va2ll
VUlEZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5n
ZXQoKV07CisKKyAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29v
a2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEi
XV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNz
aW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworICAgIAorICAgIFRlc3RXS1dlYlZpZXcgKndl
YlZpZXcyID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3
MiBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIgbG9hZEhUTUxT
dHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0
cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0
ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworfQor
CiBURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVy
YWxTZXNzaW9uKQogewogICAgIFJldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IGVwaGVtZXJh
bFN0b3JlV2l0aENvb2tpZXMgPSBbV0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRh
U3RvcmVdOwpAQCAtNjIzLDkgKzY2Nyw4IEBAIFRFU1QoV2ViS2l0LCBXS0hUVFBDb29raWVTdG9y
ZVdpdGhvdXRQcm8KICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKICAg
ICBmaW5pc2hlZCA9IGZhbHNlOwogICAgIAotICAgIE5TU3RyaW5nICphbGVydENvb2tpZUhUTUwg
PSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9y
IChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29v
a2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAn
KSk7PC9zY3JpcHQ+IjsKLSAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzphbGVydENvb2tpZUhU
TUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07Ci0g
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CisgICAgW3dlYlZpZXcgbG9h
ZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtk
ZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIp
OwogfQogCiBzdGF0aWMgYm9vbCBhcmVDb29raWVzRXF1YWwoTlNIVFRQQ29va2llICpmaXJzdCwg
TlNIVFRQQ29va2llICpzZWNvbmQpCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0
b21QYXRocy5tbQkocmV2aXNpb24gMjUyMjc0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQyNyw3ICs0MjcsNyBAQCBURVNUKFdlYktpdCwgV2Vic2l0ZURhdGFTdG9yZUVwaGVt
ZXJhbCkKICAgICBoYW5kbGVyID0gbmlsOwogICAgIGNvbmZpZ3VyYXRpb24gPSBuaWw7CiAKLSAg
ICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNB
dFBhdGg6ZGVmYXVsdFJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXRoLnBhdGhdKTsKKyAgICBFWFBF
Q1RfRkFMU0UoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRo
OmRlZmF1bHRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGF0aC5wYXRoXSk7CiAgICAgRVhQRUNUX0ZB
TFNFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpkZWZh
dWx0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpbGVQYXRoLnBhdGhdKTsKIAogICAgIFtbTlNGaWxl
TWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJMOmRlZmF1bHRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGF0aCBlcnJvcjpuaWxdOwpAQCAtNDcwLDcgKzQ3MCw3IEBAIFRFU1QoV2Vi
S2l0LCBXZWJzaXRlRGF0YVN0b3JlRXBoZW1lcmFsVmkKICAgICBoYW5kbGVyID0gbmlsOwogICAg
IGNvbmZpZ3VyYXRpb24gPSBuaWw7CiAKLSAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIg
ZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6ZGVmYXVsdFJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXRoLnBhdGhdKTsKKyAgICBFWFBFQ1RfRkFMU0UoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1
bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOmRlZmF1bHRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGF0aC5wYXRoXSk7CiAgICAgRVhQRUNUX0ZBTFNFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFu
YWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpkZWZhdWx0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpbGVQ
YXRoLnBhdGhdKTsKIAogICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3Zl
SXRlbUF0VVJMOmRlZmF1bHRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGF0aCBlcnJvcjpuaWxdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383243</attachid>
            <date>2019-11-10 03:24:43 -0800</date>
            <delta_ts>2019-11-10 04:28:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20191110112440.patch</filename>
            <type>text/plain</type>
            <size>133510</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBAQAorMjAxOS0xMS0wOSAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBhIE5ldHdv
cmtQcm9jZXNzUHJveHkgc2luZ2xldG9uIGluc3RlYWQgb2Ygb25lIHBlciBXZWJQcm9jZXNzUG9v
bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToK
KyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhU
VFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tp
ZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3Jl
Ojpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoQVBJOjpI
VFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoQVBJ
OjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6CisgICAgICAgIChX
S0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9zZXRDb29raWVBY2Nl
cHRQb2xpY3k6XSk6CisgICAgICAgICh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tp
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNN
b2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpw
cm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250
ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6CisgICAgICAg
IChXZWJLaXQ6Om1fd2ViUHJvY2Vzc0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6On5XZWJQcm9jZXNzUG9vbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0
Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9O
ZXR3b3JraW5nUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVh
ckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyTGVnYWN5UHJpdmF0ZUJy
b3dzaW5nTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFs
bG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRXZWJQcm9jZXNzSGFzVXBsb2Fkcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVhcldlYlByb2Nlc3NIYXNVcGxv
YWRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMTktMTEtMDggIEpv
bmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIyNTIyNjAuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwMyw3ICszMDMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1By
CiAgICAgICAgIG1lbW9yeVByZXNzdXJlSGFuZGxlci5pbnN0YWxsKCk7CiAgICAgfQogCi0gICAg
c2V0Q2FjaGVNb2RlbChwYXJhbWV0ZXJzLmNhY2hlTW9kZWwsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURp
cmVjdG9yeSk7CisgICAgLy8gRklYTUU6IEkgc3RpbGwgbmVlZCB0byBzZXQgdGhlIGNhY2hlIG1v
ZGVsIGZyb20gTGVnYWN5R2xvYmFsU2V0dGluZ3MsIGJ1dCB3aXRoIHRoZSBwYXRoIGZyb20gdGhl
IGZpcnN0IHBlcnNpc3RlbnQgZGF0YSBzdG9yZS4KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCiAgICAgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCA9IHBhcmFtZXRlcnMuc2hv
dWxkRW5hYmxlSVRQRGF0YWJhc2U7CkBAIC0zMTEsMTQgKzMxMSwxNSBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1ByCiAKICAgICBXZWJDb3JlOjpSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZUVuYWJsZWQocGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUpOwog
Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBzZXNz
aW9uSUQgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7Ci0gICAgc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7Ci0KKyAgICBmb3IgKGF1
dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMp
IHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lv
bklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwog
I2VuZGlmCisgICAgICAgIGluaXRpYWxpemVTdG9yYWdlUXVvdGEoZGF0YVN0b3JlUGFyYW1ldGVy
cyk7CisgICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIGRhdGFTdG9y
ZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmxv
Y2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIFJlbW90ZU5ldHdv
cmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbigqdGhpcywgV1RGTW92
ZShkYXRhU3RvcmVQYXJhbWV0ZXJzKSk7CisgICAgfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQogICAgIGlmIChwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50KCkp
IHsKQEAgLTMyNiwxNCArMzI3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5l
dHdvcmtQcgogICAgICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlF
bmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAgICAgfQogI2VuZGlmCi0gICAgaW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKLQotICAgIG1fc3RvcmFnZU1h
bmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBh
dXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpOwotICAgIGF1dG8qIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IGRlZmF1
bHRTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGNvb2tpZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nv
b2tpZXMpCi0gICAgICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7
CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQog
ICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNDE5LDEyICs0
MTIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjCiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAgIGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuY2xlYXJDcmVkZW50aWFscygpOwot
ICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpKQotICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+
Y2xlYXJDcmVkZW50aWFscygpOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0KICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW10gKGF1dG8mIG5ldHdvcmtTZXNzaW9u
KSB7CiAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24ubmV0
d29ya1N0b3JhZ2VTZXNzaW9uKCkpCiAgICAgICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVu
dGlhbFN0b3JhZ2UoKS5jbGVhckNyZWRlbnRpYWxzKCk7CkBAIC00OTEsOCArNDc4LDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdAogdm9pZCBOZXR3b3JrUHJvY2Vz
czo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNo
b3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFz
ZSkKICNlbmRpZgogewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3Jh
Z2VTZXNzaW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5p
c05ld0VudHJ5KQogICAgICAgICByZXR1cm47CkBAIC01MjQsMjEgKzUwOSwxMSBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0CiAKIFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiogTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uKGNvbnN0IFBBTDo6U2Vz
c2lvbklEJiBzZXNzaW9uSUQpIGNvbnN0CiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICByZXR1cm4gJmRlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpOwogICAgIHJldHVybiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMuZ2V0KHNl
c3Npb25JRCk7CiB9CiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29ya1By
b2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb24pCi0gICAgICAgIG1fZGVmYXVsdE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiA9IHBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgcmV0
dXJuICptX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247Ci19Ci0KIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKT4mIGZ1bmN0b3IpCiB7Ci0gICAgZnVuY3Rv
cihkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSk7CiAgICAgZm9yIChhdXRvJiBzdG9yYWdlU2Vzc2lv
biA6IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy52YWx1ZXMoKSkKICAgICAgICAgZnVuY3Rvcigq
c3RvcmFnZVNlc3Npb24pOwogfQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuaAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyAr
MTY2LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7
CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3Qg
UEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4mJik7CkBAIC0zNDIsNyArMzQxLDYgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0OwogCiAgICAgdm9pZCB0ZXJtaW5hdGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHBs
YXRmb3JtVGVybWluYXRlKCk7CkBAIC00ODIsNyArNDgwLDYgQEAgcHJpdmF0ZToKIAogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1f
bmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vz
c2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8
U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjplCiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwogICAgIGVuY29kZXIgPDwgc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7CiAjZW5k
aWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGVuY29k
ZXIgPDwgZGF0YVN0b3JlUGFyYW1ldGVyczsKICNpZiBVU0UoU09VUCkKICAgICBlbmNvZGVyLmVu
Y29kZUVudW0oY29va2llQWNjZXB0UG9saWN5KTsKICAgICBlbmNvZGVyIDw8IGlnbm9yZVRMU0Vy
cm9yczsKQEAgLTEyMiwxMSArMTIyLDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAgICBPcHRpb25h
bDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7
Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIWRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQorICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycz4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiBk
YXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGlmICghZGF0YVN0b3JlUGFyYW1ldGVycykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9
IFdURk1vdmUoKmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKKyAgICByZXN1bHQuZGF0YVN0
b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAjaWYgVVNF
KFNPVVApCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmNvb2tpZUFjY2VwdFBv
bGljeSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCShyZXZpc2lvbiAyNTIy
NzQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RydWN0IE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIAogICAgIGJvb2wgc3RvcmFnZUFjY2Vzc0FQ
SUVuYWJsZWQ7CiAjZW5kaWYKIAotICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIGRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gZGF0YVN0b3JlUGFyYW1ldGVyczsKICAgICAKICNpZiBVU0UoU09VUCkKICAgICBIVFRQ
Q29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSB7IEhUVFBDb29raWVBY2NlcHRQ
b2xpY3k6OkFsd2F5c0FjY2VwdCB9OwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdlckN1cmwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJD
dXJsLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdlckN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw3ICs1OSwxMiBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENv
CiAKIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1HZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KCkKIHsKLSAgICBjb25zdCBhdXRvJiBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24gPSBtX3Byb2Nlc3MuZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CisgICAgY29uc3Qg
YXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOworICAgIGlmICghbmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6T25seUZyb21NYWluRG9jdW1lbnREb21haW47Cisg
ICAgfQorCiAgICAgc3dpdGNoIChuZXR3b3JrU3RvcmFnZVNlc3Npb24uY29va2llU3RvcmFnZSgp
LmNvb2tpZUFjY2VwdFBvbGljeShuZXR3b3JrU3RvcmFnZVNlc3Npb24pKSB7CiAgICAgY2FzZSBD
b29raWVBY2NlcHRQb2xpY3k6OkFsd2F5czoKICAgICAgICAgcmV0dXJuIEhUVFBDb29raWVBY2Nl
cHRQb2xpY3k6OkFsd2F5c0FjY2VwdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2Vy
U291cC5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KICNpbmNsdWRlIDxs
aWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02Miw3ICs2Myw3IEBAIHZvaWQg
V2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ28KIAogSFRUUENvb2tpZUFjY2VwdFBv
bGljeSBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybUdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
KQogewotICAgIHN3aXRjaCAoc291cF9jb29raWVfamFyX2dldF9hY2NlcHRfcG9saWN5KG1fcHJv
Y2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVTdG9yYWdlKCkpKSB7CisgICAgc3dp
dGNoIChzb3VwX2Nvb2tpZV9qYXJfZ2V0X2FjY2VwdF9wb2xpY3kobV9wcm9jZXNzLnN0b3JhZ2VT
ZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpLT5jb29raWVTdG9yYWdl
KCkpKSB7CiAgICAgY2FzZSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZUzoKICAgICAgICAg
cmV0dXJuIEhUVFBDb29raWVBY2NlcHRQb2xpY3k6OkFsd2F5c0FjY2VwdDsKICAgICBjYXNlIFNP
VVBfQ09PS0lFX0pBUl9BQ0NFUFRfTkVWRVI6CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCShyZXZp
c2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtQcm9jZXNzQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTg2LDkgKzg2LDYgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVu
ZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFU
U0NvbnRleHQocGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMTUsMTEg
KzExMiw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBb
TlNVUkxDYWNoZSBzZXRTaGFyZWRVUkxDYWNoZTp1cmxDYWNoZS5nZXQoKV07CiB9CiAKLXN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNz
OjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogUmV0YWluUHRyPENGRGF0YVJlZj4gTmV0
d29ya1Byb2Nlc3M6OnNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhKCkgY29uc3QKIHsKICNpZiBV
U0UoU09VUkNFX0FQUExJQ0FUSU9OX0FVRElUX0RBVEEpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAko
cmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KIHsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBs
YXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphbGxvd1Nw
ZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0
aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2lu
Z0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9t
YWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC02MCwxMCArNjAsNiBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250
ZXh0OjplbnN1cmVXZWJzCiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Np
b25JRCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGlu
Z05ldHdvcmtTZXNzaW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0
KCkpLCBXVEZNb3ZlKHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Np
b24gPSBuZXR3b3JrUHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAo
Y29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAg
c2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNz
aW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RG
TW92ZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQ
cm9jZXNzU291cC5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDUsMTEgKzE0NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4K
ICAgICB9KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMp
CiB7CiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRTaG91bGRJZ25vcmVUTFNFcnJvcnMoaWdu
b3JlVExTRXJyb3JzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5j
b2RlKAogICAgIGVuY29kZXIgPDwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogICAgIGVuY29k
ZXIgPDwgdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgZW5jb2RlciA8PCBj
b29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAgICBlbmNvZGVyIDw8IHBlbmRpbmdD
b29raWVzOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgZW5jb2RlciA8PCBp
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgZW5jb2RlciA8PCBpbmRl
eGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkBAIC04MSwxMiArNzcsNiBAQCBPcHRp
b25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2ViCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRs
ZSA9IFdURk1vdmUoKmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE9w
dGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb29raWU+PiBwZW5kaW5nQ29va2llczsKLSAgICBkZWNv
ZGVyID4+IHBlbmRpbmdDb29raWVzOwotICAgIGlmICghcGVuZGluZ0Nvb2tpZXMpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IFdU
Rk1vdmUoKnBlbmRpbmdDb29raWVzKTsKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
ICAgIE9wdGlvbmFsPFN0cmluZz4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIGRlY29k
ZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwpAQCAtOTksMTQgKzg5LDYgQEAgT3B0aW9u
YWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYgogICAgIGlmICghaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
ID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlPiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsK
LSAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlOwotICAgIGlmICghaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUo
KmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRp
ZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgJKHJldmlzaW9u
IDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE1ICs1MSwxMSBAQCBzdHJ1Y3QgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMgewogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHVpUHJvY2Vzc0Nvb2tp
ZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjb29raWVT
dG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBw
ZW5kaW5nQ29va2llczsKICAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAg
ICBTdHJpbmcgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQv
Q29jb2EvQVBJT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
Y29hL0FQSU9iamVjdC5tbQkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9TaGFy
ZWQvQ29jb2EvQVBJT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw4IEBAIG5h
bWVzcGFjZSBBUEkgewogCiB2b2lkIE9iamVjdDo6cmVmKCkgY29uc3QKIHsKKyAgICBpZiAoIXdy
YXBwZXIoKSkKKyAgICAgICAgV1RGUmVwb3J0QmFja3RyYWNlKCk7CiAgICAgQ0ZSZXRhaW4oKF9f
YnJpZGdlIENGVHlwZVJlZil3cmFwcGVyKCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDI1MjI3
NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgog
I2luY2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJP
cHRpb25hbENhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzksMjAg
KzQwLDE1IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
Ci1jb25zdCBjaGFyKiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkKK1dl
YkNvb2tpZU1hbmFnZXJQcm94eSYgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKQog
ewotICAgIHJldHVybiAiV2ViQ29va2llTWFuYWdlclByb3h5IjsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8V2ViQ29va2llTWFuYWdlclByb3h5PiBtYW5hZ2VyOworICAgIHJldHVybiBtYW5h
Z2VyOwogfQogCi1SZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmNyZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCitXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94eSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgV2ViQ29va2llTWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNz
UG9vbCkKLSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQotewotICAgIFdl
YkNvbnRleHRTdXBwbGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhp
cyk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgKnRoaXMpOwogfQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2Vy
UHJveHkoKQpAQCAtNjUsNDMgKzYxLDkgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6Omlu
aXRpYWxpemVDbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAotLy8gV2Vi
Q29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NQ
b29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnM7Ci0gICAg
Zm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2JzZXJ2ZXJzLnZhbHVlcygpKSB7Ci0g
ICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlclNldCkKLSAgICAgICAgICAgIG9i
c2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQotICAgIGZvciAoYXV0byogb2JzZXJ2
ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5tYW5hZ2VyRGVzdHJveWVkKCk7Ci0K
LSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0eSgpKTsKLX0KLQotdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKQotewot
fQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQ
cm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cmVmV2Vi
Q29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpyZWYoKTsKLX0KLQotdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewot
ICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNz
aW9uSUQpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFj
dGl2aXR5ID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzIl9zKV0oVmVjdG9y
PFN0cmluZz4mJiBob3N0bmFtZXMpIG11dGFibGUgewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9u
KFdURk1vdmUoaG9zdG5hbWVzKSk7CiAgICAgfSk7CkBAIC0xMDksMTcgKzcxLDE3IEBAIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXMKIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQogewotICAgIHByb2Nlc3NQb29s
KCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQs
IGhvc3RuYW1lcykpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQo
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vz
c2lvbklELCBob3N0bmFtZXMpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OmRlbGV0ZUFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nl
c3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQpKTsK
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgQ29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2ll
KHNlc3Npb25JRCwgY29va2llKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pLCBhY3Rpdml0eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91
bmRBY3Rpdml0eSgiV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUiX3MpXSgpIG11
dGFibGUgewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgfSk7CkBAIC0xMjcsNyAr
ODksNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llCiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdhbGxUaW1lIHRpbWUsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3Jr
UHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQ
cm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVs
ZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCB0aW1lKSwgW2NhbGxiYWNrRnVu
Y3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBhY3Rpdml0eSA9IG5ldHdvcmtQcm9j
ZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViQ29va2llTWFuYWdlclByb3h5
OjpkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZSJfcyldKCkgbXV0YWJsZSB7CiAgICAgICAg
IGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTEzNSw3ICs5Nyw3IEBAIHZvaWQgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb28KIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8
Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVu
Y3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklELCBj
b29raWVzKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBh
Y3Rpdml0eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgi
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzIl9zKV0oKSBtdXRhYmxlIHsKICAgICAg
ICAgY2FsbGJhY2tGdW5jdGlvbigpOwogICAgIH0pOwpAQCAtMTQzLDcgKzEwNSw3IEBAIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFAKIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0
b3I8Q29va2llPiYgY29va2llcywgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3Vt
ZW50VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsK
LSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1
cmwsIG1haW5Eb2N1bWVudFVSTCksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFj
a0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3Jv
dW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyJfcyldKCkgbXV0
YWJsZSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTE1MSw3ICsx
MTMsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQCiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFj
a0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0QWxsQ29va2llcyhzZXNz
aW9uSUQpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFj
dGl2aXR5ID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFsbENvb2tpZXMiX3MpXShWZWN0b3I8Q29va2llPiYm
IGNvb2tpZXMpIG11dGFibGUgewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKFdURk1vdmUoY29v
a2llcykpOwogICAgIH0pOwpAQCAtMTU5LDcgKzEyMSw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpnZXRBbGxDb29raWUKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENv
b2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewot
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFtjYWxs
YmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3
b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Z2V0Q29va2llcyJfcyldKFZlY3RvcjxDb29raWU+JiYgY29va2llcykgbXV0YWJs
ZSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oV1RGTW92ZShjb29raWVzKSk7CiAgICAgfSk7
CkBAIC0xNjcsMTIgKzEyOSwxMiBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29v
a2llcyhQCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tp
ZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCkt
PnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkp
OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAw
KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5z
ZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCksIDApOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFj
ayhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4mJiBjYWxs
YmFjaykKQEAgLTIyMSwxNyArMTgzLDkgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNv
b2tpZXNEaWRDaAogICAgICAgICBvYnNlcnZlci0+Y29va2llc0RpZENoYW5nZSgpOwogfQogCi12
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6
OlNlc3Npb25JRCwgSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQordm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBI
VFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKCFwcm9j
ZXNzUG9vbCgpLT5pc1VzaW5nVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkpCi0gICAgICAgIHBlcnNp
c3RIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLSNpZiBVU0UoU09VUCkK
LSAgICBwcm9jZXNzUG9vbCgpLT5zZXRJbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xp
Y3kpOwotI2VuZGlmCi0KLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCkt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kocG9saWN5KSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pLCBhY3Rpdml0eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRB
Y3Rpdml0eSgiV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
Il9zKV0oKSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogICAgIH0pOwpA
QCAtMjM5LDcgKzE5Myw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29v
a2kKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2Vw
dFBvbGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0
d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3
b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OkdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pLCBhY3Rpdml0eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigp
LmJhY2tncm91bmRBY3Rpdml0eSgiV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5Il9zKV0oSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIG11dGFibGUg
ewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKHBvbGljeSk7CiAgICAgfSk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAkocmV2aXNp
b24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclBy
b3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDExICs1Niw5IEBAIHR5cGVkZWYgR2VuZXJpY0Nh
bGxiYWNrPEFQSTo6QXJyYXkqPiBBcnIKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEhUVFBDb29r
aWVBY2NlcHRQb2xpY3k+IEhUVFBDb29raWVBY2NlcHRQb2xpY3lDYWxsYmFjazsKIHR5cGVkZWYg
R2VuZXJpY0NhbGxiYWNrPGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jj4gR2V0Q29va2ll
c0NhbGxiYWNrOwogCi1jbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpP
YmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHVibGljIFdlYkNv
bnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdl
YkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6
OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKLQotICAgIHN0
YXRpYyBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqKTsK
KyAgICBzdGF0aWMgV2ViQ29va2llTWFuYWdlclByb3h5JiBzaW5nbGV0b24oKTsKICAgICB2aXJ0
dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUNsaWVu
dChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKik7CkBAIC0xMDQsMTcgKzEwMiwxMSBA
QCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpPYmplY3Q6OmRlcmVmOwogCiBwcml2YXRlOgotICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCopOworICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eSgpOworICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+OwogCiAgICAgdm9pZCBjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEKTsKIAot
ICAgIC8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0gICAgdm9pZCBwcm9jZXNzUG9vbERlc3Ryb3ll
ZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSop
IG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkq
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0KICAgICAv
LyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjE2LDYgKzIxNiwxMSBAQCBzdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vu
c2l0CiAgICAgcmV0dXJuIHNldDsKIH0KIAorVmVjdG9yPFN0cmluZz4gV2ViUHJvY2Vzc1Bvb2w6
OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpCit7CisgICAgcmV0dXJuIGNv
cHlUb1ZlY3RvcihnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSk7
Cit9CisKIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAgICA6IG1fY29uZmlndXJhdGlvbihjb25maWd1
cmF0aW9uLmNvcHkoKSkKICAgICAsIG1fZGVmYXVsdFBhZ2VHcm91cChXZWJQYWdlR3JvdXA6OmNy
ZWF0ZSgpKQpAQCAtMjIzLDcgKzIyOCw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9v
bChBUEk6OlByb2MKICAgICAsIG1fYXV0b21hdGlvbkNsaWVudChtYWtlVW5pcXVlPEFQSTo6QXV0
b21hdGlvbkNsaWVudD4oKSkKICAgICAsIG1fZG93bmxvYWRDbGllbnQobWFrZVVuaXF1ZVJlZjxB
UEk6OkRvd25sb2FkQ2xpZW50PigpKQogICAgICwgbV9oaXN0b3J5Q2xpZW50KG1ha2VVbmlxdWU8
QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fY3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ+KCkpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoVmlzaXRlZExpbmtTdG9yZTo6Y3JlYXRl
KCkpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV9oaWdoUGVyZm9ybWFuY2VHcmFwaGljc1Vz
YWdlU2FtcGxlcihtYWtlVW5pcXVlPEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVy
PigqdGhpcykpCkBAIC0yNjYsNyArMjcwLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQ
b29sKEFQSTo6UHJvYwogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJvY2Vz
c1Bvb2w6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTogVGhl
c2Ugc3ViLW9iamVjdHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZl
ck1hcC4uCi0gICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAg
YWRkU3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBw
bGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVESUFf
U0VTU0lPTikKQEAgLTMxNyw5ICszMjAsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQ
b29sKCkKICAgICBwcm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0RG93
blByb2Nlc3MoKTsKLQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNzZXNV
c2luZ0dhbWVwYWRzLmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmds
ZXRvbigpLnByb2Nlc3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtMzc3LDE2
ICszNzcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50CiAgICAg
ICAgIG1fYXV0b21hdGlvbkNsaWVudCA9IFdURk1vdmUoYXV0b21hdGlvbkNsaWVudCk7CiB9CiAK
LXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYgY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotewotI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BS
T1RPQ09MX01BTkFHRVIpCi0gICAgaWYgKCFjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi0g
ICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gbWFrZVVuaXF1ZTxBUEk6OkN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gV1RGTW92ZShjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQpOwotI2VuZGlmCi19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFN0b3JhZ2VBY2Nlc3NB
UElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX3N0b3JhZ2VBY2Nlc3NBUElFbmFibGVk
ID0gZW5hYmxlZDsKQEAgLTQwNiw3ICszOTYsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRD
dXN0b21XZWJDb250ZW50CiAKIElQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5ldHdv
cmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCiB7Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3Mt
PmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuY29ubmVjdGlvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5n
ZWQodm9pZCogY29udGV4dCkKQEAgLTQxOCw4ICs0MDgsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpsYW5ndWFnZUNoYW5nZWQoKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6
V2ViUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExh
bmd1YWdlcygpKSk7CiAjaWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0g
ICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpV
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAw
KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJl
ZExhbmd1YWdlcygpKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtNDU3LDIwMyArNDQ2LDEzIEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNjcmVlblByb3BlcnRpZXNTdGEKICNlbmRpZgogfQogCi1OZXR3
b3JrUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vi
c2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUpCitOZXR3b3JrUHJvY2Vzc1Byb3h5
JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSop
CiB7Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICAvLyBGSVhNRTog
VGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkg
b24gbm9uLW1haW4gdGhyZWFkcy4KLSAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3
ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KLSAgICBpZiAo
IVJ1bkxvb3A6OmlzTWFpbigpKSB7Ci0gICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgICAgICBlbnN1
cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuICptX25ldHdv
cmtQcm9jZXNzOwotICAgIH0KLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAg
IGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICAg
ICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgYXV0byBu
ZXR3b3JrUHJvY2VzcyA9IG1ha2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQcm94eT4oKnRoaXMpOwot
Ci0gICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLQotICAg
IGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3RvcihtX3dlYnNpdGVE
YXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUt
PmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3Jl
LT5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291
cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5z
b3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRpZgotICAgICAgICBt
X3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtpbmdIYXNCZWd1bigpOwotICAgIH0KLQotICAgIHBh
cmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5j
YWNoZU1vZGVsKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IGdsb2JhbFVSTFNjaGVtZXNX
aXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOwotCi0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdl
YlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb29raWVT
dG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBh
cmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBT
dHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtp
bmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5p
c0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFp
bmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBwYXJlbnRC
dW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7
Ci0gICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94
RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShlbXB0eVN0cmlu
ZygpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnkgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3Rvcnku
aXNOdWxsKCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxT
ZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKLSAgICBw
YXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQ
b2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNj
aGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAg
cGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgp
KTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlU
b1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0
ZXJBc05vQWNjZXNzKCkpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgLy8g
KioqKioqKioqCi0gICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rvcnkg
c3RydWN0dXJlIGZvciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNrIHdpdGhvdXQgZmlyc3QgY29u
c3VsdGluZyBhIHJldmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8vcHJvYmxlbS8xNzQ1NDcxMj4p
Ci0gICAgLy8gKioqKioqKioqCi0gICAgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlU3lt
TGlua0ZvckZpbGVVcGdyYWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRh
U3RvcmUtPnJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAg
IGlmICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQotICAg
ICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSAgV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeSgpOwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0
ZURpcmVjdG9yeShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnks
IHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJz
aXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExvY2FsU3RvcmFnZURp
cmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5
KQotICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFn
ZURpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3Jp
dGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0K
LSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKLSAgICBpZiAocGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7Ci0KLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0KLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBm
YWxzZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZl
bnQgPSBmYWxzZTsKLSAgICBib29sIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVlOwotICAg
IGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGZhbHNlOwotICAg
IGJvb2wgZW5hYmxlVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nID0gZmFsc2U7Ci0gICAgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4gbWFudWFsUHJldmFsZW50UmVzb3VyY2UgeyB9OwotICAgIGlm
ICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IHdpdGhXZWJzaXRlRGF0
YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAg
aWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMo
KS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9j
YWxob3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3RJ
blJlc291cmNlTG9hZFN0YXRpc3RpY3M7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGU7Ci0gICAgICAgICAgICBlbmFibGVUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmcgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxlVGhpcmRQYXJ0
eUNvb2tpZUJsb2NraW5nOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbnVhbFByZXZh
bGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHdp
dGhXZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0g
ICAgICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSB3aXRo
V2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAg
ICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3Rv
cnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV93
ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
PSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0j
aWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFz
U3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdEluUmVzb3VyY2VMb2Fk
U3RhdGlzdGljczsKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1
Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnTW9kZTsKLSAgICAgICAgICAgIGVuYWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2lu
ZyA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5lbmFibGVUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmc7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFudWFsUHJldmFsZW50UmVzb3VyY2U7
Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2lu
U3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9y
ZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotCi0gICAgICAgIGNvbnN0IGF1
dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRO
ZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3Rv
cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9
IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6
OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotICAgICAgICBhdXRvIG5ldHdvcmtDYWNoZURpcmVj
dG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsK
LSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0
b3J5OwotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hl
RGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdv
cmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgfQotCi0gICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3M7
Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQ7Ci0gICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
c2hvdWxkSW5jbHVkZUxvY2FsaG9zdEluUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHNob3VsZElu
Y2x1ZGVMb2NhbGhvc3Q7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSA9IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGU7Ci0gICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuZW5hYmxlVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nID0gZW5hYmxlVGhpcmRQYXJ0eUNvb2tp
ZUJsb2NraW5nOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSA9IG1hbnVhbFByZXZhbGVudFJlc291cmNlOwotCi0gICAgLy8gQWRkIGFueSBw
bGF0Zm9ybSBzcGVjaWZpYyBwYXJhbWV0ZXJzCi0gICAgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MocGFyYW1ldGVycyk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBuZXR3b3JrIHBy
b2Nlc3MuCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOwotCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRRT1MobmV0d29ya1Byb2Nlc3NMYXRlbmN5UU9TKCksIG5ldHdvcmtQcm9jZXNzVGhy
b3VnaHB1dFFPUygpKSwgMCk7Ci0jZW5kaWYKLQotICAgIG5ldHdvcmtQcm9jZXNzLT51cGRhdGVQ
cm9jZXNzQXNzZXJ0aW9uKCk7Ci0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVEYXRh
U3RvcmUpKTsKLSAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tp
ZXMoKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIG5ldHdvcmsgcHJvY2VzcyBrbm93
cyBhYm91dCBhbGwgdGhlIHNlc3Npb25zIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYmVmb3Jl
IGl0IHN0YXJ0ZWQuCi0gICAgZm9yIChhdXRvJiBzZXNzaW9uSUQgOiBtX3Nlc3Npb25Ub1BhZ2VJ
RHNNYXAua2V5cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vi
c2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNl
c3Npb25JRCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqd2Vic2l0
ZURhdGFTdG9yZSk7Ci0gICAgfQotCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IFdURk1vdmUobmV0
d29ya1Byb2Nlc3MpOwotICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKKyAgICByZXR1cm4g
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJv
Y2Vzc1Byb3h5LCBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+LCBNZXNz
YWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5
ZWRSZXBseT4+JiYgcGVuZGluZ1JlcGxpZXMpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkK
IHsKLSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJv
Y2Vzc1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBz
dXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+
cHJvY2Vzc0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNjYyLDE2ICs0NjEs
NiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoCiAgICAgaWYgKG1f
YXV0b21hdGlvblNlc3Npb24pCiAgICAgICAgIG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0
ZSgpOwogCi0gICAgLy8gTGVhdmUgdGhlIHByb2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGll
bnQgY2FsbCwgc28gdGhhdCB0aGUgY2xpZW50IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50
aWZpZXIuCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci0KLSAgICAvLyBBdHRlbXB0
IHRvIHJlLWxhdW5jaC4KLSAgICBpZiAocGVuZGluZ1JlcGxpZXMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgYXV0byYgbmV3TmV0d29ya1Byb2Nlc3MgPSBlbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOwotICAgIGZvciAoYXV0byYgcmVwbHkgOiBwZW5kaW5nUmVwbGllcykKLSAgICAgICAg
bmV3TmV0d29ya1Byb2Nlc3MuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCpyZXBseS5maXJz
dCwgV1RGTW92ZShyZXBseS5zZWNvbmQpKTsKLQogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
ICAgICB3aGlsZSAoIW1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5pc0VtcHR5KCkpCiAgICAgICAg
IG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5iZWdpbigpLT52YWx1ZS0+ZGlzYWJsZVNlcnZpY2VX
b3JrZXJzKCk7CkBAIC02ODAsMTggKzQ2OSwxMyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3
b3JrUHJvY2Vzc0NyYXNoCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6Oldl
YlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkm
JiByZXBseSkKIHsKLSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIEFTU0VSVChtX25l
dHdvcmtQcm9jZXNzKTsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbih3ZWJQcm9jZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2Vi
UHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJlcGx5KSk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVj
dGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHksIFJlZ2lzdHJh
YmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkK
IHsKLSAgICBBU1NFUlRfVU5VU0VEKHByb3h5LCAmcHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5n
ZXQoKSk7Ci0KLSAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6
ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAg
YXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0
b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiAKICAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUp
IHsKICAgICAgICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUpCkBAIC0xMjcwLDE1ICsxMDU0LDYg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaQogewogICAgIGF1dG8g
cmVzdWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRhU3RvcmUuc2Vzc2lvbklEKCks
IEhhc2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChw
YWdlSUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci0K
LSAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKLSAgICBpZiAoc2Vz
c2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAg
QVNTRVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUucGFyYW1ldGVycygp
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKLSAgICAg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PmFkZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIGRhdGFTdG9yZS5j
bGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRp
ZmllciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAgLTE0MTksNyArMTE5
NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkKIAogUHJvY2Vzc0lE
IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQogewotICAgIHJldHVy
biBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIo
KSA6IDA7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnByb2Nl
c3NJZGVudGlmaWVyKCk7CiB9CiAKIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVk
UHJvY2Vzc0lkZW50aWZpZXIoKQpAQCAtMTU3MCwxNiArMTM0NSwxMyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXRDYWNoZU1vZGVsKENhY2hlCiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVz
c2FnZXM6OldlYlByb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYg
KG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwsIHsgfSksIDApOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwsIHsgfSksIDApOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2Fj
aGVNb2RlbCBjYWNoZU1vZGVsKQogewogICAgIHVwZGF0ZUJhY2tGb3J3YXJkQ2FjaGVDYXBhY2l0
eSgpOwotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNo
cm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwg
eyB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0
SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE1ODksNyArMTM2MSw3IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGkKIAogRG93bmxvYWRQcm94eSYg
V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSogb3Jp
Z2luYXRpbmdQYWdlKQogewotICAgIGF1dG8mIGRvd25sb2FkUHJveHkgPSBlbnN1cmVOZXR3b3Jr
UHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0KTsKKyAgICBh
dXRvJiBkb3dubG9hZFByb3h5ID0gZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9h
ZFByb3h5KGRhdGFTdG9yZSwgKnRoaXMsIHJlcXVlc3QpOwogICAgIGRvd25sb2FkUHJveHkuc2V0
T3JpZ2luYXRpbmdQYWdlKG9yaWdpbmF0aW5nUGFnZSk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJv
eHk7CiB9CkBAIC0xNjY3LDI1ICsxNDM5LDExIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BN
ZW1vcnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nl
c3M6OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjp1c2VU
ZXN0aW5nTmV0d29ya1Nlc3Npb24oKQotewotICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5pc0VtcHR5
KCkpOwotICAgIEFTU0VSVCghbV9uZXR3b3JrUHJvY2Vzcyk7Ci0KLSAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Byb2Nlc3Nlcy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNz
aW9uID0gdHJ1ZTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwg
VSYmIHJlcGx5KQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nl
c3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5j
KHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7Cisg
ICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNhblNlbmRNZXNzYWdlKCkp
CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRTeW5jKHN0ZDo6
Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0
KGJvb2wgYWxsb3dzKQpAQCAtMTY5NSw4ICsxNDUzLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2V0QWxsb3dzQW55U1NMQ2VydAogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENy
ZWRlbnRpYWxzKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3Jl
ZGVudGlhbHMoKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKSwgMCk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKQEAg
LTE3MDUsMjQgKzE0NjIsMTcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29y
a1BybwogICAgIHdoaWxlICghbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmlzRW1wdHkoKSkKICAg
ICAgICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmJlZ2luKCktPnZhbHVlLT5kaXNhYmxlU2Vy
dmljZVdvcmtlcnMoKTsKICNlbmRpZgotCi0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0g
ICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rpbmco
KQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseUZvclRlc3RpbmcoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkKQEAgLTE3
NDcsMTUgKzE0OTcsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3luY0xvY2FsU3RvcmFnZShD
bwogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2Fs
U3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xv
Y2FsU3RvcmFnZSgpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdM
b2NhbFN0b3JhZ2UoKSwgMCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0
IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsK
ICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZv
ckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2Vy
dGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBk
YXRlQXV0b21hdGlvbkNhcGFiaWxpdGllcygpIGNvbnN0CkBAIC0yMjgxLDEwICsyMDMwLDcgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZQogI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9z
c1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
dG9Eb21haW4sIE9wdGlvblNldDxDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFn
PiBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQ
cm94eUlELCBQYWdlSWRlbnRpZmllciB3ZWJQYWdlSUQpCiB7Ci0gICAgaWYgKCFtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRDb21t
aXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRv
RG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlE
KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5kaWRDb21taXRDcm9zc1Np
dGVMb2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRvRG9tYWluLCBu
YXZpZ2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlEKTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5n
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWluLCBjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgdGhpcmRQYXJ0eURvbWFpbiwgYm9vbCBzaG91bGRTY2hlZHVsZU5vdGlmaWNh
dGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MjMxMCw4ICsyMDU2LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0V2ViUHJvY2Vzc0hhc1Vw
bAogICAgIGlmIChtX3Byb2Nlc3Nlc1dpdGhVcGxvYWRzLmlzRW1wdHkoKSkgewogICAgICAgICBS
RUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIlRoZSBudW1iZXIgb2YgdXBsb2FkcyBpbiBw
cm9ncmVzcyBpcyBub3cgb25lLiBUYWtpbmcgTmV0d29ya2luZyBhbmQgVUkgcHJvY2VzcyBhc3Nl
cnRpb25zLiIpOwogCi0gICAgICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+dGFrZVVwbG9hZEFzc2VydGlvbigpOworICAgICAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS50YWtlVXBsb2FkQXNzZXJ0aW9uKCk7CiAgICAgICAg
IAogICAgICAgICBBU1NFUlQoIW1fdWlQcm9jZXNzVXBsb2FkQXNzZXJ0aW9uKTsKICAgICAgICAg
bV91aVByb2Nlc3NVcGxvYWRBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+
KGdldEN1cnJlbnRQcm9jZXNzSUQoKSwgIldlYktpdCB1cGxvYWRzIl9zLCBBc3NlcnRpb25TdGF0
ZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7CkBAIC0yMzM2LDggKzIwODEsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpjbGVhcldlYlByb2Nlc3NIYXNVCiAgICAgaWYgKG1fcHJvY2Vzc2VzV2l0aFVw
bG9hZHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9u
LCAiVGhlIG51bWJlciBvZiB1cGxvYWRzIGluIHByb2dyZXNzIGlzIG5vdyB6ZXJvLiBSZWxlYXNp
bmcgTmV0d29ya2luZyBhbmQgVUkgcHJvY2VzcyBhc3NlcnRpb25zLiIpOwogCi0gICAgICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+Y2xlYXJV
cGxvYWRBc3NlcnRpb24oKTsKKyAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuY2xlYXJVcGxvYWRBc3NlcnRpb24oKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChtX3Vp
UHJvY2Vzc1VwbG9hZEFzc2VydGlvbik7CiAgICAgICAgIG1fdWlQcm9jZXNzVXBsb2FkQXNzZXJ0
aW9uID0gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuaAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNiBAQCBPQkpDX0NMQVNTIE5T
U3RyaW5nOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFz
cyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNs
YXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTc0
LDcgKzE3Myw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlx
dWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0
RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZv
aWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xp
ZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAg
ICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRs
ZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRT
ZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBAIC0zMDQsOCArMzAyLDYgQEAgcHVibGljOgog
ICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGllbnQoKSB7IHJl
dHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYgY2xpZW50KCkg
eyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKICAg
ICAgICAgdW5zaWduZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdrUGFnZUNvdW50
OwpAQCAtMzEzLDkgKzMwOSw2IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHN0YXRpYyBTdGF0aXN0
aWNzJiBzdGF0aXN0aWNzKCk7ICAgIAogCi0gICAgdm9pZCB1c2VUZXN0aW5nTmV0d29ya1Nlc3Np
b24oKTsKLSAgICBib29sIGlzVXNpbmdUZXN0aW5nTmV0d29ya1Nlc3Npb24oKSBjb25zdCB7IHJl
dHVybiBtX3Nob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbjsgfQotCiAgICAgdm9pZCBzZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sKTsKIAogICAgIHZvaWQgY2xl
YXJDYWNoZWRDcmVkZW50aWFscygpOwpAQCAtMzgyLDggKzM3NSw4IEBAIHB1YmxpYzoKIAogICAg
IC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50CiAgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYg
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3Rv
cmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2Vzcygp
IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7IH0KLSAgICB2b2lkIG5ldHdvcmtQcm9j
ZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiwgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5Pj4mJik7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eSogbmV0d29ya1Byb2Nlc3MoKSB7IHJldHVybiAmTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCk7IH0KKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1By
b3h5Jik7CiAKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNz
UHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb25EZWxheWVkUmVwbHkmJik7CiAKQEAgLTUyOCw2ICs1MjEsMTcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKICAgICBib29s
IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3VzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7IH0KIAorICAgIHN0YXRpYyB2b2lkIHBsYXRmb3Jt
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
Jik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9j
b2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3Ry
aW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1
bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVj
dG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOwor
ICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CisjZW5kaWYK
KwogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCkBAIC01NDMsOCAr
NTQ3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVxdWVzdFdlYkNvbnRlbnRTdGF0aXN0aWNz
KFN0YXRpc3RpY3NSZXF1ZXN0Jik7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2b2lk
IGhhbmRsZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFt
ZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNocm9u
b3VzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBj
b25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlckRh
dGEmJik+JiYpOwogCkBAIC01NjksMTQgKzU3MSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVz
ZXNTaW5nbGVXZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT51c2Vz
U2luZ2xlV2ViUHJvY2VzcygpOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0
YXRpYyBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcg
cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2Fj
aGVzRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0
b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsK
LSNlbmRpZgotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCByZWdpc3Rlck5vdGlmaWNh
dGlvbk9ic2VydmVycygpOwogICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVy
cygpOwpAQCAtNjI3LDcgKzYyMSw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQ
STo6QXV0b21hdGlvbkNsaWVudD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxB
UEk6OkRvd25sb2FkQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lv
bj4gbV9hdXRvbWF0aW9uU2Vzc2lvbjsKIApAQCAtNjk0LDggKzY4Nyw2IEBAIHByaXZhdGU6CiAK
ICAgICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCB7IHRydWUgfTsKIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwotCiAg
ICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPERpY3Rpb25hcnlDYWxsYmFjaz4+IG1fZGljdGlv
bmFyeUNhbGxiYWNrczsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8U3RhdGlzdGljc1Jl
cXVlc3Q+PiBtX3N0YXRpc3RpY3NSZXF1ZXN0czsKIApAQCAtNzk1LDE1ICs3ODYsMTUgQEAgcHJp
dmF0ZToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CisgICAgaWYgKE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNhblNlbmRNZXNzYWdlKCkpCisgICAgICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1l
c3NhZ2UpLCAwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVz
c2FnZSkKIHsKICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDggKzQwLDYgQEAgbmFtZXNwYWNlIEFQSSB7CiBIVFRQQ29va2llU3Rv
cmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRh
U3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3ZWJzaXRlRGF0YVN0b3JlKQogewotICAg
IGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMo
KTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkKQEAgLTQ5LDEwNCAr
NDcsNDAgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkKICAgICBBU1NFUlQo
bV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIW1fb2JzZXJ2ZWRDb29raWVNYW5h
Z2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0K
LSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIHZv
aWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBh
dXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFn
ZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4gYWxsQ29va2llczsKLSAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICAg
ICAgYWxsQ29va2llcyA9IGdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMo
KTsKLSAgICAgICAgYWxsQ29va2llcy5hcHBlbmRWZWN0b3IobV9vd25pbmdEYXRhU3RvcmUtPnBl
bmRpbmdDb29raWVzKCkpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgYWxsQ29va2llc10g
KCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihhbGxDb29raWVzKTsK
LSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4m
IGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2llTWFuYWdlci5nZXRB
bGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNv
b2tpZXMpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6c2V0Q29va2llcyhj
b25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmlu
Z0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAg
IGlmICghcG9vbCkgewotICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpIHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vzc2lv
biBiZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3b3Jr
IFByb2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAgICAg
ICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAgICAgICAgICAg
c2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+YWRkUGVuZGluZ0Nv
b2tpZShjb29raWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldENvb2tpZXMobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9v
bCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11
dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0pOworICAgIGF1dG8m
IGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9u
KCk7CisgICAgY29va2llTWFuYWdlci5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgY29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29v
a2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmIChtX293bmlu
Z0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAgICAgICBkZWxldGVDb29raWVGcm9tRGVm
YXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1fb3duaW5nRGF0YVN0b3JlLT5yZW1vdmVQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0KLSAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
YXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llKG1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2ll
TWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsKKyAg
ICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCksIGNvb2tpZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBD
b29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1l
cmFsKCkpCi0gICAgICAgICAgICBkZWxldGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2ll
U3RvcmUoKTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tp
ZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpKTsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRl
QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1F
OiBUaGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6
OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViS2l0OjpIVFRQQ29va2llQWNjZXB0UG9saWN5
IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBpZiAoIW1f
b3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAg
c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeUluRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKHBv
bGljeSk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLnNldEhU
VFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBwb2xp
Y3ksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogY2xhc3MgQVBJV2ViQ29va2ll
TWFuYWdlclByb3h5T2JzZXJ2ZXIgOiBwdWJsaWMgV2ViQ29va2llTWFuYWdlclByb3h5OjpPYnNl
cnZlciB7CkBAIC0xODIsMjEgKzExNiw3IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rl
ck9ic2VydmVyKE8KIAogICAgIG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIgPSBtYWtlVW5p
cXVlPEFQSVdlYkNvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyPigqdGhpcyk7CiAKLSAgICBhdXRv
KiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9w
ZXJhdGlvbnMoKTsKLQotICAgIGlmICghcG9vbCkgewotICAgICAgICBBU1NFUlQoIW1fb2JzZXJ2
aW5nVUlQcm9jZXNzQ29va2llcyk7Ci0KLSAgICAgICAgLy8gTGlzdGVuIGZvciBjb29raWUgbm90
aWZpY2F0aW9ucyBpbiB0aGUgVUlQcm9jZXNzIGluIHRoZSBtZWFudGltZS4KLSAgICAgICAgc3Rh
cnRPYnNlcnZpbmdDaGFuZ2VzVG9EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoW3RoaXNdICgp
IHsKLSAgICAgICAgICAgIGNvb2tpZXNEaWRDaGFuZ2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAg
ICAgbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29r
aWVNYW5hZ2VyUHJveHkgPSAmV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRv
bigpOwogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcik7CiB9CiAKQEAgLTIzMSw0NiArMTUxLDEwIEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpj
b29raWVzRGlkQ2hhbmdlKCkKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVz
dHJveWVkKCkKIHsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT51bnJlZ2lzdGVy
T2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2Vy
UHJveHlPYnNlcnZlcik7Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG51bGxw
dHI7Ci0KLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9y
Q29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLQotICAgIGlmICghcG9vbCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1l
bnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tp
ZU1hbmFnZXJQcm94eSA9ICZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9u
KCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlciht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyKTsKIH0KIAotdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bv
b2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBBU1NFUlQoIW1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxp
c3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklk
ZW50aWZpZXIgPSBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlz
dGVuZXIoW3RoaXNdKFdlYlByb2Nlc3NQb29sJiBuZXdQcm9jZXNzUG9vbCkgewotICAgICAgICBp
ZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5pc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChuZXdQcm9jZXNz
UG9vbCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gTm93IHRoYXQgYW4gYXNz
b2NpYXRlZCBwcm9jZXNzIHBvb2wgZXhpc3RzLCB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBVSSBwcm9j
ZXNzIGNvb2tpZSBzdG9yZQotICAgICAgICAvLyB0byBtYWtlIHN1cmUgYW55IGNoYW5nZXMgYXJl
IHJlZmxlY3RlZCB3aXRoaW4gdGhlIG5ldyBwcm9jZXNzIHBvb2wuCi0gICAgICAgIGZsdXNoRGVm
YXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIG5ld1Byb2Nlc3NQb29sLmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KLSAgICAgICAgaWYgKG1fY29va2llTWFuYWdlclByb3h5T2Jz
ZXJ2ZXIpIHsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBuZXdQ
cm9jZXNzUG9vbC5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwot
ICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZl
cihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9i
c2VydmVyKTsKLSAgICAgICAgfQotICAgICAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSFRUUENvb2tpZVN0b3JlOjp1bnJl
Z2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBpZiAobV9wcm9j
ZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKQotICAgICAgICBXZWJQcm9jZXNzUG9v
bDo6dW5yZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihtX3Byb2Nlc3NQb29sQ3Jl
YXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlz
dGVuZXJJZGVudGlmaWVyID0gMDsKLX0KLQogI2lmICFQTEFURk9STShDT0NPQSkKIHZvaWQgSFRU
UENvb2tpZVN0b3JlOjpmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpIHsgfQogVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4gSFRUUENvb2tpZVN0b3JlOjpnZXRBbGxEZWZhdWx0VUlQcm9j
ZXNzQ29va2llU3RvcmVDb29raWVzKCkgeyByZXR1cm4geyB9OyB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCShyZXZpc2lvbiAy
NTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3Jl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lk
IHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJl
Z2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0KICAgICBzdGF0aWMgdm9p
ZCBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwogICAgIHN0YXRpYyBWZWN0b3I8
V2ViQ29yZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVz
KCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3Rv
cmUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNiw5
ICs0MjYsOSBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1NlcnZlcihXS0NvbnRlCiB7CiB9
CiAKLVdLQ29va2llTWFuYWdlclJlZiBXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmKQorV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tpZU1h
bmFnZXIoV0tDb250ZXh0UmVmKQogewotICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6
dG9JbXBsKGNvbnRleHRSZWYpLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5PigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0OjpXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNpbmdsZXRvbigpKTsKIH0KIAogV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29u
dGV4dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmKQpAQCAtNTQ1LDkgKzU0NSw4IEBA
IHZvaWQgV0tDb250ZXh0U2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWMKICAgICBXZWJLaXQ6OnRv
SW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJs
ZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24o
V0tDb250ZXh0UmVmIGNvbnRleHQpCit2b2lkIFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vz
c2lvbihXS0NvbnRleHRSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbigpOwogfQogCiB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhXS0NvbnRleHRSZWYgY29udGV4dCwgYm9v
bCBhbGxvd3MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tD
b250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3
LDcgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQwogV0tfRVhQT1JU
IHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2Vy
VGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBj
YWxsZWQgYmVmb3JlIGFueSBzZWNvbmRhcnkgcHJvY2Vzc2VzIGFyZSBzdGFydGVkLgotV0tfRVhQ
T1JUIHZvaWQgV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBj
b250ZXh0KTsKK1dLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lv
bihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIAogLy8gVGVzdCBv
bmx5LiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBydW5uaW5nIGEgdGVzdC4KIFdLX0VYUE9SVCB2
b2lkIFdLQ29udGV4dENsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tDb250ZXh0UmVmIGNvbnRleHQp
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJv
Y2Vzc1Bvb2wubW0JKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMjYgKzIw
MCw4IEBAIC0gKHZvaWQpX3NldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmEKIHsKIH0KIAot
c3RhdGljIFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSB0b0hUVFBDb29raWVBY2NlcHRQ
b2xpY3koTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkKLXsKLSAgICBzd2l0Y2ggKHN0
YXRpY19jYXN0PE5TVUludGVnZXI+KHBvbGljeSkpIHsKLSAgICBjYXNlIE5TSFRUUENvb2tpZUFj
Y2VwdFBvbGljeUFsd2F5czoKLSAgICAgICAgcmV0dXJuIFdlYktpdDo6SFRUUENvb2tpZUFjY2Vw
dFBvbGljeTo6QWx3YXlzQWNjZXB0OwotICAgIGNhc2UgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5
TmV2ZXI6Ci0gICAgICAgIHJldHVybiBXZWJLaXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6Ok5l
dmVyOwotICAgIGNhc2UgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1l
bnREb21haW46Ci0gICAgICAgIHJldHVybiBXZWJLaXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6
Ok9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwotICAgIGNhc2UgTlNIVFRQQ29va2llQWNjZXB0
UG9saWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOgotICAgICAgICByZXR1cm4g
V2ViS2l0OjpIVFRQQ29va2llQWNjZXB0UG9saWN5OjpFeGNsdXNpdmVseUZyb21NYWluRG9jdW1l
bnREb21haW47Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IFdlYktpdDo6SFRUUENvb2tpZUFjY2VwdFBvbGljeTo6QWx3YXlzQWNjZXB0OwotfQotCiAtICh2
b2lkKV9zZXRDb29raWVBY2NlcHRQb2xpY3k6KE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSlwb2xp
Y3kKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkg
eyB9KTsKIH0KIAogLSAoaWQpX29iamVjdEZvckJ1bmRsZVBhcmFtZXRlcjooTlNTdHJpbmcgKilw
YXJhbWV0ZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENv
b2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMsOCArNjMsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQ
cml2YXRlIHsKIAogICAgIH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKQogICAgIHsKLSAg
ICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdl
dFByb2Nlc3NQb29scyhkYXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJh
Y2soc2Vzc2lvbklEKCksIG51bGxwdHIpOworICAgICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnNpbmdsZXRvbigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxw
dHIpOwogICAgIH0KIAogICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbmFnZXI7
CkBAIC0xNDAsMTEgKzEzOSw5IEBAIFdlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtpdENvb2tpZU1h
bmFnZXIKIHsKICAgICBXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyID0gV0VCS0lUX0NPT0tJ
RV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT09LSUVfTUFOQUdFUiwgbnVsbHB0
cikpOwogICAgIG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyID0gZGF0YU1hbmFnZXI7Ci0gICAg
Zm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nl
c3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpIHsKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVPYnNlcnZl
ckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdlcl0gewotICAgICAg
ICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAwKTsKLSAgICAg
ICAgfSk7Ci0gICAgfQorICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0
Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW21hbmFn
ZXJdIHsKKyAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAw
KTsKKyAgICB9KTsKICAgICByZXR1cm4gbWFuYWdlcjsKIH0KIApAQCAtMTc0LDggKzE3MSw3IEBA
IHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW4KICAgICBpZiAoc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdl
ci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Np
b25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlVHlwZShzdG9yYWdlKSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0
b24oKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVU
RjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkp
OwogfQogCiAvKioKQEAgLTE4OSw4ICsxODUsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9zZXRfYWNjZXB0X3BvCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lF
X01BTkFHRVIobWFuYWdlcikpOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFu
YWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKS0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShw
b2xpY3kpLCBbXSgpIHsgfSk7CiB9CiAKIC8qKgpAQCAtMjExLDE0ICsyMDYsNyBAQCB2b2lkIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvCiAKICAgICBHUmVmUHRyPEdUYXNrPiB0
YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNr
LCB1c2VyRGF0YSkpOwogCi0gICAgLy8gVGhlIHBvbGljeSBpcyB0aGUgc2FtZSBpbiBhbGwgcHJv
Y2VzcyBwb29scyBoYXZpbmcgdGhlIHNhbWUgc2Vzc2lvbiBJRCwgc28ganVzdCBhc2sgYW55Lgot
ICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdl
dFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgaWYgKHByb2Nl
c3NQb29scy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQo
KSwgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oSFRUUENvb2tpZUFjY2VwdFBv
bGljeSBwb2xpY3kpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNr
ID0gV1RGTW92ZSh0YXNrKV0oSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAg
ICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQoKSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xp
Y3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0yNjMsMTEgKzI1MSw3IEBAIHZvaWQgd2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2UKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tp
ZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFu
YWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2ll
cyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRp
c2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20s
IHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJv
Y2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFn
ZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Np
b25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNr
KV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5zZXRDb29raWVz
KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0s
IFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVh
bih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KQEAgLTMxNCwxMSArMjk4LDcgQEAgdm9p
ZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMoVwogICAgIGdfcmV0dXJuX2lmX2Zh
aWwodXJpKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25l
dyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBD
b29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ug
b24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0g
ZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRv
JiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMo
bWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxl
bWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBX
VEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgewor
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZ2V0Q29va2llcyhtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBb
dGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29r
aWVzKSB7CiAgICAgICAgIEdMaXN0KiBjb29raWVzTGlzdCA9IG51bGxwdHI7CiAgICAgICAgIGZv
ciAoYXV0byYgY29va2llIDogY29va2llcykKICAgICAgICAgICAgIGNvb2tpZXNMaXN0ID0gZ19s
aXN0X3ByZXBlbmQoY29va2llc0xpc3QsIGNvb2tpZS50b1NvdXBDb29raWUoKSk7CkBAIC0zNzIs
MTEgKzM1Miw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUKICAg
ICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0g
YWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2Vy
RGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNh
bWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9j
ZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBv
b2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9j
ZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5kZWxldGVD
b29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUp
LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2luZ2xldG9uKCkuZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBXZWJD
b3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAg
Z190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzU3LDggKzEzNTcsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjph
ZGRTaW5nbGVDb29rCiAgICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigiaHR0cE9ubHki
X3MsIGNvb2tpZS5odHRwT25seSkpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdodHRw
T25seScgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29v
a2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclBy
b3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFT
dG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2sgPSBjYWxsYmFjay5jb3B5
UmVmKCldKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0Q29v
a2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtj
YWxsYmFjayA9IGNhbGxiYWNrLmNvcHlSZWYoKV0oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5k
U3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTM3NCw4ICsxMzczLDcgQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29vawogCiAgICAgU3RyaW5nIGhvc3QgPSBhY3RpdmVV
UkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tp
ZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2Ut
PndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0Rv
dFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2lu
Z2xldG9uKCkuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3Jl
KCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZCho
b3N0KSB9KTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0U2Vzc2lvblBlcm1p
c3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4mIG91dF9wZXJtaXNzaW9u
cykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJv
Y2Vzc1Bvb2xDb2NvYS5tbQkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA4
LDggKzEwOCw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQKIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKQogewot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZXRQ
cm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0UHJvY2Vzc1N1cHByZXNzaW9u
RW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpOwogCiAjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9y
UGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTEzOSw4ICsxMzgsNiBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpwbGF0Zm9ybUluaXRpYWxpemUoCiAKICAgICBpZiAoIVtbTlNVc2VyRGVmYXVsdHMgc3Rh
bmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNz
dXJlSGFuZGxlciJdKQogICAgICAgICBpbnN0YWxsTWVtb3J5UHJlc3N1cmVIYW5kbGVyKCk7Ci0K
LSAgICBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpOwogfQogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKQEAgLTI3MywyMyArMjcwLDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZv
cm1Jbml0aWFsaXplTgogCiAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRl
ZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKIAotICAgIHsKLSAgICAgICAgYm9vbCBpc1Nh
ZmFyaSA9IGZhbHNlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlzU2FmYXJp
ID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCk7Ci0jZWxpZiBQTEFU
Rk9STShNQUMpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246Omlz
U2FmYXJpKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGlzU2FmYXJpKSB7Ci0gICAgICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3Ry
aW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5o
dHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAq
KVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAgIH0KLQogICAg
IHBhcmFtZXRlcnMuZW5hYmxlTGVnYWN5VExTID0gdHJ1ZTsKICAgICBpZiAoaWQgdmFsdWUgPSBb
ZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OkAiV2ViS2l0RW5hYmxlTGVnYWN5VExTIl0pCiAgICAgICAg
IHBhcmFtZXRlcnMuZW5hYmxlTGVnYWN5VExTID0gW3ZhbHVlIGJvb2xWYWx1ZV07Ci0gICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuZW5hYmxlTGVnYWN5VExTID0gcGFyYW1ldGVycy5lbmFibGVMZWdhY3lUTFM7CiAKICAgICBw
YXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihfQ0ZOZXR3b3JrQ29weUFUU0Nv
bnRleHQoKSk7CiAKQEAgLTMwMSw4ICsyODQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0
Zm9ybUluaXRpYWxpemVOCiAgICAgcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRl
bnRpZmllciA9IGlkZW50aWZ5aW5nRGF0YUZyb21Db29raWVTdG9yYWdlKFtbTlNIVFRQQ29va2ll
U3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gX2Nvb2tpZVN0b3JhZ2VdKTsKICNlbmRp
ZgogCi0gICAgcGFyYW1ldGVycy5zdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IHN0b3JhZ2VBY2Nl
c3NBUElFbmFibGVkKCk7Ci0KICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNl
ID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRl
cm5hbERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXko
KS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07CiAKICAgICBwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xp
Y2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSA9IFtkZWZhdWx0cyBib29sRm9yS2V5OltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiRXhwZXJpbWVudGFsJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6YWRD
bGlja0F0dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCldXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFBy
b3h5TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eU1hcC5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA5LDkgKzEwOSw2IEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5p
c2hlZCgKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQ
Ukl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3du
bG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhl
IGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQ
cm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAg
IEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKICAgICBtX3Byb2Nl
c3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2lu
Y2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRp
ZgorI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC01MCw3ICs1MSw2IEBA
CiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Bv
b2wuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5oIgpAQCAtNjksNiArNjksMTAgQEAKICNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEku
aD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2RlZmluZSBNRVNTQUdFX0NIRUNL
KGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgY29ubmVjdGlvbigpKQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTgxLDE4ICs4NSw4MyBAQCBzdGF0aWMgdWludDY0X3Qg
Z2VuZXJhdGVDYWxsYmFja0lEKCkKICAgICByZXR1cm4gKytjYWxsYmFja0lEOwogfQogCi1OZXR3
b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJiBwcm9j
ZXNzUG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9jZXNzUG9vbC5hbHdheXNS
dW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vzc1Bvb2wocHJvY2Vzc1Bv
b2wpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+JiBnbG9iYWxO
ZXR3b3JrUHJvY2VzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6dW5pcXVl
X3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gbmV0d29ya1Byb2Nlc3M7CisgICAgcmV0dXJuIG5l
dHdvcmtQcm9jZXNzOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKQoreworICAgIGlmICghZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSkgewor
ICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vz
c1Byb3h5PigpOworICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpLT5zZW5kQ3JlYXRpb25Q
YXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgfQorICAgIHJldHVybiAqZ2xvYmFsTmV0d29y
a1Byb2Nlc3MoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphdHRlbXB0UmVsYXVu
Y2hBZnRlckNyYXNoSWZOZWNlc3NhcnkoVmVjdG9yPHN0ZDo6cGFpcjxSZWY8V2ViUHJvY2Vzc1By
b3h5PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uRGVsYXllZFJlcGx5Pj4mJiBwZW5kaW5nUmVxdWVzdHMpCit7CisgICAgZ2xvYmFsTmV0d29y
a1Byb2Nlc3MoKSA9IG51bGxwdHI7CisgICAgaWYgKHBlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBuZXdOZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOworICAgIGZvciAoYXV0byYgcmVxdWVzdCA6IHBlbmRp
bmdSZXF1ZXN0cykKKyAgICAgICAgbmV3TmV0d29ya1Byb2Nlc3MuZ2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKHJlcXVlc3QuZmlyc3QuZ2V0KCksIFdURk1vdmUocmVxdWVzdC5zZWNvbmQpKTsK
K30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9O
ZXdQcm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8g
RklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJL
aXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCisgICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlz
IG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgor
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCisg
ICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgeworICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFu
ZFdhaXQoW3RoaXNdIHsKKyAgICAgICAgICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1By
b2Nlc3MoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAg
cGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gV2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKKyAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworI2VuZGlm
CisgICAgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5oc3RzU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGlmICghcGFyYW1l
dGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkKKyAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuaHN0c1N0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNv
cHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVn
aXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNC
eXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFs
U2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50
U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFz
TG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNj
aGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdp
c3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2lu
Z2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMu
Y2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVs
KCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dp
dGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1l
c1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBX
ZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURp
cmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcg
Y29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNo
ZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShj
b250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9y
eSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRs
ZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRP
bmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Cisj
ZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MocGFyYW1ldGVycyk7CisgICAgcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gV2Vi
c2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMp
LCAwKTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eSgpCisg
ICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHkoKQogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BS
T1RPQ09MX01BTkFHRVIpCiAgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5KCp0aGlz
KQogI2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIGZhbHNl
KQorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQobWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpCisjZW5k
aWYKIHsKICAgICBjb25uZWN0KCk7Ci0KLSAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9
IG1fcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKQotICAgICAgICBtX3dlYnNpdGVEYXRh
U3RvcmVzLnNldCh3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbWFrZVJlZigqd2Vic2l0
ZURhdGFTdG9yZSkpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQ
cm94eSgpCkBAIC0xMTYsMTEgKzE4NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0
TGF1bmNoT3B0aW8KIHsKICAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0gUHJvY2Vzc0xh
dW5jaGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6
OmdldExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7Ci0KLSAgICBpZiAocHJvY2Vzc1Bvb2wo
KS5zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgewot
ICAgICAgICBwcm9jZXNzUG9vbCgpLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZyhmYWxzZSk7Ci0gICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxkTWFr
ZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7Ci0gICAgfQogfQogCiB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24pCkBAIC0xODEsMTIgKzI0NSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnN5bnRoZXNpemVBcHBJCiAgICAgfQogfQogCi1Eb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCitEb3dubG9hZFByb3h5JiBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsKICAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkK
ICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwID0gbWFrZVVuaXF1ZTxEb3dubG9hZFByb3h5TWFw
PigqdGhpcyk7CiAKLSAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9h
ZFByb3h5KGRhdGFTdG9yZSwgbV9wcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0KTsKKyAgICBy
ZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwg
cHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hP
cHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjQ3LDE4ICszMTEsMjAgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpuZXR3b3JrUHJvY2VzcwogewogICAgIGNsZWFyQ2FsbGJhY2tTdGF0ZXMo
KTsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4sIE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXll
ZFJlcGx5Pj4gcGVuZGluZ1JlcXVlc3RzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVmPFdlYlBy
b2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbjo6RGVsYXllZFJlcGx5Pj4gcGVuZGluZ1JlcXVlc3RzOwogICAgIHBlbmRpbmdS
ZXF1ZXN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY29ubmVjdGlvblJlcXVlc3RzLnNpemUo
KSk7CiAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDogbV9jb25uZWN0aW9uUmVxdWVzdHMudmFsdWVz
KCkpIHsKICAgICAgICAgaWYgKHJlcXVlc3Qud2ViUHJvY2VzcykKLSAgICAgICAgICAgIHBlbmRp
bmdSZXF1ZXN0cy51bmNoZWNrZWRBcHBlbmQoc3RkOjptYWtlX3BhaXIobWFrZVJlZlB0cihyZXF1
ZXN0LndlYlByb2Nlc3MuZ2V0KCkpLCBXVEZNb3ZlKHJlcXVlc3QucmVwbHkpKSk7CisgICAgICAg
ICAgICBwZW5kaW5nUmVxdWVzdHMudW5jaGVja2VkQXBwZW5kKHsgKnJlcXVlc3Qud2ViUHJvY2Vz
cywgV1RGTW92ZShyZXF1ZXN0LnJlcGx5KSB9KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
cmVxdWVzdC5yZXBseSh7IH0pOwogICAgIH0KICAgICBtX2Nvbm5lY3Rpb25SZXF1ZXN0cy5jbGVh
cigpOwotCi0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0
IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8g
YmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhp
cywgV1RGTW92ZShwZW5kaW5nUmVxdWVzdHMpKTsKKyAgICAKKyAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICAKKyAgICBhdHRlbXB0
UmVsYXVuY2hBZnRlckNyYXNoSWZOZWNlc3NhcnkoV1RGTW92ZShwZW5kaW5nUmVxdWVzdHMpKTsK
IH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAg
LTI3OCw5ICszNDQsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNz
CiAgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIpKQotICAgICAgICByZXR1cm47Ci0KICAgICBkaWRSZWNlaXZlTmV0d29ya1By
b2Nlc3NQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKQEAgLTI5NCw4ICsz
NTcsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVTeW5jCiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKLSAgICBh
dXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3Byb2Nlc3NQb29sKTsKLQogICAg
IGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcC0+aW52
YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCkBA
IC0zMDcsNyArMzY4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6
OgogICAgIG1fc3luY0FsbENvb2tpZXNBY3Rpdml0eSA9IG51bGxwdHI7CiAgICAgbV9zeW5jQWxs
Q29va2llc0NvdW50ZXIgPSAwOwogCi0gICAgLy8gVGhpcyB3aWxsIGNhdXNlIHVzIHRvIGJlIGRl
bGV0ZWQuCiAgICAgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiB9CiAKQEAgLTM1MCwxMSArNDEw
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0b3BPcmlnaW4gfHwgIW1fcHJvY2Vzc1Bvb2wuaXNT
ZXJ2aWNlV29ya2VyUGFnZUlEKHBhZ2VJRCkpIHsKLSAgICAgICAgcHJvY2Vzc0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKHNlc3Npb25JRCwgV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgV2ViUGFnZVByb3h5Ojpmb3JNb3N0Vmlz
aWJsZVdlYlBhZ2VJZkFueShzZXNzaW9uSUQsICp0b3BPcmlnaW4sIFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0g
V1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSldKGF1dG8qIHBhZ2UpIG11dGFibGUgewog
ICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDAxLDExICs0
NTYsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jCiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGNvbm5lY3Rpb25SZXF1ZXN0LnJlcGx5KHsgfSk7CiAgICAgfQot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wucHJvY2Vzc1N1cHBy
ZXNzaW9uRW5hYmxlZCgpKQotICAgICAgICBzZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHRy
dWUpOwotI2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoeHBj
X2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uID0gdGhpcy0+Y29ubmVjdGlvbigpLT54cGNDb25uZWN0
aW9uKCkpCkBAIC0xMTI1LDQyICsxMTc1LDI1IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkU3luY0FsbENvb2sKICAgICB9CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRk
U2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKICAgICBpZiAo
Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS0+cGFyYW1ldGVycygpIH0sIDApOwotICAgIGF1
dG8gc2Vzc2lvbklEID0gc3RvcmUtPnNlc3Npb25JRCgpOwotICAgIGlmICghc2Vzc2lvbklELmlz
RXBoZW1lcmFsKCkpIHsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFk
ZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCk7CiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShz
dG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgaWYgKCFzdG9y
ZS5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQorICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmls
ZVVwZ3JhZGUoc3RvcmUucmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiAjZW5k
aWYKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5zZXQoc2Vzc2lvbklELCBXVEZNb3ZlKHN0
b3JlKSk7Ci0gICAgfQogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Np
b24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgp
KQogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24g
eyBzZXNzaW9uSUQgfSwgMCk7Ci0gICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKLSAg
ICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5yZW1vdmUoc2Vzc2lvbklEKTsKIH0KIAogV2Vic2l0
ZURhdGFTdG9yZSogTmV0d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNz
aW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3dlYnNpdGVEYXRhU3RvcmVzLmZpbmQoc2Vzc2lvbklEKTsKLSAgICBpZiAoaXRlcmF0b3IgIT0g
bV93ZWJzaXRlRGF0YVN0b3Jlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1
ZS5nZXQoKTsKLQotICAgIGlmIChhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9v
bC53ZWJzaXRlRGF0YVN0b3JlKCkpIHsKLSAgICAgICAgaWYgKHNlc3Npb25JRCA9PSB3ZWJzaXRl
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSkKLSAgICAgICAgICAgIHJldHVybiB3ZWJzaXRlRGF0YVN0
b3JlOwotICAgIH0KLQotICAgIGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7CisgICAgcmV0
dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Np
b25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3Jh
Z2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEyMjAsNyArMTI1Myw2
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0U2FuZGJveEV4dGUKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHJl
Z2lzdHJhYmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgbV9wcm9j
ZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mo
KnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCBzZXNzaW9uSUQpOwogfQogCiB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OndvcmtlckNvbnRleHRDb25uZWN0aW9uTm9Mb25nZXJOZWVk
ZWQoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTEzMzAsMjEgKzEz
NjIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExvY2FsU3RvcmFnCiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpCiB7Ci0gICAgaWYg
KHByb2Nlc3NQb29sKCkuaGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7Ci0gICAgICAgIGlm
ICghUHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEZvcmVncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5
RnJvbVdlYlByb2Nlc3NlcykpIHsKLSAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vz
c2VzID0gdGhyb3R0bGVyKCkuZm9yZWdyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5nIGZvciBmb3Jl
Z3JvdW5kIHZpZXcocykiX3MpOwotICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9Gb3JlZ3JvdW5kKCksIDApOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHByb2Nlc3NQb29sKCkuaGFzQmFja2dy
b3VuZFdlYlByb2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxlcjo6aXNW
YWxpZEJhY2tncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcykpIHsKLSAg
ICAgICAgICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCkuYmFja2dy
b3VuZEFjdGl2aXR5KCJOZXR3b3JraW5nIGZvciBmb3JlZ3JvdW5kIGJhY2tncm91bmQgdmlldyhz
KSJfcyk7Ci0gICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vz
c0RpZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IG51bGxwdHI7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDI1MjI3
NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUgIkxlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmgiCiAjZW5kaWYKIAorbmFtZXNwYWNlIEFQSSB7Citj
bGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewog
Y2xhc3MgU2Vzc2lvbklEOwogfQpAQCAtNjIsNyArNjYsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7Ci1jbGFzcyBX
ZWJQcm9jZXNzUG9vbDsKIGVudW0gY2xhc3MgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIDog
Ym9vbDsKIGVudW0gY2xhc3MgU3RvcmFnZUFjY2Vzc1N0YXR1cyA6IHVpbnQ4X3Q7CiBlbnVtIGNs
YXNzIFdlYnNpdGVEYXRhRmV0Y2hPcHRpb247CkBAIC04NiwxMiArODksMTMgQEAgcHVibGljOgog
ICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9v
bCYpOworICAgIHN0YXRpYyBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBzaW5nbGV0b24oKTsKKyAgICBl
eHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHko
KTsKIAogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94
eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bkRlbGF5ZWRSZXBseSYmKTsKIAotICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJv
eHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwor
ICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYs
IFdlYlByb2Nlc3NQb29sJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAg
ICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRh
KFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9k
aWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KTsKQEAgLTE3MiwxMyArMTc2LDExIEBAIHB1YmxpYzoKICAgICBQcm9jZXNzVGhyb3R0bGVyJiB0
aHJvdHRsZXIoKSB7IHJldHVybiBtX3Rocm90dGxlcjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vz
c0Fzc2VydGlvbigpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1
cm4gbV9wcm9jZXNzUG9vbDsgfQotCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAg
ICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eSYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGFkZFNlc3Npb24oUmVm
PFdlYnNpdGVEYXRhU3RvcmU+JiYpOworICAgIHZvaWQgYWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0
b3JlJik7CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKICAgICAKICAg
ICB2b2lkIHRha2VVcGxvYWRBc3NlcnRpb24oKTsKQEAgLTE5NiwxMyArMTk4LDIxIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3Qg
U3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9j
b2woY29uc3QgU3RyaW5nJik7CiAKKyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9N
QU5BR0VSKQorICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KiBsZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSB7IHJldHVybiBtX2N1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudC5nZXQoKTsgfQorI2VuZGlmCisKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZCgpOworCiBwcml2YXRlOgorICAgIHZvaWQgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJv
Y2VzcygpOworICAgIHN0YXRpYyB2b2lkIGF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vz
c2FyeShWZWN0b3I8c3RkOjpwYWlyPFJlZjxXZWJQcm9jZXNzUHJveHk+LCBNZXNzYWdlczo6V2Vi
UHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHk+PiYm
KTsKKwogICAgIC8vIEF1eGlsaWFyeVByb2Nlc3NQcm94eQogICAgIHZvaWQgZ2V0TGF1bmNoT3B0
aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmKSBvdmVycmlkZTsKICAgICB2b2lk
IGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lk
IHByb2Nlc3NXaWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICB2
b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFja1N0YXRl
cygpOwogCiAgICAgLy8gUHJvY2Vzc1Rocm90dGxlckNsaWVudApAQCAtMjU5LDggKzI2OSw2IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6
OlNlc3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAg
V2ViUHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBzdHJ1Y3QgQ29ubmVjdGlvblJl
cXVlc3QgewogICAgICAgICBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4gd2ViUHJvY2VzczsKICAg
ICAgICAgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uRGVsYXllZFJlcGx5IHJlcGx5OwpAQCAtMjg3LDkgKzI5NSwxMCBAQCBwcml2YXRlOgogICAg
IEhhc2hTZXQ8V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkqPiBtX3dlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3hpZXM7CiAjZW5kaWYKIAotICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQs
IFJlZlB0cjxXZWJzaXRlRGF0YVN0b3JlPj4gbV93ZWJzaXRlRGF0YVN0b3JlczsKLSAgICAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UHJvY2Vzc0Fzc2VydGlvbj4gbV91cGxvYWRBc3NlcnRpb247Cisj
aWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTcgKzQ0LDIwIEBAIExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWMKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBtX25ldHdvcmtQcm9j
ZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdGFy
dExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOworICAgIGlmIChhdXRv
KiBjbGllbnQgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5sZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQoKSkKKyAgICAgICAgY2xpZW50LT5zdGFydExvYWRpbmcoKnRo
aXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElE
KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsK
KyAgICBpZiAoYXV0byogY2xpZW50ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
bGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+c3Rv
cExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOwogfQogCiB2b2lkIExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX25ldHdvcmtQcm9j
ZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5pbnZh
bGlkYXRlKCp0aGlzKTsKKyAgICBpZiAoYXV0byogY2xpZW50ID0gTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkubGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkpCisgICAg
ICAgIGNsaWVudC0+aW52YWxpZGF0ZSgqdGhpcyk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHk6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QodWludDY0X3QgY3VzdG9t
UHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2
ICszNiw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5j
bHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2Fj
aGUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJL
aXQySW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldl
YlByb2Nlc3NDYWNoZS5oIgpAQCAtODEsMTMgKzgyLDIyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6YWxsb3dXZWJzaXRlRGF0YVIKICAgICBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxP
cmlnaW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNp
dGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFTdG9yZXMoKQorc3RhdGljIEhhc2hNYXA8UEFM
OjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgYWxsRGF0YVN0b3JlcygpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0
dXJuIG1hcDsKIH0KIAorVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRl
RGF0YVN0b3JlOjpwYXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpCit7CisgICAgVmVjdG9yPFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBhbGxQYXJhbWV0ZXJzOworICAgIGFsbFBhcmFtZXRlcnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhbGxEYXRhU3RvcmVzKCkuc2l6ZSgpKTsKKyAgICBmb3Ig
KGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgICAgICBhbGxQYXJh
bWV0ZXJzLnVuY2hlY2tlZEFwcGVuZChzdG9yZS0+cGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4g
YWxsUGFyYW1ldGVyczsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3Rv
cmU6OmNyZWF0ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdl
YnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0ZShJc1Bl
cnNpc3RlbnQ6Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vzc2lvbklE
KCkpKTsKQEAgLTExMywxMCArMTIzLDExIEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRh
U3RvcmUoUmVmPFcKICNlbmRpZgogewogICAgIFdURjo6c2V0UHJvY2Vzc1ByaXZpbGVnZXMoYWxs
UHJpdmlsZWdlcygpKTsKLSAgICBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAg
IHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwog
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5hZGRTZXNzaW9uKCp0aGlzKTsKIH0KIAogV2Vic2l0ZURhdGFTdG9yZTo6
fldlYnNpdGVEYXRhU3RvcmUoKQpAQCAtMTI1LDE0ICsxMzYsOSBAQCBXZWJzaXRlRGF0YVN0b3Jl
Ojp+V2Vic2l0ZURhdGFTdG9yZSgpCiAKICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIAotICAgIGlm
IChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0g
ICAgICAgIEFTU0VSVChub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0g
dGhpcyk7Ci0gICAgICAgIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklE
KTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAgICAgICB9Ci0gICAgfQorICAg
IEFTU0VSVChhbGxEYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKKyAgICBh
bGxEYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKIH0KIAogc3RhdGlj
IFJlZlB0cjxXZWJzaXRlRGF0YVN0b3JlPiYgZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpCkBAIC0x
NjIsMTcgKzE2OCwxNSBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVF
CiAgICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpOwogfQogCi12b2lkIFdlYnNp
dGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3ZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKIHsKLSAgICBpZiAobV9zZXNz
aW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBh
dXRvIHJlc3VsdCA9IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlz
KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLSAg
ICB9CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0
aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogfQog
Ci1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHRE
YXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQorV2Vic2l0ZURh
dGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCku
Z2V0KHNlc3Npb25JRCkgOiBudWxscHRyOworICAgIHJldHVybiBhbGxEYXRhU3RvcmVzKCkuZ2V0
KHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNz
KFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKQEAgLTE4OCwxMiArMTkyLDYgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJvY2VzcwogICAgIG1fcHJvY2Vzc2VzLnJlbW92ZShw
cm9jZXNzKTsKIH0KIAotV2ViUHJvY2Vzc1Bvb2wqIFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQ
b29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKQotewotICAgIGF1dG8gcG9vbHMgPSBwcm9j
ZXNzUG9vbHMoMSwgZmFsc2UpOwotICAgIHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRy
IDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVz
b2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGly
ZWN0b3JpZXMpCkBAIC0yMDM0LDI5ICsyMDMyLDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpj
bGVhclJlc291cmNlTG9hZAogfQogI2VuZGlmCiAKLVZlY3RvcjxXZWJDb3JlOjpDb29raWU+IFdl
YnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29w
eVRvVmVjdG9yKG1fcGVuZGluZ0Nvb2tpZXMpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAg
bV9wZW5kaW5nQ29va2llcy5yZW1vdmVJZihbJmNvb2tpZV0oYXV0byYgcGVuZGluZ0Nvb2tpZSkg
ewotICAgICAgICByZXR1cm4gcGVuZGluZ0Nvb2tpZS5pc0tleUVxdWFsKGNvb2tpZSk7Ci0gICAg
fSk7Ci0gICAgbV9wZW5kaW5nQ29va2llcy5hZGQoY29va2llKTsKLX0KLQotdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29v
a2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlKGNvb2tpZSk7Ci19Ci0gICAgCi12
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMoKQotewotICAgIG1fcGVu
ZGluZ0Nvb2tpZXMuY2xlYXIoKTsKLX0KLQogdWludDY0X3QgV2Vic2l0ZURhdGFTdG9yZTo6cGVy
VGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IENv
bnNpZGVyIHdoZXRoZXIgYWxsb3dpbmcgdG8gc2V0IGEgcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3Jh
Z2VRdW90YSBmcm9tIGEgV2Vic2l0ZURhdGFTdG9yZS4KQEAgLTIxMDEsNiArMjA3NiwxMCBAQCBX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0CiAKICAgICBwbGF0Zm9ybVNl
dE5ldHdvcmtQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogCisjaWYgVVNFKFNPVVApCisgICAgV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlKHNlc3Npb25JRCgpLCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisjZW5kaWYKKyAgICAKICAg
ICByZXR1cm4gcGFyYW1ldGVyczsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkocmV2aXNp
b24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgog
ICAgIFdlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYm
LCBQQUw6OlNlc3Npb25JRCk7CiAgICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgIHN0YXRp
YyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9u
SUQoUEFMOjpTZXNzaW9uSUQpOworICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGlu
Z0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVy
c2lzdGVudCgpIGNvbnN0IHsgcmV0dXJuICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAg
ICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7
IH0KQEAgLTIxNCwxNSArMjE0LDEwIEBAIHB1YmxpYzoKIAogICAgIERldmljZUlkSGFzaFNhbHRT
dG9yYWdlJiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpIHsgcmV0dXJuIG1fZGV2aWNlSWRIYXNo
U2FsdFN0b3JhZ2UuZ2V0KCk7IH0KIAotICAgIFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbEZv
ckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7CiAgICAgYm9vbCBpc0Fzc29jaWF0ZWRQcm9jZXNz
UG9vbChXZWJQcm9jZXNzUG9vbCYpIGNvbnN0OwogCiAgICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMgcGFyYW1ldGVycygpOwotCi0gICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gcGVuZGlu
Z0Nvb2tpZXMoKSBjb25zdDsKLSAgICB2b2lkIGFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29y
ZTo6Q29va2llJik7Ci0gICAgdm9pZCByZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6
OkNvb2tpZSYpOwotICAgIHZvaWQgY2xlYXJQZW5kaW5nQ29va2llcygpOworICAgIHN0YXRpYyBW
ZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IHBhcmFtZXRlcnNGcm9tQWxsU3RvcmVz
KCk7CiAKICAgICB2b2lkIHNldEJvdW5kSW50ZXJmYWNlSWRlbnRpZmllcihTdHJpbmcmJiBpZGVu
dGlmaWVyKSB7IG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLT5zZXRCb3VuZEludGVyZmFjZUlkZW50
aWZpZXIoV1RGTW92ZShpZGVudGlmaWVyKSk7IH0KICAgICBjb25zdCBTdHJpbmcmIGJvdW5kSW50
ZXJmYWNlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLT5ib3Vu
ZEludGVyZmFjZUlkZW50aWZpZXIoKTsgfQpAQCAtMzIwLDcgKzMxNSw3IEBAIHByaXZhdGU6CiAg
ICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3Rv
cmFnZURpcmVjdG9yeSwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZvaWQg
cmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwg
Y29uc3QgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAKLSAgICB2b2lk
IG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgdm9pZCByZWdpc3RlcldpdGhT
ZXNzaW9uSURNYXAoKTsKIAogICAgIGNvbnN0IFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwog
CkBAIC0zNDgsOCArMzQzLDYgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpDdXJsUHJveHlTZXR0
aW5ncyBtX3Byb3h5U2V0dGluZ3M7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29v
a2llPiBtX3BlbmRpbmdDb29raWVzOwotICAgIAogICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQ
cm94eT4gbV9wcm9jZXNzZXM7CiAKICAgICBib29sIG1fbmV0d29ya2luZ0hhc0JlZ3VuIHsgZmFs
c2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dl
YnNpdGVEYXRhU3RvcmVDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0JKHJldmlzaW9u
IDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dl
YnNpdGVEYXRhU3RvcmVDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTY4LDggKzE2OCw2IEBA
IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3QKICAgICBwYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZp
ZXIgPSBzb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKICAgICBwYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50
aWZpZXIgPSBzb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKTsKIAotICAgIHBh
cmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBjb3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7
Ci0KICAgICBpZiAoIWNvb2tpZUZpbGUuaXNFbXB0eSgpKQogICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoRmlsZVN5c3RlbTo6ZGlyZWN0
b3J5TmFtZShjb29raWVGaWxlKSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lv
bkhhbmRsZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3Nv
dXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCShyZXZp
c2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3Vw
L1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29yCiB7CiAgICAgYXV0byYg
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnM7CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbEZvckNvb2tp
ZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdl
YkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNz
aW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBh
dGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUp
OworICAgIFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5nZXRDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3Vw
LmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9X
ZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94
eS5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYkNv
b2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAKQEAg
LTM0LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VU
eXBlIHN0b3JhZ2VUeXBlKQogewogICAgIG1fY29va2llUGVyc2lzdGVudFN0b3JhZ2VNYXAuc2V0
KHNlc3Npb25JRCwgc3RkOjptYWtlX3BhaXIoc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7Ci0g
ICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFn
ZVBhdGgsIHN0b3JhZ2VUeXBlKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0
b3JhZ2Uoc2Vzc2lvbklELCBzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpLCAwKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlVHlwZSYgc3RvcmFnZVR5cGUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCShyZXZpc2lv
biAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29s
U291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDI3ICszNywyMyBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0g
ICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmIGRlZmF1bHRTZXNzaW9uUGFyYW1l
dGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5n
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lv
bklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRo
LCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsK
KyAgICAvLyBGSVhNRTogbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeSBzaG91bGQgYmUg
bW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgLy8gRklYTUU6IG1faWdub3JlVExT
RXJyb3JzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZSBvciByZW1vdmVk
LgorICAgIC8vIEZJWE1FOiBtX25ldHdvcmtQcm94eVNldHRpbmdzIHNob3VsZCBiZSBtb3ZlZCB0
byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KIAotICAgIHBhcmFtZXRlcnMuY29va2llQWNjZXB0UG9s
aWN5ID0gbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeTsKLSAgICBwYXJhbWV0ZXJzLmln
bm9yZVRMU0Vycm9ycyA9IG1faWdub3JlVExTRXJyb3JzOwogICAgIHBhcmFtZXRlcnMubGFuZ3Vh
Z2VzID0gdXNlclByZWZlcnJlZExhbmd1YWdlcygpOwotICAgIHBhcmFtZXRlcnMucHJveHlTZXR0
aW5ncyA9IG1fbmV0d29ya1Byb3h5U2V0dGluZ3M7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAgICBtX2lnbm9y
ZVRMU0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vycm9ycyksIDApOworICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRJZ25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoY29uc3QgV2ViQ29yZTo6U291cE5l
dHdvcmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykKIHsKICAgICBtX25ldHdvcmtQcm94eVNldHRp
bmdzID0gc2V0dGluZ3M7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJv
eHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CisgICAgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5l
dHdvcmtQcm94eVNldHRpbmdzKG1fbmV0d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpJ
bmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2
aXNpb24gMjUyMzEwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTktMTEtMDkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Vi
a2l0Lm9yZz4KKworICAgICAgICBVc2UgYSBOZXR3b3JrUHJvY2Vzc1Byb3h5IHNpbmdsZXRvbiBp
bnN0ZWFkIG9mIG9uZSBwZXIgV2ViUHJvY2Vzc1Bvb2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzU0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS0hUVFBDb29raWVTdG9yZS5tbToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlE
ZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0pOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVV
SURlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0pOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICgt
W0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQ
YW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6IERl
bGV0ZWQuCisKIDIwMTktMTEtMDkgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIENsaWNreSBPcmJpbmcgc3VwcG9ydC5hcHBsZS5jb20gY2F0ZWdvcmllcyBzaG93cyBh
IFBORyBpbnN0ZWFkIG9mIHRoZSB3ZWIgcGFnZSBwcmV2aWV3LCB0YXBwaW5nIGxvYWRzIGltYWdl
IGFzc2V0IG9ubHkgaW5zdGVhZCBvZiB3ZWIgcGFnZQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1t
CShyZXZpc2lvbiAyNTIyNzQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBA
IC0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVyOihXS1VzZXJDb24KIAogQGVuZAogCi1zdGF0
aWMgdm9pZCBydW5UZXN0KCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoYm9vbCBvbGRGaWxlU2hvdWxk
RXhpc3QgPSB0cnVlKQogewogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tJbmRleGVkREJG
aWxlTmFtZU1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CiAgICAgYXV0byBjb25maWd1cmF0
aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKQEAg
LTg3LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdCgpCiAgICAgTlNVUkwgKm9sZFZlcnNp
b25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVu
ZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwogICAgIE5TVVJMICpuZXdWZXJzaW9uT3Jp
Z2luRGlyZWN0b3J5VVJMID0gW25ld1ZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQ
YXRoQ29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAgICBOU1VSTCAqb2xkVmVyc2lvblVudXNlZERh
dGFiYXNlRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgVVJMQnlB
cHBlbmRpbmdQYXRoQ29tcG9uZW50OnVudXNlZERhdGFiYXNlTmFtZV07Ci0gICAgRVhQRUNUX1RS
VUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZl
cnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSk7CisgICAgRVhQRUNUX1RSVUUo
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZlcnNp
b25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSA9PSBvbGRGaWxlU2hvdWxkRXhpc3Qp
OwogICAgIAogICAgIC8vIEZvciBkYXRhYmFzZSB0aGF0IGlzIG9wZW5lZCBhZnRlciB1cGdyYWRl
LCBpdHMgZmlsZSBzaG91bGQgb25seSBiZSBpbiB2MS4KICAgICBOU1VSTCAqb2xkVmVyc2lvbkV4
aXN0aW5nRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVS
TCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IGV4aXN0aW5nRGF0YWJhc2VOYW1lXTsKQEAg
LTE1NCw3ICsxNTQsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVEaXJlY3RvcmllcyhTdHJpbmcgdGVz
CiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCRmlsZU5hbWUpCiB7CiAgICAgY3JlYXRlRGlyZWN0
b3JpZXMoIm5vbmUiKTsKLSAgICBydW5UZXN0KCk7CisgICAgcnVuVGVzdChmYWxzZSk7CiB9CiAK
IFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJGaWxlTmFtZVYwKQpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UTFNEZXByZWNhdGlvbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1t
CShyZXZpc2lvbiAyNTIyNzQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1RMU0RlcHJlY2F0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw5IEBACiAj
aW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJXZWJDb3JlVGVzdFN1cHBvcnQuaCIK
ICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4K
KyNpbXBvcnQgPFdlYktpdC9fV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5oPgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTIw
MCw3ICsyMDIsOCBAQCBURVNUKFdlYktpdCwgVExTVmVyc2lvbk5ldHdvcmtTZXNzaW9uKQogICAg
ICAgICBUQ1BTZXJ2ZXIgc2VydmVyKFRDUFNlcnZlcjo6UHJvdG9jb2w6OkhUVFBTLCBbXShTU0wg
KnNzbCkgewogICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHNzbCk7CiAgICAgICAgIH0sIHRsczFf
MSk7Ci0gICAgICAgIGF1dG8gd2ViVmlldyA9IG1ha2VXZWJWaWV3V2l0aChbV0tXZWJzaXRlRGF0
YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdKTsKKyAgICAgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBhdXRvIHdlYlZpZXcg
PSBtYWtlV2ViVmlld1dpdGgoW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhD
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXSk7CiAgICAgICAgIFt3ZWJW
aWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJodHRwczovLzEyNy4wLjAuMTol
ZC8iLCBzZXJ2ZXIucG9ydCgpXV1dXTsKICAgICAgICAgW2RlbGVnYXRlIHdhaXRGb3JEaWRGYWls
UHJvdmlzaW9uYWxOYXZpZ2F0aW9uXTsKICAgICB9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0J
KHJldmlzaW9uIDI1MjI3NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV0tIVFRQQ29va2llU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
IAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9u
RGVsZWdhdGUuaCIKKyNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgPFdlYktpdC9X
S0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9XS0hUVFBDb29raWVTdG9yZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CkBAIC00NzUsOCArNDc2LDYgQEAg
LSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bgogfQogQGVuZAogCi0vLyBG
SVhNRTogb24gaU9TLCBVSSBwcm9jZXNzIHNob3VsZCBiZSB1c2luZyB0aGUgc2FtZSBjb29raWUg
ZmlsZSBhcyB0aGUgbmV0d29yayBwcm9jZXNzIGZvciBkZWZhdWx0IHNlc3Npb24uCi0jaWYgUExB
VEZPUk0oTUFDKQogZW51bSBjbGFzcyBTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyB7IE5v
LCBZZXMgfTsKIHZvaWQgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hv
dWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcp
CiB7CkBAIC01ODUsMjAgKzU4NCw2NSBAQCBURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3RvcmVX
aXRob3V0UHJvCiAgICAgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hv
dWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmc6Olllcyk7CiB9CiAKLSNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSA6IE5TT2Jq
ZWN0IDxXS1VJRGVsZWdhdGU+CistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTDsKKy0gKE5T
U3RyaW5nICopd2FpdEZvck1lc3NhZ2U7CiBAZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBDaGVja1Nl
c3Npb25Db29raWVVSURlbGVnYXRlCitAaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2ll
VUlEZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfbWVzc2FnZTsKK30KKwogLSAo
dm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVs
V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1l
SW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9u
SGFuZGxlcgogewotICAgIEVYUEVDVF9TVFJFUSgiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFs
dWUiLCBtZXNzYWdlLlVURjhTdHJpbmcpOwotICAgIGZpbmlzaGVkID0gdHJ1ZTsKKyAgICBfbWVz
c2FnZSA9IG1lc3NhZ2U7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KKworLSAoTlNTdHJp
bmcgKil3YWl0Rm9yTWVzc2FnZQoreworICAgIHdoaWxlICghX21lc3NhZ2UpCisgICAgICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgcmV0dXJuIF9tZXNzYWdlLmF1
dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MCit7CisgICAg
cmV0dXJuIEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycp
OyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0g
PSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2lu
KCc7ICcpKTs8L3NjcmlwdD4iOworfQorCiBAZW5kCiAKK1RFU1QoV2ViS2l0LCBXS0hUVFBDb29r
aWVTdG9yZU11bHRpcGxlVmlld3MpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzEgPSBb
W1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcxIHN5bmNocm9u
b3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJvY2VzcyJdOworCisgICAgTlNI
VFRQQ29va2llICpzZXNzaW9uQ29va2llID0gW05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJvcGVy
dGllczpAeworICAgICAgICBOU0hUVFBDb29raWVQYXRoOiBAIi8iLAorICAgICAgICBOU0hUVFBD
b29raWVOYW1lOiBAIlNlc3Npb25Db29raWVOYW1lIiwKKyAgICAgICAgTlNIVFRQQ29va2llVmFs
dWU6IEAiQ29va2llVmFsdWUiLAorICAgICAgICBOU0hUVFBDb29raWVEb21haW46IEAiMTI3LjAu
MC4xIiwKKyAgICB9XTsKKworICAgIF9fYmxvY2sgYm9vbCBzZXRDb29raWVEb25lID0gZmFsc2U7
CisgICAgW3dlYlZpZXcxLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZS5odHRwQ29va2ll
U3RvcmUgc2V0Q29va2llOnNlc3Npb25Db29raWUgY29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAg
ICAgc2V0Q29va2llRG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZzZXRDb29raWVEb25lKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtD
aGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIG5ld10pOworICAgIFt3ZWJWaWV3MSBzZXRVSURl
bGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3MSBsb2FkSFRNTFN0cmluZzpb
ZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAi
aHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRG
b3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CisgICAgCisgICAg
VGVzdFdLV2ViVmlldyAqd2ViVmlldzIgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFz
ZV07CisgICAgW3dlYlZpZXcyIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3
ZWJWaWV3MiBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJM
OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNv
b2tpZVZhbHVlIik7Cit9CisKIFRFU1QoV2ViS2l0LCBXS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQ
cm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiB7CiAgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURh
dGFTdG9yZT4gZXBoZW1lcmFsU3RvcmVXaXRoQ29va2llcyA9IFtXS1dlYnNpdGVEYXRhU3RvcmUg
bm9uUGVyc2lzdGVudERhdGFTdG9yZV07CkBAIC02MjMsOSArNjY3LDggQEAgVEVTVChXZWJLaXQs
IFdLSFRUUENvb2tpZVN0b3JlV2l0aG91dFBybwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0gZmFsc2U7CiAgICAgCi0gICAgTlNTdHJpbmcg
KmFsZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tp
ZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7
IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQo
Y29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOwotICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3Ry
aW5nOmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDov
LzEyNy4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsK
KyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBi
YXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVO
YW1lPUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRpYyBib29sIGFyZUNvb2tpZXNFcXVhbChOU0hU
VFBDb29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUgKnNlY29uZCkKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLm1tCShyZXZpc2lvbiAyNTIyNzQpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRo
cy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDI3LDcgKzQyNyw3IEBAIFRFU1QoV2ViS2l0LCBXZWJz
aXRlRGF0YVN0b3JlRXBoZW1lcmFsKQogICAgIGhhbmRsZXIgPSBuaWw7CiAgICAgY29uZmlndXJh
dGlvbiA9IG5pbDsKIAotICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFu
YWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpkZWZhdWx0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhdGgu
cGF0aF0pOworICAgIEVYUEVDVF9GQUxTRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGZpbGVFeGlzdHNBdFBhdGg6ZGVmYXVsdFJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXRoLnBhdGhd
KTsKICAgICBFWFBFQ1RfRkFMU0UoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxl
RXhpc3RzQXRQYXRoOmRlZmF1bHRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlsZVBhdGgucGF0aF0p
OwogCiAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6
ZGVmYXVsdFJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXRoIGVycm9yOm5pbF07CkBAIC00NzAsNyAr
NDcwLDcgQEAgVEVTVChXZWJLaXQsIFdlYnNpdGVEYXRhU3RvcmVFcGhlbWVyYWxWaQogICAgIGhh
bmRsZXIgPSBuaWw7CiAgICAgY29uZmlndXJhdGlvbiA9IG5pbDsKIAotICAgIEVYUEVDVF9UUlVF
KFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpkZWZhdWx0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhdGgucGF0aF0pOworICAgIEVYUEVDVF9GQUxTRShbW05T
RmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6ZGVmYXVsdFJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXRoLnBhdGhdKTsKICAgICBFWFBFQ1RfRkFMU0UoW1tOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOmRlZmF1bHRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRmlsZVBhdGgucGF0aF0pOwogCiAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1
bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6ZGVmYXVsdFJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXRoIGVycm9yOm5pbF07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383244</attachid>
            <date>2019-11-10 04:28:07 -0800</date>
            <delta_ts>2020-02-27 14:23:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20191110122804.patch</filename>
            <type>text/plain</type>
            <size>138702</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBAQAorMjAxOS0xMS0wOSAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBhIE5ldHdv
cmtQcm9jZXNzUHJveHkgc2luZ2xldG9uIGluc3RlYWQgb2Ygb25lIHBlciBXZWJQcm9jZXNzUG9v
bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToK
KyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhU
VFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tp
ZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3Jl
Ojpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoQVBJOjpI
VFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoQVBJ
OjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6CisgICAgICAgIChX
S0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9zZXRDb29raWVBY2Nl
cHRQb2xpY3k6XSk6CisgICAgICAgICh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tp
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNN
b2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpw
cm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250
ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6CisgICAgICAg
IChXZWJLaXQ6Om1fd2ViUHJvY2Vzc0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6On5XZWJQcm9jZXNzUG9vbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0
Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9O
ZXR3b3JraW5nUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVh
ckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyTGVnYWN5UHJpdmF0ZUJy
b3dzaW5nTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFs
bG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRXZWJQcm9jZXNzSGFzVXBsb2Fkcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVhcldlYlByb2Nlc3NIYXNVcGxv
YWRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMTktMTEtMDggIEpv
bmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIyNTIyNjAuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwMyw3ICszMDMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1By
CiAgICAgICAgIG1lbW9yeVByZXNzdXJlSGFuZGxlci5pbnN0YWxsKCk7CiAgICAgfQogCi0gICAg
c2V0Q2FjaGVNb2RlbChwYXJhbWV0ZXJzLmNhY2hlTW9kZWwsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURp
cmVjdG9yeSk7CisgICAgLy8gRklYTUU6IEkgc3RpbGwgbmVlZCB0byBzZXQgdGhlIGNhY2hlIG1v
ZGVsIGZyb20gTGVnYWN5R2xvYmFsU2V0dGluZ3MsIGJ1dCB3aXRoIHRoZSBwYXRoIGZyb20gdGhl
IGZpcnN0IHBlcnNpc3RlbnQgZGF0YSBzdG9yZS4KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCiAgICAgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCA9IHBhcmFtZXRlcnMuc2hv
dWxkRW5hYmxlSVRQRGF0YWJhc2U7CkBAIC0zMTEsMTQgKzMxMSwxNSBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1ByCiAKICAgICBXZWJDb3JlOjpSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZUVuYWJsZWQocGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUpOwog
Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBzZXNz
aW9uSUQgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7Ci0gICAgc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7Ci0KKyAgICBmb3IgKGF1
dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMp
IHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lv
bklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwog
I2VuZGlmCisgICAgICAgIGluaXRpYWxpemVTdG9yYWdlUXVvdGEoZGF0YVN0b3JlUGFyYW1ldGVy
cyk7CisgICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIGRhdGFTdG9y
ZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmxv
Y2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIFJlbW90ZU5ldHdv
cmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbigqdGhpcywgV1RGTW92
ZShkYXRhU3RvcmVQYXJhbWV0ZXJzKSk7CisgICAgfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQogICAgIGlmIChwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50KCkp
IHsKQEAgLTMyNiwxNCArMzI3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5l
dHdvcmtQcgogICAgICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlF
bmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAgICAgfQogI2VuZGlmCi0gICAgaW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKLQotICAgIG1fc3RvcmFnZU1h
bmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBh
dXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpOwotICAgIGF1dG8qIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IGRlZmF1
bHRTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGNvb2tpZSA6IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nv
b2tpZXMpCi0gICAgICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7
CiAKICAgICBmb3IgKGF1dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQog
ICAgICAgICBzdXBwbGVtZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNDE5LDEyICs0
MTIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjCiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAgIGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuY2xlYXJDcmVkZW50aWFscygpOwot
ICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpKQotICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+
Y2xlYXJDcmVkZW50aWFscygpOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0KICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW10gKGF1dG8mIG5ldHdvcmtTZXNzaW9u
KSB7CiAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24ubmV0
d29ya1N0b3JhZ2VTZXNzaW9uKCkpCiAgICAgICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVu
dGlhbFN0b3JhZ2UoKS5jbGVhckNyZWRlbnRpYWxzKCk7CkBAIC00OTEsOCArNDc4LDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdAogdm9pZCBOZXR3b3JrUHJvY2Vz
czo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNo
b3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFz
ZSkKICNlbmRpZgogewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3Jh
Z2VTZXNzaW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5p
c05ld0VudHJ5KQogICAgICAgICByZXR1cm47CkBAIC01MjQsMjEgKzUwOSwxMSBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0CiAKIFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiogTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uKGNvbnN0IFBBTDo6U2Vz
c2lvbklEJiBzZXNzaW9uSUQpIGNvbnN0CiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICByZXR1cm4gJmRlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpOwogICAgIHJldHVybiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMuZ2V0KHNl
c3Npb25JRCk7CiB9CiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29ya1By
b2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb24pCi0gICAgICAgIG1fZGVmYXVsdE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiA9IHBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgcmV0
dXJuICptX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247Ci19Ci0KIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKT4mIGZ1bmN0b3IpCiB7Ci0gICAgZnVuY3Rv
cihkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSk7CiAgICAgZm9yIChhdXRvJiBzdG9yYWdlU2Vzc2lv
biA6IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy52YWx1ZXMoKSkKICAgICAgICAgZnVuY3Rvcigq
c3RvcmFnZVNlc3Npb24pOwogfQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuaAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyAr
MTY2LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7
CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25z
dCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3Qg
UEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3Jr
U2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4mJik7CkBAIC0zNDIsNyArMzQxLDYgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0OwogCiAgICAgdm9pZCB0ZXJtaW5hdGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHBs
YXRmb3JtVGVybWluYXRlKCk7CkBAIC00ODIsNyArNDgwLDYgQEAgcHJpdmF0ZToKIAogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1f
bmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vz
c2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8
U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjplCiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRl
eHQuZ2V0KCkpOwogICAgIGVuY29kZXIgPDwgc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7CiAjZW5k
aWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGVuY29k
ZXIgPDwgZGF0YVN0b3JlUGFyYW1ldGVyczsKICNpZiBVU0UoU09VUCkKICAgICBlbmNvZGVyLmVu
Y29kZUVudW0oY29va2llQWNjZXB0UG9saWN5KTsKICAgICBlbmNvZGVyIDw8IGlnbm9yZVRMU0Vy
cm9yczsKQEAgLTEyMiwxMSArMTIyLDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAgICBPcHRpb25h
bDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7
Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIWRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQorICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycz4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiBk
YXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGlmICghZGF0YVN0b3JlUGFyYW1ldGVycykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9
IFdURk1vdmUoKmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKKyAgICByZXN1bHQuZGF0YVN0
b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAjaWYgVVNF
KFNPVVApCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmNvb2tpZUFjY2VwdFBv
bGljeSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCShyZXZpc2lvbiAyNTIy
NzQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RydWN0IE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIAogICAgIGJvb2wgc3RvcmFnZUFjY2Vzc0FQ
SUVuYWJsZWQ7CiAjZW5kaWYKIAotICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIGRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gZGF0YVN0b3JlUGFyYW1ldGVyczsKICAgICAKICNpZiBVU0UoU09VUCkKICAgICBIVFRQ
Q29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSB7IEhUVFBDb29raWVBY2NlcHRQ
b2xpY3k6OkFsd2F5c0FjY2VwdCB9OwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdlckN1cmwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9jdXJsL1dlYkNvb2tpZU1hbmFnZXJD
dXJsLmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL2N1cmwvV2ViQ29va2llTWFuYWdlckN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw3ICs1OSwxMiBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtU2V0SFRUUENv
CiAKIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1HZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KCkKIHsKLSAgICBjb25zdCBhdXRvJiBuZXR3b3JrU3RvcmFn
ZVNlc3Npb24gPSBtX3Byb2Nlc3MuZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CisgICAgY29uc3Qg
YXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gbV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOworICAgIGlmICghbmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gSFRUUENvb2tpZUFjY2VwdFBvbGljeTo6T25seUZyb21NYWluRG9jdW1lbnREb21haW47Cisg
ICAgfQorCiAgICAgc3dpdGNoIChuZXR3b3JrU3RvcmFnZVNlc3Npb24uY29va2llU3RvcmFnZSgp
LmNvb2tpZUFjY2VwdFBvbGljeShuZXR3b3JrU3RvcmFnZVNlc3Npb24pKSB7CiAgICAgY2FzZSBD
b29raWVBY2NlcHRQb2xpY3k6OkFsd2F5czoKICAgICAgICAgcmV0dXJuIEhUVFBDb29raWVBY2Nl
cHRQb2xpY3k6OkFsd2F5c0FjY2VwdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5hZ2Vy
U291cC5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ29va2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KICNpbmNsdWRlIDxs
aWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02Miw3ICs2Myw3IEBAIHZvaWQg
V2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ28KIAogSFRUUENvb2tpZUFjY2VwdFBv
bGljeSBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybUdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
KQogewotICAgIHN3aXRjaCAoc291cF9jb29raWVfamFyX2dldF9hY2NlcHRfcG9saWN5KG1fcHJv
Y2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVTdG9yYWdlKCkpKSB7CisgICAgc3dp
dGNoIChzb3VwX2Nvb2tpZV9qYXJfZ2V0X2FjY2VwdF9wb2xpY3kobV9wcm9jZXNzLnN0b3JhZ2VT
ZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpLT5jb29raWVTdG9yYWdl
KCkpKSB7CiAgICAgY2FzZSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZUzoKICAgICAgICAg
cmV0dXJuIEhUVFBDb29raWVBY2NlcHRQb2xpY3k6OkFsd2F5c0FjY2VwdDsKICAgICBjYXNlIFNP
VVBfQ09PS0lFX0pBUl9BQ0NFUFRfTkVWRVI6CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCShyZXZp
c2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtQcm9jZXNzQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTg2LDkgKzg2LDYgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFyZW50QnVu
ZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29ya1NldEFU
U0NvbnRleHQocGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0xMTUsMTEg
KzExMiw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBb
TlNVUkxDYWNoZSBzZXRTaGFyZWRVUkxDYWNoZTp1cmxDYWNoZS5nZXQoKV07CiB9CiAKLXN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNz
OjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogUmV0YWluUHRyPENGRGF0YVJlZj4gTmV0
d29ya1Byb2Nlc3M6OnNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhKCkgY29uc3QKIHsKICNpZiBV
U0UoU09VUkNFX0FQUExJQ0FUSU9OX0FVRElUX0RBVEEpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAko
cmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtQcm9jZXNzQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KIHsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBs
YXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphbGxvd1Nw
ZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0
aWZpY2F0ZUluZm8sIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2lu
Z0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9t
YWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC02MCwxMCArNjAsNiBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250
ZXh0OjplbnN1cmVXZWJzCiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Np
b25JRCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGlu
Z05ldHdvcmtTZXNzaW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUludDY0
KCkpLCBXVEZNb3ZlKHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNlc3Np
b24gPSBuZXR3b3JrUHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZvciAo
Y29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAg
c2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNz
aW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgV1RG
TW92ZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQ
cm9jZXNzU291cC5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDUsMTEgKzE0NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4K
ICAgICB9KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMp
CiB7CiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRTaG91bGRJZ25vcmVUTFNFcnJvcnMoaWdu
b3JlVExTRXJyb3JzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5j
b2RlKAogICAgIGVuY29kZXIgPDwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogICAgIGVuY29k
ZXIgPDwgdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgZW5jb2RlciA8PCBj
b29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAgICBlbmNvZGVyIDw8IHBlbmRpbmdD
b29raWVzOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgZW5jb2RlciA8PCBp
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgZW5jb2RlciA8PCBpbmRl
eGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkBAIC04MSwxMiArNzcsNiBAQCBPcHRp
b25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2ViCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRs
ZSA9IFdURk1vdmUoKmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE9w
dGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb29raWU+PiBwZW5kaW5nQ29va2llczsKLSAgICBkZWNv
ZGVyID4+IHBlbmRpbmdDb29raWVzOwotICAgIGlmICghcGVuZGluZ0Nvb2tpZXMpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IFdU
Rk1vdmUoKnBlbmRpbmdDb29raWVzKTsKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
ICAgIE9wdGlvbmFsPFN0cmluZz4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIGRlY29k
ZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwpAQCAtOTksMTQgKzg5LDYgQEAgT3B0aW9u
YWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYgogICAgIGlmICghaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
ID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlPiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsK
LSAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlOwotICAgIGlmICghaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUo
KmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRp
ZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgJKHJldmlzaW9u
IDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE1ICs1MSwxMSBAQCBzdHJ1Y3QgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMgewogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHVpUHJvY2Vzc0Nvb2tp
ZVN0b3JhZ2VJZGVudGlmaWVyOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjb29raWVT
dG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBw
ZW5kaW5nQ29va2llczsKICAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAg
ICBTdHJpbmcgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAyNTIyNzQpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNs
dWRlICJBUElTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9u
YWxDYWxsYmFja0lELmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKQEAgLTM5LDIwICs0MCwx
NSBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY29u
c3QgY2hhciogV2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSgpCitXZWJDb29r
aWVNYW5hZ2VyUHJveHkmIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkKIHsKLSAg
ICByZXR1cm4gIldlYkNvb2tpZU1hbmFnZXJQcm94eSI7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gbWFuYWdlcjsKKyAgICByZXR1cm4gbWFuYWdlcjsK
IH0KIAotUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gV2ViQ29va2llTWFuYWdlclByb3h5Ojpj
cmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQorV2ViQ29va2llTWFuYWdlclByb3h5
OjpXZWJDb29raWVNYW5hZ2VyUHJveHkoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdl
YkNvb2tpZU1hbmFnZXJQcm94eShwcm9jZXNzUG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2Vy
UHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wp
Ci0gICAgOiBXZWJDb250ZXh0U3VwcGxlbWVudChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250
ZXh0U3VwcGxlbWVudDo6cHJvY2Vzc1Bvb2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0
aGlzKTsKIH0KIAogV2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5
KCkKQEAgLTY1LDQzICs2MSw5IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFs
aXplQ2wKICAgICBtX2NsaWVudC5pbml0aWFsaXplKGNsaWVudCk7CiB9CiAKLS8vIFdlYkNvbnRl
eHRTdXBwbGVtZW50Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERl
c3Ryb3llZCgpCi17Ci0gICAgVmVjdG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJzOwotICAgIGZvciAo
YXV0byYgb2JzZXJ2ZXJTZXQgOiBtX2Nvb2tpZU9ic2VydmVycy52YWx1ZXMoKSkgewotICAgICAg
ICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJTZXQpCi0gICAgICAgICAgICBvYnNlcnZl
cnMuYXBwZW5kKG9ic2VydmVyKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDog
b2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlci0+bWFuYWdlckRlc3Ryb3llZCgpOwotCi0gICAg
QVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQot
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vz
c1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnJlZldlYkNvbnRl
eHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6cmVmKCk7Ci19Ci0KLXZvaWQgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkKLXsKLSAgICBB
UEk6Ok9iamVjdDo6ZGVyZWYoKTsKLX0KLQogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6Omdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewot
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklE
KSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBhY3Rpdml0
eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViQ29v
a2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyJfcyldKFZlY3RvcjxTdHJp
bmc+JiYgaG9zdG5hbWVzKSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihXVEZN
b3ZlKGhvc3RuYW1lcykpOwogICAgIH0pOwpAQCAtMTA5LDE3ICs3MSwxNyBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5z
ZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBob3N0
bmFtZXMpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3Nh
Z2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25J
RCwgaG9zdG5hbWVzKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxl
dGVBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9v
bCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSk7CisgICAg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IENvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJh
Y2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCkt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNz
aW9uSUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0
aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llIl9zKV0oKSBtdXRhYmxl
IHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogICAgIH0pOwpAQCAtMTI3LDcgKzg5LDcg
QEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nl
c3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vz
cy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFs
bENvb2tpZXNNb2RpZmllZFNpbmNlKHNlc3Npb25JRCwgdGltZSksIFtjYWxsYmFja0Z1bmN0aW9u
ID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50
aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVs
ZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UiX3MpXSgpIG11dGFibGUgewogICAgICAgICBjYWxs
YmFja0Z1bmN0aW9uKCk7CiAgICAgfSk7CkBAIC0xMzUsNyArOTcsNyBAQCB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29vCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5
OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tp
ZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9u
KQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2ll
cyksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYWN0aXZp
dHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyJfcyldKCkgbXV0YWJsZSB7CiAgICAgICAgIGNh
bGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTE0Myw3ICsxMDUsNyBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENv
b2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVS
TCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAg
YXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBt
YWluRG9jdW1lbnRVUkwpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbiksIGFjdGl2aXR5ID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFj
dGl2aXR5KCJXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMiX3MpXSgpIG11dGFibGUg
ewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgfSk7CkBAIC0xNTEsNyArMTEzLDcg
QEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUAogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5j
dGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklE
KSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBhY3Rpdml0
eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViQ29v
a2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzIl9zKV0oVmVjdG9yPENvb2tpZT4mJiBjb29r
aWVzKSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihXVEZNb3ZlKGNvb2tpZXMp
KTsKICAgICB9KTsKQEAgLTE1OSw3ICsxMjEsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6Z2V0QWxsQ29va2llCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBh
dXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBbY2FsbGJhY2tG
dW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFjdGl2aXR5ID0gbmV0d29ya1By
b2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmdldENvb2tpZXMiX3MpXShWZWN0b3I8Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgewog
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKFdURk1vdmUoY29va2llcykpOwogICAgIH0pOwpAQCAt
MTY3LDEyICsxMjksMTIgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMo
UAogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFu
Z2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5k
VG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdl
cyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAog
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiYgY2FsbGJhY2sp
CkBAIC0yMjEsMTcgKzE4Myw5IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpjb29raWVz
RGlkQ2gKICAgICAgICAgb2JzZXJ2ZXItPmNvb2tpZXNEaWRDaGFuZ2UoKTsKIH0KIAotdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNz
aW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgSFRUUENv
b2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxs
YmFja0Z1bmN0aW9uKQogewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmICghcHJvY2Vzc1Bv
b2woKS0+aXNVc2luZ1Rlc3RpbmdOZXR3b3JrU2Vzc2lvbigpKQotICAgICAgICBwZXJzaXN0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpOwotI2VuZGlmCi0jaWYgVVNFKFNPVVApCi0gICAg
cHJvY2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsK
LSNlbmRpZgotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZp
dHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSJfcyld
KCkgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTIz
OSw3ICsxOTMsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpCiAK
IHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBB
TDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQ
cm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1By
b2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRI
VFRQQ29va2llQWNjZXB0UG9saWN5KCksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNr
Z3JvdW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeSJfcyldKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSBtdXRhYmxlIHsKICAg
ICAgICAgY2FsbGJhY2tGdW5jdGlvbihwb2xpY3kpOwogICAgIH0pOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgJKHJldmlzaW9uIDI1
MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMSArNTYsOSBAQCB0eXBlZGVmIEdlbmVyaWNDYWxsYmFj
azxBUEk6OkFycmF5Kj4gQXJyCiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxIVFRQQ29va2llQWNj
ZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0UG9saWN5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVy
aWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiY+IEdldENvb2tpZXNDYWxs
YmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0
SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0
U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitjbGFzcyBXZWJDb29r
aWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBl
OjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7Ci0KLSAgICBzdGF0aWMg
UmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlByb2Nlc3NQb29sKik7CisgICAg
c3RhdGljIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgc2luZ2xldG9uKCk7CiAgICAgdmlydHVhbCB+
V2ViQ29va2llTWFuYWdlclByb3h5KCk7CiAKICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29u
c3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSopOwpAQCAtMTA0LDE3ICsxMDIsMTEgQEAgcHVi
bGljOgogICAgIHVzaW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsKIAogcHJpdmF0ZToKLSAgICBXZWJD
b29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBXZWJDb29raWVNYW5hZ2Vy
UHJveHkoKTsKKyAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8V2ViQ29va2llTWFuYWdlclByb3h5
PjsKIAogICAgIHZvaWQgY29va2llc0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAv
LyBXZWJDb250ZXh0U3VwcGxlbWVudAotICAgIHZvaWQgcHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKSBv
dmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5Kikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotICAg
IHZvaWQgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotCiAgICAgLy8gSVBD
OjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
Niw2ICsyMTYsMTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdAog
ICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IFdlYlByb2Nlc3NQb29sOjp1cmxT
Y2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQoreworICAgIHJldHVybiBjb3B5VG9W
ZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpOworfQor
CiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlv
bi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdlR3JvdXAoV2ViUGFnZUdyb3VwOjpjcmVhdGUo
KSkKQEAgLTIyMyw3ICsyMjgsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJ
OjpQcm9jCiAgICAgLCBtX2F1dG9tYXRpb25DbGllbnQobWFrZVVuaXF1ZTxBUEk6OkF1dG9tYXRp
b25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2FkQ2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJOjpE
b3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlzdG9yeUNsaWVudChtYWtlVW5pcXVlPEFQSTo6
TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkpCi0gICAgLCBtX2N1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Pigp
KQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgpKQog
I2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNh
bXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlcj4oKnRo
aXMpKQpAQCAtMjQ4LDkgKzI1Miw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChB
UEk6OlByb2MKICAgICAgICAgUHJvY2Vzczo6c2V0SWRlbnRpZmllcihXZWJDb3JlOjpQcm9jZXNz
SWRlbnRpZmllcjo6Z2VuZXJhdGUoKSk7CiAgICAgfSk7CiAKLSAgICBpZiAoIW1fd2Vic2l0ZURh
dGFTdG9yZSAmJiBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlz
dHMoKSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCk7Ci0KICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1fY29u
ZmlndXJhdGlvbi0+YWx3YXlzUmV2YWxpZGF0ZWRVUkxTY2hlbWVzKCkpCiAgICAgICAgIG1fc2No
ZW1lc1RvUmVnaXN0ZXJBc0Fsd2F5c1JldmFsaWRhdGVkLmFkZChzY2hlbWUpOwogCkBAIC0yNjYs
NyArMjY3LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvYwogICAg
IGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTogVGhlc2Ugc3ViLW9iamVjdHMgbXVz
dCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZlck1hcC4uCi0gICAgYWRkU3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJH
ZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYk5vdGlmaWNh
dGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKQEAgLTMxNyw5
ICszMTcsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKCkKICAgICBwcm9jZXNz
UG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0RG93blByb2Nlc3MoKTsKLQogI2lm
IEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNzZXNVc2luZ0dhbWVwYWRzLmlzRW1w
dHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnByb2Nlc3NQb29s
U3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtMzc3LDE2ICszNzQsNiBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50CiAgICAgICAgIG1fYXV0b21hdGlvbkNs
aWVudCA9IFdURk1vdmUoYXV0b21hdGlvbkNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8
QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYgY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KQotewotI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCi0g
ICAgaWYgKCFjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi0gICAgICAgIG1fY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50ID0gbWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudD4oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50ID0gV1RGTW92ZShjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOwotI2VuZGlmCi19Ci0K
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wgZW5h
YmxlZCkKIHsKICAgICBtX3N0b3JhZ2VBY2Nlc3NBUElFbmFibGVkID0gZW5hYmxlZDsKQEAgLTQw
Niw3ICszOTMsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50CiAK
IElQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVj
dGlvbigpCiB7Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAg
ICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuY29ubmVjdGlvbigpOwog
fQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4dCkK
QEAgLTQxOCw4ICs0MDUsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQo
KQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNlclBy
ZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSk7CiAjaWYg
VVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3Vh
Z2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNl
clByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7
CiAjZW5kaWYKIH0KIApAQCAtNDU3LDIwMyArNDQzLDEzIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNjcmVlblByb3BlcnRpZXNTdGEKICNlbmRpZgogfQogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5JiBX
ZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0
aFdlYnNpdGVEYXRhU3RvcmUpCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSopCiB7Ci0gICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFy
eSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhyZWFk
cy4KLSAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVhZGlu
ZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KLSAgICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigp
KSB7Ci0gICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2Vzcygp
OwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotICAgIH0K
LQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIGlmICh3aXRoV2Vic2l0ZURh
dGFTdG9yZSkgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtl
UmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICAgICAgd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
Km1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgYXV0byBuZXR3b3JrUHJvY2VzcyA9IG1h
a2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQcm94eT4oKnRoaXMpOwotCi0gICAgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRh
U3RvcmUpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5w
ZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3RvcihtX3dlYnNpdGVEYXRhU3RvcmUtPnBlbmRpbmdD
b29raWVzKCkpOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tp
ZXMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRp
b25CdW5kbGVJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5zb3VyY2VBcHBsaWNhdGlv
bkJ1bmRsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25TZWNv
bmRhcnlJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5zb3VyY2VBcHBsaWNhdGlvblNl
Y29uZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRpZgotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUt
Pm5ldHdvcmtpbmdIYXNCZWd1bigpOwotICAgIH0KLQotICAgIHBhcmFtZXRlcnMuY2FjaGVNb2Rl
bCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHNjaGVtZSA6IGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3Vz
dG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29r
aWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlRGlyZWN0b3J5Lmlz
RW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdy
aXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29va2llU3Rv
cmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcgY29udGFpbmVyQ2Fj
aGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3Rvcnko
KTsKLSAgICBpZiAoIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250
YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkgPSBX
ZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJlbnRC
dW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpS
ZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShlbXB0eVN0cmluZygpLCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2Vu
ZGlmCi0jZW5kaWYKLQotICAgIHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuaHN0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAg
ICBpZiAoIXBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpCi0gICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJh
bWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVy
ZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9u
KCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0
b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNC
eXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hl
bWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6
OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKLSAgICBwYXJhbWV0ZXJz
LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9i
YWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOwot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgLy8gKioqKioqKioqCi0gICAgLy8g
SU1QT1JUQU5UOiBEbyBub3QgY2hhbmdlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBpbmRl
eGVkIGRhdGFiYXNlcyBvbiBkaXNrIHdpdGhvdXQgZmlyc3QgY29uc3VsdGluZyBhIHJldmlld2Vy
IGZyb20gQXBwbGUgKDxyZGFyOi8vcHJvYmxlbS8xNzQ1NDcxMj4pCi0gICAgLy8gKioqKioqKioq
Ci0gICAgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0
cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwotICAgIAot
ICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRl
KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAg
ICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkU2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIGlmICghcGFyYW1ldGVycy5z
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQotICAgICAgICBwYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnksIHBhcmFtZXRlcnMuc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLQot
ICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93
ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExvY2FsU3RvcmFnZURpcmVjdG9yeSgpIDogbnVsbFN0
cmluZygpOwotICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQotICAgICAgICBsb2NhbFN0
b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRMb2NhbFN0
b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxT
dG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxv
Y2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBpZiAobV93ZWJzaXRl
RGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJl
Y3RvcnkoKTsKLSAgICBpZiAocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5p
c0VtcHR5KCkpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnkg
PSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5KCk7Ci0KLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFk
V3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAg
ICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBmYWxzZTsKLSAgICBib29sIGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBmYWxzZTsKLSAgICBi
b29sIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVlOwotICAgIGJvb2wgZW5hYmxlUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGZhbHNlOwotICAgIGJvb2wgZW5hYmxlVGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nID0gZmFsc2U7Ci0gICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4gbWFudWFsUHJldmFsZW50UmVzb3VyY2UgeyB9OwotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFT
dG9yZSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0
aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3RJblJlc291cmNlTG9hZFN0YXRp
c3RpY3M7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2Rl
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGU7Ci0gICAgICAgICAgICBlbmFibGVUaGlyZFBhcnR5Q29va2llQmxvY2tpbmcgPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxlVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nOwot
ICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5w
ZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3Rv
cmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3Jl
LT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIAotICAgICAgICBj
b25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+
cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2Fj
aGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURp
cmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNp
b246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7
Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xv
Z1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdD
YWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAg
ICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdEluUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKLSAgICAg
ICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZTsKLSAg
ICAgICAgICAgIGVuYWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2luZyA9IG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5lbmFibGVUaGlyZFBhcnR5Q29va2llQmxvY2tpbmc7Ci0gICAgICAgICAgICBt
YW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3Jh
Z2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0g
ICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0
eU9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9y
aWdpblN0b3JhZ2VRdW90YSgpOwotCi0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURp
cmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3Rv
cnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVj
dG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3Jr
Q2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
bmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhp
c3RzKCkpCi0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gV2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZCgpOwotICAgICAgICBhdXRvIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0
d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94
RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0gICAgfQotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyA9IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3M7Ci0gICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IGVuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQ7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2Fs
aG9zdEluUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0g
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGU7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxlVGhpcmRQYXJ0
eUNvb2tpZUJsb2NraW5nID0gZW5hYmxlVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nOwotICAgIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG1hbnVh
bFByZXZhbGVudFJlc291cmNlOwotCi0gICAgLy8gQWRkIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBw
YXJhbWV0ZXJzCi0gICAgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVy
cyk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBuZXR3b3JrIHByb2Nlc3MuCi0gICAgbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MocGFyYW1ldGVycyksIDApOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbmV0
d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRRT1MobmV0d29y
a1Byb2Nlc3NMYXRlbmN5UU9TKCksIG5ldHdvcmtQcm9jZXNzVGhyb3VnaHB1dFFPUygpKSwgMCk7
Ci0jZW5kaWYKLQotICAgIG5ldHdvcmtQcm9jZXNzLT51cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7
Ci0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdlYnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAg
d2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICB9Ci0KLSAg
ICAvLyBNYWtlIHN1cmUgdGhlIG5ldHdvcmsgcHJvY2VzcyBrbm93cyBhYm91dCBhbGwgdGhlIHNl
c3Npb25zIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYmVmb3JlIGl0IHN0YXJ0ZWQuCi0gICAg
Zm9yIChhdXRvJiBzZXNzaW9uSUQgOiBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAua2V5cygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhp
c3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqd2Vic2l0ZURhdGFTdG9yZSk7Ci0gICAg
fQotCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IFdURk1vdmUobmV0d29ya1Byb2Nlc3MpOwotICAg
IHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKKyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNz
Q3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1Byb3h5LCBWZWN0b3I8
c3RkOjpwYWlyPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1By
b3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseT4+JiYgcGVuZGlu
Z1JlcGxpZXMpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0
d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkKIHsKLSAgICBBU1NFUlQobV9u
ZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJvY2Vzc1Byb3h5ID09IG1fbmV0
d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBw
bGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+cHJvY2Vzc0RpZENsb3NlKCZu
ZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNjYyLDE2ICs0NTgsNiBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24p
CiAgICAgICAgIG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVh
dmUgdGhlIHByb2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0
aGUgY2xpZW50IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3
b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci0KLSAgICAvLyBBdHRlbXB0IHRvIHJlLWxhdW5jaC4KLSAg
ICBpZiAocGVuZGluZ1JlcGxpZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0
byYgbmV3TmV0d29ya1Byb2Nlc3MgPSBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIGZvciAo
YXV0byYgcmVwbHkgOiBwZW5kaW5nUmVwbGllcykKLSAgICAgICAgbmV3TmV0d29ya1Byb2Nlc3Mu
Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCpyZXBseS5maXJzdCwgV1RGTW92ZShyZXBseS5z
ZWNvbmQpKTsKLQogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICB3aGlsZSAoIW1fc2Vy
dmljZVdvcmtlclByb2Nlc3Nlcy5pc0VtcHR5KCkpCiAgICAgICAgIG1fc2VydmljZVdvcmtlclBy
b2Nlc3Nlcy5iZWdpbigpLT52YWx1ZS0+ZGlzYWJsZVNlcnZpY2VXb3JrZXJzKCk7CkBAIC02ODAs
MjQgKzQ2NiwxNSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoCiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9j
ZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKIHsKLSAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKLQot
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbih3ZWJQcm9j
ZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBXVEZN
b3ZlKHJlcGx5KSk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHksIFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0
cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBBU1NFUlRfVU5V
U0VEKHByb3h5LCAmcHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7Ci0KLSAgICBhdXRv
KiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7Ci0KLSAgICBpZiAoIXdlYnNpdGVEYXRh
U3RvcmUpIHsKLSAgICAgICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBt
X3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKS5wdHIoKTsKLSAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IG1fd2Vic2l0ZURhdGFT
dG9yZS5nZXQoKTsKLSAgICB9CisgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVE
YXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAg
aWYgKCF3ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7CiAKICAgICBSZWdp
c3RyYWJsZURvbWFpbldpdGhTZXNzaW9uSUQgcmVnaXN0cmFibGVEb21haW5XaXRoU2Vzc2lvbklE
IHsgUmVnaXN0cmFibGVEb21haW4geyByZWdpc3RyYWJsZURvbWFpbiB9LCBzZXNzaW9uSUQgfTsK
ICAgICBpZiAobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKHJlZ2lzdHJhYmxlRG9t
YWluV2l0aFNlc3Npb25JRCkpIHsKQEAgLTgyMCw3ICs1OTcsNyBAQCBSZWZQdHI8V2ViUHJvY2Vz
c1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6CiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShX
UEUpCiAgICAgLy8gSW4gcGxhdGZvcm1zIHVzaW5nIEJ1YmJsZXdyYXAgZm9yIHNhbmRib3hpbmcs
IHByZXdhcm1lZCBwcm9jZXNzIGlzIGxhdW5jaGVkIHVzaW5nIHRoZSBXZWJQcm9jZXNzUG9vbCBw
cmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUsCiAgICAgLy8gc28gd2UgZG9uJ3QgdXNlIGl0IGluIGNh
c2Ugb2YgdXNpbmcgYSBkaWZmZXJlbnQgV2Vic2l0ZURhdGFTdG9yZS4KLSAgICBpZiAobV9zYW5k
Ym94RW5hYmxlZCAmJiBtX3dlYnNpdGVEYXRhU3RvcmUgJiYgbV93ZWJzaXRlRGF0YVN0b3JlLmdl
dCgpICE9ICZ3ZWJzaXRlRGF0YVN0b3JlKQorICAgIGlmIChtX3NhbmRib3hFbmFibGVkKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgogCkBAIC0xMDk2LDkgKzg3Myw2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXUKICAgICAgICAgcHJvY2Vzcy0+Y29u
bmVjdGlvbigpLT5pZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoKTsKIAogICAgIG1fY29ubmVjdGlv
bkNsaWVudC5kaWRDcmVhdGVDb25uZWN0aW9uKHRoaXMsIHByb2Nlc3MtPndlYkNvbm5lY3Rpb24o
KSk7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBtX3dlYnNpdGVEYXRh
U3RvcmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKQEAgLTExOTcs
MTAgKzk3MSw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUKICAg
ICBpZiAoIXBhZ2VDb25maWd1cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCkpIHsKICAgICAgICAg
Ly8gV2UgdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHRoZSBkZWZhdWx0IGRhdGEgc3RvcmUgYXMgbG9u
ZyBhcyBwb3NzaWJsZS4KICAgICAgICAgLy8gQnV0IGlmIHRoZXJlIGlzIGFuIGF0dGVtcHQgdG8g
Y3JlYXRlIGEgd2ViIHBhZ2Ugd2l0aG91dCBhbnkgc3BlY2lmaWVkIGRhdGEgc3RvcmUsIHRoZW4g
d2UgaGF2ZSB0byBjcmVhdGUgaXQuCi0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlKQot
ICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0KLSAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24t
PnNldFdlYnNpdGVEYXRhU3RvcmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKKyAgICAgICAg
cGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCkpOwogICAgIH0KIAogICAgIFJlZlB0cjxX
ZWJQcm9jZXNzUHJveHk+IHByb2Nlc3M7CkBAIC0xMjcwLDE1ICsxMDQxLDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9z
ZXNzaW9uVG9QYWdlSURzTWFwLmFkZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIEhhc2hTZXQ8V2Vi
UGFnZVByb3h5SWRlbnRpZmllcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChwYWdlSUQpOwogICAg
IEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci0KLSAgICBhdXRvIHNl
c3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKLSAgICBpZiAoc2Vzc2lvbklEICE9IFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNTRVJUKCFzZXNz
aW9uSUQuaXNFcGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUucGFyYW1ldGVycygpLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKLSAgICAgICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24o
bWFrZVJlZihkYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIGRhdGFTdG9yZS5jbGVhclBlbmRpbmdD
b29raWVzKCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBh
Z2VFbmRVc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQs
IFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAgLTE0MTksNyArMTE4MSw3IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkKIAogUHJvY2Vzc0lEIFdlYlByb2Nlc3NQ
b29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQogewotICAgIHJldHVybiBtX25ldHdvcmtQ
cm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSA6IDA7CisgICAg
cmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnByb2Nlc3NJZGVudGlmaWVy
KCk7CiB9CiAKIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVkUHJvY2Vzc0lkZW50
aWZpZXIoKQpAQCAtMTU3MCwxNiArMTMzMiwxMyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRD
YWNoZU1vZGVsKENhY2hlCiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwsIHsgfSksIDApOworICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwsIHsgfSksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVNb2RlbCBjYWNo
ZU1vZGVsKQogewogICAgIHVwZGF0ZUJhY2tGb3J3YXJkQ2FjaGVDYXBhY2l0eSgpOwotCi0gICAg
aWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5j
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JU
ZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1v
ZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91
YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE1ODksNyArMTM0OCw3IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGkKIAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bv
b2w6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdl
KQogewotICAgIGF1dG8mIGRvd25sb2FkUHJveHkgPSBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNy
ZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0KTsKKyAgICBhdXRvJiBkb3dubG9h
ZFByb3h5ID0gZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFT
dG9yZSwgKnRoaXMsIHJlcXVlc3QpOwogICAgIGRvd25sb2FkUHJveHkuc2V0T3JpZ2luYXRpbmdQ
YWdlKG9yaWdpbmF0aW5nUGFnZSk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0x
NjY3LDI1ICsxNDI2LDExIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1vcnlTYW1wbGVy
KCkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0b3BNZW1v
cnlTYW1wbGVyKCkpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjp1c2VUZXN0aW5nTmV0d29y
a1Nlc3Npb24oKQotewotICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkpOwotICAgIEFT
U0VSVCghbV9uZXR3b3JrUHJvY2Vzcyk7Ci0KLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uID0gdHJ1ZTsK
LX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KQog
ewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRN
ZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2Fy
ZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7CisgICAgaWYgKE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNhblNlbmRNZXNzYWdlKCkpCisgICAgICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPiht
ZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wgYWxsb3dz
KQpAQCAtMTY5NSw4ICsxNDQwLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55
U1NMQ2VydAogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkK
IHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKSwg
MCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKSwgMCk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKQEAgLTE3MDUsMjQgKzE0
NDksMTcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29ya1BybwogICAgIHdo
aWxlICghbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmlzRW1wdHkoKSkKICAgICAgICAgbV9zZXJ2
aWNlV29ya2VyUHJvY2Vzc2VzLmJlZ2luKCktPnZhbHVlLT5kaXNhYmxlU2VydmljZVdvcmtlcnMo
KTsKICNlbmRpZgotCi0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0gICAgbV9uZXR3b3Jr
UHJvY2VzcyA9IG51bGxwdHI7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRO
ZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQogewotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vz
c1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rp
bmcoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVz
dW1lKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkKQEAgLTE3NDcsMTUgKzE0ODQs
MTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3luY0xvY2FsU3RvcmFnZShDbwogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpjbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgp
LCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2Uo
KSwgMCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRpZmlj
YXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBlbnN1cmVO
ZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlm
aWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3Bl
Y2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZv
KCksIGhvc3QpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXV0b21hdGlv
bkNhcGFiaWxpdGllcygpIGNvbnN0CkBAIC0yMjgxLDEwICsyMDE3LDcgQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6Y2xlYXJDdXJyZW50TW9kaWZpZQogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0
aERhdGFUcmFuc2ZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9w
dGlvblNldDxDcm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiBuYXZpZ2F0aW9u
RGF0YVRyYW5zZmVyLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlELCBQYWdl
SWRlbnRpZmllciB3ZWJQYWdlSUQpCiB7Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRDb21taXRDcm9zc1NpdGVM
b2FkV2l0aERhdGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRvRG9tYWluLCBuYXZp
Z2F0aW9uRGF0YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlEKTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERh
dGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRvRG9tYWluLCBuYXZpZ2F0aW9uRGF0
YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5nKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
dGhpcmRQYXJ0eURvbWFpbiwgYm9vbCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjMxMCw4ICsyMDQz
LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0V2ViUHJvY2Vzc0hhc1VwbAogICAgIGlmICht
X3Byb2Nlc3Nlc1dpdGhVcGxvYWRzLmlzRW1wdHkoKSkgewogICAgICAgICBSRUxFQVNFX0xPRyhQ
cm9jZXNzU3VzcGVuc2lvbiwgIlRoZSBudW1iZXIgb2YgdXBsb2FkcyBpbiBwcm9ncmVzcyBpcyBu
b3cgb25lLiBUYWtpbmcgTmV0d29ya2luZyBhbmQgVUkgcHJvY2VzcyBhc3NlcnRpb25zLiIpOwog
Ci0gICAgICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKLSAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+dGFrZVVwbG9hZEFzc2VydGlvbigpOworICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS50YWtlVXBsb2FkQXNzZXJ0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBB
U1NFUlQoIW1fdWlQcm9jZXNzVXBsb2FkQXNzZXJ0aW9uKTsKICAgICAgICAgbV91aVByb2Nlc3NV
cGxvYWRBc3NlcnRpb24gPSBtYWtlVW5pcXVlPFByb2Nlc3NBc3NlcnRpb24+KGdldEN1cnJlbnRQ
cm9jZXNzSUQoKSwgIldlYktpdCB1cGxvYWRzIl9zLCBBc3NlcnRpb25TdGF0ZTo6VW5ib3VuZGVk
TmV0d29ya2luZyk7CkBAIC0yMzM2LDggKzIwNjgsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpj
bGVhcldlYlByb2Nlc3NIYXNVCiAgICAgaWYgKG1fcHJvY2Vzc2VzV2l0aFVwbG9hZHMuaXNFbXB0
eSgpKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTdXNwZW5zaW9uLCAiVGhlIG51bWJl
ciBvZiB1cGxvYWRzIGluIHByb2dyZXNzIGlzIG5vdyB6ZXJvLiBSZWxlYXNpbmcgTmV0d29ya2lu
ZyBhbmQgVUkgcHJvY2VzcyBhc3NlcnRpb25zLiIpOwogCi0gICAgICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+Y2xlYXJVcGxvYWRBc3NlcnRp
b24oKTsKKyAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuY2xlYXJVcGxv
YWRBc3NlcnRpb24oKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChtX3VpUHJvY2Vzc1VwbG9h
ZEFzc2VydGlvbik7CiAgICAgICAgIG1fdWlQcm9jZXNzVXBsb2FkQXNzZXJ0aW9uID0gbnVsbHB0
cjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkocmV2aXNp
b24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAko
d29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNiBAQCBPQkpDX0NMQVNTIE5TU3RyaW5nOwogCiBu
YW1lc3BhY2UgQVBJIHsKIGNsYXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQ7CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNsYXNzIEhUVFBDb29r
aWVTdG9yZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTc0LDcgKzE3Myw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6
TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0RG93bmxvYWRDbGll
bnQoVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0QXV0b21h
dGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAg
ICB2b2lkIHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRD
dXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAg
ICAgY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIo
KSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxl
SWRlbnRpZmllcigpOyB9CkBAIC0yMDUsOSArMjAzLDYgQEAgcHVibGljOgogICAgIC8vIERpc2Nv
bm5lY3QgdGhlIHByb2Nlc3MgZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQ
cm9jZXNzKFdlYlByb2Nlc3NQcm94eSopOwogCi0gICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
KiB3ZWJzaXRlRGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdl
dCgpOyB9Ci0gICAgdm9pZCBzZXRQcmltYXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZSYgZGF0YVN0b3JlKSB7IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7IH0KLQog
ICAgIFJlZjxXZWJQYWdlUHJveHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6
OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsKIAogICAgIHZvaWQgcGFnZUJlZ2luVXNpbmdXZWJzaXRl
RGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYnNpdGVEYXRhU3RvcmUmKTsKQEAg
LTMwNCw4ICsyOTksNiBAQCBwdWJsaWM6CiAgICAgQVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNs
aWVudCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJuICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBX
ZWJDb250ZXh0Q2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJ
OjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCgpIGNvbnN0IHsgcmV0dXJuICptX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAg
ICAgc3RydWN0IFN0YXRpc3RpY3MgewogICAgICAgICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAg
ICAgICAgdW5zaWduZWQgd2tQYWdlQ291bnQ7CkBAIC0zMTMsOSArMzA2LDYgQEAgcHVibGljOgog
ICAgIH07CiAgICAgc3RhdGljIFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MoKTsgICAgCiAKLSAgICB2
b2lkIHVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwotICAgIGJvb2wgaXNVc2luZ1Rlc3RpbmdO
ZXR3b3JrU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtT
ZXNzaW9uOyB9Ci0KICAgICB2b2lkIHNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29j
a2V0KGJvb2wpOwogCiAgICAgdm9pZCBjbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7CkBAIC0zODIs
OCArMzcyLDggQEAgcHVibGljOgogCiAgICAgLy8gTmV0d29yayBQcm9jZXNzIE1hbmFnZW1lbnQK
ICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBlbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0
YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSA9IG51bGxwdHIpOwotICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzKCkgeyByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy5nZXQo
KTsgfQotICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkm
LCBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+LCBNZXNzYWdlczo6V2Vi
UHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHk+PiYm
KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcygpIHsgcmV0dXJuICZO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsgfQorICAgIHZvaWQgbmV0d29ya1Byb2Nl
c3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAogICAgIHZvaWQgZ2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJv
eHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIApAQCAtNTI4
LDYgKzUxOCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzKGJvb2wpOwogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQog
CisgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKKyAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4g
dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCk7CisKKyNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQorICAgIHN0YXRpYyBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOwor
ICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0
cmluZyBuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyB3ZWJD
b250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1w
b3JhcnlEaXJlY3RvcnkoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1J
bml0aWFsaXplKCk7CiAKQEAgLTU0Myw4ICs1NDQsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBy
ZXF1ZXN0V2ViQ29udGVudFN0YXRpc3RpY3MoU3RhdGlzdGljc1JlcXVlc3QmKTsKIAotICAgIHZv
aWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMmKTsKLQogICAgIHZvaWQgaGFuZGxlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHkp
OwogICAgIHZvaWQgaGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJik7CiAKQEAgLTU2OSwxNCArNTY4LDYg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdXNlc1NpbmdsZVdlYlByb2Nlc3MoKSBjb25zdCB7IHJl
dHVybiBtX2NvbmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVXZWJQcm9jZXNzKCk7IH0KIAotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0
b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBz
dGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3Ry
aW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnRh
aW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CiAgICAgdm9pZCB1bnJl
Z2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBAIC02MjcsNyArNjE4LDYgQEAgcHJpdmF0
ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1dG9tYXRp
b25DbGllbnQ7CiAgICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93bmxvYWRD
bGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGll
bnQ+IG1faGlzdG9yeUNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogCiAgICAg
UmVmUHRyPFdlYkF1dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwogCkBAIC02
NTksOCArNjQ5LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQg
eyBmYWxzZSB9OwogICAgIGRvdWJsZSBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCB7IDE0MDAuMCB9
OwogCi0gICAgUmVmUHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0
b3JlOwotCiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBSZWZQdHI8V2ViQ29udGV4
dFN1cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gV2ViQ29udGV4dFN1cHBsZW1lbnRN
YXA7CiAgICAgV2ViQ29udGV4dFN1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKIApAQCAtNjk0
LDggKzY4Miw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5h
YmxlZCB7IHRydWUgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5
PiBtX25ldHdvcmtQcm9jZXNzOwotCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPERpY3Rp
b25hcnlDYWxsYmFjaz4+IG1fZGljdGlvbmFyeUNhbGxiYWNrczsKICAgICBIYXNoTWFwPHVpbnQ2
NF90LCBSZWZQdHI8U3RhdGlzdGljc1JlcXVlc3Q+PiBtX3N0YXRpc3RpY3NSZXF1ZXN0czsKIApA
QCAtNzk1LDE1ICs3ODEsMTUgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKIHsK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVz
c2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPiht
ZXNzYWdlKSwgMCk7CisgICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNh
blNlbmRNZXNzYWdlKCkpCisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVu
Y2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSkKIHsKICAgICBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2Up
LCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKHN0ZDo6Zm9y
d2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhU
VFBDb29raWVTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDYgQEAgbmFtZXNw
YWNlIEFQSSB7CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3
ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQ
b29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQ
cm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENv
b2tpZVN0b3JlKCkKQEAgLTQ5LDEwNCArNDcsNDAgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENv
b2tpZVN0b3JlKCkKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NF
UlQoIW1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVN
YW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xO
b3RpZmljYXRpb25zKCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnBy
b2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsK
LSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gYWxsQ29va2llczsKLSAgICAgICAgaWYg
KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKQotICAgICAgICAgICAgYWxsQ29va2llcyA9IGdldEFsbERlZmF1bHRVSVBy
b2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKLSAgICAgICAgYWxsQ29va2llcy5hcHBlbmRWZWN0
b3IobV9vd25pbmdEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotCi0gICAgICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSwgYWxsQ29va2llc10gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihhbGxDb29raWVzKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRBbGxDb29r
aWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3Bvb2wgPSBXVEZNb3ZlKHBvb2wp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNv
b2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7
CisgICAgY29va2llTWFuYWdlci5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvb2tpZXMpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBD
b29raWVTdG9yZTo6c2V0Q29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29v
a2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVT
dG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBmb3IgKGF1dG8m
IGNvb2tpZSA6IGNvb2tpZXMpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2ll
cyB1c2VkIGZvciBkZWZhdWx0U2Vzc2lvbiBiZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3Qg
YmUgcHJvcGFnYXRlZCB0byBOZXR3b3JrIFByb2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9y
YWdlSWRlbnRpZmllci4KLSAgICAgICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lv
bklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNl
c3Npb24pCi0gICAgICAgICAgICAgICAgc2V0Q29va2llSW5EZWZhdWx0VUlQcm9jZXNzQ29va2ll
U3RvcmUoY29va2llKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX293bmlu
Z0RhdGFTdG9yZS0+YWRkUGVuZGluZ0Nvb2tpZShjb29raWUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29s
LT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tp
ZU1hbmFnZXItPnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29r
aWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2llTWFuYWdlci5zZXRDb29raWVz
KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llcywgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNv
bnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAg
ICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5yZW1vdmVQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBb
cG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZShtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byog
cG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVy
YXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBkZWxldGVDb29raWVz
SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBhdXRvJiBjb29r
aWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwor
ICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBUaGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJl
IHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViS2l0
OjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFT
dG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICgh
cG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0Vw
aGVtZXJhbCgpKQotICAgICAgICAgICAgc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeUluRGVmYXVs
dFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKHBvbGljeSk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6
OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29v
a2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsK
KyAgICBjb29raWVNYW5hZ2VyLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRh
U3RvcmUtPnNlc3Npb25JRCgpLCBwb2xpY3ksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogY2xhc3MgQVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIgOiBwdWJsaWMgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpPYnNlcnZlciB7CkBAIC0xODIsMjEgKzExNiw3IEBAIHZvaWQg
SFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKE8KIAogICAgIG1fY29va2llTWFuYWdl
clByb3h5T2JzZXJ2ZXIgPSBtYWtlVW5pcXVlPEFQSVdlYkNvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyPigqdGhpcyk7CiAKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLQotICAgIGlmICghcG9vbCkgewot
ICAgICAgICBBU1NFUlQoIW1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyk7Ci0KLSAgICAgICAg
Ly8gTGlzdGVuIGZvciBjb29raWUgbm90aWZpY2F0aW9ucyBpbiB0aGUgVUlQcm9jZXNzIGluIHRo
ZSBtZWFudGltZS4KLSAgICAgICAgc3RhcnRPYnNlcnZpbmdDaGFuZ2VzVG9EZWZhdWx0VUlQcm9j
ZXNzQ29va2llU3RvcmUoW3RoaXNdICgpIHsKLSAgICAgICAgICAgIGNvb2tpZXNEaWRDaGFuZ2Uo
KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzID0g
dHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5h
Z2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAq
bV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKQEAgLTIzMSw0NiArMTUxLDEwIEBA
IHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRGlkQ2hhbmdlKCkKIHZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKCkKIHsKICAgICBtX29ic2VydmVkQ29va2ll
TWFuYWdlclByb3h5LT51bnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Np
b25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAgbV9vYnNlcnZlZENv
b2tpZU1hbmFnZXJQcm94eSA9IG51bGxwdHI7Ci0KLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdE
YXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLQotICAg
IGlmICghcG9vbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQ
cm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICpt
X2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIAotdm9pZCBIVFRQQ29va2llU3RvcmU6
OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBBU1NFUlQo
IW1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nl
c3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0
ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIoW3RoaXNdKFdlYlByb2Nlc3NQb29sJiBuZXdQ
cm9jZXNzUG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5pc0Fzc29jaWF0
ZWRQcm9jZXNzUG9vbChuZXdQcm9jZXNzUG9vbCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgLy8gTm93IHRoYXQgYW4gYXNzb2NpYXRlZCBwcm9jZXNzIHBvb2wgZXhpc3RzLCB3ZSBu
ZWVkIHRvIGZsdXNoIHRoZSBVSSBwcm9jZXNzIGNvb2tpZSBzdG9yZQotICAgICAgICAvLyB0byBt
YWtlIHN1cmUgYW55IGNoYW5nZXMgYXJlIHJlZmxlY3RlZCB3aXRoaW4gdGhlIG5ldyBwcm9jZXNz
IHBvb2wuCi0gICAgICAgIGZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAg
ICAgIG5ld1Byb2Nlc3NQb29sLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0KLSAgICAgICAgaWYg
KG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpIHsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRD
b29raWVNYW5hZ2VyUHJveHkgPSBuZXdQcm9jZXNzUG9vbC5zdXBwbGVtZW50PFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5PigpOwotICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
ICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICAgICAgfQotICAgICAgICB1bnJl
Z2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgSFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRp
b25zKCkKLXsKLSAgICBpZiAobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVy
KQotICAgICAgICBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25M
aXN0ZW5lcihtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAg
bV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gMDsKLX0KLQogI2lmICFQ
TEFURk9STShDT0NPQSkKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmbHVzaERlZmF1bHRVSVByb2Nl
c3NDb29raWVTdG9yZSgpIHsgfQogVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gSFRUUENvb2tpZVN0
b3JlOjpnZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCkgeyByZXR1cm4g
eyB9OyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0
b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBD
b29raWVTdG9yZS5oCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDYg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmlj
YXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRp
b25zKCk7Ci0KICAgICBzdGF0aWMgdm9pZCBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9y
ZSgpOwogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0VUlQ
cm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Q29va2llSW5E
ZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJldmlzaW9u
IDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyNiw5ICs0MjYsOSBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5l
Y3RUb1NlcnZlcihXS0NvbnRlCiB7CiB9CiAKLVdLQ29va2llTWFuYWdlclJlZiBXS0NvbnRleHRH
ZXRDb29raWVNYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQorV0tDb29raWVNYW5hZ2Vy
UmVmIFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmKQogewotICAgIHJldHVy
biBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zdXBwbGVtZW50PFdl
YktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQ
SSgmV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpKTsKIH0KIAogV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0
UmVmKQpAQCAtNTQ1LDkgKzU0NSw4IEBAIHZvaWQgV0tDb250ZXh0U2V0SmF2YVNjcmlwdEdhcmJh
Z2VDb2xsZWMKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdh
cmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRV
c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpCit2b2lkIFdLQ29u
dGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYpCiB7Ci0gICAgV2ViS2l0
Ojp0b0ltcGwoY29udGV4dCktPnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwogfQogCiB2b2lk
IFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhX
S0NvbnRleHRSZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiAyNTIyNzQp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0
QWxsb3dzQW55U1NMQwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCiAv
LyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBzZWNvbmRhcnkgcHJvY2Vz
c2VzIGFyZSBzdGFydGVkLgotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VXNlVGVzdGluZ05ldHdv
cmtTZXNzaW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKK1dLX0VYUE9SVCB2b2lkIFdLQ29udGV4
dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElf
REVQUkVDQVRFRDsKIAogLy8gVGVzdCBvbmx5LiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBydW5u
aW5nIGEgdGVzdC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoV0tDb250ZXh0UmVmIGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0JKHJldmlzaW9uIDI1MjI3NCkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAgc3RhdGljIFdlYktpdDo6SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSB0bwogCiAtICh2b2lkKV9zZXRDb29raWVBY2NlcHRQb2xpY3k6KE5TSFRUUENv
b2tpZUFjY2VwdFBvbGljeSlwb2xpY3kKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0
UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwg
W10oKSB7IH0pOwogfQogCiAtIChpZClfb2JqZWN0Rm9yQnVuZGxlUGFyYW1ldGVyOihOU1N0cmlu
ZyAqKXBhcmFtZXRlcgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0Q29va2llTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Myw4ICs2Myw3IEBAIHN0cnVjdCBfV2ViS2l0Q29va2llTWFu
YWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSgpCiAgICAg
ewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29s
LT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJD
YWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwg
bnVsbHB0cik7CiAgICAgfQogCiAgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFu
YWdlcjsKQEAgLTE0MCwxMSArMTM5LDkgQEAgV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0Q29v
a2llTWFuYWdlcgogewogICAgIFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRf
Q09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBu
dWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsK
LSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0
UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9j
ZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9i
c2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0g
ICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwot
ICAgICAgICB9KTsKLSAgICB9CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24o
KS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBb
bWFuYWdlcl0geworICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdF
RF0sIDApOworICAgIH0pOwogICAgIHJldHVybiBtYW5hZ2VyOwogfQogCkBAIC0xNzQsOCArMTcx
LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbgogICAgIGlmIChz
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRv
KiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyht
YW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVt
ZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uo
c2Vzc2lvbklELCBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lz
dGVudFN0b3JhZ2VUeXBlKHN0b3JhZ2UpKTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNp
bmdsZXRvbigpLnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgU3RyaW5nOjpm
cm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZShzdG9y
YWdlKSk7CiB9CiAKIC8qKgpAQCAtMTg5LDggKzE4NSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX3NldF9hY2NlcHRfcG8KIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19D
T09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDog
d2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRh
dGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFu
YWdlclByb3h5PigpLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOwor
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSksIFtdKCkgeyB9KTsKIH0KIAogLyoqCkBAIC0yMTEsMTQgKzIwNiw3IEBAIHZv
aWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG8KIAogICAgIEdSZWZQdHI8R1Rh
c2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2Fs
bGJhY2ssIHVzZXJEYXRhKSk7CiAKLSAgICAvLyBUaGUgcG9saWN5IGlzIHRoZSBzYW1lIGluIGFs
bCBwcm9jZXNzIHBvb2xzIGhhdmluZyB0aGUgc2FtZSBzZXNzaW9uIElELCBzbyBqdXN0IGFzayBh
bnkuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBpZiAo
cHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewotICAgICAgICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNr
LmdldCgpLCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdl
YkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShIVFRQQ29va2llQWNj
ZXB0UG9saWN5IHBvbGljeSkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9u
KCkuZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwg
W3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgewog
ICAgICAgICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCB0b1dlYktpdENvb2tpZUFjY2Vw
dFBvbGljeShwb2xpY3kpKTsKICAgICB9KTsKIH0KQEAgLTI2MywxMSArMjUxLDcgQEAgdm9pZCB3
ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShXZQogICAgIGdfcmV0dXJuX2lmX2ZhaWwo
Y29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25l
dyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBD
b29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ug
b24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0g
ZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRv
JiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMo
bWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxl
bWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZXMobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sgPSBXVEZNb3Zl
KHRhc2spXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENv
b2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tp
ZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9i
b29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzE0LDExICsyOTgsNyBA
QCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXCiAgICAgZ19yZXR1cm5f
aWZfZmFpbCh1cmkpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rh
c2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAg
IC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRh
YmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3Mg
dGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0
IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQ
b29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5z
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llcyhtYW5hZ2VyLT5w
cml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBbdGFz
ayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVz
KSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5nZXRDb29raWVzKG1h
bmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJp
KSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4m
IGNvb2tpZXMpIHsKICAgICAgICAgR0xpc3QqIGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAg
ICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29raWVzKQogICAgICAgICAgICAgY29va2llc0xpc3Qg
PSBnX2xpc3RfcHJlcGVuZChjb29raWVzTGlzdCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAg
LTM3MiwxMSArMzUyLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tp
ZQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRh
c2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ss
IHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0
aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhl
IHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nl
c3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0
YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAg
IHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRl
bGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNv
b2tpZSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpzaW5nbGV0b24oKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgewogICAg
ICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRXZWJDb250ZXh0LmNwcAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
NCw3ICszNzQsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoCiAg
ICAgICAgIFdlYktpdDo6TGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNldEhTVFNT
dG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24od2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9oc3RzX2NhY2hlX2RpcmVjdG9y
eShwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpKSk7CiAKICAgICBwcml2LT5wcm9jZXNz
UG9vbCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbik7Ci0gICAgcHJpdi0+
cHJvY2Vzc1Bvb2wtPnNldFByaW1hcnlEYXRhU3RvcmUod2Via2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
R2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpOwogICAgIHByaXYt
PnByb2Nlc3NQb29sLT5zZXRVc2VyTWVzc2FnZUhhbmRsZXIoW3dlYkNvbnRleHRdKFVzZXJNZXNz
YWdlJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyTWVzc2FnZSYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikgewogICAgICAgICAvLyBTaW5rIHRoZSBmbG9hdGluZyByZWYuCiAg
ICAgICAgIEdSZWZQdHI8V2ViS2l0VXNlck1lc3NhZ2U+IHVzZXJNZXNzYWdlID0gd2Via2l0VXNl
ck1lc3NhZ2VDcmVhdGUoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0
aW9uU2Vzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzU3LDggKzEzNTcsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjphZGRTaW5nbGVDb29rCiAgICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigi
aHR0cE9ubHkiX3MsIGNvb2tpZS5odHRwT25seSkpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9Q
UkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1l
dGVyICdodHRwT25seScgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldENvb2tpZXMocGFnZS0+d2Vi
c2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2sgPSBjYWxs
YmFjay5jb3B5UmVmKCldKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9u
KCkuc2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29v
a2llIH0sIFtjYWxsYmFjayA9IGNhbGxiYWNrLmNvcHlSZWYoKV0oKSB7CiAgICAgICAgIGNhbGxi
YWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTM3NCw4ICsxMzczLDcgQEAgdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29vawogCiAgICAgU3RyaW5nIGhvc3Qg
PSBhY3RpdmVVUkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5h
bWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5C
eUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCkuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRl
RGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJ
Zk5lZWRlZChob3N0KSB9KTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0U2Vz
c2lvblBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4mIG91dF9w
ZXJtaXNzaW9ucykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nl
c3NQb29sQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDggKzEwOCw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZO
ZWVkZWQKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3Rh
dGUoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJs
ZWQoKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0UHJvY2Vzc1N1
cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpOwogCiAjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRp
c2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTEzOSw4ICsxMzgsNiBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoCiAKICAgICBpZiAoIVtbTlNVc2VyRGVm
YXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJXZWJLaXRTdXBwcmVzc01l
bW9yeVByZXNzdXJlSGFuZGxlciJdKQogICAgICAgICBpbnN0YWxsTWVtb3J5UHJlc3N1cmVIYW5k
bGVyKCk7Ci0KLSAgICBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVu
aXF1ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpOwogfQogCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTI3MywyMyArMjcwLDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cGxhdGZvcm1Jbml0aWFsaXplTgogCiAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0g
W05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKIAotICAgIHsKLSAgICAgICAg
Ym9vbCBpc1NhZmFyaSA9IGZhbHNlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAg
IGlzU2FmYXJpID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCk7Ci0j
ZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGlj
YXRpb246OmlzU2FmYXJpKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGlzU2FmYXJpKSB7Ci0gICAg
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JL
ZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihO
U1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAg
IH0KLQogICAgIHBhcmFtZXRlcnMuZW5hYmxlTGVnYWN5VExTID0gdHJ1ZTsKICAgICBpZiAoaWQg
dmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OkAiV2ViS2l0RW5hYmxlTGVnYWN5VExTIl0p
CiAgICAgICAgIHBhcmFtZXRlcnMuZW5hYmxlTGVnYWN5VExTID0gW3ZhbHVlIGJvb2xWYWx1ZV07
Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuZW5hYmxlTGVnYWN5VExTID0gcGFyYW1ldGVycy5lbmFibGVMZWdhY3lUTFM7
CiAKICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihfQ0ZOZXR3b3Jr
Q29weUFUU0NvbnRleHQoKSk7CiAKQEAgLTMwMSw4ICsyODQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAgcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVT
dG9yYWdlSWRlbnRpZmllciA9IGlkZW50aWZ5aW5nRGF0YUZyb21Db29raWVTdG9yYWdlKFtbTlNI
VFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gX2Nvb2tpZVN0b3JhZ2Vd
KTsKICNlbmRpZgogCi0gICAgcGFyYW1ldGVycy5zdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IHN0
b3JhZ2VBY2Nlc3NBUElFbmFibGVkKCk7Ci0KICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlU
UERhdGFiYXNlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJJbnRlcm5hbERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVu
YWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07CiAKICAgICBwYXJhbWV0ZXJzLmVu
YWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSA9IFtkZWZhdWx0cyBib29sRm9yS2V5OltO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRXhwZXJpbWVudGFsJUAiLCBXZWJQcmVmZXJlbmNl
c0tleTo6YWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3Ry
aW5nKCkuZ2V0KCldXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA5LDkgKzEwOSw2IEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93
bmxvYWRGaW5pc2hlZCgKIAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3du
bG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxv
YWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhv
bGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBw
cm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgp
KTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKICAg
ICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMu
aCIKICNlbmRpZgorI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC01MCw3
ICs1MSw2IEBACiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Bvb2wuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oIgpAQCAtNjksNiArNjksMTAgQEAKICNpbmNsdWRlIDx3dGYvc3BpL2Rhcndp
bi9YUENTUEkuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2RlZmluZSBNRVNT
QUdFX0NIRUNLKGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgY29ubmVj
dGlvbigpKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTgxLDE4ICs4NSw4MyBAQCBzdGF0aWMg
dWludDY0X3QgZ2VuZXJhdGVDYWxsYmFja0lEKCkKICAgICByZXR1cm4gKytjYWxsYmFja0lEOwog
fQogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQ
b29sJiBwcm9jZXNzUG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9jZXNzUG9v
bC5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vzc1Bvb2wo
cHJvY2Vzc1Bvb2wpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+
JiBnbG9iYWxOZXR3b3JrUHJvY2VzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0
ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gbmV0d29ya1Byb2Nlc3M7CisgICAg
cmV0dXJuIG5ldHdvcmtQcm9jZXNzOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKQoreworICAgIGlmICghZ2xvYmFsTmV0d29ya1Byb2Nl
c3MoKSkgeworICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpID0gbWFrZVVuaXF1ZTxOZXR3
b3JrUHJvY2Vzc1Byb3h5PigpOworICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpLT5zZW5k
Q3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgfQorICAgIHJldHVybiAqZ2xv
YmFsTmV0d29ya1Byb2Nlc3MoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphdHRl
bXB0UmVsYXVuY2hBZnRlckNyYXNoSWZOZWNlc3NhcnkoVmVjdG9yPHN0ZDo6cGFpcjxSZWY8V2Vi
UHJvY2Vzc1Byb3h5PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uRGVsYXllZFJlcGx5Pj4mJiBwZW5kaW5nUmVxdWVzdHMpCit7CisgICAgZ2xv
YmFsTmV0d29ya1Byb2Nlc3MoKSA9IG51bGxwdHI7CisgICAgaWYgKHBlbmRpbmdSZXF1ZXN0cy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBuZXdOZXR3b3JrUHJvY2VzcyA9
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOworICAgIGZvciAoYXV0byYgcmVxdWVz
dCA6IHBlbmRpbmdSZXF1ZXN0cykKKyAgICAgICAgbmV3TmV0d29ya1Byb2Nlc3MuZ2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKHJlcXVlc3QuZmlyc3QuZ2V0KCksIFdURk1vdmUocmVxdWVzdC5z
ZWNvbmQpKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJh
bWV0ZXJzVG9OZXdQcm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1
c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCisgICAgLy8gV2Ugc2hvdWxkIHJl
bW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91
ciBBUElzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDAyNDYuCisgICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgeworICAgICAgICBjYWxsT25NYWlu
UnVuTG9vcEFuZFdhaXQoW3RoaXNdIHsKKyAgICAgICAgICAgIHNlbmRDcmVhdGlvblBhcmFtZXRl
cnNUb05ld1Byb2Nlc3MoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCisgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0g
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnkoKTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJl
Y3RvcnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OworI2VuZGlmCisgICAgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IExlZ2FjeUds
b2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5oc3RzU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGlm
ICghcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkKKyAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRl
cnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1Nl
Y3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2No
ZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdp
c3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNj
aGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOworICAgIHBh
cmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5j
YWNoZU1vZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJs
U2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAgIHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7Cisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2ll
U3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBw
YXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlm
IChTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdv
cmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5
KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURp
cmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2Fj
aGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBhcmVudEJ1bmRs
ZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsgIXBh
cmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0
ZXJzID0gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBh
cmFtZXRlcnMpLCAwKTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQ
cm94eSgpCisgICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHkoKQogI2lmIEVOQUJMRShMRUdBQ1lf
Q1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCiAgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlclBy
b3h5KCp0aGlzKQogI2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wu
c2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV90aHJvdHRsZXIoKnRo
aXMsIGZhbHNlKQorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICwgbV9jdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQobWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+
KCkpCisjZW5kaWYKIHsKICAgICBjb25uZWN0KCk7Ci0KLSAgICBpZiAoYXV0byogd2Vic2l0ZURh
dGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKQotICAgICAgICBtX3dl
YnNpdGVEYXRhU3RvcmVzLnNldCh3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbWFrZVJl
Zigqd2Vic2l0ZURhdGFTdG9yZSkpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29y
a1Byb2Nlc3NQcm94eSgpCkBAIC0xMTYsMTEgKzE4NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6Z2V0TGF1bmNoT3B0aW8KIHsKICAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0g
UHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBBdXhpbGlhcnlQcm9j
ZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7Ci0KLSAgICBpZiAocHJv
Y2Vzc1Bvb2woKS5zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmcoKSkgewotICAgICAgICBwcm9jZXNzUG9vbCgpLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1By
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhmYWxzZSk7Ci0gICAgICAgIGxhdW5jaE9wdGlvbnMu
c2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7Ci0gICAgfQogfQog
CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24pCkBAIC0xODEsMTIgKzI0NSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJCiAgICAgfQogfQogCi1Eb3dubG9hZFByb3h5JiBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRh
dGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCitEb3dubG9h
ZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVE
YXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsKICAgICBpZiAoIW1fZG93bmxvYWRQ
cm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwID0gbWFrZVVuaXF1ZTxEb3dubG9h
ZFByb3h5TWFwPigqdGhpcyk7CiAKLSAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVh
dGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgbV9wcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0
KTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KGRh
dGFTdG9yZSwgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCk7CiB9CiAKIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoV2Vi
c2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjQ3LDE4ICszMTEsMjAgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpuZXR3b3JrUHJvY2VzcwogewogICAgIGNsZWFyQ2FsbGJh
Y2tTdGF0ZXMoKTsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVmUHRyPFdlYlByb2Nlc3NQcm94
eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bjo6RGVsYXllZFJlcGx5Pj4gcGVuZGluZ1JlcXVlc3RzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8
UmVmPFdlYlByb2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5Pj4gcGVuZGluZ1JlcXVlc3RzOwogICAg
IHBlbmRpbmdSZXF1ZXN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY29ubmVjdGlvblJlcXVl
c3RzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDogbV9jb25uZWN0aW9uUmVxdWVz
dHMudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKHJlcXVlc3Qud2ViUHJvY2VzcykKLSAgICAgICAg
ICAgIHBlbmRpbmdSZXF1ZXN0cy51bmNoZWNrZWRBcHBlbmQoc3RkOjptYWtlX3BhaXIobWFrZVJl
ZlB0cihyZXF1ZXN0LndlYlByb2Nlc3MuZ2V0KCkpLCBXVEZNb3ZlKHJlcXVlc3QucmVwbHkpKSk7
CisgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMudW5jaGVja2VkQXBwZW5kKHsgKnJlcXVlc3Qu
d2ViUHJvY2VzcywgV1RGTW92ZShyZXF1ZXN0LnJlcGx5KSB9KTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgcmVxdWVzdC5yZXBseSh7IH0pOwogICAgIH0KICAgICBtX2Nvbm5lY3Rpb25SZXF1
ZXN0cy5jbGVhcigpOwotCi0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIg
dG8gZm9yZ2V0IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1
c2UgdXMgdG8gYmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jh
c2hlZCgqdGhpcywgV1RGTW92ZShwZW5kaW5nUmVxdWVzdHMpKTsKKyAgICAKKyAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAg
ICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICAKKyAg
ICBhdHRlbXB0UmVsYXVuY2hBZnRlckNyYXNoSWZOZWNlc3NhcnkoV1RGTW92ZShwZW5kaW5nUmVx
dWVzdHMpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3Rh
dGVzKCkKQEAgLTI3OCw5ICszNDQsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVNZXNzCiAgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wuZGlzcGF0Y2hNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpKQotICAgICAgICByZXR1cm47Ci0KICAgICBkaWRSZWNlaXZl
TmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKQEAg
LTI5NCw4ICszNTcsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVTeW5j
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikK
IHsKLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3Byb2Nlc3NQb29s
KTsKLQogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94
eU1hcC0+aW52YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01B
TkFHRVIpCkBAIC0zNTAsMTEgKzQxMSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZUF1dGgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2lu
IHx8ICFtX3Byb2Nlc3NQb29sLmlzU2VydmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAg
ICAgIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0
aGVudGljYXRpb25DaGFsbGVuZ2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdl
YlBhZ2VQcm94eTo6Zm9yTW9zdFZpc2libGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3Jp
Z2luLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSA9IFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpXShh
dXRvKiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTQwMSwxMSArNDU3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRGaW5pc2hMYXVuYwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb25uZWN0aW9uUmVxdWVz
dC5yZXBseSh7IH0pOwogICAgIH0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChtX3By
b2Nlc3NQb29sLnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgc2V0UHJvY2Vz
c1N1cHByZXNzaW9uRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgogICAgIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgaWYgKHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiA9IHRoaXMtPmNv
bm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpKQpAQCAtMTEyNSw0MiArMTE3NiwyNSBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFN5bmNBbGxDb29rCiAgICAgfQogfQogCi12b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYgc3Rv
cmUpCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9y
ZSYgc3RvcmUpCiB7CiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFt
ZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsK
LSAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7CisgICAgICAgIHNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUucGFyYW1ldGVy
cygpIH0sIDApOwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgICAgICBjcmVhdGVT
eW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5KCkpOworICAgIGlmICghc3RvcmUuc2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKKyAgICAg
ICAgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHN0b3JlLnJlc29sdmVkSW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5KCkpOwogI2VuZGlmCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZXMuc2V0
KHNlc3Npb25JRCwgV1RGTW92ZShzdG9yZSkpOwotICAgIH0KIH0KIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKICAg
ICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkRlc3Ryb3lTZXNzaW9uIHsgc2Vzc2lvbklEIH0sIDApOwotICAgIGlmICghc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZXMucmVtb3ZlKHNl
c3Npb25JRCk7CiB9CiAKIFdlYnNpdGVEYXRhU3RvcmUqIE5ldHdvcmtQcm9jZXNzUHJveHk6Ondl
YnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsK
LSAgICBhdXRvIGl0ZXJhdG9yID0gbV93ZWJzaXRlRGF0YVN0b3Jlcy5maW5kKHNlc3Npb25JRCk7
Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fd2Vic2l0ZURhdGFTdG9yZXMuZW5kKCkpCi0gICAgICAg
IHJldHVybiBpdGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci0KLSAgICBpZiAoYXV0byogd2Vic2l0ZURh
dGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKSB7Ci0gICAgICAgIGlm
IChzZXNzaW9uSUQgPT0gd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpCi0gICAgICAgICAg
ICByZXR1cm4gd2Vic2l0ZURhdGFTdG9yZTsKLSAgICB9Ci0KLSAgICBpZiAoc2Vzc2lvbklEICE9
IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgcmV0dXJuIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLnB0cigpOworICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFT
dG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnJldHJpZXZlQ2FjaGVTdG9yYWdlUGFyYW1ldGVycyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCkBAIC0xMjIwLDcgKzEyNTQsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldFNh
bmRib3hFeHRlCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mo
UmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQogewotICAgIG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5l
Y3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwg
c2Vzc2lvbklEKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6
OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+ZXN0YWJsaXNoV29ya2Vy
Q29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBSZWdpc3RyYWJsZURvbWFp
biB7cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9uSUQpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OndvcmtlckNvbnRleHRDb25uZWN0aW9uTm9Mb25nZXJOZWVkZWQoV2ViQ29yZTo6
UHJvY2Vzc0lkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTEzMzAsMjEgKzEzNjUsNiBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExvY2FsU3RvcmFnCiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpCiB7Ci0gICAgaWYgKHByb2Nlc3NQb29s
KCkuaGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghUHJvY2Vzc1Ro
cm90dGxlcjo6aXNWYWxpZEZvcmVncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5RnJvbVdlYlByb2Nl
c3NlcykpIHsKLSAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gdGhyb3R0
bGVyKCkuZm9yZWdyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5nIGZvciBmb3JlZ3JvdW5kIHZpZXco
cykiX3MpOwotICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nl
c3NEaWRUcmFuc2l0aW9uVG9Gb3JlZ3JvdW5kKCksIDApOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgaWYgKHByb2Nlc3NQb29sKCkuaGFzQmFja2dyb3VuZFdlYlByb2Nl
c3NlcygpKSB7Ci0gICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEJhY2tncm91
bmRBY3Rpdml0eShtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcykpIHsKLSAgICAgICAgICAgIG1f
YWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5
KCJOZXR3b3JraW5nIGZvciBmb3JlZ3JvdW5kIGJhY2tncm91bmQgdmlldyhzKSJfcyk7Ci0gICAg
ICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRp
b25Ub0JhY2tncm91bmQoKSwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5LmgiCiAjZW5kaWYKIAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3MgU2Vzc2lv
bklEOwogfQpAQCAtNjIsNyArNjYsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRG93
bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7Ci1jbGFzcyBXZWJQcm9jZXNzUG9v
bDsKIGVudW0gY2xhc3MgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIDogYm9vbDsKIGVudW0g
Y2xhc3MgU3RvcmFnZUFjY2Vzc1N0YXR1cyA6IHVpbnQ4X3Q7CiBlbnVtIGNsYXNzIFdlYnNpdGVE
YXRhRmV0Y2hPcHRpb247CkBAIC04NiwxMiArODksMTMgQEAgcHVibGljOgogICAgIHVzaW5nIERv
bWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwog
ICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0g
ICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0
YXRpYyBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBzaW5nbGV0b24oKTsKKyAgICBleHBsaWNpdCBOZXR3
b3JrUHJvY2Vzc1Byb3h5KCk7CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAogICAgIHZv
aWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBs
eSYmKTsKIAotICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURh
dGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIERvd25sb2Fk
UHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIFdlYlByb2Nlc3NQ
b29sJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICB2b2lkIGZldGNo
V2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBP
cHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
V2Vic2l0ZURhdGEpPiYmKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lv
bklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTE3Miwx
MyArMTc2LDExIEBAIHB1YmxpYzoKICAgICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSB7
IHJldHVybiBtX3Rocm90dGxlcjsgfQogICAgIHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigp
OwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNz
UG9vbDsgfQotCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRpZERl
c3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eSYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRh
U3RvcmU+JiYpOworICAgIHZvaWQgYWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CiAgICAg
dm9pZCByZW1vdmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKICAgICAKICAgICB2b2lkIHRha2VV
cGxvYWRBc3NlcnRpb24oKTsKQEAgLTE5NiwxMyArMTk4LDIxIEBAIHB1YmxpYzoKICAgICB2b2lk
IHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAg
ICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3Ry
aW5nJik7CiAKKyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQorICAg
IEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KiBsZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQoKSB7IHJldHVybiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5nZXQo
KTsgfQorI2VuZGlmCisKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOworCiBwcml2
YXRlOgorICAgIHZvaWQgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAg
IHN0YXRpYyB2b2lkIGF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeShWZWN0b3I8
c3RkOjpwYWlyPFJlZjxXZWJQcm9jZXNzUHJveHk+LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5
OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHk+PiYmKTsKKwogICAgIC8v
IEF1eGlsaWFyeVByb2Nlc3NQcm94eQogICAgIHZvaWQgZ2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNz
TGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmKSBvdmVycmlkZTsKICAgICB2b2lkIGNvbm5lY3Rpb25X
aWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHByb2Nlc3NXaWxs
U2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCiAgICAg
Ly8gUHJvY2Vzc1Rocm90dGxlckNsaWVudApAQCAtMjU5LDggKzI2OSw2IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCwg
UmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bv
b2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBzdHJ1Y3QgQ29ubmVjdGlvblJlcXVlc3QgewogICAg
ICAgICBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4gd2ViUHJvY2VzczsKICAgICAgICAgTWVzc2Fn
ZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJl
cGx5IHJlcGx5OwpAQCAtMjg3LDkgKzI5NSwxMCBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkqPiBtX3dlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3hpZXM7CiAjZW5kaWYKIAotICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFJlZlB0cjxXZWJz
aXRlRGF0YVN0b3JlPj4gbV93ZWJzaXRlRGF0YVN0b3JlczsKLSAgICAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UHJvY2Vzc0Fzc2VydGlvbj4gbV91cGxvYWRBc3NlcnRpb247CisjaWYgRU5BQkxFKExF
R0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5j
cHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
Q3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDQsMTcgKzQ0LDIwIEBAIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5Ojp+TGVnYWMKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6
c3RhcnRMb2FkaW5nKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJv
Y2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdGFydExvYWRpbmcoKnRo
aXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOworICAgIGlmIChhdXRvKiBjbGllbnQgPSBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5sZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQoKSkKKyAgICAgICAgY2xpZW50LT5zdGFydExvYWRpbmcoKnRoaXMsIGN1c3RvbVBy
b3RvY29sSUQsIHJlcXVlc3QpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5OjpzdG9wTG9hZGluZyh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElEKQogewotICAgIG1f
bmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKKyAgICBpZiAoYXV0
byogY2xpZW50ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkubGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+c3RvcExvYWRpbmcoKnRo
aXMsIGN1c3RvbVByb3RvY29sSUQpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJv
Y2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5pbnZhbGlkYXRlKCp0aGlz
KTsKKyAgICBpZiAoYXV0byogY2xpZW50ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkubGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+
aW52YWxpZGF0ZSgqdGhpcyk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHk6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJ
KHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L1dlYnNpdGVEYXRhU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAj
aW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFn
ZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIKKyNpbmNs
dWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlhbGl6
ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDYWNo
ZS5oIgpAQCAtODEsMTMgKzgyLDIyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJz
aXRlRGF0YVIKICAgICBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1
ZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUq
PiYgbm9uRGVmYXVsdERhdGFTdG9yZXMoKQorc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQs
IFdlYnNpdGVEYXRhU3RvcmUqPiYgYWxsRGF0YVN0b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoaXNVSVRocmVhZCgpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6
OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0K
IAorVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlOjpw
YXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpCit7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzPiBhbGxQYXJhbWV0ZXJzOworICAgIGFsbFBhcmFtZXRlcnMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShhbGxEYXRhU3RvcmVzKCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIHN0b3Jl
IDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgICAgICBhbGxQYXJhbWV0ZXJzLnVuY2hl
Y2tlZEFwcGVuZChzdG9yZS0+cGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gYWxsUGFyYW1ldGVy
czsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZU5v
blBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYnNpdGVEYXRhU3Rv
cmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0ZShJc1BlcnNpc3RlbnQ6Ok5v
KSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vzc2lvbklEKCkpKTsKQEAgLTEx
MywxMCArMTIzLDExIEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoUmVmPFcK
ICNlbmRpZgogewogICAgIFdURjo6c2V0UHJvY2Vzc1ByaXZpbGVnZXMoYWxsUHJpdmlsZWdlcygp
KTsKLSAgICBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAgIHJlZ2lzdGVyV2l0
aFNlc3Npb25JRE1hcCgpOwogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5hZGRTZXNzaW9uKCp0aGlzKTsKIH0KIAogV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRh
U3RvcmUoKQpAQCAtMTI1LDE0ICsxMzYsOSBAQCBXZWJzaXRlRGF0YVN0b3JlOjp+V2Vic2l0ZURh
dGFTdG9yZSgpCiAKICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIAotICAgIGlmIChtX3Nlc3Npb25J
RCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFTU0VS
VChub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7Ci0gICAg
ICAgIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKLSAgICAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbW92
ZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAgICAgICB9Ci0gICAgfQorICAgIEFTU0VSVChhbGxE
YXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKKyAgICBhbGxEYXRhU3RvcmVz
KCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKIH0KIAogc3RhdGljIFJlZlB0cjxXZWJz
aXRlRGF0YVN0b3JlPiYgZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpCkBAIC0xNjIsMTcgKzE2OCwx
NSBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFCiAgICAgcmV0dXJu
ICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6
Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKIHsKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9
IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICB9CisgICAgYXV0
byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogfQogCi1XZWJzaXRlRGF0
YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JT
ZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQorV2Vic2l0ZURhdGFTdG9yZSogV2Vi
c2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKQogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25J
RCkgOiBudWxscHRyOworICAgIHJldHVybiBhbGxEYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQ
cm94eSYgcHJvY2VzcykKQEAgLTE4OCwxMiArMTkyLDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojp1bnJlZ2lzdGVyUHJvY2VzcwogICAgIG1fcHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKIH0K
IAotV2ViUHJvY2Vzc1Bvb2wqIFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2ll
U3RvcmFnZU9wZXJhdGlvbnMoKQotewotICAgIGF1dG8gcG9vbHMgPSBwcm9jZXNzUG9vbHMoMSwg
ZmFsc2UpOwotICAgIHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVn
aW4oKS0+Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9y
aWVzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBA
IC0xODI5LDEzICsxODI3LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENhY2hlTWF4
QWdlQwogI2VuZGlmCiB9CiAKLWJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJv
Y2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKSBjb25zdAotewotICAgIGlmIChh
dXRvKiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9IHByb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUo
KSkKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NQb29sRGF0YVN0b3JlID09IHRoaXM7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCiBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVE
YXRhU3RvcmU6OnByb2Nlc3NQb29scyhzaXplX3QgY291bnQsIGJvb2wgZW5zdXJlQVBvb2xFeGlz
dHMpIGNvbnN0CiB7CiAgICAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBwcm9jZXNz
UG9vbHM7CkBAIC0xODQ0LDE5ICsxODM1LDYgQEAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bv
b2w+PiBXZWJzaXRlRAogICAgICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7
CiAgICAgfQogCi0gICAgaWYgKHByb2Nlc3NQb29scy5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8g
Q2hlY2sgaWYgd2UncmUgb25lIG9mIHRoZSBsZWdhY3kgZGF0YSBzdG9yZXMuCi0gICAgICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgICAgIGlmICghaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woKnByb2Nlc3NQb29s
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgcHJvY2Vzc1Bvb2xz
LmFkZChwcm9jZXNzUG9vbCk7Ci0KLSAgICAgICAgICAgIGlmIChwcm9jZXNzUG9vbHMuc2l6ZSgp
ID09IGNvdW50KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCiAg
ICAgaWYgKHByb2Nlc3NQb29scy5pc0VtcHR5KCkgJiYgY291bnQgJiYgZW5zdXJlQVBvb2xFeGlz
dHMpIHsKICAgICAgICAgYXV0byBwcm9jZXNzUG9vbCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUo
QVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNyZWF0ZSgpKTsKICAgICAgICAgcHJvY2Vz
c1Bvb2xzLmFkZChwcm9jZXNzUG9vbC5wdHIoKSk7CkBAIC0yMDM0LDI5ICsyMDEyLDYgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclJlc291cmNlTG9hZAogfQogI2VuZGlmCiAKLVZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+IFdlYnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gY29weVRvVmVjdG9yKG1fcGVuZGluZ0Nvb2tpZXMpOwotfQotCi12
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29v
a2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmVJZihbJmNvb2tpZV0o
YXV0byYgcGVuZGluZ0Nvb2tpZSkgewotICAgICAgICByZXR1cm4gcGVuZGluZ0Nvb2tpZS5pc0tl
eUVxdWFsKGNvb2tpZSk7Ci0gICAgfSk7Ci0gICAgbV9wZW5kaW5nQ29va2llcy5hZGQoY29va2ll
KTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0
IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3Zl
KGNvb2tpZSk7Ci19Ci0gICAgCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nv
b2tpZXMoKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMuY2xlYXIoKTsKLX0KLQogdWludDY0X3Qg
V2Vic2l0ZURhdGFTdG9yZTo6cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpIGNvbnN0
CiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHdoZXRoZXIgYWxsb3dpbmcgdG8gc2V0IGEgcGVy
VGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSBmcm9tIGEgV2Vic2l0ZURhdGFTdG9yZS4KQEAg
LTIxMDEsNiArMjA1NiwxMCBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0
YVN0CiAKICAgICBwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogCisj
aWYgVVNFKFNPVVApCisgICAgV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRv
bigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCgpLCBwYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIHBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlw
ZSk7CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gcGFyYW1ldGVyczsKIH0KICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaAkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYs
NyArMTA2LDcgQEAgcHVibGljOgogICAgIFdlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uPiYmLCBQQUw6OlNlc3Npb25JRCk7CiAgICAgfldlYnNpdGVEYXRh
U3RvcmUoKTsKIAotICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ05vbkRlZmF1
bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOworICAgIHN0YXRpYyBXZWJz
aXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25J
RCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsgcmV0dXJuICFtX3Nlc3Npb25J
RC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3Qg
eyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTIxNCwxNSArMjE0LDggQEAgcHVibGljOgogCiAg
ICAgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyBy
ZXR1cm4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vz
c1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29s
IGlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7Ci0KLSAgICBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiBwZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGlu
Z0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdD
b29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29r
aWVzKCk7CisgICAgc3RhdGljIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFy
YW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsKIAogICAgIHZvaWQgc2V0Qm91bmRJbnRlcmZhY2VJZGVu
dGlmaWVyKFN0cmluZyYmIGlkZW50aWZpZXIpIHsgbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24tPnNl
dEJvdW5kSW50ZXJmYWNlSWRlbnRpZmllcihXVEZNb3ZlKGlkZW50aWZpZXIpKTsgfQogICAgIGNv
bnN0IFN0cmluZyYgYm91bmRJbnRlcmZhY2VJZGVudGlmaWVyKCkgeyByZXR1cm4gbV9yZXNvbHZl
ZENvbmZpZ3VyYXRpb24tPmJvdW5kSW50ZXJmYWNlSWRlbnRpZmllcigpOyB9CkBAIC0zMjAsNyAr
MzEzLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3Qg
U3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNl
KTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtl
eXNTdG9yYWdlRGlyZWN0b3J5LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YT4mKTsKIAotICAgIHZvaWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAg
ICB2b2lkIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogCiAgICAgY29uc3QgUEFMOjpTZXNz
aW9uSUQgbV9zZXNzaW9uSUQ7CiAKQEAgLTM0OCw4ICszNDEsNiBAQCBwcml2YXRlOgogICAgIFdl
YkNvcmU6OkN1cmxQcm94eVNldHRpbmdzIG1fcHJveHlTZXR0aW5nczsKICNlbmRpZgogCi0gICAg
SGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1fcGVuZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAgV2Vh
a0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3NlczsKIAogICAgIGJvb2wgbV9uZXR3
b3JraW5nSGFzQmVndW4geyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3Rv
cmVDb2NvYS5tbQkocmV2aXNpb24gMjUyMjc0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjgsOCArMTY4LDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURh
dGFTdAogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxp
Y2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IHNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
cigpOwogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxp
Y2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllciA9IHNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRl
bnRpZmllcigpOwogCi0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3Rv
cihtX3BlbmRpbmdDb29raWVzKTsKLQogICAgIGlmICghY29va2llRmlsZS5pc0VtcHR5KCkpCiAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShGaWxlU3lzdGVtOjpkaXJlY3RvcnlOYW1lKGNvb2tpZUZpbGUpLCBwYXJhbWV0ZXJzLmNvb2tp
ZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0
YVN0b3JlU291cC5jcHAJKHJldmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw4ICszNyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXRO
ZXR3b3IKIHsKICAgICBhdXRvJiBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKIAotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbCA9
IHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJz
aXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlVHlwZSk7CisgICAgV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnNpbmdsZXRvbigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQ
cm94eUdMaWIuY3BwCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0
NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE8KICAgICAgICAg
aWYgKCFkYXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMgZG9u
J3QgaGF2ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vic2l0
ZURhdGFTdG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRoZSBw
cm9jZXNzIHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZl
cmVudCB0aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAgIGRh
dGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAgICAg
IGRhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUpOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94
eVNvdXAuY3BwCShyZXZpc2lvbiAyNTIyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9z
b3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdl
clByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAi
V2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIK
IApAQCAtMzQsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZVR5cGUgc3RvcmFnZVR5cGUpCiB7CiAgICAgbV9jb29raWVQZXJzaXN0ZW50U3RvcmFnZU1h
cC5zZXQoc2Vzc2lvbklELCBzdGQ6Om1ha2VfcGFpcihzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUp
KTsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBz
dG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0
ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSksIDApOwogfQog
CiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2ll
UGVyc2lzdGVudFN0b3JhZ2VUeXBlJiBzdG9yYWdlVHlwZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAJKHJl
dmlzaW9uIDI1MjI3NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vz
c1Bvb2xTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjcgKzM3LDIzIEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3
b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykK
IHsKLSAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYgZGVmYXVsdFNlc3Npb25Q
YXJhbWV0ZXJzID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5z
ZXNzaW9uSUQsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFn
ZVBhdGgsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5
cGUpOworICAgIC8vIEZJWE1FOiBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5IHNob3Vs
ZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAvLyBGSVhNRTogbV9pZ25v
cmVUTFNFcnJvcnMgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlIG9yIHJl
bW92ZWQuCisgICAgLy8gRklYTUU6IG1fbmV0d29ya1Byb3h5U2V0dGluZ3Mgc2hvdWxkIGJlIG1v
dmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgogCi0gICAgcGFyYW1ldGVycy5jb29raWVBY2Nl
cHRQb2xpY3kgPSBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5OwotICAgIHBhcmFtZXRl
cnMuaWdub3JlVExTRXJyb3JzID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAgcGFyYW1ldGVycy5s
YW5ndWFnZXMgPSB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgcGFyYW1ldGVycy5wcm94
eVNldHRpbmdzID0gbV9uZXR3b3JrUHJveHlTZXR0aW5nczsKIH0KIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIG1f
aWdub3JlVExTRXJyb3JzID0gaWdub3JlVExTRXJyb3JzOwotICAgIGlmIChuZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vycm9ycyksIDApOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhjb25zdCBXZWJDb3JlOjpT
b3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmIHNldHRpbmdzKQogewogICAgIG1fbmV0d29ya1Byb3h5
U2V0dGluZ3MgPSBzZXR0aW5nczsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdv
cmtQcm94eVNldHRpbmdzKG1fbmV0d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9uZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOwogfQog
CiB9CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTIzMTApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNiBAQAorMjAxOS0xMS0wOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBhIE5ldHdvcmtQcm9jZXNzUHJveHkgc2luZ2xl
dG9uIGluc3RlYWQgb2Ygb25lIHBlciBXZWJQcm9jZXNzUG9vbAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29r
aWVVSURlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNv
b2tpZVVJRGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSk6CisgICAgICAgIChURVNUKToKKyAgICAg
ICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3ZWJWaWV3OnJ1bkphdmFTY3JpcHRB
bGVydFBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjpd
KTogRGVsZXRlZC4KKwogMjAxOS0xMS0wOSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+
CiAKICAgICAgICAgQ2xpY2t5IE9yYmluZyBzdXBwb3J0LmFwcGxlLmNvbSBjYXRlZ29yaWVzIHNo
b3dzIGEgUE5HIGluc3RlYWQgb2YgdGhlIHdlYiBwYWdlIHByZXZpZXcsIHRhcHBpbmcgbG9hZHMg
aW1hZ2UgYXNzZXQgb25seSBpbnN0ZWFkIG9mIHdlYiBwYWdlCkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5h
bWUubW0JKHJldmlzaW9uIDI1MjI3NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5
LDcgQEAgLSAodm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNvbgogCiBAZW5kCiAK
LXN0YXRpYyB2b2lkIHJ1blRlc3QoKQorc3RhdGljIHZvaWQgcnVuVGVzdChib29sIG9sZEZpbGVT
aG91bGRFeGlzdCA9IHRydWUpCiB7CiAgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbW0luZGV4
ZWREQkZpbGVOYW1lTWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKICAgICBhdXRvIGNvbmZp
Z3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0p
OwpAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KCkKICAgICBOU1VSTCAqb2xk
VmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5
QXBwZW5kaW5nUGF0aENvbXBvbmVudDogQCJmaWxlX18wIl07CiAgICAgTlNVUkwgKm5ld1ZlcnNp
b25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbbmV3VmVyc2lvbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVu
ZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwogICAgIE5TVVJMICpvbGRWZXJzaW9uVW51
c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCBV
UkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6dW51c2VkRGF0YWJhc2VOYW1lXTsKLSAgICBFWFBF
Q1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6
b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMLnBhdGhdKTsKKyAgICBFWFBFQ1Rf
VFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xk
VmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMLnBhdGhdID09IG9sZEZpbGVTaG91bGRF
eGlzdCk7CiAgICAgCiAgICAgLy8gRm9yIGRhdGFiYXNlIHRoYXQgaXMgb3BlbmVkIGFmdGVyIHVw
Z3JhZGUsIGl0cyBmaWxlIHNob3VsZCBvbmx5IGJlIGluIHYxLgogICAgIE5TVVJMICpvbGRWZXJz
aW9uRXhpc3RpbmdEYXRhYmFzZURpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0
b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogZXhpc3RpbmdEYXRhYmFzZU5hbWVd
OwpAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZURpcmVjdG9yaWVzKFN0cmlu
ZyB0ZXMKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJGaWxlTmFtZSkKIHsKICAgICBjcmVhdGVE
aXJlY3Rvcmllcygibm9uZSIpOwotICAgIHJ1blRlc3QoKTsKKyAgICBydW5UZXN0KGZhbHNlKTsK
IH0KIAogVEVTVChJbmRleGVkREIsIEluZGV4ZWREQkZpbGVOYW1lVjApCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVExTRGVwcmVjYXRp
b24ubW0JKHJldmlzaW9uIDI1MjI3NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvVExTRGVwcmVjYXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDkg
QEAKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIldlYkNvcmVUZXN0U3VwcG9y
dC5oIgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktp
dC5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmg+
CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpA
QCAtMjAwLDcgKzIwMiw4IEBAIFRFU1QoV2ViS2l0LCBUTFNWZXJzaW9uTmV0d29ya1Nlc3Npb24p
CiAgICAgICAgIFRDUFNlcnZlciBzZXJ2ZXIoVENQU2VydmVyOjpQcm90b2NvbDo6SFRUUFMsIFtd
KFNTTCAqc3NsKSB7CiAgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc3NsKTsKICAgICAgICAgfSwg
dGxzMV8xKTsKLSAgICAgICAgYXV0byB3ZWJWaWV3ID0gbWFrZVdlYlZpZXdXaXRoKFtXS1dlYnNp
dGVEYXRhU3RvcmUgZGVmYXVsdERhdGFTdG9yZV0pOworICAgICAgICBfV0tXZWJzaXRlRGF0YVN0
b3JlQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVD
b25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGF1dG8gd2Vi
VmlldyA9IG1ha2VXZWJWaWV3V2l0aChbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0
V2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdKTsKICAgICAgICAg
W3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwg
VVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImh0dHBzOi8vMTI3LjAu
MC4xOiVkLyIsIHNlcnZlci5wb3J0KCldXV1dOwogICAgICAgICBbZGVsZWdhdGUgd2FpdEZvckRp
ZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb25dOwogICAgIH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9y
ZS5tbQkocmV2aXNpb24gMjUyMjc0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdE5hdmln
YXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCA8V2Vi
S2l0L1dLRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L1dLSFRUUENvb2tpZVN0b3JlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KQEAgLTQ3NSw4ICs0NzYs
NiBAQCAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuCiB9CiBAZW5kCiAK
LS8vIEZJWE1FOiBvbiBpT1MsIFVJIHByb2Nlc3Mgc2hvdWxkIGJlIHVzaW5nIHRoZSBzYW1lIGNv
b2tpZSBmaWxlIGFzIHRoZSBuZXR3b3JrIHByb2Nlc3MgZm9yIGRlZmF1bHQgc2Vzc2lvbi4KLSNp
ZiBQTEFURk9STShNQUMpCiBlbnVtIGNsYXNzIFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5n
IHsgTm8sIFllcyB9Owogdm9pZCBydW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9v
bChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFbmFibGVQcm9jZXNzUHJld2Fy
bWluZykKIHsKQEAgLTU4NSwyMCArNTg0LDY1IEBAIFRFU1QoV2ViS2l0LCBXS0hUVFBDb29raWVT
dG9yZVdpdGhvdXRQcm8KICAgICBydW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9v
bChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZzo6WWVzKTsKIH0KIAotI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKLQogQGludGVyZmFjZSBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIDog
TlNPYmplY3QgPFdLVUlEZWxlZ2F0ZT4KKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MOwor
LSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZTsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIENo
ZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUKK0BpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25D
b29raWVVSURlbGVnYXRlIHsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9tZXNzYWdlOworfQor
CiAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0
UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdL
RnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBs
ZXRpb25IYW5kbGVyCiB7Ci0gICAgRVhQRUNUX1NUUkVRKCJTZXNzaW9uQ29va2llTmFtZT1Db29r
aWVWYWx1ZSIsIG1lc3NhZ2UuVVRGOFN0cmluZyk7Ci0gICAgZmluaXNoZWQgPSB0cnVlOworICAg
IF9tZXNzYWdlID0gbWVzc2FnZTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQorCistIChO
U1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlCit7CisgICAgd2hpbGUgKCFfbWVzc2FnZSkKKyAgICAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICByZXR1cm4gX21lc3Nh
Z2UuYXV0b3JlbGVhc2UoKTsKK30KKworLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUwKK3sK
KyAgICByZXR1cm4gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0
KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2ll
c1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVz
LmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Cit9CisKIEBlbmQKIAorVEVTVChXZWJLaXQsIFdLSFRU
UENvb2tpZVN0b3JlTXVsdGlwbGVWaWV3cykKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3
MSA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzEgc3lu
Y2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAic3RhcnQgbmV0d29yayBwcm9jZXNzIl07CisKKyAg
ICBOU0hUVFBDb29raWUgKnNlc3Npb25Db29raWUgPSBbTlNIVFRQQ29va2llIGNvb2tpZVdpdGhQ
cm9wZXJ0aWVzOkB7CisgICAgICAgIE5TSFRUUENvb2tpZVBhdGg6IEAiLyIsCisgICAgICAgIE5T
SFRUUENvb2tpZU5hbWU6IEAiU2Vzc2lvbkNvb2tpZU5hbWUiLAorICAgICAgICBOU0hUVFBDb29r
aWVWYWx1ZTogQCJDb29raWVWYWx1ZSIsCisgICAgICAgIE5TSFRUUENvb2tpZURvbWFpbjogQCIx
MjcuMC4wLjEiLAorICAgIH1dOworCisgICAgX19ibG9jayBib29sIHNldENvb2tpZURvbmUgPSBm
YWxzZTsKKyAgICBbd2ViVmlldzEuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlLmh0dHBD
b29raWVTdG9yZSBzZXRDb29raWU6c2Vzc2lvbkNvb2tpZSBjb21wbGV0aW9uSGFuZGxlcjpeewor
ICAgICAgICBzZXRDb29raWVEb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJnNldENvb2tpZURvbmUpOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0
TlMoW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgbmV3XSk7CisgICAgW3dlYlZpZXcxIHNl
dFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcxIGxvYWRIVE1MU3Ry
aW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUg
d2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKKyAgICAK
KyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9y
ZWxlYXNlXTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07Cisg
ICAgW3dlYlZpZXcyIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJh
c2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVY
UEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5h
bWU9Q29va2llVmFsdWUiKTsKK30KKwogVEVTVChXZWJLaXQsIFdLSFRUUENvb2tpZVN0b3JlV2l0
aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKIHsKICAgICBSZXRhaW5QdHI8V0tXZWJz
aXRlRGF0YVN0b3JlPiBlcGhlbWVyYWxTdG9yZVdpdGhDb29raWVzID0gW1dLV2Vic2l0ZURhdGFT
dG9yZSBub25QZXJzaXN0ZW50RGF0YVN0b3JlXTsKQEAgLTYyMyw5ICs2NjcsOCBAQCBURVNUKFdl
YktpdCwgV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZmaW5pc2hlZCk7CiAgICAgZmluaXNoZWQgPSBmYWxzZTsKICAgICAKLSAgICBOU1N0
cmluZyAqYWxlcnRDb29raWVIVE1MID0gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQu
Y29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkg
KyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBh
bGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Ci0gICAgW3dlYlZpZXcgbG9hZEhU
TUxTdHJpbmc6YWxlcnRDb29raWVIVE1MIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJo
dHRwOi8vMTI3LjAuMC4xIl1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNo
ZWQpOworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhU
TUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOwor
ICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNv
b2tpZU5hbWU9Q29va2llVmFsdWUiKTsKIH0KIAogc3RhdGljIGJvb2wgYXJlQ29va2llc0VxdWFs
KE5TSFRUUENvb2tpZSAqZmlyc3QsIE5TSFRUUENvb2tpZSAqc2Vjb25kKQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0
aHMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMubW0JKHJldmlzaW9uIDI1MjI3NCkKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUN1c3Rv
bVBhdGhzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MjcsNyArNDI3LDcgQEAgVEVTVChXZWJLaXQs
IFdlYnNpdGVEYXRhU3RvcmVFcGhlbWVyYWwpCiAgICAgaGFuZGxlciA9IG5pbDsKICAgICBjb25m
aWd1cmF0aW9uID0gbmlsOwogCi0gICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1
bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOmRlZmF1bHRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGF0aC5wYXRoXSk7CisgICAgRVhQRUNUX0ZBTFNFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFu
YWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpkZWZhdWx0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhdGgu
cGF0aF0pOwogICAgIEVYUEVDVF9GQUxTRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGZpbGVFeGlzdHNBdFBhdGg6ZGVmYXVsdFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaWxlUGF0aC5w
YXRoXSk7CiAKICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1B
dFVSTDpkZWZhdWx0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhdGggZXJyb3I6bmlsXTsKQEAgLTQ3
MCw3ICs0NzAsNyBAQCBURVNUKFdlYktpdCwgV2Vic2l0ZURhdGFTdG9yZUVwaGVtZXJhbFZpCiAg
ICAgaGFuZGxlciA9IG5pbDsKICAgICBjb25maWd1cmF0aW9uID0gbmlsOwogCi0gICAgRVhQRUNU
X1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOmRl
ZmF1bHRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGF0aC5wYXRoXSk7CisgICAgRVhQRUNUX0ZBTFNF
KFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpkZWZhdWx0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhdGgucGF0aF0pOwogICAgIEVYUEVDVF9GQUxTRShbW05T
RmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6ZGVmYXVsdFJlc291
cmNlTG9hZFN0YXRpc3RpY3NGaWxlUGF0aC5wYXRoXSk7CiAKICAgICBbW05TRmlsZU1hbmFnZXIg
ZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDpkZWZhdWx0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhdGggZXJyb3I6bmlsXTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391917</attachid>
            <date>2020-02-27 14:23:18 -0800</date>
            <delta_ts>2020-02-27 19:18:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20200227142318.patch</filename>
            <type>text/plain</type>
            <size>139141</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBAQAorMjAyMC0wMi0yNyAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBhIE5ldHdv
cmtQcm9jZXNzUHJveHkgc2luZ2xldG9uIGluc3RlYWQgb2Ygb25lIHBlciBXZWJQcm9jZXNzUG9v
bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToK
KyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhU
VFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tp
ZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3Jl
Ojpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoQVBJOjpI
VFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoQVBJ
OjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6CisgICAgICAgIChX
S0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9zZXRDb29raWVBY2Nl
cHRQb2xpY3k6XSk6CisgICAgICAgICh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tp
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNN
b2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpw
cm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250
ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6CisgICAgICAg
IChXZWJLaXQ6Om1fd2ViUHJvY2Vzc0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6On5XZWJQcm9jZXNzUG9vbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0
Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9O
ZXR3b3JraW5nUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVh
ckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyTGVnYWN5UHJpdmF0ZUJy
b3dzaW5nTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFs
bG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRXZWJQcm9jZXNzSGFzVXBsb2Fkcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVhcldlYlByb2Nlc3NIYXNVcGxv
YWRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMjAtMDItMjcgIFRp
bSBNb25yb2UgIDx0aW1tb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBHUFUgUHJvY2VzcyBz
dXBwb3J0IGZvciBhY2Nlc3NMb2cgZXQgYWwuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkocmV2aXNpb24gMjU3NTgxKQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyNSw3ICszMjUsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0
d29ya1ByCiAgICAgICAgIG1lbW9yeVByZXNzdXJlSGFuZGxlci5pbnN0YWxsKCk7CiAgICAgfQog
Ci0gICAgc2V0Q2FjaGVNb2RlbChwYXJhbWV0ZXJzLmNhY2hlTW9kZWwpOworICAgIC8vIEZJWE1F
OiBJIHN0aWxsIG5lZWQgdG8gc2V0IHRoZSBjYWNoZSBtb2RlbCBmcm9tIExlZ2FjeUdsb2JhbFNl
dHRpbmdzLCBidXQgd2l0aCB0aGUgcGF0aCBmcm9tIHRoZSBmaXJzdCBwZXJzaXN0ZW50IGRhdGEg
c3RvcmUuCiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIG1faXNJ
VFBEYXRhYmFzZUVuYWJsZWQgPSBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlOwpA
QCAtMzMzLDE3ICszMzMsMTggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdv
cmtQcgogCiAgICAgV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkKHBhcmFtZXRlcnMuZW5h
YmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKTsKIAotICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBw
YXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQg
PSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7
CiAKLSAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKLSAgICBzZXRTZXNzaW9u
KHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykp
KTsKLQotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90
YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNh
Y2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBhZGRTZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3Rv
cmFnZVF1b3RhLCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdl
UXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBkYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKICNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9u
KHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkSW5k
ZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKKyAgICAgICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+YWRkKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKyAgICAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVE
YXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRlcnMpKTsKKyAg
ICB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgaWYgKHBhcmVudFByb2Nlc3NI
YXNTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSkgewpAQCAtMzUyLDEzICszNTMsNiBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1ByCiAgICAgfQogI2VuZGlmCiAKLSAg
ICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotCi0gICAgYXV0byogZGVmYXVsdFNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLSAgICBhdXRvKiBkZWZhdWx0U3RvcmFnZVNl
c3Npb24gPSBkZWZhdWx0U2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgZm9y
IChjb25zdCBhdXRvJiBjb29raWUgOiBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLnBlbmRpbmdDb29raWVzKQotICAgICAgICBkZWZhdWx0U3RvcmFnZVNlc3Npb24tPnNldENv
b2tpZShjb29raWUpOwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50
cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+aW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsK
IApAQCAtNDE1LDEyICs0MDksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3Jr
Q29ubmVjCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQog
ewotICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuY2xlYXJD
cmVkZW50aWFscygpOwotICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdv
cmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpKQotICAgICAgICBu
ZXR3b3JrU2Vzc2lvbi0+Y2xlYXJDcmVkZW50aWFscygpOwotICAgIGVsc2UKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0KICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW10gKGF1dG8m
IG5ldHdvcmtTZXNzaW9uKSB7CiAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VTZXNzaW9uID0gbmV0
d29ya1Nlc3Npb24ubmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkpCiAgICAgICAgICAgICBzdG9yYWdl
U2Vzc2lvbi0+Y3JlZGVudGlhbFN0b3JhZ2UoKS5jbGVhckNyZWRlbnRpYWxzKCk7CkBAIC01MDEs
OCArNDg5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdAogdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vz
c2lvbklELCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyQmFzZSkKICNlbmRpZgogewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47CkBAIC01NDAsMjEgKzUy
NiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2NlcHRQb2xpY3lDCiAKIFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9u
KGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpIGNvbnN0CiB7Ci0gICAgaWYgKHNlc3Np
b25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICByZXR1
cm4gJmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwogICAgIHJldHVybiBtX25ldHdvcmtTdG9yYWdl
U2Vzc2lvbnMuZ2V0KHNlc3Npb25JRCk7CiB9CiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgTmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24pCi0gICAgICAgIG1fZGVmYXVs
dE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNz
aW9uKCk7Ci0gICAgcmV0dXJuICptX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247Ci19Ci0K
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oY29uc3Qg
RnVuY3Rpb248dm9pZChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKT4mIGZ1bmN0b3Ip
CiB7Ci0gICAgZnVuY3RvcihkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSk7CiAgICAgZm9yIChhdXRv
JiBzdG9yYWdlU2Vzc2lvbiA6IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy52YWx1ZXMoKSkKICAg
ICAgICAgZnVuY3Rvcigqc3RvcmFnZVNlc3Npb24pOwogfQpJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkocmV2aXNpb24gMjU3NTgxKQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjcsNyArMTY3LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29y
a1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9y
YWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGlu
Z1Nlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICB2b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNDcsNyArMzQ2LDYgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
Y29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1By
b2Nlc3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01MjYs
NyArNTI0LDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6
dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hN
YXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3Jr
U3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFn
ZU1hbmFnZXJTZXQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCShy
ZXZpc2lvbiAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYs
NyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplCiAgICAgSVBDOjpl
bmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwogICAgIGVuY29kZXIgPDwg
c3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGVuY29kZXIgPDwgZGF0YVN0b3JlUGFyYW1ldGVyczsK
ICNpZiBVU0UoU09VUCkKICAgICBlbmNvZGVyLmVuY29kZUVudW0oY29va2llQWNjZXB0UG9saWN5
KTsKICAgICBlbmNvZGVyIDw8IGlnbm9yZVRMU0Vycm9yczsKQEAgLTEyMSwxMSArMTIxLDExIEBA
IGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogI2VuZGlmCiAKLSAgICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cz4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQor
ICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4+IGRhdGFTdG9y
ZVBhcmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiBkYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGlm
ICghZGF0YVN0b3JlUGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3Vs
dC5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzKTsKKyAgICByZXN1bHQuZGF0YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRh
dGFTdG9yZVBhcmFtZXRlcnMpOwogCiAjaWYgVVNFKFNPVVApCiAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZUVudW0ocmVzdWx0LmNvb2tpZUFjY2VwdFBvbGljeSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzIAogICAgIGJvb2wgc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7CiAjZW5kaWYKIAotICAgIFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAg
IFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGF0YVN0b3JlUGFyYW1ldGVyczsK
ICAgICAKICNpZiBVU0UoU09VUCkKICAgICBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5
IGNvb2tpZUFjY2VwdFBvbGljeSB7IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6OkFs
d2F5c0FjY2VwdCB9OwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVz
L1dlYkNvb2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjU3NTgxKQor
KysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBXZWJDb29raWVNYW5h
Z2VyOjpzZXRIVFRQQ29va2llQWNjZQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBD
b29raWVBY2NlcHRQb2xpY3koQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0
UG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBjb21wbGV0aW9uSGFuZGxlciht
X3Byb2Nlc3MuZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY29va2llQWNjZXB0UG9saWN5KCkpOwor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKS0+Y29va2llQWNjZXB0UG9saWN5KCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0JKHJldmlzaW9uIDI1
NzU4MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nl
c3NDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtODQsOSArODQsNiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3Vt
ZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRl
cnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAg
IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKLSNlbmRpZgogI2VuZGlmCiAKICAgICBfQ0ZOZXR3b3JrU2V0QVRTQ29udGV4
dChwYXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKQEAgLTExMywxMSArMTEwLDYg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgIFtOU1VSTENh
Y2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRm
b3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3JrUHJv
Y2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShTT1VS
Q0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCShyZXZpc2lv
biAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1By
b2Nlc3NDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogewogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1D
cmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5p
cXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFsbG93U3BlY2lmaWNI
VFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRl
SW5mbywgY29uc3QgU3RyaW5nJiBob3N0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4
dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1v
dGVOZXR3b3JraW5nQ29udGV4dC5tbQkocmV2aXNpb24gMjU3NTgxKQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTYwLDEwICs2MCw2IEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVu
c3VyZVdlYnMKIAogICAgIG5ldHdvcmtQcm9jZXNzLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklELCBw
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5nTmV0d29y
a1Nlc3Npb24sIG1ha2VTdHJpbmcoYmFzZSwgJy4nLCBzZXNzaW9uSUQudG9VSW50NjQoKSksIFdU
Rk1vdmUodWlQcm9jZXNzQ29va2llU3RvcmFnZSkpOwogCi0gICAgYXV0byogc2Vzc2lvbiA9IG5l
dHdvcmtQcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgZm9yIChjb25zdCBh
dXRvJiBjb29raWUgOiBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzKQotICAgICAgICBzZXNzaW9u
LT5zZXRDb29raWUoY29va2llKTsKLQogICAgIG5ldHdvcmtQcm9jZXNzLnNldFNlc3Npb24oc2Vz
c2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKG5ldHdvcmtQcm9jZXNzLCBXVEZNb3ZlKHBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NT
b3VwLmNwcAkocmV2aXNpb24gMjU3NTgxKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMSAr
MTQ1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgIH0p
OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBO
ZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25z
dAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAg
ICBTb3VwTmV0d29ya1Nlc3Npb246OnNldFNob3VsZElnbm9yZVRMU0Vycm9ycyhpZ25vcmVUTFNF
cnJvcnMpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMjU3NTgxKQorKysgU291cmNlL1dlYktpdC9T
aGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCwxMyArNDAsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUoCiAg
ICAgZW5jb2RlciA8PCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2RlciA8PCB1
aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0
b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nvb2tpZXM7
CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRh
YmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAog
I2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTgzLDEyICs3OSw2IEBAIE9wdGlvbmFsPFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWIKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RG
TW92ZSgqY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4+IHBlbmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4g
cGVuZGluZ0Nvb2tpZXM7Ci0gICAgaWYgKCFwZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgq
cGVuZGluZ0Nvb2tpZXMpOwotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0
aW9uYWw8U3RyaW5nPiBpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBp
bmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CkBAIC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYgogICAgIGlmICghaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
IHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RG
TW92ZSgqaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
PiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBk
ZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwotICAgIGlmICghaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4
ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDI1NzU4
MSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDE1ICs1MSwxMSBAQCBzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMgewogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHVpUHJvY2Vzc0Nvb2tpZVN0b3Jh
Z2VJZGVudGlmaWVyOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjb29raWVTdG9yYWdl
UGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5n
Q29va2llczsKICAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBTdHJp
bmcgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNl
VGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYg
RU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJB
UElTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIK
KyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxs
YmFja0lELmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiV2ViQ29va2llTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKQEAgLTM5LDIwICs0MCwxNSBAQAog
bmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hh
ciogV2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5h
Z2VyUHJveHkmIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkKIHsKLSAgICByZXR1
cm4gIldlYkNvb2tpZU1hbmFnZXJQcm94eSI7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdl
YkNvb2tpZU1hbmFnZXJQcm94eT4gbWFuYWdlcjsKKyAgICByZXR1cm4gbWFuYWdlcjsKIH0KIAot
UmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gV2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUo
V2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQorV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJD
b29raWVNYW5hZ2VyUHJveHkoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tp
ZU1hbmFnZXJQcm94eShwcm9jZXNzUG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6
OldlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAg
OiBXZWJDb250ZXh0U3VwcGxlbWVudChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3Vw
cGxlbWVudDo6cHJvY2Vzc1Bvb2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsK
IH0KIAogV2ViQ29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KCkKQEAg
LTY1LDQzICs2MSw5IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2wK
ICAgICBtX2NsaWVudC5pbml0aWFsaXplKGNsaWVudCk7CiB9CiAKLS8vIFdlYkNvbnRleHRTdXBw
bGVtZW50Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3ll
ZCgpCi17Ci0gICAgVmVjdG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJzOwotICAgIGZvciAoYXV0byYg
b2JzZXJ2ZXJTZXQgOiBtX2Nvb2tpZU9ic2VydmVycy52YWx1ZXMoKSkgewotICAgICAgICBmb3Ig
KGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJTZXQpCi0gICAgICAgICAgICBvYnNlcnZlcnMuYXBw
ZW5kKG9ic2VydmVyKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2
ZXJzKQotICAgICAgICBvYnNlcnZlci0+bWFuYWdlckRlc3Ryb3llZCgpOwotCi0gICAgQVNTRVJU
KG1fY29va2llT2JzZXJ2ZXJzLmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5Ojpwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5
KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnJlZldlYkNvbnRleHRTdXBw
bGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6cmVmKCk7Ci19Ci0KLXZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9i
amVjdDo6ZGVyZWYoKTsKLX0KLQogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgW2Nh
bGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBhY3Rpdml0eSA9IG5l
dHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViQ29va2llTWFu
YWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyJfcyldKFZlY3RvcjxTdHJpbmc+JiYg
aG9zdG5hbWVzKSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihXVEZNb3ZlKGhv
c3RuYW1lcykpOwogICAgIH0pOwpAQCAtMTA5LDE3ICs3MSwxNyBAQCB2b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9O
ZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMp
KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9z
dG5hbWVzKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxD
b29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5z
ZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6RGVsZXRlQWxsQ29va2llcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IENvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5j
dGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQs
IGNvb2tpZSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwg
YWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHko
IldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llIl9zKV0oKSBtdXRhYmxlIHsKICAg
ICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogICAgIH0pOwpAQCAtMTI3LDcgKzg5LDcgQEAgdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZQogCiB2b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBXYWxsVGltZSB0aW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
KCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tp
ZXNNb2RpZmllZFNpbmNlKHNlc3Npb25JRCwgdGltZSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RG
TW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRs
ZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxs
Q29va2llc01vZGlmaWVkU2luY2UiX3MpXSgpIG11dGFibGUgewogICAgICAgICBjYWxsYmFja0Z1
bmN0aW9uKCk7CiAgICAgfSk7CkBAIC0xMzUsNyArOTcsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6ZGVsZXRlQWxsQ29vCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRD
b29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNv
b2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewot
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNlc3Npb25JRCwgY29va2llcyksIFtj
YWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBu
ZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2V0Q29va2llcyJfcyldKCkgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxiYWNr
RnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTE0Myw3ICsxMDUsNyBAQCB2b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2V0Q29va2llcyhQCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4m
IGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYg
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwor
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9j
dW1lbnRVUkwpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiks
IGFjdGl2aXR5ID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5
KCJXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMiX3MpXSgpIG11dGFibGUgewogICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgfSk7CkBAIC0xNTEsNyArMTEzLDcgQEAgdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUAogCiB2b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikK
IHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgW2Nh
bGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBhY3Rpdml0eSA9IG5l
dHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViQ29va2llTWFu
YWdlclByb3h5OjpnZXRBbGxDb29raWVzIl9zKV0oVmVjdG9yPENvb2tpZT4mJiBjb29raWVzKSBt
dXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihXVEZNb3ZlKGNvb2tpZXMpKTsKICAg
ICB9KTsKQEAgLTE1OSw3ICsxMjEsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0
QWxsQ29va2llCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Cisg
ICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBbY2FsbGJhY2tGdW5jdGlv
biA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFjdGl2aXR5ID0gbmV0d29ya1Byb2Nlc3Mu
dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJDb29raWVNYW5hZ2VyUHJveHk6Omdl
dENvb2tpZXMiX3MpXShWZWN0b3I8Q29va2llPiYmIGNvb2tpZXMpIG11dGFibGUgewogICAgICAg
ICBjYWxsYmFja0Z1bmN0aW9uKFdURk1vdmUoY29va2llcykpOwogICAgIH0pOwpAQCAtMTY3LDEy
ICsxMjksMTIgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMoUAogCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3
b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiYgY2FsbGJhY2spCkBAIC0y
MjEsMTcgKzE4Myw5IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpjb29raWVzRGlkQ2gK
ICAgICAgICAgb2JzZXJ2ZXItPmNvb2tpZXNEaWRDaGFuZ2UoKTsKIH0KIAotdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQs
IEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQ
Q29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmICghcHJvY2Vzc1Bvb2woKS0+
aXNVc2luZ1Rlc3RpbmdOZXR3b3JrU2Vzc2lvbigpKQotICAgICAgICBwZXJzaXN0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShwb2xpY3kpOwotI2VuZGlmCi0jaWYgVVNFKFNPVVApCi0gICAgcHJvY2Vz
c1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNlbmRp
ZgotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBv
bGljeSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYWN0
aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSJfcyldKCkgbXV0
YWJsZSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTIzOSw3ICsx
OTMsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpCiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYm
IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNz
ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Mu
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KCksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1
bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNrZ3JvdW5k
QWN0aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGlj
eSJfcyldKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KSBtdXRhYmxlIHsKICAgICAgICAg
Y2FsbGJhY2tGdW5jdGlvbihwb2xpY3kpOwogICAgIH0pOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgJKHJldmlzaW9uIDI1NzU4MSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NiwxMSArNTYsOSBAQCB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6
OkFycmF5Kj4gQXJyCiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXZWJDb3JlOjpIVFRQQ29va2ll
QWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0UG9saWN5Q2FsbGJhY2s7CiB0eXBlZGVmIEdl
bmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiY+IEdldENvb2tpZXND
YWxsYmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQSTo6T2Jq
ZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHB1YmxpYyBXZWJDb250
ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitjbGFzcyBXZWJD
b29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpU
eXBlOjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7Ci0KLSAgICBzdGF0
aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlByb2Nlc3NQb29sKik7Cisg
ICAgc3RhdGljIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgc2luZ2xldG9uKCk7CiAgICAgdmlydHVh
bCB+V2ViQ29va2llTWFuYWdlclByb3h5KCk7CiAKICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQo
Y29uc3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSopOwpAQCAtMTA0LDE3ICsxMDIsMTEgQEAg
cHVibGljOgogICAgIHVzaW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsKIAogcHJpdmF0ZToKLSAgICBX
ZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkoKTsKKyAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8V2ViQ29va2llTWFuYWdlclBy
b3h5PjsKIAogICAgIHZvaWQgY29va2llc0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCk7CiAKLSAg
ICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAotICAgIHZvaWQgcHJvY2Vzc1Bvb2xEZXN0cm95ZWQo
KSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKSBv
dmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5Kikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotCiAgICAgLy8g
SVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyNiw2ICsyMjYsMTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNp
dAogICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IFdlYlByb2Nlc3NQb29sOjp1
cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQoreworICAgIHJldHVybiBjb3B5
VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpOwor
fQorCiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZp
Z3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2NvbmZpZ3VyYXRpb24oY29uZmlndXJh
dGlvbi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdlR3JvdXAoV2ViUGFnZUdyb3VwOjpjcmVh
dGUoKSkKQEAgLTIzMyw3ICsyMzgsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wo
QVBJOjpQcm9jCiAgICAgLCBtX2F1dG9tYXRpb25DbGllbnQobWFrZVVuaXF1ZTxBUEk6OkF1dG9t
YXRpb25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2FkQ2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJ
OjpEb3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlzdG9yeUNsaWVudChtYWtlVW5pcXVlPEFQ
STo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkpCi0gICAgLCBtX2N1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
PigpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgp
KQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2Fn
ZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlcj4o
KnRoaXMpKQpAQCAtMjU3LDkgKzI2MSw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9v
bChBUEk6OlByb2MKICAgICAgICAgUHJvY2Vzczo6c2V0SWRlbnRpZmllcihXZWJDb3JlOjpQcm9j
ZXNzSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSk7CiAgICAgfSk7CiAKLSAgICBpZiAoIW1fd2Vic2l0
ZURhdGFTdG9yZSAmJiBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVF
eGlzdHMoKSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCk7Ci0KICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IG1f
Y29uZmlndXJhdGlvbi0+YWx3YXlzUmV2YWxpZGF0ZWRVUkxTY2hlbWVzKCkpCiAgICAgICAgIG1f
c2NoZW1lc1RvUmVnaXN0ZXJBc0Fsd2F5c1JldmFsaWRhdGVkLmFkZChzY2hlbWUpOwogCkBAIC0y
NzUsNyArMjc2LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvYwog
ICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTogVGhlc2Ugc3ViLW9iamVjdHMg
bXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZlck1hcC4uCi0gICAgYWRk
U3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxX
ZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYk5vdGlm
aWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKQEAgLTMy
Niw5ICszMjYsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKCkKICAgICBwcm9j
ZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0RG93blByb2Nlc3MoKTsKLQog
I2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNzZXNVc2luZ0dhbWVwYWRzLmlz
RW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnByb2Nlc3NQ
b29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtMzg2LDE2ICszODMsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50CiAgICAgICAgIG1fYXV0b21hdGlv
bkNsaWVudCA9IFdURk1vdmUoYXV0b21hdGlvbkNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYgY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KQotewotI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIp
Ci0gICAgaWYgKCFjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi0gICAgICAgIG1fY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gbWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudD4oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50ID0gV1RGTW92ZShjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOwotI2VuZGlmCi19
Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKIHsKICAgICBtX3N0b3JhZ2VBY2Nlc3NBUElFbmFibGVkID0gZW5hYmxlZDsKQEAg
LTQxNSw3ICs0MDIsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50
CiAKIElQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29u
bmVjdGlvbigpCiB7Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsK
KyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuY29ubmVjdGlvbigp
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4
dCkKQEAgLTQyNyw4ICs0MTQsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5n
ZWQoKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNl
clByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSk7CiAj
aWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFu
Z3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwg
MCk7CiAjZW5kaWYKIH0KIApAQCAtNDY2LDIyNCArNDUyLDE0IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNjcmVlblByb3BlcnRpZXNTdGEKICNlbmRpZgogfQogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5
JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSog
d2l0aFdlYnNpdGVEYXRhU3RvcmUpCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9v
bDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSopCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBv
cmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhy
ZWFkcy4KLSAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVh
ZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KLSAgICBpZiAoIVJ1bkxvb3A6OmlzTWFp
bigpKSB7Ci0gICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwotICAg
IH0KLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIGlmICh3aXRoV2Vic2l0
ZURhdGFTdG9yZSkgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbiht
YWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICAgICAgd2l0aFdlYnNpdGVE
YXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgYXV0byBuZXR3b3JrUHJvY2VzcyA9
IG1ha2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQcm94eT4oKnRoaXMpOwotCi0gICAgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLQotICAgIGlmIChtX3dlYnNpdGVE
YXRhU3RvcmUpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3RvcihtX3dlYnNpdGVEYXRhU3RvcmUtPnBlbmRp
bmdDb29raWVzKCkpOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nv
b2tpZXMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGlj
YXRpb25CdW5kbGVJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9u
KCkuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCk7Ci0gICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNv
dXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+
Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigpOwot
I2VuZGlmCi0gICAgfQotCi0gICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFs
U2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKLQotICAgIGZvciAoYXV0byYgc2No
ZW1lIDogZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCi0gICAg
ICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBw
ZW5kKHNjaGVtZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFN0cmluZyBjb29r
aWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnkoKTsKLSAgICBpZiAoIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29v
a2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBX
ZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIGlmICghY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVj
dG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotCi0gICAgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpw
YXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5p
c0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRC
dW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0
ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JU
ZW1wb3JhcnlGaWxlKGVtcHR5U3RyaW5nKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRX
cml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLSNlbmRpZgotCi0g
ICAgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IExlZ2FjeUdsb2JhbFNldHRpbmdz
OjpzaW5nbGV0b24oKS5oc3RzU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyYW1ldGVy
cy5oc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotCi0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29w
eVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdp
c3RlckFzU2VjdXJlKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5
cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxT
ZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRT
ZWN1cml0eVBvbGljeSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNM
b2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2No
ZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lz
dGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7Ci0KLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLSAgICAvLyAqKioqKioqKioKLSAgICAvLyBJTVBPUlRBTlQ6IERvIG5v
dCBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGluZGV4ZWQgZGF0YWJhc2VzIG9u
IGRpc2sgd2l0aG91dCBmaXJzdCBjb25zdWx0aW5nIGEgcmV2aWV3ZXIgZnJvbSBBcHBsZSAoPHJk
YXI6Ly9wcm9ibGVtLzE3NDU0NzEyPikKLSAgICAvLyAqKioqKioqKioKLSAgICBpZiAobV93ZWJz
aXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2
ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygp
LmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHko
KSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgbmV0d29ya1By
b2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgfQotI2VuZGlm
Ci0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9y
ZSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5ID0gIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGxvY2FsU3RvcmFnZURp
cmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2
ZWRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWxvY2Fs
U3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNp
dGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNhY2hlU3RvcmFnZURpcmVjdG9yeSgp
IDogbnVsbFN0cmluZygpOwotICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHko
KSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5ID0gV1RGTW92ZShjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOwotICAgIH0KLQotICAgIGlm
IChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0
YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
PSBmYWxzZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5n
RXZlbnQgPSBmYWxzZTsKLSAgICBib29sIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVlOwot
ICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGZhbHNlOwot
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgV2ViQ29yZTo6VGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gV2Vi
Q29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsOwotI2VuZGlmCi0gICAgV2Vi
Q29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgZmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZTo6QWxsQnV0Q29va2llczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51YWxQ
cmV2YWxlbnRSZXNvdXJjZSB7IH07Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0g
ICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFTdG9y
ZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9n
VGVzdGluZ0V2ZW50ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5n
Q2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3aXRo
V2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsK
LSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdEluUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKLSAg
ICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZTsK
LSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAgICAgdGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy50aGlyZFBh
cnR5Q29va2llQmxvY2tpbmdNb2RlOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5maXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291
cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW51
YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVv
dGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90
YSgpOwotICAgICAgICAKLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5
ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7
Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7
Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hl
RGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdv
cmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBpZiAo
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0
ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3RJblJlc291
cmNlTG9hZFN0YXRpc3RpY3M7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmVuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSNlbmRpZgotICAg
ICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAgICAg
ICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQot
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0
b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7
Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQ
YXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0
eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotCi0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJl
Y3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsK
LSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURp
cmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3
b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3Jl
RXhpc3RzKCkpCi0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gV2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZCgpOwotICAgICAgICBhdXRvIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IFdlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
bmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5k
Ym94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgfQotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3M7Ci0gICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQ7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxv
Y2FsaG9zdEluUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHNob3VsZEluY2x1ZGVMb2NhbGhvc3Q7
Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xP
QURfU1RBVElTVElDUykKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0g
dGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSNlbmRpZgotICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmZpcnN0UGFy
dHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU7Ci0KLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFudWFsUHJldmFsZW50UmVz
b3VyY2UgPSBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLQotICAgIC8vIEFkZCBhbnkgcGxhdGZv
cm0gc3BlY2lmaWMgcGFyYW1ldGVycwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKHBhcmFtZXRlcnMpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9jZXNz
LgotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5p
dGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0UU9TKG5ldHdvcmtQcm9jZXNzTGF0ZW5jeVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hw
dXRRT1MoKSksIDApOwotI2VuZGlmCi0KLSAgICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJvY2Vz
c0Fzc2VydGlvbigpOwotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3Jl
KSk7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7
Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBuZXR3b3JrIHByb2Nlc3Mga25vd3MgYWJv
dXQgYWxsIHRoZSBzZXNzaW9ucyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSBpdCBz
dGFydGVkLgotICAgIGZvciAoYXV0byYgc2Vzc2lvbklEIDogbV9zZXNzaW9uVG9QYWdlSURzTWFw
LmtleXMoKSkgewotICAgICAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVE
YXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9u
SUQpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKndlYnNpdGVEYXRh
U3RvcmUpOwotICAgIH0KLQotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdvcmtQ
cm9jZXNzKTsKLSAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7CisgICAgcmV0dXJuIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpu
ZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQ
cm94eSwgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiwgTWVzc2FnZXM6
OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVw
bHk+PiYmIHBlbmRpbmdSZXBsaWVzKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nl
c3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHJveHkpCiB7Ci0g
ICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotICAgIEFTU0VSVCgmbmV0d29ya1Byb2Nlc3NQ
cm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKLQogICAgIGZvciAoYXV0byYgc3VwcGxl
bWVudCA6IG1fc3VwcGxlbWVudHMudmFsdWVzKCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPnByb2Nl
c3NEaWRDbG9zZSgmbmV0d29ya1Byb2Nlc3NQcm94eSk7CiAKQEAgLTY5MiwxNiArNDY4LDYgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaAogICAgIGlmIChtX2F1dG9t
YXRpb25TZXNzaW9uKQogICAgICAgICBtX2F1dG9tYXRpb25TZXNzaW9uLT50ZXJtaW5hdGUoKTsK
IAotICAgIC8vIExlYXZlIHRoZSBwcm9jZXNzIHByb3h5IGFyb3VuZCBkdXJpbmcgY2xpZW50IGNh
bGwsIHNvIHRoYXQgdGhlIGNsaWVudCBjb3VsZCBxdWVyeSB0aGUgcHJvY2VzcyBpZGVudGlmaWVy
LgotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwotCi0gICAgLy8gQXR0ZW1wdCB0byBy
ZS1sYXVuY2guCi0gICAgaWYgKHBlbmRpbmdSZXBsaWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGF1dG8mIG5ld05ldHdvcmtQcm9jZXNzID0gZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKLSAgICBmb3IgKGF1dG8mIHJlcGx5IDogcGVuZGluZ1JlcGxpZXMpCi0gICAgICAgIG5ld05l
dHdvcmtQcm9jZXNzLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqcmVwbHkuZmlyc3QsIFdU
Rk1vdmUocmVwbHkuc2Vjb25kKSk7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwog
fQogCkBAIC03MTQsMTAgKzQ4MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VXb3Jr
ZXJQcm9jZXMKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBNZXNzYWdlczo6V2ViUHJvY2Vz
c1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJlcGx5
KQogewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgQVNTRVJUKG1fbmV0d29ya1By
b2Nlc3MpOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uKHdlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOworICAgIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbih3ZWJQcm9jZXNz
UHJveHksIFdURk1vdmUocmVwbHkpKTsKIH0KIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKQEAg
LTczNiwxNSArNDk5LDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0R1BVUHJvY2Vzc0Nvbm5l
YwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFi
bGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBwcm94eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1fbmV0
d29ya1Byb2Nlc3MuZ2V0KCkpOwotCi0gICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNp
dGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNz
aW9uSUQpOwotCi0gICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGlmICghbV93
ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgICAgIHdl
YnNpdGVEYXRhU3RvcmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAgfQorICAgIGF1
dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9y
ZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkKKyAg
ICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKIAogICAgIFdlYlByb2Nlc3NQ
cm94eSogc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIgfTsKICAgICBpZiAoIW1f
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewpAQCAtODUzLDcgKzYxMCw3IEBAIFJl
ZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjoKICNpZiBQTEFURk9STShHVEsp
IHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0Zm9ybXMgdXNpbmcgQnViYmxld3JhcCBm
b3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3MgaXMgbGF1bmNoZWQgdXNpbmcgdGhlIFdl
YlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSwKICAgICAvLyBzbyB3ZSBkb24n
dCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZlcmVudCBXZWJzaXRlRGF0YVN0b3JlLgot
ICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vic2l0ZURhdGFTdG9yZSAmJiBtX3dlYnNp
dGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRhU3RvcmUpCisgICAgaWYgKG1fc2FuZGJv
eEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2VuZGlmCiAKQEAgLTExMjUsOSAr
ODgyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdQogICAgICAg
ICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9yVGVzdGluZygpOwogCiAg
ICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24odGhpcywgcHJvY2Vzcy0+
d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAg
IG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5KiBwcm9j
ZXNzKQpAQCAtMTIyMywxMCArOTc3LDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Bv
b2w6OmNyZWF0ZQogICAgIGlmICghcGFnZUNvbmZpZ3VyYXRpb24tPndlYnNpdGVEYXRhU3RvcmUo
KSkgewogICAgICAgICAvLyBXZSB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgdGhlIGRlZmF1bHQgZGF0
YSBzdG9yZSBhcyBsb25nIGFzIHBvc3NpYmxlLgogICAgICAgICAvLyBCdXQgaWYgdGhlcmUgaXMg
YW4gYXR0ZW1wdCB0byBjcmVhdGUgYSB3ZWIgcGFnZSB3aXRob3V0IGFueSBzcGVjaWZpZWQgZGF0
YSBzdG9yZSwgdGhlbiB3ZSBoYXZlIHRvIGNyZWF0ZSBpdC4KLSAgICAgICAgaWYgKCFtX3dlYnNp
dGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLQotICAgICAgICBwYWdl
Q29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0
KCkpOworICAgICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKSk7CiAgICAgfQog
CiAgICAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzczsKQEAgLTEyOTMsMTUgKzEwNDQs
NiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlQmVnaW5Vc2luZ1dlYnNpCiB7CiAgICAgYXV0
byByZXN1bHQgPSBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAuYWRkKGRhdGFTdG9yZS5zZXNzaW9uSUQo
KSwgSGFzaFNldDxXZWJQYWdlUHJveHlJZGVudGlmaWVyPigpKS5pdGVyYXRvci0+dmFsdWUuYWRk
KHBhZ2VJRCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsK
LQotICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwotICAgIGlmIChz
ZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAg
ICBBU1NFUlQoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IGRhdGFTdG9yZS5wYXJhbWV0ZXJz
KCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCA9PSBzZXNzaW9uSUQpOwotICAg
ICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vz
cy0+YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFTdG9yZSkpOwotICAgICAgICAgICAgZGF0YVN0b3Jl
LmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgIH0KIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGFnZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVu
dGlmaWVyIHBhZ2VJRCwgV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKQpAQCAtMTQ0Miw3ICsx
MTg0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBsdWdpbnMoKQogCiBQcm9jZXNz
SUQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpCiB7Ci0gICAgcmV0
dXJuIG1fbmV0d29ya1Byb2Nlc3MgPyBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmll
cigpIDogMDsKKyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucHJv
Y2Vzc0lkZW50aWZpZXIoKTsKIH0KIAogUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpwcmV3YXJt
ZWRQcm9jZXNzSWRlbnRpZmllcigpCkBAIC0xNTkzLDE2ICsxMzM1LDE0IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwoQ2FjaGUKIAogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhN
ZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CiAKLSAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOworICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKENhY2hlTW9kZWwg
Y2FjaGVNb2RlbCkKIHsKICAgICB1cGRhdGVCYWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkoKTsKIAot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
U3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5
Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2Fj
aGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFs
KGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCkBAIC0xNjEyLDcgKzEzNTIsNyBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAKIERvd25sb2FkUHJveHkmIFdlYlByb2Nl
c3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5n
UGFnZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAgIHJldHVybiBlbnN1
cmVOZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0
LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CisgICAgcmV0dXJuIGVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1ZXN0LCBm
cmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5
bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQpAQCAtMTY4OCwyNSArMTQy
OCwxMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigp
KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkK
LXsKLSAgICBBU1NFUlQobV9wcm9jZXNzZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fbmV0
d29ya1Byb2Nlc3MpOwotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghbV9wcm9jZXNzZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3Nob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiA9IHRydWU7Ci19Ci0KIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kU3lu
Y1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSkKIHsKLSAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQot
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2Fn
ZSksIHN0ZDo6Zm9yd2FyZDxVPihyZXBseSksIDApOworICAgIGlmIChOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5jYW5TZW5kTWVzc2FnZSgpKQorICAgICAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0
ZDo6Zm9yd2FyZDxVPihyZXBseSksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKQEAgLTE3MTYs
MTkgKzE0NDIsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2VydAog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIHsKLSAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKSwgMCk7CisgICAg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKICAgICB0ZXJtaW5hdGVTZXJ2aWNl
V29ya2VycygpOwogCi0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0gICAgbV9uZXR3b3Jr
UHJvY2VzcyA9IG51bGxwdHI7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1p
bmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQpAQCAtMTc0MCwxNCArMTQ2MSwxMiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQog
ewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eUZvclRlc3RpbmcoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCkBAIC0xNzcyLDE1ICsxNDkx
LDE0IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UoQ28KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2Uo
KSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdl
KCksIDApOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDZXJ0aWZp
Y2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRp
ZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOworICAgIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1Nw
ZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5m
bygpLCBob3N0KSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1dG9tYXRp
b25DYXBhYmlsaXRpZXMoKSBjb25zdApAQCAtMjMxMSwxMCArMjAyOSw3IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmNsZWFyQ3VycmVudE1vZGlmaWUKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdp
dGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWluLCBP
cHRpb25TZXQ8Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4gbmF2aWdhdGlv
bkRhdGFUcmFuc2ZlciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdlUHJveHlJRCwgUGFn
ZUlkZW50aWZpZXIgd2ViUGFnZUlEKQogewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlkQ29tbWl0Q3Jvc3NTaXRl
TG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0b0RvbWFpbiwgbmF2
aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhE
YXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0b0RvbWFpbiwgbmF2aWdhdGlvbkRh
dGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7CiB9CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRm9yVGVzdGluZyhjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgZmlyc3RQYXJ0eURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IHRoaXJkUGFydHlEb21haW4sIGJvb2wgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzNDAsOCArMjA1
NSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFdlYlByb2Nlc3NIYXNVcGwKICAgICBpZiAo
bV9wcm9jZXNzZXNXaXRoVXBsb2Fkcy5pc0VtcHR5KCkpIHsKICAgICAgICAgV0VCUFJPQ0VTU1BP
T0xfUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJzZXRXZWJQcm9jZXNzSGFzVXBsb2Fk
czogVGhlIG51bWJlciBvZiB1cGxvYWRzIGluIHByb2dyZXNzIGlzIG5vdyBvbmUuIFRha2luZyBO
ZXR3b3JraW5nIGFuZCBVSSBwcm9jZXNzIGFzc2VydGlvbnMuIik7CiAKLSAgICAgICAgQVNTRVJU
KG1fbmV0d29ya1Byb2Nlc3MpOwotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT50YWtlVXBsb2Fk
QXNzZXJ0aW9uKCk7CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnRh
a2VVcGxvYWRBc3NlcnRpb24oKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVCghbV91aVByb2Nl
c3NVcGxvYWRBc3NlcnRpb24pOwogICAgICAgICBtX3VpUHJvY2Vzc1VwbG9hZEFzc2VydGlvbiA9
IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4oZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiV2Vi
S2l0IHVwbG9hZHMiX3MsIEFzc2VydGlvblN0YXRlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKQEAg
LTIzNjYsOCArMjA4MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyV2ViUHJvY2Vzc0hh
c1UKICAgICBpZiAobV9wcm9jZXNzZXNXaXRoVXBsb2Fkcy5pc0VtcHR5KCkpIHsKICAgICAgICAg
V0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJjbGVhcldlYlBy
b2Nlc3NIYXNVcGxvYWRzOiBUaGUgbnVtYmVyIG9mIHVwbG9hZHMgaW4gcHJvZ3Jlc3MgaXMgbm93
IHplcm8uIFJlbGVhc2luZyBOZXR3b3JraW5nIGFuZCBVSSBwcm9jZXNzIGFzc2VydGlvbnMuIik7
CiAKLSAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5jbGVhclVwbG9hZEFzc2VydGlvbigpOworICAgICAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5jbGVhclVwbG9hZEFzc2VydGlvbigpOwogICAgICAgICAKICAgICAg
ICAgQVNTRVJUKG1fdWlQcm9jZXNzVXBsb2FkQXNzZXJ0aW9uKTsKICAgICAgICAgbV91aVByb2Nl
c3NVcGxvYWRBc3NlcnRpb24gPSBudWxscHRyOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5oCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw2IEBA
IE9CSkNfQ0xBU1MgV0tQcmVmZXJlbmNlT2JzZXJ2ZXI7CiAKIG5hbWVzcGFjZSBBUEkgewogY2xh
c3MgQXV0b21hdGlvbkNsaWVudDsKLWNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsK
IGNsYXNzIERvd25sb2FkQ2xpZW50OwogY2xhc3MgSFRUUENvb2tpZVN0b3JlOwogY2xhc3MgSW5q
ZWN0ZWRCdW5kbGVDbGllbnQ7CkBAIC0xNzcsNyArMTc2LDYgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0SGlzdG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9y
eUNsaWVudD4mJik7CiAgICAgdm9pZCBzZXREb3dubG9hZENsaWVudChVbmlxdWVSZWY8QVBJOjpE
b3dubG9hZENsaWVudD4mJik7CiAgICAgdm9pZCBzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JiYpOwotICAgIHZvaWQgc2V0TGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4mJik7CiAKICAgICB2b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2
aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGN1
c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fY29uZmln
dXJhdGlvbi0+Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCk7IH0KQEAg
LTIwOCw5ICsyMDYsNiBAQCBwdWJsaWM6CiAgICAgLy8gRGlzY29ubmVjdCB0aGUgcHJvY2VzcyBm
cm9tIHRoZSBjb250ZXh0LgogICAgIHZvaWQgZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1By
b3h5Kik7CiAKLSAgICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUqIHdlYnNpdGVEYXRhU3RvcmUo
KSBjb25zdCB7IHJldHVybiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNl
dFByaW1hcnlEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsg
bV93ZWJzaXRlRGF0YVN0b3JlID0gJmRhdGFTdG9yZTsgfQotCiAgICAgUmVmPFdlYlBhZ2VQcm94
eT4gY3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+
JiYpOwogCiAgICAgdm9pZCBwYWdlQmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVBy
b3h5SWRlbnRpZmllciwgV2Vic2l0ZURhdGFTdG9yZSYpOwpAQCAtMzA3LDggKzMwMiw2IEBAIHB1
YmxpYzoKICAgICBBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xpZW50
KCkgeyByZXR1cm4gKm1faGlzdG9yeUNsaWVudDsgfQogICAgIFdlYkNvbnRleHRDbGllbnQmIGNs
aWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKLSAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgY29uc3QgeyByZXR1cm4g
Km1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OyB9Ci0KICAgICBzdHJ1Y3QgU3RhdGlzdGlj
cyB7CiAgICAgICAgIHVuc2lnbmVkIHdrVmlld0NvdW50OwogICAgICAgICB1bnNpZ25lZCB3a1Bh
Z2VDb3VudDsKQEAgLTMxNiw5ICszMDksNiBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBzdGF0aWMg
U3RhdGlzdGljcyYgc3RhdGlzdGljcygpOyAgICAKIAotICAgIHZvaWQgdXNlVGVzdGluZ05ldHdv
cmtTZXNzaW9uKCk7Ci0gICAgYm9vbCBpc1VzaW5nVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb247IH0KLQogICAgIHZv
aWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCk7CiAKICAgICB2
b2lkIGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKQEAgLTM5MSw4ICszODEsOCBAQCBwdWJsaWM6
CiAKICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFuYWdlbWVudAogICAgIE5ldHdvcmtQcm9jZXNz
UHJveHkmIGVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRl
RGF0YVN0b3JlID0gbnVsbHB0cik7Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1By
b2Nlc3MoKSB7IHJldHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9Ci0gICAgdm9pZCBuZXR3
b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFZlY3RvcjxzdGQ6OnBhaXI8
UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseT4+JiYpOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzKCkgeyByZXR1cm4gJk5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpOyB9CisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1By
b2Nlc3NQcm94eSYpOwogCiAgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2Vi
UHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCkBAIC01NDQsNiArNTM0LDE3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIG5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZChjb25zdCBTdHJpbmcmIGRvbWFp
biwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IE9wdGlvbmFsPFN0cmluZz4mIGVuY29kZWRWYWx1
ZSk7CiAjZW5kaWYKIAorICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VE
aXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwor
ICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRp
YyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcg
Y29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2
b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCkBAIC01NTksOCArNTYwLDYgQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgcmVxdWVzdFdlYkNvbnRlbnRTdGF0aXN0aWNzKFN0YXRpc3RpY3NSZXF1ZXN0
Jik7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEm
IG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVz
c2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlckRhdGEmJik+JiYpOwogCkBAIC01
ODUsMTQgKzU4NCw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVzZXNTaW5nbGVXZWJQcm9jZXNz
KCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT51c2VzU2luZ2xlV2ViUHJvY2Vzcygp
OyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyBTdHJpbmcgY29va2ll
U3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0
b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0g
ICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGlj
IFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKLSNlbmRpZgotCiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgdm9pZCByZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwog
ICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwpAQCAtNjQ1LDcgKzYz
Niw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVu
dD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50
PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRl
eHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQ
STo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4gbV9hdXRvbWF0aW9uU2Vz
c2lvbjsKIApAQCAtNjc3LDggKzY2Nyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21lbW9yeVNh
bXBsZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9tZW1vcnlTYW1wbGVySW50ZXJ2
YWwgeyAxNDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU+IG1f
d2Vic2l0ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwgUmVm
UHRyPFdlYkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFzaDxjb25zdCBjaGFyKj4+IFdlYkNvbnRl
eHRTdXBwbGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRTdXBwbGVtZW50TWFwIG1fc3VwcGxlbWVu
dHM7CiAKQEAgLTcxMiw4ICs3MDAsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3Byb2Nlc3NU
ZXJtaW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29y
a1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKLQogICAgIEhhc2hNYXA8dWludDY0X3Qs
IFJlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25hcnlDYWxsYmFja3M7CiAgICAg
SGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFN0YXRpc3RpY3NSZXF1ZXN0Pj4gbV9zdGF0aXN0aWNz
UmVxdWVzdHM7CiAKQEAgLTgxNiwxNSArODAyLDE1IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYm
IG1lc3NhZ2UpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vz
cy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6
OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOworICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS5jYW5TZW5kTWVzc2FnZSgpKQorICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5n
UHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCiB7CiAgICAgZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2Fy
ZDxUPihtZXNzYWdlKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9y
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBD
b29raWVTdG9yZS5jcHAJKHJldmlzaW9uIDI1NzU4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0
MSw2IEBAIG5hbWVzcGFjZSBBUEkgewogSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogICAgIDogbV9vd25p
bmdEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fb3duaW5nRGF0YVN0
b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHJl
Z2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIEhUVFBDb29raWVT
dG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCkBAIC01MCwxMTYgKzQ4LDQ0IEBAIEhUVFBDb29raWVT
dG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHko
KSk7CiAgICAgQVNTRVJUKCFtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5KTsKICAgICBBU1NF
UlQoIW1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdpc3RlckZvck5l
d1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6
Y29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29r
aWU+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5n
RGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAg
aWYgKCFwb29sKSB7Ci0gICAgICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGFsbENvb2tpZXM7
Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgICAgIGFsbENvb2tpZXMgPSBnZXRB
bGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7Ci0gICAgICAgIGFsbENvb2tp
ZXMuYXBwZW5kVmVjdG9yKG1fb3duaW5nRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLQot
ICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoYWxsQ29va2llcyk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+Z2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFtwb29sID0g
V1RGTW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsK
LSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29va2llcyk7Ci0gICAgfSk7CisgICAgYXV0byYg
Y29va2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24o
KTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNl
c3Npb25JRCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkKLSAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+
c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVN
YW5hZ2VyLT5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxX
ZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUoY29va2llcykpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1hbmFn
ZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAgY29v
a2llTWFuYWdlci5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJs
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3Jl
OjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byog
cG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVy
YXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY29va2llIDog
Y29va2llcykgewotICAgICAgICAgICAgLy8gRklYTUU6IHBlbmRpbmdDb29raWVzIHVzZWQgZm9y
IGRlZmF1bHRTZXNzaW9uIGJlY2F1c2Ugc2Vzc2lvbiBjb29raWVzIGNhbm5vdCBiZSBwcm9wYWdh
dGVkIHRvIE5ldHdvcmsgUHJvY2VzcyB3aXRoIHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlm
aWVyLgotICAgICAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQ
QUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAg
ICAgICAgICAgICAgICBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29r
aWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3Jl
LT5hZGRQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1l
bnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+
c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZXMsIFtwb29s
ID0gV1RGTW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAg
fSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUoY29uc3QgV2ViQ29y
ZTo6Q29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQ
b29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAg
ICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgIGRlbGV0
ZUNvb2tpZUZyb21EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9vd25pbmdEYXRhU3RvcmUtPnJlbW92ZVBlbmRpbmdDb29raWUo
Y29va2llKTsKLQotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVD
b29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFtwb29sID0gV1RG
TW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKKyAg
ICBhdXRvJiBjb29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNp
bmdsZXRvbigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpkZWxldGVBbGxDb29raWVzKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9v
d25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsK
LSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lv
bklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIGRlbGV0ZUNvb2tpZXNJbkRlZmF1bHRV
SVByb2Nlc3NDb29raWVTdG9yZSgpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQWxsQ29va2llcyht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIg
PSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2ll
TWFuYWdlci5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7
CiAgICAgLy8gRklYTUU6IFRoZSBDb21wbGV0aW9uSGFuZGxlciBzaG91bGQgYmUgcGFzc2VkIHRv
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcy4KICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhU
VFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShXZWJDb3JlOjpIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewot
ICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgp
KQotICAgICAgICAgICAgc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeUluRGVmYXVsdFVJUHJvY2Vz
c0Nvb2tpZVN0b3JlKHBvbGljeSk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdl
ciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29r
aWVNYW5hZ2VyLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUtPnNl
c3Npb25JRCgpLCBwb2xpY3ksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogY2xh
c3MgQVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIgOiBwdWJsaWMgV2ViQ29va2llTWFu
YWdlclByb3h5OjpPYnNlcnZlciB7CkBAIC0xOTUsMjEgKzEyMSw3IEBAIHZvaWQgSFRUUENvb2tp
ZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKE8KIAogICAgIG1fY29va2llTWFuYWdlclByb3h5T2Jz
ZXJ2ZXIgPSBtYWtlVW5pcXVlPEFQSVdlYkNvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyPigqdGhp
cyk7CiAKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9y
Q29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLQotICAgIGlmICghcG9vbCkgewotICAgICAgICBB
U1NFUlQoIW1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyk7Ci0KLSAgICAgICAgLy8gTGlzdGVu
IGZvciBjb29raWUgbm90aWZpY2F0aW9ucyBpbiB0aGUgVUlQcm9jZXNzIGluIHRoZSBtZWFudGlt
ZS4KLSAgICAgICAgc3RhcnRPYnNlcnZpbmdDaGFuZ2VzVG9EZWZhdWx0VUlQcm9jZXNzQ29va2ll
U3RvcmUoW3RoaXNdICgpIHsKLSAgICAgICAgICAgIGNvb2tpZXNEaWRDaGFuZ2UoKTsKLSAgICAg
ICAgfSk7Ci0KLSAgICAgICAgbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzID0gdHJ1ZTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkg
PSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAg
IG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnNpbmdsZXRvbigpOwogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJl
Z2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVN
YW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKQEAgLTI0NCw0NiArMTU2LDEwIEBAIHZvaWQgSFRU
UENvb2tpZVN0b3JlOjpjb29raWVzRGlkQ2hhbmdlKCkKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpj
b29raWVNYW5hZ2VyRGVzdHJveWVkKCkKIHsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclBy
b3h5LT51bnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAq
bV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSA9IG51bGxwdHI7Ci0KLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUt
PnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLQotICAgIGlmICghcG9v
bCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9
IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAg
bV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVn
aXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1h
bmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIAotdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVy
Rm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBBU1NFUlQoIW1fcHJvY2Vz
c1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3Jl
YXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJQcm9jZXNz
UG9vbENyZWF0aW9uTGlzdGVuZXIoW3RoaXNdKFdlYlByb2Nlc3NQb29sJiBuZXdQcm9jZXNzUG9v
bCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5pc0Fzc29jaWF0ZWRQcm9jZXNz
UG9vbChuZXdQcm9jZXNzUG9vbCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8g
Tm93IHRoYXQgYW4gYXNzb2NpYXRlZCBwcm9jZXNzIHBvb2wgZXhpc3RzLCB3ZSBuZWVkIHRvIGZs
dXNoIHRoZSBVSSBwcm9jZXNzIGNvb2tpZSBzdG9yZQotICAgICAgICAvLyB0byBtYWtlIHN1cmUg
YW55IGNoYW5nZXMgYXJlIHJlZmxlY3RlZCB3aXRoaW4gdGhlIG5ldyBwcm9jZXNzIHBvb2wuCi0g
ICAgICAgIGZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIG5ld1By
b2Nlc3NQb29sLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0KLSAgICAgICAgaWYgKG1fY29va2ll
TWFuYWdlclByb3h5T2JzZXJ2ZXIpIHsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5h
Z2VyUHJveHkgPSBuZXdQcm9jZXNzUG9vbC5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5PigpOwotICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+
cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tp
ZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICAgICAgfQotICAgICAgICB1bnJlZ2lzdGVyRm9y
TmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSFRUUENv
b2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKLXsK
LSAgICBpZiAobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKQotICAgICAg
ICBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lciht
X3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9jZXNz
UG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gMDsKLX0KLQogI2lmICFQTEFURk9STShD
T0NPQSkKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVT
dG9yZSgpIHsgfQogVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gSFRUUENvb2tpZVN0b3JlOjpnZXRB
bGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCkgeyByZXR1cm4geyB9OyB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9y
ZS5oCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
SFRUUENvb2tpZVN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDYgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
Jik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7
Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0K
ICAgICBzdGF0aWMgdm9pZCBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwogICAg
IHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29v
a2llU3RvcmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Q29va2llSW5EZWZhdWx0VUlQ
cm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJldmlzaW9uIDI1NzU4MSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyNiw5ICs0MjYsOSBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1NlcnZl
cihXS0NvbnRlCiB7CiB9CiAKLVdLQ29va2llTWFuYWdlclJlZiBXS0NvbnRleHRHZXRDb29raWVN
YW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQorV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29u
dGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmKQogewotICAgIHJldHVybiBXZWJLaXQ6
OnRvQVBJKFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zdXBwbGVtZW50PFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5PigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpKTsKIH0KIAogV0tXZWJzaXRlRGF0
YVN0b3JlUmVmIFdLQ29udGV4dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmKQpAQCAt
NTQ1LDkgKzU0NSw4IEBAIHZvaWQgV0tDb250ZXh0U2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWMK
ICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xs
ZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRVc2VUZXN0aW5n
TmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpCit2b2lkIFdLQ29udGV4dFVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwo
Y29udGV4dCktPnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwogfQogCiB2b2lkIFdLQ29udGV4
dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhXS0NvbnRleHRS
ZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTkwLDcgKzkwLDcgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55
U1NMQwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCiAvLyBUZXN0IG9u
bHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBzZWNvbmRhcnkgcHJvY2Vzc2VzIGFyZSBz
dGFydGVkLgotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9u
KFdLQ29udGV4dFJlZiBjb250ZXh0KTsKK1dLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFVzZVRlc3Rp
bmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRF
RDsKIAogLy8gVGVzdCBvbmx5LiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBydW5uaW5nIGEgdGVz
dC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tDb250
ZXh0UmVmIGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2wubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0JKHJldmlzaW9uIDI1NzU4MSkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDIsNyArMjAyLDcgQEAgLSAodm9pZClfc2V0Q2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVz
dEV2YQogCiAtICh2b2lkKV9zZXRDb29raWVBY2NlcHRQb2xpY3k6KE5TSFRUUENvb2tpZUFjY2Vw
dFBvbGljeSlwb2xpY3kKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgV2ViQ29yZTo6dG9IVFRQQ29va2llQWNjZXB0
UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBXZWJDb3JlOjp0b0hUVFBDb29raWVBY2NlcHRQb2xpY3ko
cG9saWN5KSwgW10oKSB7IH0pOwogfQogCiAtIChpZClfb2JqZWN0Rm9yQnVuZGxlUGFyYW1ldGVy
OihOU1N0cmluZyAqKXBhcmFtZXRlcgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDI1
NzU4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1h
bmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw4ICs2NCw3IEBAIHN0cnVjdCBfV2ViS2l0
Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0
ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHBy
b2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2ll
T2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNz
aW9uSUQoKSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
KiBkYXRhTWFuYWdlcjsKQEAgLTE0MSwxMSArMTQwLDkgQEAgV2ViS2l0Q29va2llTWFuYWdlciog
d2Via2l0Q29va2llTWFuYWdlcgogewogICAgIFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIg
PSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJRV9N
QU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBkYXRh
TWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFN
YW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkgewotICAg
ICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNl
dENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5h
Z2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdF
RF0sIDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
aW5nbGV0b24oKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Np
b25JRCgpLCBbbWFuYWdlcl0geworICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25h
bHNbQ0hBTkdFRF0sIDApOworICAgIH0pOwogICAgIHJldHVybiBtYW5hZ2VyOwogfQogCkBAIC0x
NzUsOCArMTcyLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3Rlbgog
ICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Zm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nl
c3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llUGVyc2lzdGVu
dFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29v
a2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0b3JhZ2UpKTsKKyAgICBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwg
U3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
VHlwZShzdG9yYWdlKSk7CiB9CiAKIC8qKgpAQCAtMTkwLDggKzE4Niw3IEBAIHZvaWQgd2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG8KIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXIt
PnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2Vi
Q29va2llTWFuYWdlclByb3h5PigpLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXIt
PnByaXYtPnNlc3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10o
KSB7IH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2ll
QWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKIH0KIAogLyoqCkBAIC0yNjQsMTEgKzI1
OSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2UKICAgICBnX3Jl
dHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRH
UmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkp
OwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FM
aXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdl
IGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0g
ICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0
UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9v
bHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1h
bmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0
YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5n
bGV0b24oKS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6
OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdf
dGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KQEAgLTMx
NSwxMSArMzA2LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMoVwog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBh
ZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJE
YXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2Ft
ZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nl
c3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9v
bC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFn
ZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nl
c3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tp
ZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRG
OCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiYgY29va2llcykgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCku
Z2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6
OmZyb21VVEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpDb29raWU+JiBjb29raWVzKSB7CiAgICAgICAgIEdMaXN0KiBjb29raWVzTGlzdCA9IG51
bGxwdHI7CiAgICAgICAgIGZvciAoYXV0byYgY29va2llIDogY29va2llcykKICAgICAgICAgICAg
IGNvb2tpZXNMaXN0ID0gZ19saXN0X3ByZXBlbmQoY29va2llc0xpc3QsIGNvb2tpZS50b1NvdXBD
b29raWUoKSk7CkBAIC0zNzMsMTEgKzM2MCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2RlbGV0ZV9jb29raWUKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVm
UHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFi
bGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0
dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwot
ICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRo
ZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Vi
a2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFN
YW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdl
clByb3h5PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNv
cmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYt
PnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRh
c2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUp
OwogICAgIH0pOwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0V2ViQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAJKHJldmlzaW9uIDI1NzU4MSkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zODYsNyArMzg2LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4dENv
bnN0cnVjdGVkKAogICAgICAgICBXZWJLaXQ6OkxlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0
b24oKS5zZXRIU1RTU3RvcmFnZURpcmVjdG9yeShGaWxlU3lzdGVtOjpzdHJpbmdGcm9tRmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaHN0c19j
YWNoZV9kaXJlY3RvcnkocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKSkpOwogCiAgICAg
cHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNvbmZpZ3VyYXRpb24p
OwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5RGF0YVN0b3JlKHdlYmtpdFdlYnNp
dGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkp
KTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5kbGVyKFt3ZWJDb250
ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlck1l
c3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgLy8gU2luayB0aGUgZmxv
YXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZXNzYWdlPiB1c2VyTWVzc2Fn
ZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUobWVzc2FnZSksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCShyZXZpc2lvbiAy
NTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4Nyw4ICsxMzg3LDcgQEAgdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29vawogICAgIGlmICghY29va2llT2JqZWN0
LmdldEJvb2xlYW4oImh0dHBPbmx5Il9zLCBjb29raWUuaHR0cE9ubHkpKQogICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVy
LCAiVGhlIHBhcmFtZXRlciAnaHR0cE9ubHknIHdhcyBub3QgZm91bmQuIik7CiAKLSAgICBXZWJD
b29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVt
ZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29r
aWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2Nh
bGxiYWNrID0gY2FsbGJhY2suY29weVJlZigpXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnNpbmdsZXRvbigpLnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Np
b25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2sgPSBjYWxsYmFjay5jb3B5UmVmKCldKCkgewog
ICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsKIH0KQEAgLTE0MDQsOCAr
MTQwMyw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2sKIAogICAg
IFN0cmluZyBob3N0ID0gYWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29v
a2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsg
aG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMo
cGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRk
aW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246OmdldFNlc3Npb25QZXJtaXNzaW9ucyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9u
RGF0YT4+JiBvdXRfcGVybWlzc2lvbnMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0JKHJldmlzaW9uIDI1NzU4MSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEzOSw4ICsxMzksNyBAQCBzdGF0aWMgdm9pZCByZWdpc3RlclVz
ZXJEZWZhdWx0c0lmTmVlZGVkCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NT
dXBwcmVzc2lvblN0YXRlKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3Vw
cHJlc3Npb25FbmFibGVkKCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgp
KTsKIAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGlmICghbV9wcm9jZXNz
U3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCkpCkBAIC0xNzAsOCArMTY5
LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKAogCiAgICAgaWYg
KCFbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2Vi
S2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1lbW9y
eVByZXNzdXJlSGFuZGxlcigpOwotCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KG1ha2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKTsK
IH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC00NDUsMjIgKzQ0Miw2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KIAogICAgIE5TVXNlckRlZmF1bHRz
ICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAg
ICB7Ci0gICAgICAgIGJvb2wgaXNTYWZhcmkgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlC
cm93c2VyID0gZmFsc2U7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZh
cmkgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAg
aXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7
Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBw
bGljYXRpb246OmlzU2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpN
YWNBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3NlcigpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1Nh
ZmFyaSB8fCBpc01pbmlCcm93c2VyKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBV
UkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQ
cm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVS
TCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5
RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29y
a0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAg
IHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVs
dHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRz
S2V5XTsKQEAgLTQ3MSwxMyArNDUyLDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1J
bml0aWFsaXplTgogICAgIHBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZp
ZXIgPSBpZGVudGlmeWluZ0RhdGFGcm9tQ29va2llU3RvcmFnZShbW05TSFRUUENvb2tpZVN0b3Jh
Z2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIF9jb29raWVTdG9yYWdlXSk7CiAjZW5kaWYKIAot
ICAgIHBhcmFtZXRlcnMuc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQgPSBzdG9yYWdlQWNjZXNzQVBJ
RW5hYmxlZCgpOwotCiAgICAgTlNOdW1iZXIgKmRhdGFiYXNlRW5hYmxlZFZhbHVlID0gW2RlZmF1
bHRzIG9iamVjdEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkludGVybmFsRGVi
dWclQCIsIFdlYlByZWZlcmVuY2VzS2V5Ojppc0lUUERhdGFiYXNlRW5hYmxlZEtleSgpLmNyZWF0
ZUNGU3RyaW5nKCkuZ2V0KCldXTsKICAgICBpZiAoZGF0YWJhc2VFbmFibGVkVmFsdWUpCiAgICAg
ICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBkYXRhYmFzZUVuYWJsZWRW
YWx1ZS5ib29sVmFsdWU7Ci0gICAgZWxzZQotICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJs
ZUlUUERhdGFiYXNlID0gbV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLmlzSVRQRGF0
YWJhc2VFbmFibGVkKCk7CiAKICAgICBwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlv
bkRlYnVnTW9kZSA9IFtkZWZhdWx0cyBib29sRm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiRXhwZXJpbWVudGFsJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6YWRDbGlja0F0dHJpYnV0
aW9uRGVidWdNb2RlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRQcm94eU1hcC5jcHAJKHJldmlzaW9uIDI1NzU4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5
LDkgKzEwOSw2IEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZCgKIAog
ICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1NjQgIiBm
cm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkp
OwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVm
ZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9v
bCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAgIEFTU0VSVCht
X2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKICAgICBtX3Byb2Nlc3MtPnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJKHJl
dmlzaW9uIDI1NzU4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNs
dWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgorI2luY2x1
ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC01MSw3ICs1Miw2IEBACiAjaW5jbHVk
ZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNp
bmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHlNZXNz
YWdlcy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgpAQCAt
NjAsNiArNjAsNyBAQAogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVDbGllbnQuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaXN0cmFi
bGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkK
QEAgLTcwLDYgKzcxLDEwIEBACiAjaW5jbHVkZSA8d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+CiAj
ZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudC5oIgorI2VuZGlmCisKICNkZWZpbmUgTUVTU0FHRV9DSEVDSyhhc3Nl
cnRpb24pIE1FU1NBR0VfQ0hFQ0tfQkFTRShhc3NlcnRpb24sIGNvbm5lY3Rpb24oKSkKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CkBAIC04MiwxOCArODcsODMgQEAgc3RhdGljIHVpbnQ2NF90IGdlbmVy
YXRlQ2FsbGJhY2tJRCgpCiAgICAgcmV0dXJuICsrY2FsbGJhY2tJRDsKIH0KIAotTmV0d29ya1By
b2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bv
b2wpCi0gICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHkocHJvY2Vzc1Bvb2wuYWx3YXlzUnVuc0F0
QmFja2dyb3VuZFByaW9yaXR5KCkpCi0gICAgLCBtX3Byb2Nlc3NQb29sKHByb2Nlc3NQb29sKQor
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiYgZ2xvYmFsTmV0d29y
a1Byb2Nlc3MoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya1Byb2Nlc3NQcm94eT4+IG5ldHdvcmtQcm9jZXNzOworICAgIHJldHVybiBuZXR3b3Jr
UHJvY2VzczsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkKK3sKKyAgICBpZiAoIWdsb2JhbE5ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICAg
ICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSA9IG1ha2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQcm94
eT4oKTsKKyAgICAgICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKS0+c2VuZENyZWF0aW9uUGFyYW1l
dGVyc1RvTmV3UHJvY2VzcygpOworICAgIH0KKyAgICByZXR1cm4gKmdsb2JhbE5ldHdvcmtQcm9j
ZXNzKCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YXR0ZW1wdFJlbGF1bmNoQWZ0
ZXJDcmFzaElmTmVjZXNzYXJ5KFZlY3RvcjxzdGQ6OnBhaXI8UmVmPFdlYlByb2Nlc3NQcm94eT4s
IE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRl
bGF5ZWRSZXBseT4+JiYgcGVuZGluZ1JlcXVlc3RzKQoreworICAgIGdsb2JhbE5ldHdvcmtQcm9j
ZXNzKCkgPSBudWxscHRyOworICAgIGlmIChwZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisgICAgYXV0byYgbmV3TmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKTsKKyAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBwZW5kaW5nUmVx
dWVzdHMpCisgICAgICAgIG5ld05ldHdvcmtQcm9jZXNzLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbihyZXF1ZXN0LmZpcnN0LmdldCgpLCBXVEZNb3ZlKHJlcXVlc3Quc2Vjb25kKSk7Cit9CisK
K3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJv
Y2VzcygpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQ
SSBvbiBub24tbWFpbiB0aHJlYWRzLgorICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNl
IHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KKyAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgorICAgIGlm
ICghUnVuTG9vcDo6aXNNYWluKCkpIHsKKyAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0
KFt0aGlzXSB7CisgICAgICAgICAgICBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNz
KCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzIHBhcmFtZXRlcnM7CisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgIHBhcmFt
ZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7CisgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgcGFyYW1ldGVycy5zZXJ2aWNl
V29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyNlbmRpZgorICAg
IHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6
c2luZ2xldG9uKCkuaHN0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMu
aHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmhzdHNTdG9yYWdl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNTZWN1cmUoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNz
aW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3Vy
aXR5UG9saWN5KCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2Fs
ID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVz
VG9SZWdpc3RlckFzTG9jYWwoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRv
bigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKKyAgICBwYXJhbWV0ZXJzLmNhY2hl
TW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwor
ICAgIGZvciAoYXV0byYgc2NoZW1lIDogV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3Vz
dG9tUHJvdG9jb2xIYW5kbGVycygpKQorICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdp
c3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOworI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisgICAgaWYgKFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJv
Y2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsgIWNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JS
ZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jb29r
aWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIGNvbnRh
aW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGly
ZWN0b3J5KCk7ICFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29udGFp
bmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkgPSBX
ZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7ICFwYXJlbnRCdW5kbGVEaXJl
Y3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUo
cGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwg
cGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworI2VuZGlm
CisgICAgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBh
cmFtZXRlcnMpOworICAgIHBhcmFtZXRlcnMuZGF0YVN0b3JlUGFyYW1ldGVycyA9IFdlYnNpdGVE
YXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKCk7CisgICAgc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKSwgMCk7
Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoKQorICAgIDog
QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KCkKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NP
TF9NQU5BR0VSKQogICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKICNl
bmRpZgotICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJh
Y2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBmYWxzZSkKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1h
a2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKQorI2VuZGlmCiB7
CiAgICAgY29ubmVjdCgpOwotCi0gICAgaWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBtX3By
b2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jl
cy5zZXQod2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIG1ha2VSZWYoKndlYnNpdGVEYXRh
U3RvcmUpKTsKIH0KIAogTmV0d29ya1Byb2Nlc3NQcm94eTo6fk5ldHdvcmtQcm9jZXNzUHJveHko
KQpAQCAtMTE3LDExICsxODcsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5j
aE9wdGlvCiB7CiAgICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hl
cjo6UHJvY2Vzc1R5cGU6Ok5ldHdvcms7CiAgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRM
YXVuY2hPcHRpb25zKGxhdW5jaE9wdGlvbnMpOwotCi0gICAgaWYgKHByb2Nlc3NQb29sKCkuc2hv
dWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKLSAgICAg
ICAgcHJvY2Vzc1Bvb2woKS5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFp
bEZvclRlc3RpbmcoZmFsc2UpOwotICAgICAgICBsYXVuY2hPcHRpb25zLnNob3VsZE1ha2VQcm9j
ZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB0cnVlOwotICAgIH0KIH0KIAogdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uKQpAQCAtMTgyLDEyICsyNDcsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzeW50
aGVzaXplQXBwSQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94
eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBm
cmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQcm94eSYg
TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3Jl
JiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywg
V2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rvd25sb2FkUHJv
eHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8RG93bmxvYWRQ
cm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRl
RG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwg
ZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlN
YXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVzb3VyY2VS
ZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
RmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoV2Vic2l0
ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjQ4LDE4ICszMTMsMjAgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpuZXR3b3JrUHJvY2VzcwogewogICAgIGNsZWFyQ2FsbGJhY2tT
dGF0ZXMoKTsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4s
IE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6
RGVsYXllZFJlcGx5Pj4gcGVuZGluZ1JlcXVlc3RzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVm
PFdlYlByb2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5Pj4gcGVuZGluZ1JlcXVlc3RzOwogICAgIHBl
bmRpbmdSZXF1ZXN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY29ubmVjdGlvblJlcXVlc3Rz
LnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDogbV9jb25uZWN0aW9uUmVxdWVzdHMu
dmFsdWVzKCkpIHsKICAgICAgICAgaWYgKHJlcXVlc3Qud2ViUHJvY2VzcykKLSAgICAgICAgICAg
IHBlbmRpbmdSZXF1ZXN0cy51bmNoZWNrZWRBcHBlbmQoc3RkOjptYWtlX3BhaXIobWFrZVJlZlB0
cihyZXF1ZXN0LndlYlByb2Nlc3MuZ2V0KCkpLCBXVEZNb3ZlKHJlcXVlc3QucmVwbHkpKSk7Cisg
ICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMudW5jaGVja2VkQXBwZW5kKHsgKnJlcXVlc3Qud2Vi
UHJvY2VzcywgV1RGTW92ZShyZXF1ZXN0LnJlcGx5KSB9KTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgcmVxdWVzdC5yZXBseSh7IH0pOwogICAgIH0KICAgICBtX2Nvbm5lY3Rpb25SZXF1ZXN0
cy5jbGVhcigpOwogCi0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8g
Zm9yZ2V0IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2Ug
dXMgdG8gYmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZCgqdGhpcywgV1RGTW92ZShwZW5kaW5nUmVxdWVzdHMpKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKworICAgIGF0dGVtcHRSZWxh
dW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeShXVEZNb3ZlKHBlbmRpbmdSZXF1ZXN0cykpOwogfQog
CiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNsZWFyQ2FsbGJhY2tTdGF0ZXMoKQpAQCAtMjc5
LDkgKzM0Niw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3MKICAg
ICBpZiAoZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwg
ZGVjb2RlcikpCi0gICAgICAgIHJldHVybjsKLQogICAgIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vz
c1Byb3h5TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIApAQCAtMjk1LDggKzM1OSw2
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZVN5bmMKIAogdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewotICAgIGF1dG8g
cHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwotCiAgICAgaWYg
KG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlk
YXRlKCk7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKQEAgLTM1
MiwxMSArNDE0LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0b3BPcmlnaW4gfHwgIW1fcHJvY2Vz
c1Bvb2wuaXNTZXJ2aWNlV29ya2VyUGFnZUlEKHBhZ2VJRCkpIHsKLSAgICAgICAgcHJvY2Vzc0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHNlc3Npb25JRCwgV1RGTW92ZShhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgV2ViUGFnZVByb3h5Ojpm
b3JNb3N0VmlzaWJsZVdlYlBhZ2VJZkFueShzZXNzaW9uSUQsICp0b3BPcmlnaW4sIFt0aGlzLCB3
ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlID0gV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIG5lZ290aWF0ZWRMZWdh
Y3lUTFNdKGF1dG8qIHBhZ2UpIG11dGFibGUgewogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtNDE1LDExICs0NzIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmRpZEZpbmlzaExhdW5jCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbm5lY3Rp
b25SZXF1ZXN0LnJlcGx5KHsgfSk7CiAgICAgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
aWYgKG1fcHJvY2Vzc1Bvb2wucHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKQotICAgICAgICBz
ZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHRydWUpOwotI2VuZGlmCiAgICAgCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uID0g
dGhpcy0+Y29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCkpCkBAIC0xMjA4LDQyICsxMjYwLDI1
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkU3luY0FsbENvb2sKICAgICB9CiB9CiAK
LXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9y
ZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRl
RGF0YVN0b3JlJiBzdG9yZSkKIHsKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAg
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9y
ZS0+cGFyYW1ldGVycygpIH0sIDApOwotICAgIGF1dG8gc2Vzc2lvbklEID0gc3RvcmUtPnNlc3Np
b25JRCgpOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpIHsKKyAgICAgICAgc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5w
YXJhbWV0ZXJzKCkgfSwgMCk7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgICAg
IGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnkoKSk7CisgICAgaWYgKCFzdG9yZS5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgp
KQorICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUucmVzb2x2ZWRJbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiAjZW5kaWYKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0
b3Jlcy5zZXQoc2Vzc2lvbklELCBXVEZNb3ZlKHN0b3JlKSk7Ci0gICAgfQogfQogCiB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQogewogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6RGVzdHJveVNlc3Npb24geyBzZXNzaW9uSUQgfSwgMCk7Ci0gICAgaWYg
KCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jlcy5y
ZW1vdmUoc2Vzc2lvbklEKTsKIH0KIAogV2Vic2l0ZURhdGFTdG9yZSogTmV0d29ya1Byb2Nlc3NQ
cm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklEKQogewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX3dlYnNpdGVEYXRhU3RvcmVzLmZpbmQoc2Vz
c2lvbklEKTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV93ZWJzaXRlRGF0YVN0b3Jlcy5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLQotICAgIGlmIChhdXRvKiB3
ZWJzaXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpIHsKLSAg
ICAgICAgaWYgKHNlc3Npb25JRCA9PSB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSkKLSAg
ICAgICAgICAgIHJldHVybiB3ZWJzaXRlRGF0YVN0b3JlOwotICAgIH0KLQotICAgIGlmIChzZXNz
aW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlKCkucHRyKCk7CisgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0
aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKQEAgLTEyOTAsNyArMTMyNSw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6ZGlkRGVzdHJveVdlYlUKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3Jr
UHJvY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKLSAgICBtX3Byb2Nlc3NQb29sLmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksIHNl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGF1dG8gYWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+ZXN0YWJsaXNoV29ya2VyQ29udGV4dENv
bm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBSZWdpc3RyYWJsZURvbWFpbiB7cmVnaXN0
cmFibGVEb21haW59LCBzZXNzaW9uSUQsIFthZ2dyZWdhdG9yID0gYWdncmVnYXRvci5jb3B5UmVm
KCldKCkgeyB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3b3JrZXJDb250ZXh0
Q29ubmVjdGlvbk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIGlkZW50
aWZpZXIpCkBAIC0xNDI3LDIxICsxNDY0LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpw
cmVjb25uZWN0VG8oUAogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NB
c3NlcnRpb24oKQogewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91bmRXZWJQcm9j
ZXNzZXMoKSkgewotICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRGb3JlZ3Jv
dW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7Ci0gICAgICAgICAgICBt
X2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0
eSgiTmV0d29ya2luZyBmb3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsKLSAgICAgICAgICAgIHNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvRm9yZWdy
b3VuZCgpLCAwKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChw
cm9jZXNzUG9vbCgpLmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewotICAgICAgICBpZiAo
IVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZy
b21XZWJQcm9jZXNzZXMpKSB7Ci0gICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3Nl
cyA9IHRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgYmFja2dy
b3VuZCB2aWV3KHMpIl9zKTsKLSAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0g
bnVsbHB0cjsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZXNldFF1b3RhKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDI1NzU4MSkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5LmgiCiAjZW5kaWYKIAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3MgU2Vzc2lvbklE
OwogfQpAQCAtNjUsNyArNjksNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIERvd25sb2Fk
UHJveHk7CiBjbGFzcyBEb3dubG9hZFByb3h5TWFwOwogY2xhc3MgV2ViUGFnZVByb3h5OwotY2xh
c3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTsK
IAogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MgOiBib29sOwpAQCAtOTMs
MTIgKzk2LDEzIEBAIHB1YmxpYzoKICAgICB1c2luZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nl
c3MgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKICAgICB1c2luZyBPcGVuZXJEb21haW4g
PSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKIAotICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9j
ZXNzUHJveHkoV2ViUHJvY2Vzc1Bvb2wmKTsKKyAgICBzdGF0aWMgTmV0d29ya1Byb2Nlc3NQcm94
eSYgc2luZ2xldG9uKCk7CisgICAgZXhwbGljaXQgTmV0d29ya1Byb2Nlc3NQcm94eSgpOwogICAg
IH5OZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CiAKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7CiAKLSAgICBEb3dubG9hZFBy
b3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBv
cmlnaW5hdGluZ1BhZ2UpOworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHko
V2Vic2l0ZURhdGFTdG9yZSYsIFdlYlByb2Nlc3NQb29sJiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRp
bmdQYWdlKTsKIAogICAgIHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9u
PiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+JiYpOwogICAgIHZvaWQgZGVs
ZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpOwpAQCAtMTg0LDEzICsxODgsMTEgQEAgcHVibGljOgogICAgIFByb2Nl
c3NUaHJvdHRsZXImIHRocm90dGxlcigpIHsgcmV0dXJuIG1fdGhyb3R0bGVyOyB9CiAgICAgdm9p
ZCB1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCk7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vz
c1Bvb2woKSB7IHJldHVybiBtX3Byb2Nlc3NQb29sOyB9Ci0KICNpZiBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQogICAgIHZvaWQgZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5KFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Jik7CiAjZW5kaWYKIAotICAgIHZvaWQg
YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJik7CisgICAgdm9pZCBhZGRTZXNzaW9u
KFdlYnNpdGVEYXRhU3RvcmUmKTsKICAgICB2b2lkIHJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9u
SUQpOwogICAgIAogICAgIHZvaWQgdGFrZVVwbG9hZEFzc2VydGlvbigpOwpAQCAtMjA4LDYgKzIx
MCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVBy
b3RvY29sKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgdW5yZWdpc3RlclNjaGVtZUZvckxlZ2Fj
eUN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwogCisjaWYgRU5BQkxFKExFR0FDWV9DVVNU
T01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCogbGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgeyByZXR1cm4gbV9jdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQuZ2V0KCk7IH0KKyNlbmRpZgorCisgICAgdm9pZCBuZXR3b3Jr
UHJvY2Vzc0NyYXNoZWQoKTsKKyAgICAKICAgICB2b2lkIHJlc2V0UXVvdGEoUEFMOjpTZXNzaW9u
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICB2b2lkIHJlc291cmNlTG9h
ZERpZFNlbmRSZXF1ZXN0KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFJlc291cmNlTG9hZEluZm8m
JiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYpOwpAQCAtMjIwLDYgKzIyOCw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEluQXBwQnJvd3NlclByaXZhY3lFbmFibGVkKFBBTDo6U2Vzc2lvbklE
LCBib29sLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIAogcHJpdmF0ZToKKyAg
ICB2b2lkIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICBzdGF0aWMg
dm9pZCBhdHRlbXB0UmVsYXVuY2hBZnRlckNyYXNoSWZOZWNlc3NhcnkoVmVjdG9yPHN0ZDo6cGFp
cjxSZWY8V2ViUHJvY2Vzc1Byb3h5PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5Pj4mJik7CisKICAgICAvLyBBdXhpbGlh
cnlQcm9jZXNzUHJveHkKICAgICBBU0NJSUxpdGVyYWwgcHJvY2Vzc05hbWUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiAiTmV0d29ya2luZyJfczsgfQogCkBAIC0yMjcsNyArMjM4LDYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlk
ZTsKICAgICB2b2lkIHByb2Nlc3NXaWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJp
ZGU7CiAKLSAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xlYXJD
YWxsYmFja1N0YXRlcygpOwogCiAgICAgLy8gUHJvY2Vzc1Rocm90dGxlckNsaWVudApAQCAtMjgz
LDggKzI5Myw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShQQUw6OlNlc3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+
JiYpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBzdHJ1Y3Qg
Q29ubmVjdGlvblJlcXVlc3QgewogICAgICAgICBXZWFrUHRyPFdlYlByb2Nlc3NQcm94eT4gd2Vi
UHJvY2VzczsKICAgICAgICAgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5IHJlcGx5OwpAQCAtMzExLDkgKzMxOSwxMCBAQCBw
cml2YXRlOgogICAgIEhhc2hTZXQ8V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkqPiBtX3dl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3hpZXM7CiAjZW5kaWYKIAotICAgIEhhc2hNYXA8UEFM
OjpTZXNzaW9uSUQsIFJlZlB0cjxXZWJzaXRlRGF0YVN0b3JlPj4gbV93ZWJzaXRlRGF0YVN0b3Jl
czsKLSAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvY2Vzc0Fzc2VydGlvbj4gbV91cGxvYWRB
c3NlcnRpb247CisjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9j
b2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDI1NzU4MSkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTcgKzQ0LDIwIEBAIExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWMKIAogdm9pZCBMZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRMb2FkaW5nKHVpbnQ2NF90IGN1c3RvbVByb3Rv
Y29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBt
X25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQoKS5zdGFydExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOwor
ICAgIGlmIChhdXRvKiBjbGllbnQgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5s
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSkKKyAgICAgICAgY2xpZW50LT5zdGFy
dExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOwogfQogCiB2b2lkIExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyh1aW50NjRfdCBjdXN0
b21Qcm90b2NvbElEKQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgp
LmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Q
cm90b2NvbElEKTsKKyAgICBpZiAoYXV0byogY2xpZW50ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkubGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkpCisgICAgICAg
IGNsaWVudC0+c3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOwogfQogCiB2b2lk
IExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBt
X25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsKKyAgICBpZiAoYXV0byogY2xpZW50ID0gTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkubGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KCkpCisgICAgICAgIGNsaWVudC0+aW52YWxpZGF0ZSgqdGhpcyk7CiB9CiAKIHZvaWQgTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QodWlu
dDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNl
KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHJldmlzaW9uIDI1NzU4MSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0
aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJh
Y2tGb3J3YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNp
bmNsdWRlICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpAQCAtODMsMTMgKzg0LDIyIEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVIKICAgICBhbGxvd3NXZWJzaXRlRGF0YVJl
Y29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNz
aW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFTdG9yZXMoKQorc3RhdGlj
IEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgYWxsRGF0YVN0b3Jl
cygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+PiBt
YXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAorVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzPiBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpCit7CisgICAg
VmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBhbGxQYXJhbWV0ZXJzOworICAgIGFs
bFBhcmFtZXRlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhbGxEYXRhU3RvcmVzKCkuc2l6ZSgp
KTsKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAg
ICAgICBhbGxQYXJhbWV0ZXJzLnVuY2hlY2tlZEFwcGVuZChzdG9yZS0+cGFyYW1ldGVycygpKTsK
KyAgICByZXR1cm4gYWxsUGFyYW1ldGVyczsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdl
YnNpdGVEYXRhU3RvcmU6OmNyZWF0ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246
OmNyZWF0ZShJc1BlcnNpc3RlbnQ6Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1l
cmFsU2Vzc2lvbklEKCkpKTsKQEAgLTExNSwxMCArMTI1LDExIEBAIFdlYnNpdGVEYXRhU3RvcmU6
OldlYnNpdGVEYXRhU3RvcmUoUmVmPFcKICNlbmRpZgogewogICAgIFdURjo6c2V0UHJvY2Vzc1By
aXZpbGVnZXMoYWxsUHJpdmlsZWdlcygpKTsKLSAgICBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCgpOworICAgIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogICAgIHBsYXRmb3JtSW5p
dGlhbGl6ZSgpOwogCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5hZGRTZXNzaW9uKCp0aGlzKTsKIH0KIAogV2Vic2l0
ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQpAQCAtMTI3LDE3ICsxMzgsMTIgQEAgV2Vi
c2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95
KCk7CiAKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSkgewotICAgICAgICBBU1NFUlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9z
ZXNzaW9uSUQpID09IHRoaXMpOwotICAgICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92
ZShtX3Nlc3Npb25JRCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9j
ZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAg
fQotICAgIH0KKyAgICBBU1NFUlQoYWxsRGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0g
dGhpcyk7CisgICAgYWxsRGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7
CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQotICAgICAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1By
b3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKLSAgICAgICAgICAg
IGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgaWYgKGF1
dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVk
KCkpCisgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7
CiAjZW5kaWYKIH0KIApAQCAtMTY4LDE3ICsxNzQsMTUgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0RGF0YVN0b3JlRQogICAgIHJldHVybiAhIWdsb2JhbERlZmF1bHREYXRhU3RvcmUo
KTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgp
CiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25EZWZhdWx0RGF0YVN0b3JlcygpLmFk
ZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1
bHQuaXNOZXdFbnRyeSk7Ci0gICAgfQorICAgIGF1dG8gcmVzdWx0ID0gYWxsRGF0YVN0b3Jlcygp
LmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3Vs
dC5pc05ld0VudHJ5KTsKIH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6
ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKK1dlYnNpdGVEYXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0
YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICByZXR1
cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBub25E
ZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4g
YWxsRGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCkBAIC0xOTQsMTIg
KzE5OCw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dW5yZWdpc3RlclByb2Nlc3MKICAgICBt
X3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9CiAKLVdlYlByb2Nlc3NQb29sKiBXZWJzaXRl
RGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkKLXsKLSAg
ICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEsIGZhbHNlKTsKLSAgICByZXR1cm4gcG9vbHMu
aXNFbXB0eSgpID8gbnVsbHB0ciA6IHBvb2xzLmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBp
ZiAobV9oYXNSZXNvbHZlZERpcmVjdG9yaWVzKQpAQCAtMTg3OCwxMyArMTg3Niw2IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUMKICNlbmRpZgogfQogCi1ib29sIFdl
YnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBw
cm9jZXNzUG9vbCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2xEYXRhU3RvcmUg
PSBwcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAgICAgIHJldHVybiBwcm9jZXNz
UG9vbERhdGFTdG9yZSA9PSB0aGlzOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogSGFzaFNldDxS
ZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6
ZV90IGNvdW50LCBib29sIGVuc3VyZUFQb29sRXhpc3RzKSBjb25zdAogewogICAgIEhhc2hTZXQ8
UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xzOwpAQCAtMTg5MywxOSArMTg4NCw2
IEBAIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0ZUQKICAgICAgICAgICAg
IHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOwogICAgIH0KIAotICAgIGlmIChwcm9jZXNz
UG9vbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uZSBvZiB0aGUg
bGVnYWN5IGRhdGEgc3RvcmVzLgotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQXNz
b2NpYXRlZFByb2Nlc3NQb29sKCpwcm9jZXNzUG9vbCkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOwotCi0gICAg
ICAgICAgICBpZiAocHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBjb3VudCkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0
eSgpICYmIGNvdW50ICYmIGVuc3VyZUFQb29sRXhpc3RzKSB7CiAgICAgICAgIGF1dG8gcHJvY2Vz
c1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uOjpjcmVhdGUoKSk7CiAgICAgICAgIHByb2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wucHRy
KCkpOwpAQCAtMjA4MywyOSArMjA2MSw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJS
ZXNvdXJjZUxvYWQKIH0KICNlbmRpZgogCi1WZWN0b3I8V2ViQ29yZTo6Q29va2llPiBXZWJzaXRl
RGF0YVN0b3JlOjpwZW5kaW5nQ29va2llcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcHlUb1Zl
Y3RvcihtX3BlbmRpbmdDb29raWVzKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphZGRQ
ZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVu
ZGluZ0Nvb2tpZXMucmVtb3ZlSWYoWyZjb29raWVdKGF1dG8mIHBlbmRpbmdDb29raWUpIHsKLSAg
ICAgICAgcmV0dXJuIHBlbmRpbmdDb29raWUuaXNLZXlFcXVhbChjb29raWUpOwotICAgIH0pOwot
ICAgIG1fcGVuZGluZ0Nvb2tpZXMuYWRkKGNvb2tpZSk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkK
LXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZShjb29raWUpOwotfQotICAgIAotdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBlbmRpbmdDb29raWVzKCkKLXsKLSAgICBtX3BlbmRpbmdD
b29raWVzLmNsZWFyKCk7Ci19Ci0KIHVpbnQ2NF90IFdlYnNpdGVEYXRhU3RvcmU6OnBlclRoaXJk
UGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBDb25zaWRl
ciB3aGV0aGVyIGFsbG93aW5nIHRvIHNldCBhIHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVv
dGEgZnJvbSBhIFdlYnNpdGVEYXRhU3RvcmUuCkBAIC0yMTU2LDYgKzIxMTEsMTAgQEAgV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdAogCiAgICAgcGxhdGZvcm1TZXROZXR3
b3JrUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKIAorI2lmIFVTRShTT1VQKQorICAgIFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5nZXRDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZShzZXNzaW9uSUQoKSwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29v
a2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworI2VuZGlmCisgICAgCiAgICAgcmV0
dXJuIHBhcmFtZXRlcnM7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHJldmlzaW9uIDI1
NzU4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIHB1YmxpYzoKICAgICBX
ZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiwgUEFM
OjpTZXNzaW9uSUQpOwogICAgIH5XZWJzaXRlRGF0YVN0b3JlKCk7CiAKLSAgICBzdGF0aWMgV2Vi
c2l0ZURhdGFTdG9yZSogZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBB
TDo6U2Vzc2lvbklEKTsKKyAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdEYXRh
U3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOwogCiAgICAgYm9vbCBpc1BlcnNpc3Rl
bnQoKSBjb25zdCB7IHJldHVybiAhbV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKTsgfQogICAgIFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CkBA
IC0yMTQsMTUgKzIxNCw4IEBAIHB1YmxpYzoKIAogICAgIERldmljZUlkSGFzaFNhbHRTdG9yYWdl
JiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpIHsgcmV0dXJuIG1fZGV2aWNlSWRIYXNoU2FsdFN0
b3JhZ2UuZ2V0KCk7IH0KIAotICAgIFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbEZvckNvb2tp
ZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgYm9vbCBpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChX
ZWJQcm9jZXNzUG9vbCYpIGNvbnN0OwotCiAgICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMg
cGFyYW1ldGVycygpOwotCi0gICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tp
ZXMoKSBjb25zdDsKLSAgICB2b2lkIGFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29v
a2llJik7Ci0gICAgdm9pZCByZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tp
ZSYpOwotICAgIHZvaWQgY2xlYXJQZW5kaW5nQ29va2llcygpOworICAgIHN0YXRpYyBWZWN0b3I8
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IHBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKCk7CiAK
ICNpZiBVU0UoQ1VSTCkKICAgICB2b2lkIHNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6
OkN1cmxQcm94eVNldHRpbmdzJiYpOwpAQCAtMzA1LDcgKzI5OCw3IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFn
ZURpcmVjdG9yeSwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZvaWQgcmVt
b3ZlTWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgY29u
c3QgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAKLSAgICB2b2lkIG1h
eWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgdm9pZCByZWdpc3RlcldpdGhTZXNz
aW9uSURNYXAoKTsKIAogICAgIGNvbnN0IFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogCkBA
IC0zMzIsOCArMzI1LDYgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5n
cyBtX3Byb3h5U2V0dGluZ3M7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29va2ll
PiBtX3BlbmRpbmdDb29raWVzOwotICAgIAogICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94
eT4gbV9wcm9jZXNzZXM7CiAKICNpZiBIQVZFKFNFQ19LRVlfUFJPWFkpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2Eu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29j
b2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTE5Niw4ICsxOTYsNiBAQCBXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycyBXZWJzaXRlRGF0YVN0CiAgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gY29uZmlndXJhdGlvbigp
LnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOwogICAgIHBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmll
ciA9IGNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIo
KTsKIAotICAgIHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBjb3B5VG9WZWN0b3IobV9wZW5k
aW5nQ29va2llcyk7Ci0KICAgICBpZiAoIWNvb2tpZUZpbGUuaXNFbXB0eSgpKQogICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoRmlsZVN5
c3RlbTo6ZGlyZWN0b3J5TmFtZShjb29raWVGaWxlKSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdl
UGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNv
dXAuY3BwCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsOCArMzcsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29yCiB7
CiAgICAgYXV0byYgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnM7CiAKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNz
UG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5z
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0
b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0
ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUpOworICAgIFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0
b24oKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CiB9CiAKIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGli
LmNwcAkocmV2aXNpb24gMjU3NTgxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9X
ZWJQcm9jZXNzUHJveHlHTGliLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB2
b2lkIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPCiAgICAgICAgIGlmICghZGF0
YVN0b3JlKSB7CiAgICAgICAgICAgICAvLyBQcmV3YXJtZWQgcHJvY2Vzc2VzIGRvbid0IGhhdmUg
YSBXZWJzaXRlRGF0YVN0b3JlIHlldCwgc28gdXNlIHRoZSBwcmltYXJ5IFdlYnNpdGVEYXRhU3Rv
cmUgZnJvbSB0aGUgV2ViUHJvY2Vzc1Bvb2wuCiAgICAgICAgICAgICAvLyBUaGUgcHJvY2VzcyB3
b24ndCBiZSB1c2VkIGlmIGN1cnJlbnQgV2Vic2l0ZURhdGFTdG9yZSBpcyBkaWZmZXJlbnQgdGhh
biB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFyeSBvbmUuCi0gICAgICAgICAgICBkYXRhU3RvcmUg
PSBtX3Byb2Nlc3NQb29sLT53ZWJzaXRlRGF0YVN0b3JlKCk7CisgICAgICAgICAgICBkYXRhU3Rv
cmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7CiAgICAgICAg
IH0KIAogICAgICAgICBBU1NFUlQoZGF0YVN0b3JlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNw
cAkocmV2aXNpb24gMjU3NTgxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJD
b29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5o
IgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYkNvb2tp
ZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAKQEAgLTM0
LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
IHN0b3JhZ2VUeXBlKQogewogICAgIG1fY29va2llUGVyc2lzdGVudFN0b3JhZ2VNYXAuc2V0KHNl
c3Npb25JRCwgc3RkOjptYWtlX3BhaXIoc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7Ci0gICAg
cHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBh
dGgsIHN0b3JhZ2VUeXBlKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3Jh
Z2Uoc2Vzc2lvbklELCBzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpLCAwKTsKIH0KIAogdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlVHlwZSYgc3RvcmFnZVR5cGUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCShyZXZpc2lvbiAy
NTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDI3ICszNywyMyBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAg
TmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVy
cyA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRD
b29raWVQZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklE
LCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBk
ZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAg
ICAvLyBGSVhNRTogbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeSBzaG91bGQgYmUgbW92
ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgLy8gRklYTUU6IG1faWdub3JlVExTRXJy
b3JzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZSBvciByZW1vdmVkLgor
ICAgIC8vIEZJWE1FOiBtX25ldHdvcmtQcm94eVNldHRpbmdzIHNob3VsZCBiZSBtb3ZlZCB0byB0
aGUgV2Vic2l0ZURhdGFTdG9yZS4KIAotICAgIHBhcmFtZXRlcnMuY29va2llQWNjZXB0UG9saWN5
ID0gbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeTsKLSAgICBwYXJhbWV0ZXJzLmlnbm9y
ZVRMU0Vycm9ycyA9IG1faWdub3JlVExTRXJyb3JzOwogICAgIHBhcmFtZXRlcnMubGFuZ3VhZ2Vz
ID0gdXNlclByZWZlcnJlZExhbmd1YWdlcygpOwotICAgIHBhcmFtZXRlcnMucHJveHlTZXR0aW5n
cyA9IG1fbmV0d29ya1Byb3h5U2V0dGluZ3M7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAgICBtX2lnbm9yZVRM
U0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vycm9ycyksIDApOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJ
Z25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoY29uc3QgV2ViQ29yZTo6U291cE5ldHdv
cmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykKIHsKICAgICBtX25ldHdvcmtQcm94eVNldHRpbmdz
ID0gc2V0dGluZ3M7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlT
ZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdv
cmtQcm94eVNldHRpbmdzKG1fbmV0d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKIH0KIAogfQpJbmRl
eDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNp
b24gMjU3NTgxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTYgQEAKKzIwMjAtMDItMjcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KKworICAgICAgICBVc2UgYSBOZXR3b3JrUHJvY2Vzc1Byb3h5IHNpbmdsZXRvbiBpbnN0
ZWFkIG9mIG9uZSBwZXIgV2ViUHJvY2Vzc1Bvb2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzU0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9X
S0hUVFBDb29raWVTdG9yZS5tbToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxl
Z2F0ZSB3YWl0Rm9yTWVzc2FnZV0pOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURl
bGVnYXRlIGFsZXJ0Q29va2llSFRNTF0pOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICgtW0No
ZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5l
bFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0
ZWQuCisKIDIwMjAtMDItMjcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBBZGQgU1BJIHRvIHF1ZXJ5IFdLRnJhbWVJbmZvcyBpbiBhIFdLV2Vi
VmlldwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJGaWxlTmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCShyZXZpc2lvbiAyNTc1ODEpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIC0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9s
bGVyOihXS1VzZXJDb24KIAogQGVuZAogCi1zdGF0aWMgdm9pZCBydW5UZXN0KCkKK3N0YXRpYyB2
b2lkIHJ1blRlc3QoYm9vbCBvbGRGaWxlU2hvdWxkRXhpc3QgPSB0cnVlKQogewogICAgIGF1dG8g
aGFuZGxlciA9IGFkb3B0TlMoW1tJbmRleGVkREJGaWxlTmFtZU1lc3NhZ2VIYW5kbGVyIGFsbG9j
XSBpbml0XSk7CiAgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQg
cnVuVGVzdCgpCiAgICAgTlNVUkwgKm9sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbb2xk
VmVyc2lvbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9f
MCJdOwogICAgIE5TVVJMICpuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMID0gW25ld1ZlcnNp
b25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OiBAImZpbGVfXzAiXTsK
ICAgICBOU1VSTCAqb2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMID0gW29sZFZl
cnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnVudXNl
ZERhdGFiYXNlTmFtZV07Ci0gICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZlcnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9y
eVVSTC5wYXRoXSk7CisgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5h
Z2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZlcnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVS
TC5wYXRoXSA9PSBvbGRGaWxlU2hvdWxkRXhpc3QpOwogICAgIAogICAgIC8vIEZvciBkYXRhYmFz
ZSB0aGF0IGlzIG9wZW5lZCBhZnRlciB1cGdyYWRlLCBpdHMgZmlsZSBzaG91bGQgb25seSBiZSBp
biB2MS4KICAgICBOU1VSTCAqb2xkVmVyc2lvbkV4aXN0aW5nRGF0YWJhc2VEaXJlY3RvcnlVUkwg
PSBbb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25l
bnQ6IGV4aXN0aW5nRGF0YWJhc2VOYW1lXTsKQEAgLTE1NCw3ICsxNTQsNyBAQCBzdGF0aWMgdm9p
ZCBjcmVhdGVEaXJlY3RvcmllcyhTdHJpbmcgdGVzCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERC
RmlsZU5hbWUpCiB7CiAgICAgY3JlYXRlRGlyZWN0b3JpZXMoIm5vbmUiKTsKLSAgICBydW5UZXN0
KCk7CisgICAgcnVuVGVzdChmYWxzZSk7CiB9CiAKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJG
aWxlTmFtZVYwKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9U
TFNEZXByZWNhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tCShyZXZpc2lvbiAyNTc1ODEpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDggQEAgVEVTVChUTFNWZXJzaW9uLCBESVNBQkxFRF9O
ZXR3b3JrU2Vzc2lvbgogICAgIH07CiAgICAgewogICAgICAgICBUQ1BTZXJ2ZXIgc2VydmVyKFRD
UFNlcnZlcjo6UHJvdG9jb2w6OkhUVFBTLCBUQ1BTZXJ2ZXI6OnJlc3BvbmRXaXRoT0ssIHRsczFf
MSk7Ci0gICAgICAgIGF1dG8gd2ViVmlldyA9IG1ha2VXZWJWaWV3V2l0aChbV0tXZWJzaXRlRGF0
YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdKTsKKyAgICAgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBhdXRvIHdlYlZpZXcg
PSBtYWtlV2ViVmlld1dpdGgoW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhD
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXSk7CiAgICAgICAgIFt3ZWJW
aWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJodHRwczovLzEyNy4wLjAuMTol
ZC8iLCBzZXJ2ZXIucG9ydCgpXV1dXTsKICAgICAgICAgW2RlbGVnYXRlIHdhaXRGb3JEaWRGaW5p
c2hOYXZpZ2F0aW9uXTsKICAgICB9CkBAIC0xODcsNyArMTg4LDggQEAgVEVTVChUTFNWZXJzaW9u
LCBESVNBQkxFRF9OZXR3b3JrU2Vzc2lvbgogICAgICAgICBUQ1BTZXJ2ZXIgc2VydmVyKFRDUFNl
cnZlcjo6UHJvdG9jb2w6OkhUVFBTLCBbXShTU0wgKnNzbCkgewogICAgICAgICAgICAgRVhQRUNU
X0ZBTFNFKHNzbCk7CiAgICAgICAgIH0sIHRsczFfMSk7Ci0gICAgICAgIGF1dG8gd2ViVmlldyA9
IG1ha2VXZWJWaWV3V2l0aChbV0tXZWJzaXRlRGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdKTsK
KyAgICAgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24g
PSBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdOworICAgICAgICBhdXRvIHdlYlZpZXcgPSBtYWtlV2ViVmlld1dpdGgoW1tbV0tXZWJz
aXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25d
IGF1dG9yZWxlYXNlXSk7CiAgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVl
c3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJodHRwczovLzEyNy4wLjAuMTolZC8iLCBzZXJ2ZXIucG9ydCgpXV1dXTsKICAg
ICAgICAgW2RlbGVnYXRlIHdhaXRGb3JEaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uXTsKICAg
ICB9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENv
b2tpZVN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0JKHJldmlzaW9uIDI1NzU4MSkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQ3Niw4ICs0NzYsNiBAQCAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmll
dyAqKXdlYlZpZXcgcnVuCiB9CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJIHByb2Nlc3Mg
c2hvdWxkIGJlIHVzaW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3b3JrIHByb2Nl
c3MgZm9yIGRlZmF1bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVtIGNsYXNzIFNo
b3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBydW5XS0hUVFBD
b29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWlu
ZyBzaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZykKIHsKQEAgLTU4NiwyMCArNTg0LDY2IEBA
IFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG8KICAgICBydW5XS0hUVFBD
b29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWlu
Zzo6WWVzKTsKIH0KIAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQogQGludGVyZmFjZSBDaGVj
a1Nlc3Npb25Db29raWVVSURlbGVnYXRlIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0ZT4KKy0gKE5T
U3RyaW5nICopYWxlcnRDb29raWVIVE1MOworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZTsK
IEBlbmQKIAotQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUKK0Bp
bXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHsKKyAgICBSZXRhaW5Q
dHI8TlNTdHJpbmc+IF9tZXNzYWdlOworfQorCiAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAq
KXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKilt
ZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgRVhQRUNUX1NU
UkVRKCJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIsIG1lc3NhZ2UuVVRGOFN0cmluZyk7
CisgICAgX21lc3NhZ2UgPSBtZXNzYWdlOwogICAgIGZpbmlzaGVkID0gdHJ1ZTsKICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwogfQorCistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlCit7Cisg
ICAgd2hpbGUgKCFfbWVzc2FnZSkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1
bkxvb3AoKTsKKyAgICByZXR1cm4gX21lc3NhZ2UuYXV0b3JlbGVhc2UoKTsKK30KKworLSAoTlNT
dHJpbmcgKilhbGVydENvb2tpZUhUTUwKK3sKKyAgICByZXR1cm4gQCI8c2NyaXB0PnZhciBjb29r
aWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29v
a2llcy5sZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNv
b2tpZXMuc29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Cit9CisK
IEBlbmQKIAorVEVTVChXZWJLaXQsIFdLSFRUUENvb2tpZVN0b3JlTXVsdGlwbGVWaWV3cykKK3sK
KyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MSA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9y
ZWxlYXNlXTsKKyAgICBbd2ViVmlldzEgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAic3Rh
cnQgbmV0d29yayBwcm9jZXNzIl07CisKKyAgICBOU0hUVFBDb29raWUgKnNlc3Npb25Db29raWUg
PSBbTlNIVFRQQ29va2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOkB7CisgICAgICAgIE5TSFRUUENv
b2tpZVBhdGg6IEAiLyIsCisgICAgICAgIE5TSFRUUENvb2tpZU5hbWU6IEAiU2Vzc2lvbkNvb2tp
ZU5hbWUiLAorICAgICAgICBOU0hUVFBDb29raWVWYWx1ZTogQCJDb29raWVWYWx1ZSIsCisgICAg
ICAgIE5TSFRUUENvb2tpZURvbWFpbjogQCIxMjcuMC4wLjEiLAorICAgIH1dOworCisgICAgX19i
bG9jayBib29sIHNldENvb2tpZURvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldzEuY29uZmlndXJh
dGlvbi53ZWJzaXRlRGF0YVN0b3JlLmh0dHBDb29raWVTdG9yZSBzZXRDb29raWU6c2Vzc2lvbkNv
b2tpZSBjb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBzZXRDb29raWVEb25lID0gdHJ1ZTsK
KyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnNldENvb2tpZURvbmUpOwor
CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdh
dGUgbmV3XSk7CisgICAgW3dlYlZpZXcxIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwor
CisgICAgW3dlYlZpZXcxIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxd
IGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAg
IEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tp
ZU5hbWU9Q29va2llVmFsdWUiKTsKKworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcyID0gW1tU
ZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MiBzZXRVSURlbGVn
YXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIgbG9hZEhUTUxTdHJpbmc6W2RlbGVn
YXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6
Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVz
c2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworfQorCiBURVNUKFdLSFRU
UENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogewogICAg
IFJldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IGVwaGVtZXJhbFN0b3JlV2l0aENvb2tpZXMg
PSBbV0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOwpAQCAtNjI0LDkg
KzY2OCw4IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG8KICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKICAgICBmaW5pc2hlZCA9IGZhbHNl
OwogICAgIAotICAgIE5TU3RyaW5nICphbGVydENvb2tpZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNv
b2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBj
b29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0g
Y29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKLSAg
ICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzphbGVydENvb2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwg
VVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07Ci0gICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZmaW5pc2hlZCk7CisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVn
YXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6
Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVz
c2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOwogfQogCiBzdGF0aWMgYm9v
bCBhcmVDb29raWVzRXF1YWwoTlNIVFRQQ29va2llICpmaXJzdCwgTlNIVFRQQ29va2llICpzZWNv
bmQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391956</attachid>
            <date>2020-02-27 19:18:18 -0800</date>
            <delta_ts>2020-08-06 13:02:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20200227191817.patch</filename>
            <type>text/plain</type>
            <size>144316</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBAQAorMjAyMC0wMi0yNyAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBhIE5ldHdv
cmtQcm9jZXNzUHJveHkgc2luZ2xldG9uIGluc3RlYWQgb2Ygb25lIHBlciBXZWJQcm9jZXNzUG9v
bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToK
KyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhU
VFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tp
ZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3Jl
Ojpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoQVBJOjpI
VFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoQVBJ
OjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6CisgICAgICAgIChX
S0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9zZXRDb29raWVBY2Nl
cHRQb2xpY3k6XSk6CisgICAgICAgICh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tp
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNN
b2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpw
cm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250
ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6CisgICAgICAg
IChXZWJLaXQ6Om1fd2ViUHJvY2Vzc0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6On5XZWJQcm9jZXNzUG9vbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0
Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9O
ZXR3b3JraW5nUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVh
ckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyTGVnYWN5UHJpdmF0ZUJy
b3dzaW5nTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFs
bG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRXZWJQcm9jZXNzSGFzVXBsb2Fkcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVhcldlYlByb2Nlc3NIYXNVcGxv
YWRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMjAtMDItMjcgIFRp
bSBNb25yb2UgIDx0aW1tb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBHUFUgUHJvY2VzcyBz
dXBwb3J0IGZvciBhY2Nlc3NMb2cgZXQgYWwuCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkocmV2aXNpb24gMjU3NTgxKQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyNSw3ICszMjUsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0
d29ya1ByCiAgICAgICAgIG1lbW9yeVByZXNzdXJlSGFuZGxlci5pbnN0YWxsKCk7CiAgICAgfQog
Ci0gICAgc2V0Q2FjaGVNb2RlbChwYXJhbWV0ZXJzLmNhY2hlTW9kZWwpOworICAgIC8vIEZJWE1F
OiBJIHN0aWxsIG5lZWQgdG8gc2V0IHRoZSBjYWNoZSBtb2RlbCBmcm9tIExlZ2FjeUdsb2JhbFNl
dHRpbmdzLCBidXQgd2l0aCB0aGUgcGF0aCBmcm9tIHRoZSBmaXJzdCBwZXJzaXN0ZW50IGRhdGEg
c3RvcmUuCiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIG1faXNJ
VFBEYXRhYmFzZUVuYWJsZWQgPSBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlOwpA
QCAtMzMzLDE3ICszMzMsMTggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdv
cmtQcgogCiAgICAgV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkKHBhcmFtZXRlcnMuZW5h
YmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKTsKIAotICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBw
YXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQg
PSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7
CiAKLSAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKLSAgICBzZXRTZXNzaW9u
KHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykp
KTsKLQotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90
YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNh
Y2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBhZGRTZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3Rv
cmFnZVF1b3RhLCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdl
UXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBkYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKICNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9u
KHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkSW5k
ZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKKyAgICAgICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+YWRkKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKyAgICAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVE
YXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKGRhdGFTdG9yZVBhcmFtZXRlcnMpKTsKKyAg
ICB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgaWYgKHBhcmVudFByb2Nlc3NI
YXNTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSkgewpAQCAtMzUyLDEzICszNTMsNiBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1ByCiAgICAgfQogI2VuZGlmCiAKLSAg
ICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotCi0gICAgYXV0byogZGVmYXVsdFNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLSAgICBhdXRvKiBkZWZhdWx0U3RvcmFnZVNl
c3Npb24gPSBkZWZhdWx0U2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgZm9y
IChjb25zdCBhdXRvJiBjb29raWUgOiBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLnBlbmRpbmdDb29raWVzKQotICAgICAgICBkZWZhdWx0U3RvcmFnZVNlc3Npb24tPnNldENv
b2tpZShjb29raWUpOwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50
cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+aW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsK
IApAQCAtNDE1LDEyICs0MDksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3Jr
Q29ubmVjCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQog
ewotICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuY2xlYXJD
cmVkZW50aWFscygpOwotICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdv
cmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpKQotICAgICAgICBu
ZXR3b3JrU2Vzc2lvbi0+Y2xlYXJDcmVkZW50aWFscygpOwotICAgIGVsc2UKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0KICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW10gKGF1dG8m
IG5ldHdvcmtTZXNzaW9uKSB7CiAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VTZXNzaW9uID0gbmV0
d29ya1Nlc3Npb24ubmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkpCiAgICAgICAgICAgICBzdG9yYWdl
U2Vzc2lvbi0+Y3JlZGVudGlhbFN0b3JhZ2UoKS5jbGVhckNyZWRlbnRpYWxzKCk7CkBAIC01MDEs
OCArNDg5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdAogdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vz
c2lvbklELCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyQmFzZSkKICNlbmRpZgogewotICAgIEFTU0VSVChzZXNzaW9uSUQgIT0gUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKICAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47CkBAIC01MTcsNyArNTAz
LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdAogICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFrZVN0cmluZyhpZGVudGlmaWVyQmFz
ZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKS5jcmVh
dGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAg
c3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihjZklk
ZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAoc2Vzc2lvbklEICE9IFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9u
ID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVDRlN0b3JhZ2VTZXNzaW9u
Rm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwogCiAgICAgaWYgKE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgpKSB7CkBAIC01NDAsMjEgKzUyNiwx
MSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVBY2NlcHRQb2xpY3lDCiAKIFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uKGNv
bnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpIGNvbnN0CiB7Ci0gICAgaWYgKHNlc3Npb25J
RCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICByZXR1cm4g
JmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwogICAgIHJldHVybiBtX25ldHdvcmtTdG9yYWdlU2Vz
c2lvbnMuZ2V0KHNlc3Npb25JRCk7CiB9CiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYgTmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24pCi0gICAgICAgIG1fZGVmYXVsdE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCk7Ci0gICAgcmV0dXJuICptX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247Ci19Ci0KIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24oY29uc3QgRnVu
Y3Rpb248dm9pZChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKT4mIGZ1bmN0b3IpCiB7
Ci0gICAgZnVuY3RvcihkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSk7CiAgICAgZm9yIChhdXRvJiBz
dG9yYWdlU2Vzc2lvbiA6IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy52YWx1ZXMoKSkKICAgICAg
ICAgZnVuY3Rvcigqc3RvcmFnZVNlc3Npb24pOwogfQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkocmV2aXNpb24gMjU3NTgxKQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjcsNyArMTY3LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdl
U2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nl
c3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2
b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29sIHNob3VsZFVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNDcsNyArMzQ2LDYgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29u
c3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nl
c3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCkBAIC01MjYsNyAr
NTI0LDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhhc2hNYXA8
UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1bHROZXR3b3JrU3Rv
cmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1h
bmFnZXJTZXQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZp
c2lvbiAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplCiAgICAgSVBDOjplbmNv
ZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwogICAgIGVuY29kZXIgPDwgc3Rv
cmFnZUFjY2Vzc0FQSUVuYWJsZWQ7CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IGRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzOworICAgIGVuY29kZXIgPDwgZGF0YVN0b3JlUGFyYW1ldGVyczsKICNp
ZiBVU0UoU09VUCkKICAgICBlbmNvZGVyLmVuY29kZUVudW0oY29va2llQWNjZXB0UG9saWN5KTsK
ICAgICBlbmNvZGVyIDw8IGlnbm9yZVRMU0Vycm9yczsKQEAgLTEyMSwxMSArMTIxLDExIEBAIGJv
b2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogI2VuZGlmCiAKLSAgICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4g
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+PiBkZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKQorICAg
IE9wdGlvbmFsPFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4+IGRhdGFTdG9yZVBh
cmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiBkYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGlmICgh
ZGF0YVN0b3JlUGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdC5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzKTsKKyAgICByZXN1bHQuZGF0YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRhdGFT
dG9yZVBhcmFtZXRlcnMpOwogCiAjaWYgVVNFKFNPVVApCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUVudW0ocmVzdWx0LmNvb2tpZUFjY2VwdFBvbGljeSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDcgKzcyLDcgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
IAogICAgIGJvb2wgc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7CiAjZW5kaWYKIAotICAgIFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzIGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIFZl
Y3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGF0YVN0b3JlUGFyYW1ldGVyczsKICAg
ICAKICNpZiBVU0UoU09VUCkKICAgICBXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IGNv
b2tpZUFjY2VwdFBvbGljeSB7IFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k6OkFsd2F5
c0FjY2VwdCB9OwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dl
YkNvb2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjU3NTgxKQorKysg
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2Vy
OjpzZXRIVFRQQ29va2llQWNjZQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3koQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9s
aWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihtX3By
b2Nlc3MuZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY29va2llQWNjZXB0UG9saWN5KCkpOworICAg
IGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKS0+Y29va2llQWNjZXB0UG9saWN5KCkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0JKHJldmlzaW9uIDI1NzU4
MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3ND
b2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtODQsOSArODQsNiBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBl
cm1hbmVudGx5KHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMu
Y29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFNh
bmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSNlbmRpZgogI2VuZGlmCiAKICAgICBfQ0ZOZXR3b3JrU2V0QVRTQ29udGV4dChw
YXJhbWV0ZXJzLm5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKQEAgLTExMywxMSArMTEwLDYgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgIFtOU1VSTENhY2hl
IHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3Jt
Q3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVu
aXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3JrUHJvY2Vz
czo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShTT1VSQ0Vf
QVBQTElDQVRJT05fQVVESVRfREFUQSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCShyZXZpc2lvbiAy
NTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nl
c3NDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogewogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVh
dGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5pcXVl
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFsbG93U3BlY2lmaWNIVFRQ
U0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5m
bywgY29uc3QgU3RyaW5nJiBob3N0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVO
ZXR3b3JraW5nQ29udGV4dC5tbQkocmV2aXNpb24gMjU3NTgxKQorKysgU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDE1ICs1NSwxMSBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1
cmVXZWJzCiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJh
bWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAogICAgIFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiB1aVByb2Nlc3NDb29raWVTdG9yYWdlOwotICAgIGlm
ICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2ll
U3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1l
cmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNF
bXB0eSgpICYmIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCAh
PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAgICB1aVByb2Nlc3ND
b29raWVTdG9yYWdlID0gY29va2llU3RvcmFnZUZyb21JZGVudGlmeWluZ0RhdGEocGFyYW1ldGVy
cy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcik7CiAKICAgICBuZXR3b3JrUHJvY2Vz
cy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBtYWtlU3RyaW5nKGJhc2UsICcu
Jywgc2Vzc2lvbklELnRvVUludDY0KCkpLCBXVEZNb3ZlKHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2Up
KTsKIAotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrUHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihz
ZXNzaW9uSUQpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5wZW5k
aW5nQ29va2llcykKLSAgICAgICAgc2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7Ci0KICAgICBu
ZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0
ZShuZXR3b3JrUHJvY2VzcywgV1RGTW92ZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycykpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtQcm9jZXNzU291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAJKHJldmlzaW9uIDI1NzU4MSkKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTEgKzE0NSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICB9KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRl
RGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMo
Ym9vbCBpZ25vcmVUTFNFcnJvcnMpCiB7CiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRTaG91
bGRJZ25vcmVUTFNFcnJvcnMoaWdub3JlVExTRXJyb3JzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAJKHJldmlzaW9u
IDI1NzU4MSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDkgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlKAogICAgIGVuY29kZXIgPDwgbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzOwogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZp
ZXI7CiAgICAgZW5jb2RlciA8PCBjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAg
ICBlbmNvZGVyIDw8IHBlbmRpbmdDb29raWVzOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAgICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPDwgaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkBA
IC04MywxMiArNzksNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vi
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5jb29raWVTdG9y
YWdlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5z
aW9uSGFuZGxlKTsKIAotICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb29raWU+PiBwZW5k
aW5nQ29va2llczsKLSAgICBkZWNvZGVyID4+IHBlbmRpbmdDb29raWVzOwotICAgIGlmICghcGVu
ZGluZ0Nvb2tpZXMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVy
cy5wZW5kaW5nQ29va2llcyA9IFdURk1vdmUoKnBlbmRpbmdDb29raWVzKTsKLQogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogICAgIE9wdGlvbmFsPFN0cmluZz4gaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5OwogICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwpAQCAt
MTAxLDE0ICs5MSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWIK
ICAgICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIE9wdGlv
bmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VUZW1w
QmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZVRl
bXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUgPSBXVEZNb3ZlKCppbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycy5oCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNSArNTEs
MTEgQEAgc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKIAogICAgIFZlY3Rvcjx1
aW50OF90PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGU7Ci0gICAgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXM7CiAgICAgTmV0d29ya1Nlc3Npb25D
cmVhdGlvblBhcmFtZXRlcnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogCiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiAgICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsK
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNw
cAkocmV2aXNpb24gMjU3NTgxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2ll
TWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1
ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRl
ICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94
eS5oIgogI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJhY2tJRC5oIgogI2luY2x1ZGUgIldlYkNvb2tp
ZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eU1lc3Nh
Z2VzLmgiCkBAIC0zOSwyMCArNDAsMTUgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKLWNvbnN0IGNoYXIqIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3Vw
cGxlbWVudE5hbWUoKQorV2ViQ29va2llTWFuYWdlclByb3h5JiBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnNpbmdsZXRvbigpCiB7Ci0gICAgcmV0dXJuICJXZWJDb29raWVNYW5hZ2VyUHJveHkiOwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWJDb29raWVNYW5hZ2VyUHJveHk+IG1hbmFnZXI7
CisgICAgcmV0dXJuIG1hbmFnZXI7CiB9CiAKLVJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkK
K1dlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdlclByb3h5KCkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29raWVNYW5hZ2VyUHJveHkocHJvY2Vzc1Bvb2wpKTsK
LX0KLQotV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJv
Y2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQotICAgIDogV2ViQ29udGV4dFN1cHBsZW1lbnQocHJvY2Vz
c1Bvb2wpCi17Ci0gICAgV2ViQ29udGV4dFN1cHBsZW1lbnQ6OnByb2Nlc3NQb29sKCktPmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksICp0aGlzKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9CiAKIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
fldlYkNvb2tpZU1hbmFnZXJQcm94eSgpCkBAIC02NSw0MyArNjEsOSBAQCB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZUNsCiAgICAgbV9jbGllbnQuaW5pdGlhbGl6ZShjbGll
bnQpOwogfQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3RvcjxPYnNlcnZlcio+
IG9ic2VydmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9jb29raWVPYnNlcnZl
cnMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVyU2V0
KQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0gICAgfQotCi0gICAg
Zm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2JzZXJ2ZXItPm1hbmFn
ZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkp
OwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKFdlYlBy
b2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNz
RGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6
OnJlZigpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0
U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19Ci0KIHZvaWQgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYg
Y2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3Mg
PSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1l
c1dpdGhDb29raWVzKHNlc3Npb25JRCksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNr
Z3JvdW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMiX3MpXShWZWN0b3I8U3RyaW5nPiYmIGhvc3RuYW1lcykgbXV0YWJsZSB7CiAgICAgICAg
IGNhbGxiYWNrRnVuY3Rpb24oV1RGTW92ZShob3N0bmFtZXMpKTsKICAgICB9KTsKQEAgLTEwOSwx
NyArNzEsMTcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lcwogCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMpCiB7
Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lm
TmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9z
dG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5j
aGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29r
aWVzKHNlc3Npb25JRCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNl
bmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklE
KSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8m
IG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAg
bmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBbY2FsbGJhY2tGdW5jdGlvbiA9
IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFjdGl2aXR5ID0gbmV0d29ya1Byb2Nlc3MudGhy
b3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0
ZUNvb2tpZSJfcyldKCkgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAg
ICB9KTsKQEAgLTEyNyw3ICs4OSw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxl
dGVDb29raWUKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNN
b2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2FsbFRpbWUgdGltZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYg
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwor
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9uSUQsIHRp
bWUpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFjdGl2
aXR5ID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJD
b29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlIl9zKV0oKSBt
dXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogICAgIH0pOwpAQCAtMTM1LDcg
Kzk3LDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvbwogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1By
b2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJv
Y2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENv
b2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2Fs
bGJhY2tGdW5jdGlvbiksIGFjdGl2aXR5ID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0bGVyKCkuYmFj
a2dyb3VuZEFjdGl2aXR5KCJXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMiX3MpXSgp
IG11dGFibGUgewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgfSk7CkBAIC0xNDMs
NyArMTA1LDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUAogCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBjb25zdCBVUkwmIHVybCwgY29u
c3QgVVJMJiBtYWluRG9jdW1lbnRVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxs
YmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wo
KS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNz
aW9uSUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgW2NhbGxiYWNrRnVuY3Rpb24g
PSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBhY3Rpdml0eSA9IG5ldHdvcmtQcm9jZXNzLnRo
cm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRD
b29raWVzIl9zKV0oKSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogICAg
IH0pOwpAQCAtMTUxLDcgKzExMyw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRD
b29raWVzKFAKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFsbENvb2tpZXMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29r
aWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3Mg
PSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdv
cmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29y
a1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpH
ZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxs
YmFja0Z1bmN0aW9uKSwgYWN0aXZpdHkgPSBuZXR3b3JrUHJvY2Vzcy50aHJvdHRsZXIoKS5iYWNr
Z3JvdW5kQWN0aXZpdHkoIldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyJfcyld
KFZlY3RvcjxDb29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxiYWNrRnVu
Y3Rpb24oV1RGTW92ZShjb29raWVzKSk7CiAgICAgfSk7CkBAIC0xNTksNyArMTIxLDcgQEAgdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFsbENvb2tpZQogCiB2b2lkIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6Z2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxi
YWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgp
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Np
b25JRCwgdXJsKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24p
LCBhY3Rpdml0eSA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0
eSgiV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzIl9zKV0oVmVjdG9yPENvb2tpZT4m
JiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihXVEZNb3ZlKGNv
b2tpZXMpKTsKICAgICB9KTsKQEAgLTE2NywxMiArMTI5LDEyIEBAIHZvaWQgV2ViQ29va2llTWFu
YWdlclByb3h5OjpnZXRDb29raWVzKFAKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0
YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0g
ICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNo
YW5nZXMoc2Vzc2lvbklEKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
c2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFu
Z2VzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3Rv
cE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAg
IHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vz
c2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoc2Vzc2lvbklEKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2Vu
ZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
c2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29r
aWVPYnNlcnZlckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV1RGOjpGdW5jdGlv
bjx2b2lkICgpPiYmIGNhbGxiYWNrKQpAQCAtMjIxLDE3ICsxODMsOSBAQCB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6Y29va2llc0RpZENoCiAgICAgICAgIG9ic2VydmVyLT5jb29raWVzRGlk
Q2hhbmdlKCk7CiB9CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGlj
eSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCit2b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBpZiAoIXByb2Nlc3NQb29sKCktPmlzVXNpbmdUZXN0aW5nTmV0d29ya1Nlc3Npb24o
KSkKLSAgICAgICAgcGVyc2lzdEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNlbmRp
ZgotI2lmIFVTRShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29va2ll
QWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3
b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdv
cmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdU
Rk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFjdGl2aXR5ID0gbmV0d29ya1Byb2Nlc3MudGhyb3R0
bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3kiX3MpXSgpIG11dGFibGUgewogICAgICAgICBjYWxsYmFja0Z1bmN0
aW9uKCk7CiAgICAgfSk7CkBAIC0yMzksNyArMTkzLDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnNldEhUVFBDb29raQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgpLCBbY2FsbGJhY2tG
dW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGFjdGl2aXR5ID0gbmV0d29ya1By
b2Nlc3MudGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kiX3MpXShIVFRQQ29va2llQWNjZXB0UG9saWN5
IHBvbGljeSkgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24ocG9saWN5KTsKICAg
ICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5oCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTEgKzU2LDkgQEAg
dHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycgogdHlwZWRlZiBHZW5lcmlj
Q2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tpZUFjY2Vw
dFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNsYXNzIFdlYkNvb2tpZU1h
bmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNv
b2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBz
dXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+
IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBXZWJDb29raWVNYW5hZ2VyUHJv
eHkmIHNpbmdsZXRvbigpOwogICAgIHZpcnR1YWwgfldlYkNvb2tpZU1hbmFnZXJQcm94eSgpOwog
CiAgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJh
c2UqKTsKQEAgLTEwNCwxNyArMTAyLDExIEBAIHB1YmxpYzoKICAgICB1c2luZyBBUEk6Ok9iamVj
dDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nl
c3NQb29sKik7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5KCk7CisgICAgZnJpZW5kIE5ldmVy
RGVzdHJveWVkPFdlYkNvb2tpZU1hbmFnZXJQcm94eT47CiAKICAgICB2b2lkIGNvb2tpZXNEaWRD
aGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLSAg
ICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNz
RGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlk
Q2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZvaWQgcmVmV2ViQ29u
dGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmV2ViQ29udGV4dFN1cHBs
ZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCiAgICAgdm9p
ZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVy
cmlkZTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjU3NTgxKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCSh3
b3JraW5nIGNvcHkpCkBAIC0yMCw2ICsyMCw2IEBACiAjIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAKLW1lc3NhZ2VzIC0+IFdlYkNvb2tpZU1hbmFnZXJQcm94eSB7CittZXNz
YWdlcyAtPiBXZWJDb29raWVNYW5hZ2VyUHJveHkgTm90UmVmQ291bnRlZCB7CiAgICAgQ29va2ll
c0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCShyZXZpc2lvbiAyNTc1ODEpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyNiw2ICsyMjYsMTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNl
bnNpdAogICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IFdlYlByb2Nlc3NQb29s
Ojp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQoreworICAgIHJldHVybiBj
b3B5VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkp
OworfQorCiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2NvbmZpZ3VyYXRpb24oY29uZmln
dXJhdGlvbi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdlR3JvdXAoV2ViUGFnZUdyb3VwOjpj
cmVhdGUoKSkKQEAgLTIzMyw3ICsyMzgsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bv
b2woQVBJOjpQcm9jCiAgICAgLCBtX2F1dG9tYXRpb25DbGllbnQobWFrZVVuaXF1ZTxBUEk6OkF1
dG9tYXRpb25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2FkQ2xpZW50KG1ha2VVbmlxdWVSZWY8
QVBJOjpEb3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlzdG9yeUNsaWVudChtYWtlVW5pcXVl
PEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkpCi0gICAgLCBtX2N1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50PigpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0
ZSgpKQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NV
c2FnZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxl
cj4oKnRoaXMpKQpAQCAtMjU3LDkgKzI2MSw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNz
UG9vbChBUEk6OlByb2MKICAgICAgICAgUHJvY2Vzczo6c2V0SWRlbnRpZmllcihXZWJDb3JlOjpQ
cm9jZXNzSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSk7CiAgICAgfSk7CiAKLSAgICBpZiAoIW1fd2Vi
c2l0ZURhdGFTdG9yZSAmJiBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3Rv
cmVFeGlzdHMoKSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCk7Ci0KICAgICBmb3IgKGF1dG8mIHNjaGVtZSA6
IG1fY29uZmlndXJhdGlvbi0+YWx3YXlzUmV2YWxpZGF0ZWRVUkxTY2hlbWVzKCkpCiAgICAgICAg
IG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Fsd2F5c1JldmFsaWRhdGVkLmFkZChzY2hlbWUpOwogCkBA
IC0yNzUsNyArMjc2LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJv
YwogICAgIGFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogCiAgICAgLy8gTk9URTogVGhlc2Ugc3ViLW9iamVj
dHMgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZlck1hcC4uCi0gICAg
YWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVu
dDxXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdlYk5v
dGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKTsKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKQEAg
LTMyNiw5ICszMjYsNiBAQCBXZWJQcm9jZXNzUG9vbDo6fldlYlByb2Nlc3NQb29sKCkKICAgICBw
cm9jZXNzUG9vbENvdW50ZXIuZGVjcmVtZW50KCk7CiAjZW5kaWYKIAotICAgIGlmIChtX25ldHdv
cmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zaHV0RG93blByb2Nlc3MoKTsK
LQogI2lmIEVOQUJMRShHQU1FUEFEKQogICAgIGlmICghbV9wcm9jZXNzZXNVc2luZ0dhbWVwYWRz
LmlzRW1wdHkoKSkKICAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnByb2Nl
c3NQb29sU3RvcHBlZFVzaW5nR2FtZXBhZHMoKnRoaXMpOwpAQCAtMzg2LDE2ICszODMsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBdXRvbWF0aW9uQ2xpZW50CiAgICAgICAgIG1fYXV0b21h
dGlvbkNsaWVudCA9IFdURk1vdmUoYXV0b21hdGlvbkNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1
ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYgY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50KQotewotI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFH
RVIpCi0gICAgaWYgKCFjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi0gICAgICAgIG1fY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gbWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudD4oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50ID0gV1RGTW92ZShjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOwotI2VuZGlm
Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJv
b2wgZW5hYmxlZCkKIHsKICAgICBtX3N0b3JhZ2VBY2Nlc3NBUElFbmFibGVkID0gZW5hYmxlZDsK
QEAgLTQxNSw3ICs0MDIsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250
ZW50CiAKIElQQzo6Q29ubmVjdGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNz
Q29ubmVjdGlvbigpCiB7Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24o
KTsKKyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuY29ubmVjdGlv
bigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29u
dGV4dCkKQEAgLTQyNyw4ICs0MTQsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNo
YW5nZWQoKQogewogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6
VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSk7
CiAjaWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVk
TGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygp
KSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtNDY2LDIyNCArNDUyLDE0IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNjcmVlblByb3BlcnRpZXNTdGEKICNlbmRpZgogfQogCi1OZXR3b3JrUHJvY2Vzc1By
b3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9y
ZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUpCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNz
UG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSopCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRl
bXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4g
dGhyZWFkcy4KLSAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRo
cmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCi0gICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KLSAgICBpZiAoIVJ1bkxvb3A6Omlz
TWFpbigpKSB7Ci0gICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9jZXNzOwot
ICAgIH0KLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIGlmICh3aXRoV2Vi
c2l0ZURhdGFTdG9yZSkgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lv
bihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICAgICAgd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgYXV0byBuZXR3b3JrUHJvY2Vz
cyA9IG1ha2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQcm94eT4oKnRoaXMpOwotCi0gICAgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLQotICAgIGlmIChtX3dlYnNp
dGVEYXRhU3RvcmUpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3RvcihtX3dlYnNpdGVEYXRhU3RvcmUtPnBl
bmRpbmdDb29raWVzKCkpOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGlu
Z0Nvb2tpZXMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBw
bGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0
aW9uKCkuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCk7Ci0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9y
ZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigp
OwotI2VuZGlmCi0gICAgfQotCi0gICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xv
YmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKLQotICAgIGZvciAoYXV0byYg
c2NoZW1lIDogZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCi0g
ICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMu
YXBwZW5kKHNjaGVtZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFN0cmluZyBj
b29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnkoKTsKLSAgICBpZiAoIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rvcnko
Y29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3Rvcnkg
PSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAgIGlmICgh
Y29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0Rp
cmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotCi0gICAgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29s
OjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmVudEJ1bmRsZURpcmVjdG9y
eS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJl
bnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJh
bWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JUZW1wb3JhcnlGaWxlKGVtcHR5U3RyaW5nKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLSNlbmRpZgot
Ci0gICAgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IExlZ2FjeUdsb2JhbFNldHRp
bmdzOjpzaW5nbGV0b24oKS5oc3RzU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyYW1l
dGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkKLSAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuaHN0c1N0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotCi0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0g
Y29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9S
ZWdpc3RlckFzU2VjdXJlKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRB
c0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9i
YWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRl
bnRTZWN1cml0eVBvbGljeSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVk
QXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCku
c2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7Ci0KLSNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLSAgICAvLyAqKioqKioqKioKLSAgICAvLyBJTVBPUlRBTlQ6IERv
IG5vdCBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGluZGV4ZWQgZGF0YWJhc2Vz
IG9uIGRpc2sgd2l0aG91dCBmaXJzdCBjb25zdWx0aW5nIGEgcmV2aWV3ZXIgZnJvbSBBcHBsZSAo
PHJkYXI6Ly9wcm9ibGVtLzE3NDU0NzEyPikKLSAgICAvLyAqKioqKioqKioKLSAgICBpZiAobV93
ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVz
b2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnkg
PSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVy
cygpLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1w
dHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3Jp
dGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgfQotI2Vu
ZGlmCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFT
dG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0
aW9uRGlyZWN0b3J5ID0gIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGxvY2FsU3RvcmFn
ZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVz
b2x2ZWRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWxv
Y2FsU3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7Ci0g
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dl
YnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNhY2hlU3RvcmFnZURpcmVjdG9y
eSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1w
dHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3Jp
dGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0g
ICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdl
RGlyZWN0b3J5ID0gV1RGTW92ZShjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOwotICAgIH0KLQotICAg
IGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MgPSBmYWxzZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0
aW5nRXZlbnQgPSBmYWxzZTsKLSAgICBib29sIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVl
OwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGZhbHNl
OwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgV2ViQ29yZTo6VGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0g
V2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsOwotI2VuZGlmCi0gICAg
V2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgZmlyc3RQYXJ0eVdlYnNp
dGVEYXRhUmVtb3ZhbE1vZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFs
TW9kZTo6QWxsQnV0Q29va2llczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSB7IH07Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7
Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSB3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TG9nVGVzdGluZ0V2ZW50ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0
aW5nQ2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSB3
aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
czsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdEluUmVzb3VyY2VMb2FkU3RhdGlzdGljczsK
LSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9k
ZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAgICAgdGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy50aGly
ZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5maXJzdFBh
cnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJl
c291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdl
YnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdl
UXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VR
dW90YSgpOwotICAgICAgICAKLSAgICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0
b3J5ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5
KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rv
cnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0Nh
Y2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5l
dHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBtX3dlYnNpdGVEYXRh
U3RvcmUtPmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBp
ZiAoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxo
b3N0ID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVMb2NhbGhvc3RJblJl
c291cmNlTG9hZFN0YXRpc3RpY3M7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSNlbmRpZgot
ICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAg
ICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0K
LQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdp
blN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3Rh
KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhp
cmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyVGhpcmRQ
YXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotCi0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtD
YWNoZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVE
aXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkp
IHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNo
ZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShu
ZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlRXhpc3RzKCkpCi0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0g
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZCgpOwotICAgICAgICBhdXRvIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBT
YW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgfQotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyA9IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3M7Ci0gICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IGVuYWJsZVJlc291
cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQ7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkSW5jbHVk
ZUxvY2FsaG9zdEluUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHNob3VsZEluY2x1ZGVMb2NhbGhv
c3Q7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
ID0gdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSNlbmRpZgotICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGU7Ci0KLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFudWFsUHJldmFsZW50
UmVzb3VyY2UgPSBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLQotICAgIC8vIEFkZCBhbnkgcGxh
dGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVycwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKHBhcmFtZXRlcnMpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9j
ZXNzLgotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0UU9TKG5ldHdvcmtQcm9jZXNzTGF0ZW5jeVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91
Z2hwdXRRT1MoKSksIDApOwotI2VuZGlmCi0KLSAgICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJv
Y2Vzc0Fzc2VydGlvbigpOwotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0
b3JlKSk7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVz
KCk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBuZXR3b3JrIHByb2Nlc3Mga25vd3Mg
YWJvdXQgYWxsIHRoZSBzZXNzaW9ucyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSBp
dCBzdGFydGVkLgotICAgIGZvciAoYXV0byYgc2Vzc2lvbklEIDogbV9zZXNzaW9uVG9QYWdlSURz
TWFwLmtleXMoKSkgewotICAgICAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNp
dGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNz
aW9uSUQpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKndlYnNpdGVE
YXRhU3RvcmUpOwotICAgIH0KLQotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdv
cmtQcm9jZXNzKTsKLSAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7CisgICAgcmV0dXJuIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29s
OjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nl
c3NQcm94eSwgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiwgTWVzc2Fn
ZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVk
UmVwbHk+PiYmIHBlbmRpbmdSZXBsaWVzKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHJveHkpCiB7
Ci0gICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotICAgIEFTU0VSVCgmbmV0d29ya1Byb2Nl
c3NQcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKLQogICAgIGZvciAoYXV0byYgc3Vw
cGxlbWVudCA6IG1fc3VwcGxlbWVudHMudmFsdWVzKCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPnBy
b2Nlc3NEaWRDbG9zZSgmbmV0d29ya1Byb2Nlc3NQcm94eSk7CiAKQEAgLTY5MiwxNiArNDY4LDYg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaAogICAgIGlmIChtX2F1
dG9tYXRpb25TZXNzaW9uKQogICAgICAgICBtX2F1dG9tYXRpb25TZXNzaW9uLT50ZXJtaW5hdGUo
KTsKIAotICAgIC8vIExlYXZlIHRoZSBwcm9jZXNzIHByb3h5IGFyb3VuZCBkdXJpbmcgY2xpZW50
IGNhbGwsIHNvIHRoYXQgdGhlIGNsaWVudCBjb3VsZCBxdWVyeSB0aGUgcHJvY2VzcyBpZGVudGlm
aWVyLgotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwotCi0gICAgLy8gQXR0ZW1wdCB0
byByZS1sYXVuY2guCi0gICAgaWYgKHBlbmRpbmdSZXBsaWVzLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGF1dG8mIG5ld05ldHdvcmtQcm9jZXNzID0gZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKLSAgICBmb3IgKGF1dG8mIHJlcGx5IDogcGVuZGluZ1JlcGxpZXMpCi0gICAgICAgIG5l
d05ldHdvcmtQcm9jZXNzLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqcmVwbHkuZmlyc3Qs
IFdURk1vdmUocmVwbHkuc2Vjb25kKSk7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2Vycygp
OwogfQogCkBAIC03MTQsMTAgKzQ4MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VX
b3JrZXJQcm9jZXMKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vzc1Byb3h5LCBNZXNzYWdlczo6V2ViUHJv
Y2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseSYmIHJl
cGx5KQogewotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgQVNTRVJUKG1fbmV0d29y
a1Byb2Nlc3MpOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+Z2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbih3ZWJQcm9j
ZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKIH0KIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
QEAgLTczNiwxNSArNDk5LDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0R1BVUHJvY2Vzc0Nv
bm5lYwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBwcm94eSwgUmVnaXN0cmFibGVEb21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwg
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1f
bmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCi0gICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdl
YnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChz
ZXNzaW9uSUQpOwotCi0gICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGlmICgh
bV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgICAg
IHdlYnNpdGVEYXRhU3RvcmUgPSBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7Ci0gICAgfQorICAg
IGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFT
dG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkK
KyAgICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKIAogICAgIFdlYlByb2Nl
c3NQcm94eSogc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIgfTsKICAgICBpZiAo
IW1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewpAQCAtODUzLDcgKzYxMCw3IEBA
IFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjoKICNpZiBQTEFURk9STShH
VEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0Zm9ybXMgdXNpbmcgQnViYmxld3Jh
cCBmb3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3MgaXMgbGF1bmNoZWQgdXNpbmcgdGhl
IFdlYlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSwKICAgICAvLyBzbyB3ZSBk
b24ndCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZlcmVudCBXZWJzaXRlRGF0YVN0b3Jl
LgotICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vic2l0ZURhdGFTdG9yZSAmJiBtX3dl
YnNpdGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRhU3RvcmUpCisgICAgaWYgKG1fc2Fu
ZGJveEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2VuZGlmCiAKQEAgLTExMjUs
OSArODgyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdQogICAg
ICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9yVGVzdGluZygpOwog
CiAgICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24odGhpcywgcHJvY2Vz
cy0+d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAg
ICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5KiBw
cm9jZXNzKQpAQCAtMTIyMywxMCArOTc3LDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vz
c1Bvb2w6OmNyZWF0ZQogICAgIGlmICghcGFnZUNvbmZpZ3VyYXRpb24tPndlYnNpdGVEYXRhU3Rv
cmUoKSkgewogICAgICAgICAvLyBXZSB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgdGhlIGRlZmF1bHQg
ZGF0YSBzdG9yZSBhcyBsb25nIGFzIHBvc3NpYmxlLgogICAgICAgICAvLyBCdXQgaWYgdGhlcmUg
aXMgYW4gYXR0ZW1wdCB0byBjcmVhdGUgYSB3ZWIgcGFnZSB3aXRob3V0IGFueSBzcGVjaWZpZWQg
ZGF0YSBzdG9yZSwgdGhlbiB3ZSBoYXZlIHRvIGNyZWF0ZSBpdC4KLSAgICAgICAgaWYgKCFtX3dl
YnNpdGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLQotICAgICAgICBw
YWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShtX3dlYnNpdGVEYXRhU3RvcmUu
Z2V0KCkpOworICAgICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZShX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKSk7CiAgICAg
fQogCiAgICAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzczsKQEAgLTEyOTMsMTUgKzEw
NDQsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlQmVnaW5Vc2luZ1dlYnNpCiB7CiAgICAg
YXV0byByZXN1bHQgPSBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAuYWRkKGRhdGFTdG9yZS5zZXNzaW9u
SUQoKSwgSGFzaFNldDxXZWJQYWdlUHJveHlJZGVudGlmaWVyPigpKS5pdGVyYXRvci0+dmFsdWUu
YWRkKHBhZ2VJRCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5
KTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOwotICAgIGlm
IChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAg
ICAgICBBU1NFUlQoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IGRhdGFTdG9yZS5wYXJhbWV0
ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCA9PSBzZXNzaW9uSUQpOwot
ICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFTdG9yZSkpOwotICAgICAgICAgICAgZGF0YVN0
b3JlLmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgIH0KIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cGFnZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyIHBhZ2VJRCwgV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKQpAQCAtMTQ0Miw3
ICsxMTg0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBsdWdpbnMoKQogCiBQcm9j
ZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpCiB7Ci0gICAg
cmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MgPyBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzSWRlbnRp
ZmllcigpIDogMDsKKyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
cHJvY2Vzc0lkZW50aWZpZXIoKTsKIH0KIAogUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpwcmV3
YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpCkBAIC0xNTkzLDE2ICsxMzM1LDE0IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwoQ2FjaGUKIAogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CiAKLSAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKENhY2hlTW9k
ZWwgY2FjaGVNb2RlbCkKIHsKICAgICB1cGRhdGVCYWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkoKTsK
IAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91
c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVy
dmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCkBAIC0xNjEyLDcgKzEzNTIsNyBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAKIERvd25sb2FkUHJveHkmIFdlYlBy
b2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9y
ZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0
aW5nUGFnZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAgIHJldHVybiBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1
ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CisgICAgcmV0dXJuIGVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1ZXN0
LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQpAQCAtMTY4OCwyNSAr
MTQyOCwxMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAg
c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxl
cigpKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXNlVGVzdGluZ05ldHdvcmtTZXNzaW9u
KCkKLXsKLSAgICBBU1NFUlQobV9wcm9jZXNzZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1f
bmV0d29ya1Byb2Nlc3MpOwotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghbV9wcm9jZXNzZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3Nob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiA9IHRydWU7Ci19Ci0KIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5k
U3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSkKIHsKLSAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgp
KQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVz
c2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihyZXBseSksIDApOworICAgIGlmIChOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5jYW5TZW5kTWVzc2FnZSgpKQorICAgICAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSks
IHN0ZDo6Zm9yd2FyZDxVPihyZXBseSksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKQEAgLTE3
MTYsMTkgKzE0NDIsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2Vy
dAogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIHsKLSAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKSwgMCk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKICAgICB0ZXJtaW5hdGVTZXJ2
aWNlV29ya2VycygpOwogCi0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0gICAgbV9uZXR3
b3JrUHJvY2VzcyA9IG51bGxwdHI7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRl
cm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQpAQCAtMTc0MCwxNCArMTQ2MSwxMiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rpbmco
KQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseUZvclRlc3RpbmcoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQ
cm9jZXNzRGlkUmVzdW1lKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCkBAIC0xNzcyLDE1ICsx
NDkxLDE0IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UoQ28KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2Uo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3Jh
Z2UoKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9y
YWdlKCksIDApOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDZXJ0
aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNl
cnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxv
d1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRl
SW5mbygpLCBob3N0KSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1dG9t
YXRpb25DYXBhYmlsaXRpZXMoKSBjb25zdApAQCAtMjMxMSwxMCArMjAyOSw3IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmNsZWFyQ3VycmVudE1vZGlmaWUKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9h
ZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWlu
LCBPcHRpb25TZXQ8Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4gbmF2aWdh
dGlvbkRhdGFUcmFuc2ZlciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdlUHJveHlJRCwg
UGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKQogewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlkQ29tbWl0Q3Jvc3NT
aXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0b0RvbWFpbiwg
bmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7CisgICAg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdp
dGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0b0RvbWFpbiwgbmF2aWdhdGlv
bkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNlZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRm9yVGVzdGluZyhjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZmlyc3RQYXJ0eURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIHRoaXJkUGFydHlEb21haW4sIGJvb2wgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzNDAsOCAr
MjA1NSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFdlYlByb2Nlc3NIYXNVcGwKICAgICBp
ZiAobV9wcm9jZXNzZXNXaXRoVXBsb2Fkcy5pc0VtcHR5KCkpIHsKICAgICAgICAgV0VCUFJPQ0VT
U1BPT0xfUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJzZXRXZWJQcm9jZXNzSGFzVXBs
b2FkczogVGhlIG51bWJlciBvZiB1cGxvYWRzIGluIHByb2dyZXNzIGlzIG5vdyBvbmUuIFRha2lu
ZyBOZXR3b3JraW5nIGFuZCBVSSBwcm9jZXNzIGFzc2VydGlvbnMuIik7CiAKLSAgICAgICAgQVNT
RVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT50YWtlVXBs
b2FkQXNzZXJ0aW9uKCk7CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LnRha2VVcGxvYWRBc3NlcnRpb24oKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVCghbV91aVBy
b2Nlc3NVcGxvYWRBc3NlcnRpb24pOwogICAgICAgICBtX3VpUHJvY2Vzc1VwbG9hZEFzc2VydGlv
biA9IG1ha2VVbmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4oZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAi
V2ViS2l0IHVwbG9hZHMiX3MsIEFzc2VydGlvblN0YXRlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsK
QEAgLTIzNjYsOCArMjA4MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyV2ViUHJvY2Vz
c0hhc1UKICAgICBpZiAobV9wcm9jZXNzZXNXaXRoVXBsb2Fkcy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJjbGVhcldl
YlByb2Nlc3NIYXNVcGxvYWRzOiBUaGUgbnVtYmVyIG9mIHVwbG9hZHMgaW4gcHJvZ3Jlc3MgaXMg
bm93IHplcm8uIFJlbGVhc2luZyBOZXR3b3JraW5nIGFuZCBVSSBwcm9jZXNzIGFzc2VydGlvbnMu
Iik7CiAKLSAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5jbGVhclVwbG9hZEFzc2VydGlvbigpOworICAgICAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5jbGVhclVwbG9hZEFzc2VydGlvbigpOwogICAgICAgICAKICAg
ICAgICAgQVNTRVJUKG1fdWlQcm9jZXNzVXBsb2FkQXNzZXJ0aW9uKTsKICAgICAgICAgbV91aVBy
b2Nlc3NVcGxvYWRBc3NlcnRpb24gPSBudWxscHRyOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5oCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw2
IEBAIE9CSkNfQ0xBU1MgV0tQcmVmZXJlbmNlT2JzZXJ2ZXI7CiAKIG5hbWVzcGFjZSBBUEkgewog
Y2xhc3MgQXV0b21hdGlvbkNsaWVudDsKLWNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dDsKIGNsYXNzIERvd25sb2FkQ2xpZW50OwogY2xhc3MgSFRUUENvb2tpZVN0b3JlOwogY2xhc3Mg
SW5qZWN0ZWRCdW5kbGVDbGllbnQ7CkBAIC0xNzcsNyArMTc2LDYgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0SGlzdG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlz
dG9yeUNsaWVudD4mJik7CiAgICAgdm9pZCBzZXREb3dubG9hZENsaWVudChVbmlxdWVSZWY8QVBJ
OjpEb3dubG9hZENsaWVudD4mJik7CiAgICAgdm9pZCBzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6
dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JiYpOwotICAgIHZvaWQgc2V0TGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudD4mJik7CiAKICAgICB2b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRT
ZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcm
IGN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fY29u
ZmlndXJhdGlvbi0+Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCk7IH0K
QEAgLTIwOCw5ICsyMDYsNiBAQCBwdWJsaWM6CiAgICAgLy8gRGlzY29ubmVjdCB0aGUgcHJvY2Vz
cyBmcm9tIHRoZSBjb250ZXh0LgogICAgIHZvaWQgZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vz
c1Byb3h5Kik7CiAKLSAgICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUqIHdlYnNpdGVEYXRhU3Rv
cmUoKSBjb25zdCB7IHJldHVybiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7IH0KLSAgICB2b2lk
IHNldFByaW1hcnlEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUp
IHsgbV93ZWJzaXRlRGF0YVN0b3JlID0gJmRhdGFTdG9yZTsgfQotCiAgICAgUmVmPFdlYlBhZ2VQ
cm94eT4gY3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRp
b24+JiYpOwogCiAgICAgdm9pZCBwYWdlQmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFn
ZVByb3h5SWRlbnRpZmllciwgV2Vic2l0ZURhdGFTdG9yZSYpOwpAQCAtMzA3LDggKzMwMiw2IEBA
IHB1YmxpYzoKICAgICBBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xp
ZW50KCkgeyByZXR1cm4gKm1faGlzdG9yeUNsaWVudDsgfQogICAgIFdlYkNvbnRleHRDbGllbnQm
IGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKLSAgICBBUEk6OkN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgY29uc3QgeyByZXR1
cm4gKm1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OyB9Ci0KICAgICBzdHJ1Y3QgU3RhdGlz
dGljcyB7CiAgICAgICAgIHVuc2lnbmVkIHdrVmlld0NvdW50OwogICAgICAgICB1bnNpZ25lZCB3
a1BhZ2VDb3VudDsKQEAgLTMxNiw5ICszMDksNiBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBzdGF0
aWMgU3RhdGlzdGljcyYgc3RhdGlzdGljcygpOyAgICAKIAotICAgIHZvaWQgdXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uKCk7Ci0gICAgYm9vbCBpc1VzaW5nVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb247IH0KLQogICAg
IHZvaWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCk7CiAKICAg
ICB2b2lkIGNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKQEAgLTM5MSw4ICszODEsOCBAQCBwdWJs
aWM6CiAKICAgICAvLyBOZXR3b3JrIFByb2Nlc3MgTWFuYWdlbWVudAogICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHkmIGVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJz
aXRlRGF0YVN0b3JlID0gbnVsbHB0cik7Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29y
a1Byb2Nlc3MoKSB7IHJldHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9Ci0gICAgdm9pZCBu
ZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFZlY3RvcjxzdGQ6OnBh
aXI8UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6Okdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseT4+JiYpOworICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzKCkgeyByZXR1cm4gJk5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpOyB9CisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29y
a1Byb2Nlc3NQcm94eSYpOwogCiAgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
V2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCkBAIC01NDQsNiArNTM0LDE3IEBAIHB1
YmxpYzoKICAgICB2b2lkIG5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZChjb25zdCBTdHJpbmcmIGRv
bWFpbiwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IE9wdGlvbmFsPFN0cmluZz4mIGVuY29kZWRW
YWx1ZSk7CiAjZW5kaWYKIAorICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGlj
IFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOwor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgp
OworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0
YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJp
bmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAg
ICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCkBAIC01NTksOCArNTYwLDYgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgcmVxdWVzdFdlYkNvbnRlbnRTdGF0aXN0aWNzKFN0YXRpc3RpY3NSZXF1
ZXN0Jik7CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2b2lkIGhhbmRsZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRh
dGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYg
bWVzc2FnZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlckRhdGEmJik+JiYpOwogCkBA
IC01ODUsMTQgKzU4NCw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVzZXNTaW5nbGVXZWJQcm9j
ZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT51c2VzU2luZ2xlV2ViUHJvY2Vz
cygpOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyBTdHJpbmcgY29v
a2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxlRGly
ZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7
Ci0gICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgc3Rh
dGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKLSNlbmRpZgotCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCByZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygp
OwogICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwpAQCAtNjQ1LDcg
KzYzNiw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNs
aWVudD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xp
ZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNv
bnRleHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4gbV9hdXRvbWF0aW9u
U2Vzc2lvbjsKIApAQCAtNjc3LDggKzY2Nyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21lbW9y
eVNhbXBsZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9tZW1vcnlTYW1wbGVySW50
ZXJ2YWwgeyAxNDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU+
IG1fd2Vic2l0ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwg
UmVmUHRyPFdlYkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFzaDxjb25zdCBjaGFyKj4+IFdlYkNv
bnRleHRTdXBwbGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRTdXBwbGVtZW50TWFwIG1fc3VwcGxl
bWVudHM7CiAKQEAgLTcxMiw4ICs3MDAsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3Byb2Nl
c3NUZXJtaW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0
d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKLQogICAgIEhhc2hNYXA8dWludDY0
X3QsIFJlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25hcnlDYWxsYmFja3M7CiAg
ICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFN0YXRpc3RpY3NSZXF1ZXN0Pj4gbV9zdGF0aXN0
aWNzUmVxdWVzdHM7CiAKQEAgLTgxNiwxNSArODAyLDE1IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3Mo
VCYmIG1lc3NhZ2UpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJv
Y2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChz
dGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOworICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5jYW5TZW5kTWVzc2FnZSgpKQorICAgICAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3Jr
aW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCiB7CiAgICAgZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9y
d2FyZDxUPihtZXNzYWdlKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuc2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhU
VFBDb29raWVTdG9yZS5jcHAJKHJldmlzaW9uIDI1NzU4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4
ICs0MSw2IEBAIG5hbWVzcGFjZSBBUEkgewogSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3Rv
cmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogICAgIDogbV9v
d25pbmdEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fb3duaW5nRGF0
YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAg
IHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIEhUVFBDb29r
aWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCkBAIC01MCwxMTYgKzQ4LDQ0IEBAIEhUVFBDb29r
aWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1w
dHkoKSk7CiAgICAgQVNTRVJUKCFtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5KTsKICAgICBB
U1NFUlQoIW1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdpc3RlckZv
ck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9y
ZTo6Y29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3du
aW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0g
ICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGFsbENvb2tp
ZXM7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgICAgIGFsbENvb2tpZXMgPSBn
ZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7Ci0gICAgICAgIGFsbENv
b2tpZXMuYXBwZW5kVmVjdG9yKG1fb3duaW5nRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsK
LQotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGFsbENvb2tpZXNdICgpIG11dGFibGUgewotICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoYWxsQ29va2llcyk7Ci0gICAgICAgIH0pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1
cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFu
YWdlci0+Z2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFtwb29s
ID0gV1RGTW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxl
IHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29va2llcyk7Ci0gICAgfSk7CisgICAgYXV0
byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0
b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRU
UENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JD
b29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkKLSAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9v
bC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29r
aWVNYW5hZ2VyLT5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJs
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdURk1vdmUoY29va2llcykpOwotICAgIH0pOworICAgIGF1dG8mIGNvb2tpZU1h
bmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAg
Y29va2llTWFuYWdlci5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
dXJsLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0
b3JlOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0
byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VP
cGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY29va2ll
IDogY29va2llcykgewotICAgICAgICAgICAgLy8gRklYTUU6IHBlbmRpbmdDb29raWVzIHVzZWQg
Zm9yIGRlZmF1bHRTZXNzaW9uIGJlY2F1c2Ugc2Vzc2lvbiBjb29raWVzIGNhbm5vdCBiZSBwcm9w
YWdhdGVkIHRvIE5ldHdvcmsgUHJvY2VzcyB3aXRoIHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVu
dGlmaWVyLgotICAgICAgICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9
PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikK
LSAgICAgICAgICAgICAgICBzZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShj
b29raWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0
b3JlLT5hZGRQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+c2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZXMsIFtw
b29sID0gV1RGTW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLnNldENvb2tpZXMobV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUoY29uc3QgV2Vi
Q29yZTo6Q29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAg
ICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgIGRl
bGV0ZUNvb2tpZUZyb21EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9vd25pbmdEYXRhU3RvcmUtPnJlbW92ZVBlbmRpbmdDb29r
aWUoY29va2llKTsKLQotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxl
dGVDb29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFtwb29sID0g
V1RGTW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsK
KyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnNpbmdsZXRvbigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQ29va2llKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpkZWxldGVBbGxDb29raWVzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0g
bV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMo
KTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIGRlbGV0ZUNvb2tpZXNJbkRlZmF1
bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQWxsQ29va2ll
cyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOworICAgIGF1dG8mIGNvb2tpZU1hbmFn
ZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAgY29v
a2llTWFuYWdlci5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSk7CiAgICAgLy8gRklYTUU6IFRoZSBDb21wbGV0aW9uSGFuZGxlciBzaG91bGQgYmUgcGFzc2Vk
IHRvIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcy4KICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IEhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+
cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkg
ewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJh
bCgpKQotICAgICAgICAgICAgc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeUluRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKHBvbGljeSk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0g
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2llTWFu
YWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBj
b29raWVNYW5hZ2VyLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCBwb2xpY3ksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
Y2xhc3MgQVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIgOiBwdWJsaWMgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpPYnNlcnZlciB7CkBAIC0xOTUsMjEgKzEyMSw3IEBAIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKE8KIAogICAgIG1fY29va2llTWFuYWdlclByb3h5
T2JzZXJ2ZXIgPSBtYWtlVW5pcXVlPEFQSVdlYkNvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyPigq
dGhpcyk7CiAKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29s
Rm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLQotICAgIGlmICghcG9vbCkgewotICAgICAg
ICBBU1NFUlQoIW1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2llcyk7Ci0KLSAgICAgICAgLy8gTGlz
dGVuIGZvciBjb29raWUgbm90aWZpY2F0aW9ucyBpbiB0aGUgVUlQcm9jZXNzIGluIHRoZSBtZWFu
dGltZS4KLSAgICAgICAgc3RhcnRPYnNlcnZpbmdDaGFuZ2VzVG9EZWZhdWx0VUlQcm9jZXNzQ29v
a2llU3RvcmUoW3RoaXNdICgpIHsKLSAgICAgICAgICAgIGNvb2tpZXNEaWRDaGFuZ2UoKTsKLSAg
ICAgICAgfSk7Ci0KLSAgICAgICAgbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzID0gdHJ1ZTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJv
eHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwor
ICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAmV2ViS2l0OjpXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkt
PnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29r
aWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKQEAgLTI0NCw0NiArMTU2LDEwIEBAIHZvaWQg
SFRUUENvb2tpZVN0b3JlOjpjb29raWVzRGlkQ2hhbmdlKCkKIHZvaWQgSFRUUENvb2tpZVN0b3Jl
Ojpjb29raWVNYW5hZ2VyRGVzdHJveWVkKCkKIHsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdl
clByb3h5LT51bnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1h
bmFnZXJQcm94eSA9IG51bGxwdHI7Ci0KLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3Rv
cmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLQotICAgIGlmICgh
cG9vbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94
eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Cisg
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+
cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tp
ZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIAotdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lz
dGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBBU1NFUlQoIW1fcHJv
Y2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29s
Q3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJQcm9j
ZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIoW3RoaXNdKFdlYlByb2Nlc3NQb29sJiBuZXdQcm9jZXNz
UG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5pc0Fzc29jaWF0ZWRQcm9j
ZXNzUG9vbChuZXdQcm9jZXNzUG9vbCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
Ly8gTm93IHRoYXQgYW4gYXNzb2NpYXRlZCBwcm9jZXNzIHBvb2wgZXhpc3RzLCB3ZSBuZWVkIHRv
IGZsdXNoIHRoZSBVSSBwcm9jZXNzIGNvb2tpZSBzdG9yZQotICAgICAgICAvLyB0byBtYWtlIHN1
cmUgYW55IGNoYW5nZXMgYXJlIHJlZmxlY3RlZCB3aXRoaW4gdGhlIG5ldyBwcm9jZXNzIHBvb2wu
Ci0gICAgICAgIGZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKCk7Ci0gICAgICAgIG5l
d1Byb2Nlc3NQb29sLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0KLSAgICAgICAgaWYgKG1fY29v
a2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpIHsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29raWVN
YW5hZ2VyUHJveHkgPSBuZXdQcm9jZXNzUG9vbC5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2ll
TWFuYWdlclByb3h5PigpOwotICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94
eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nv
b2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICAgICAgfQotICAgICAgICB1bnJlZ2lzdGVy
Rm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSFRU
UENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkK
LXsKLSAgICBpZiAobV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKQotICAg
ICAgICBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5l
cihtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9j
ZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyID0gMDsKLX0KLQogI2lmICFQTEFURk9S
TShDT0NPQSkKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29r
aWVTdG9yZSgpIHsgfQogVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gSFRUUENvb2tpZVN0b3JlOjpn
ZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCkgeyByZXR1cm4geyB9OyB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5oCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJSFRUUENvb2tpZVN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDYgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBIVFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlJik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25z
KCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7
Ci0KICAgICBzdGF0aWMgdm9pZCBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwog
ICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0VUlQcm9jZXNz
Q29va2llU3RvcmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Q29va2llSW5EZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJldmlzaW9uIDI1NzU4
MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyNiw5ICs0MjYsOSBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1Nl
cnZlcihXS0NvbnRlCiB7CiB9CiAKLVdLQ29va2llTWFuYWdlclJlZiBXS0NvbnRleHRHZXRDb29r
aWVNYW5hZ2VyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQorV0tDb29raWVNYW5hZ2VyUmVmIFdL
Q29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmKQogewotICAgIHJldHVybiBXZWJL
aXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zdXBwbGVtZW50PFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5PigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpKTsKIH0KIAogV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIFdLQ29udGV4dEdldFdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmKQpA
QCAtNTQ1LDkgKzU0NSw4IEBAIHZvaWQgV0tDb250ZXh0U2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xs
ZWMKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VD
b2xsZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpCit2b2lkIFdLQ29udGV4dFVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dCktPnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwogfQogCiB2b2lkIFdLQ29u
dGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhXS0NvbnRl
eHRSZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiAyNTc1ODEpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTkwLDcgKzkwLDcgQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dz
QW55U1NMQwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRleHRSZWYsIGJvb2wpOwogCiAvLyBUZXN0
IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBzZWNvbmRhcnkgcHJvY2Vzc2VzIGFy
ZSBzdGFydGVkLgotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNz
aW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKK1dLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVD
QVRFRDsKIAogLy8gVGVzdCBvbmx5LiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBydW5uaW5nIGEg
dGVzdC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tD
b250ZXh0UmVmIGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2wubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0JKHJldmlzaW9uIDI1NzU4MSkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDIsNyArMjAyLDcgQEAgLSAodm9pZClfc2V0Q2FuSGFuZGxlSFRUUFNTZXJ2ZXJU
cnVzdEV2YQogCiAtICh2b2lkKV9zZXRDb29raWVBY2NlcHRQb2xpY3k6KE5TSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSlwb2xpY3kKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgV2ViQ29yZTo6dG9IVFRQQ29va2llQWNj
ZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBXZWJLaXQ6OldlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBXZWJDb3JlOjp0b0hUVFBDb29raWVBY2NlcHRQb2xp
Y3kocG9saWN5KSwgW10oKSB7IH0pOwogfQogCiAtIChpZClfb2JqZWN0Rm9yQnVuZGxlUGFyYW1l
dGVyOihOU1N0cmluZyAqKXBhcmFtZXRlcgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAJKHJldmlzaW9u
IDI1NzU4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tp
ZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw4ICs2NCw3IEBAIHN0cnVjdCBfV2Vi
S2l0Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJp
dmF0ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAg
IHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29v
a2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CisgICAgICAgIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhz
ZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyKiBkYXRhTWFuYWdlcjsKQEAgLTE0MSwxMSArMTQwLDkgQEAgV2ViS2l0Q29va2llTWFuYWdl
ciogd2Via2l0Q29va2llTWFuYWdlcgogewogICAgIFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFn
ZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJ
RV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBk
YXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkgewot
ICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkt
PnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFtt
YW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hB
TkdFRF0sIDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5
OjpzaW5nbGV0b24oKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCBbbWFuYWdlcl0geworICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNp
Z25hbHNbQ0hBTkdFRF0sIDApOworICAgIH0pOwogICAgIHJldHVybiBtYW5hZ2VyOwogfQogCkBA
IC0xNzUsOCArMTcyLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3Rl
bgogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFBy
b2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3Vw
Q29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0b3JhZ2UpKTsKKyAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25J
RCwgU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlVHlwZShzdG9yYWdlKSk7CiB9CiAKIC8qKgpAQCAtMTkwLDggKzE4Niw3IEBAIHZvaWQgd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG8KIHsKICAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CiAKLSAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFn
ZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFn
ZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwg
W10oKSB7IH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKIH0KIAogLyoqCkBAIC0yMTksNyAr
MjE0LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wbwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5w
cml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2lu
Z2xldG9uKCkuZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9s
aWN5IHBvbGljeSkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCB0b1dl
YktpdENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKICAgICB9KTsKIH0KQEAgLTI2NCwxMSAr
MjU5LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShXZQogICAgIGdf
cmV0dXJuX2lmX2ZhaWwoY29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9w
dEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRh
KSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBT
UUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mg
d2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4K
LSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQ
b29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZXMo
bWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkgfSwg
W3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNp
bmdsZXRvbigpLnNldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29y
ZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAg
Z190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAt
MzE1LDExICszMDYsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhX
CiAgICAgZ19yZXR1cm5faWZfZmFpbCh1cmkpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9
IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNl
ckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBz
YW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJv
Y2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBw
b29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJv
Y2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29v
a2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21V
VEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiBjb29raWVzKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24o
KS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmlu
Zzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAgR0xpc3QqIGNvb2tpZXNMaXN0ID0g
bnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29raWVzKQogICAgICAgICAg
ICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29raWVzTGlzdCwgY29va2llLnRvU291
cENvb2tpZSgpKTsKQEAgLTM3MywxMSArMzYwLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFn
ZXJfZGVsZXRlX2Nvb2tpZQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29va2llKTsKIAogICAgIEdS
ZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxs
YWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dy
aXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNz
Ci0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2Ug
dGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0
YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCktPmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2Vi
Q29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJp
di0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUo
dGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJV
RSk7CiAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcAkocmV2aXNpb24gMjU3NTgxKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4Niw3ICszODYsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0
Q29uc3RydWN0ZWQoCiAgICAgICAgIFdlYktpdDo6TGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNldEhTVFNTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24od2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9oc3Rz
X2NhY2hlX2RpcmVjdG9yeShwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpKSk7CiAKICAg
ICBwcml2LT5wcm9jZXNzUG9vbCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlv
bik7Ci0gICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFByaW1hcnlEYXRhU3RvcmUod2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQo
KSkpOwogICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRVc2VyTWVzc2FnZUhhbmRsZXIoW3dlYkNv
bnRleHRdKFVzZXJNZXNzYWdlJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2Vy
TWVzc2FnZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgewogICAgICAgICAvLyBTaW5rIHRoZSBm
bG9hdGluZyByZWYuCiAgICAgICAgIEdSZWZQdHI8V2ViS2l0VXNlck1lc3NhZ2U+IHVzZXJNZXNz
YWdlID0gd2Via2l0VXNlck1lc3NhZ2VDcmVhdGUoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21h
dGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAJKHJldmlzaW9u
IDI1NzU4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzg3LDggKzEzODcsNyBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29rCiAgICAgaWYgKCFjb29raWVPYmpl
Y3QuZ2V0Qm9vbGVhbigiaHR0cE9ubHkiX3MsIGNvb2tpZS5odHRwT25seSkpCiAgICAgICAgIEFT
WU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0
ZXIsICJUaGUgcGFyYW1ldGVyICdodHRwT25seScgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIFdl
YkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldENv
b2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBb
Y2FsbGJhY2sgPSBjYWxsYmFjay5jb3B5UmVmKCldKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vz
c2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFjayA9IGNhbGxiYWNrLmNvcHlSZWYoKV0oKSB7
CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQwNCw4
ICsxNDAzLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29vawogCiAg
ICAgU3RyaW5nIGhvc3QgPSBhY3RpdmVVUkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAgICBXZWJD
b29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVt
ZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwg
eyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworICAgIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
cyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlB
ZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6Z2V0U2Vzc2lvblBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Np
b25EYXRhPj4mIG91dF9wZXJtaXNzaW9ucykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkocmV2aXNpb24gMjU3NTgx
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTM5LDggKzEzOSw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
VXNlckRlZmF1bHRzSWZOZWVkZWQKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vz
c1N1cHByZXNzaW9uU3RhdGUoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByb2Nlc3NT
dXBwcmVzc2lvbkVuYWJsZWQoKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVk
KCkpOwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nl
c3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTE3MCw4ICsx
NjksNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoCiAKICAgICBp
ZiAoIVtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJX
ZWJLaXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciJdKQogICAgICAgICBpbnN0YWxsTWVt
b3J5UHJlc3N1cmVIYW5kbGVyKCk7Ci0KLSAgICBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQobWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkp
OwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTQ0NSwyMiArNDQyLDYgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTgogCiAgICAgTlNVc2VyRGVmYXVs
dHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKIAot
ICAgIHsKLSAgICAgICAgYm9vbCBpc1NhZmFyaSA9IGZhbHNlOwotICAgICAgICBib29sIGlzTWlu
aUJyb3dzZXIgPSBmYWxzZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpc1Nh
ZmFyaSA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01vYmlsZVNhZmFyaSgpOwotICAgICAg
ICBpc01pbmlCcm93c2VyID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIo
KTsKLSNlbGlmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpNYWNB
cHBsaWNhdGlvbjo6aXNTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6
Ok1hY0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGlz
U2FmYXJpIHx8IGlzTWluaUJyb3dzZXIpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBQcm94eSA9
IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJLaXQySFRU
UFByb3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBzUHJveHkgPSBVUkwo
VVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBTUHJv
eHlEZWZhdWx0c0tleV0pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcGFyYW1ldGVycy5uZXR3
b3JrQVRTQ29udGV4dCA9IGFkb3B0Q0YoX0NGTmV0d29ya0NvcHlBVFNDb250ZXh0KCkpOwogCiAg
ICAgcGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciA9IFtkZWZh
dWx0cyBib29sRm9yS2V5OldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyRGVmYXVs
dHNLZXldOwpAQCAtNDcxLDEzICs0NTIsOSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9y
bUluaXRpYWxpemVOCiAgICAgcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRp
ZmllciA9IGlkZW50aWZ5aW5nRGF0YUZyb21Db29raWVTdG9yYWdlKFtbTlNIVFRQQ29va2llU3Rv
cmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gX2Nvb2tpZVN0b3JhZ2VdKTsKICNlbmRpZgog
Ci0gICAgcGFyYW1ldGVycy5zdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IHN0b3JhZ2VBY2Nlc3NB
UElFbmFibGVkKCk7Ci0KICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFibGVkVmFsdWUgPSBbZGVm
YXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJuYWxE
ZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCkuY3Jl
YXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVuYWJsZWRWYWx1ZSkKICAg
ICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRhdGFiYXNlRW5hYmxl
ZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5h
YmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuaXNJVFBE
YXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJpYnV0
aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0cmli
dXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogfQpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5TWFwLmNwcAkocmV2aXNpb24gMjU3NTgxKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDksOSArMTA5LDYgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKAog
CiAgICAgUkVMRUFTRV9MT0coTG9hZGluZywgIlJlbW92aW5nIGRvd25sb2FkICUiIFBSSXU2NCAi
IGZyb20gVUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAiLCBkb3dubG9hZElELmRvd25sb2FkSUQo
KSk7CiAKLSAgICAvLyBUaGUgRG93bmxvYWRQcm94eSBtYXkgYmUgaG9sZGluZyB0aGUgbGFzdCBy
ZWZlcmVuY2UgdG8gdGhlIHByb2Nlc3MgcG9vbC4KLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQ
b29sID0gbWFrZVJlZlB0cihtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkpOwotCiAgICAgQVNTRVJU
KG1fZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKIAogICAgIG1fcHJvY2Vzcy0+cmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAko
cmV2aXNpb24gMjU3NTgxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2VuZGlmCisjaW5j
bHVkZSAiTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKQEAgLTUxLDcgKzUyLDYgQEAKICNpbmNs
dWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eU1l
c3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCkBA
IC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZUNsaWVudC5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpc3Ry
YWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNs
dWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElN
KQpAQCAtNzAsNiArNzEsMTAgQEAKICNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4K
ICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2RlZmluZSBNRVNTQUdFX0NIRUNLKGFz
c2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgY29ubmVjdGlvbigpKQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTgyLDE4ICs4Nyw4MyBAQCBzdGF0aWMgdWludDY0X3QgZ2Vu
ZXJhdGVDYWxsYmFja0lEKCkKICAgICByZXR1cm4gKytjYWxsYmFja0lEOwogfQogCi1OZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNz
UG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9jZXNzUG9vbC5hbHdheXNSdW5z
QXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vzc1Bvb2wocHJvY2Vzc1Bvb2wp
CitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+JiBnbG9iYWxOZXR3
b3JrUHJvY2VzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6dW5pcXVlX3B0
cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gbmV0d29ya1Byb2Nlc3M7CisgICAgcmV0dXJuIG5ldHdv
cmtQcm9jZXNzOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKQoreworICAgIGlmICghZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSkgeworICAg
ICAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1By
b3h5PigpOworICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpLT5zZW5kQ3JlYXRpb25QYXJh
bWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgfQorICAgIHJldHVybiAqZ2xvYmFsTmV0d29ya1By
b2Nlc3MoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphdHRlbXB0UmVsYXVuY2hB
ZnRlckNyYXNoSWZOZWNlc3NhcnkoVmVjdG9yPHN0ZDo6cGFpcjxSZWY8V2ViUHJvY2Vzc1Byb3h5
PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
RGVsYXllZFJlcGx5Pj4mJiBwZW5kaW5nUmVxdWVzdHMpCit7CisgICAgZ2xvYmFsTmV0d29ya1By
b2Nlc3MoKSA9IG51bGxwdHI7CisgICAgaWYgKHBlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBuZXdOZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpOworICAgIGZvciAoYXV0byYgcmVxdWVzdCA6IHBlbmRpbmdS
ZXF1ZXN0cykKKyAgICAgICAgbmV3TmV0d29ya1Byb2Nlc3MuZ2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKHJlcXVlc3QuZmlyc3QuZ2V0KCksIFdURk1vdmUocmVxdWVzdC5zZWNvbmQpKTsKK30K
Kwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQ
cm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8gRklY
TUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQg
QVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCisgICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9u
Y2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCisgICAg
aWYgKCFSdW5Mb29wOjppc01haW4oKSkgeworICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdh
aXQoW3RoaXNdIHsKKyAgICAgICAgICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nl
c3MoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMgcGFyYW1ldGVyczsKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgcGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKKyAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1l
dGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworI2VuZGlmCisg
ICAgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IExlZ2FjeUdsb2JhbFNldHRpbmdz
OjpzaW5nbGV0b24oKS5oc3RzU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGlmICghcGFyYW1ldGVy
cy5oc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlU
b1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0
ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBh
c3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0
dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2Vj
dXJpdHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9j
YWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVt
ZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3Rl
cmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2Fj
aGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7
CisgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhD
dXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQ
cm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVj
dG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZv
clJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNE
aXJlY3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250
YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9
IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURp
cmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5
LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5k
aWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
cGFyYW1ldGVycyk7CisgICAgcGFyYW1ldGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gV2Vic2l0
ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAw
KTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eSgpCisgICAg
OiBBdXhpbGlhcnlQcm9jZXNzUHJveHkoKQogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RP
Q09MX01BTkFHRVIpCiAgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5KCp0aGlzKQog
I2VuZGlmCi0gICAgLCBtX3Rocm90dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJ
QmFja2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIGZhbHNlKQor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQo
bWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpCisjZW5kaWYK
IHsKICAgICBjb25uZWN0KCk7Ci0KLSAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IG1f
cHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKQotICAgICAgICBtX3dlYnNpdGVEYXRhU3Rv
cmVzLnNldCh3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgbWFrZVJlZigqd2Vic2l0ZURh
dGFTdG9yZSkpOwogfQogCiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp+TmV0d29ya1Byb2Nlc3NQcm94
eSgpCkBAIC0xMTcsMTEgKzE4Nyw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1
bmNoT3B0aW8KIHsKICAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0gUHJvY2Vzc0xhdW5j
aGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazsKICAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6Omdl
dExhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7Ci0KLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5z
aG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgewotICAg
ICAgICBwcm9jZXNzUG9vbCgpLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hG
YWlsRm9yVGVzdGluZyhmYWxzZSk7Ci0gICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxkTWFrZVBy
b2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHRydWU7Ci0gICAgfQogfQogCiB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24pCkBAIC0xODIsMTIgKzI0NywxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5
bnRoZXNpemVBcHBJCiAgICAgfQogfQogCi1Eb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEm
IGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCitEb3dubG9hZFByb3h5
JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3Rv
cmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZv
LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKIHsKICAgICBpZiAoIW1fZG93bmxvYWRQ
cm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwID0gbWFrZVVuaXF1ZTxEb3dubG9h
ZFByb3h5TWFwPigqdGhpcyk7CiAKLSAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVh
dGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgbV9wcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0
LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CisgICAgcmV0dXJuIG1fZG93bmxvYWRQcm94
eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHByb2Nlc3NQb29sLCByZXNvdXJj
ZVJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBPcHRpb25TZXQ8V2Vic2l0ZURh
dGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChXZWJz
aXRlRGF0YSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNDgsMTggKzMxMywyMCBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9jZXNzCiB7CiAgICAgY2xlYXJDYWxsYmFj
a1N0YXRlcygpOwogCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5
PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
OjpEZWxheWVkUmVwbHk+PiBwZW5kaW5nUmVxdWVzdHM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxS
ZWY8V2ViUHJvY2Vzc1Byb3h5PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHk+PiBwZW5kaW5nUmVxdWVzdHM7CiAgICAg
cGVuZGluZ1JlcXVlc3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jb25uZWN0aW9uUmVxdWVz
dHMuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX2Nvbm5lY3Rpb25SZXF1ZXN0
cy52YWx1ZXMoKSkgewogICAgICAgICBpZiAocmVxdWVzdC53ZWJQcm9jZXNzKQotICAgICAgICAg
ICAgcGVuZGluZ1JlcXVlc3RzLnVuY2hlY2tlZEFwcGVuZChzdGQ6Om1ha2VfcGFpcihtYWtlUmVm
UHRyKHJlcXVlc3Qud2ViUHJvY2Vzcy5nZXQoKSksIFdURk1vdmUocmVxdWVzdC5yZXBseSkpKTsK
KyAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0cy51bmNoZWNrZWRBcHBlbmQoeyAqcmVxdWVzdC53
ZWJQcm9jZXNzLCBXVEZNb3ZlKHJlcXVlc3QucmVwbHkpIH0pOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICByZXF1ZXN0LnJlcGx5KHsgfSk7CiAgICAgfQogICAgIG1fY29ubmVjdGlvblJlcXVl
c3RzLmNsZWFyKCk7CiAKLSAgICAvLyBUZWxsIHRoZSBuZXR3b3JrIHByb2Nlc3MgbWFuYWdlciB0
byBmb3JnZXQgYWJvdXQgdGhpcyBuZXR3b3JrIHByb2Nlc3MgcHJveHkuIFRoaXMgd2lsbCBjYXVz
ZSB1cyB0byBiZSBkZWxldGVkLgotICAgIG1fcHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3NDcmFz
aGVkKCp0aGlzLCBXVEZNb3ZlKHBlbmRpbmdSZXF1ZXN0cykpOworICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMpOworCisgICAgYXR0ZW1wdFJl
bGF1bmNoQWZ0ZXJDcmFzaElmTmVjZXNzYXJ5KFdURk1vdmUocGVuZGluZ1JlcXVlc3RzKSk7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0YXRlcygpCkBAIC0y
NzksOSArMzQ2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzcwog
ICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29sLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9u
LCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9j
ZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCkBAIC0yOTUsOCArMzU5
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlU3luYwogCiB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7Ci0gICAgYXV0
byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWYobV9wcm9jZXNzUG9vbCk7Ci0KICAgICBp
ZiAobV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFs
aWRhdGUoKTsKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQpAQCAt
MzUyLDExICs0MTQsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRo
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRvcE9yaWdpbiB8fCAhbV9wcm9j
ZXNzUG9vbC5pc1NlcnZpY2VXb3JrZXJQYWdlSUQocGFnZUlEKSkgewotICAgICAgICBwcm9jZXNz
QXV0aGVudGljYXRpb25DaGFsbGVuZ2Uoc2Vzc2lvbklELCBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBXZWJQYWdlUHJveHk6
OmZvck1vc3RWaXNpYmxlV2ViUGFnZUlmQW55KHNlc3Npb25JRCwgKnRvcE9yaWdpbiwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwgYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UgPSBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgbmVnb3RpYXRlZExl
Z2FjeVRMU10oYXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC00MTUsMTEgKzQ3Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6ZGlkRmluaXNoTGF1bmMKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29ubmVj
dGlvblJlcXVlc3QucmVwbHkoeyB9KTsKICAgICB9Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCi0gICAgICAg
IHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKICAgICAKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24g
PSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSkKQEAgLTEyMDgsNDIgKzEyNjAs
MjUgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRTeW5jQWxsQ29vawogICAgIH0KIH0K
IAotdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0
b3JlPiYmIHN0b3JlKQordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphZGRTZXNzaW9uKFdlYnNp
dGVEYXRhU3RvcmUmIHN0b3JlKQogewogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQotICAgICAg
ICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0ZURhdGFTdG9yZSB7IHN0
b3JlLT5wYXJhbWV0ZXJzKCkgfSwgMCk7Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS0+c2Vz
c2lvbklEKCk7Ci0gICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgeworICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0ZURhdGFTdG9yZSB7IHN0b3Jl
LnBhcmFtZXRlcnMoKSB9LCAwKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAg
ICAgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeSgpKTsKKyAgICBpZiAoIXN0b3JlLnNlc3Npb25JRCgpLmlzRXBoZW1lcmFs
KCkpCisgICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZElu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgotICAgICAgICBtX3dlYnNpdGVEYXRh
U3RvcmVzLnNldChzZXNzaW9uSUQsIFdURk1vdmUoc3RvcmUpKTsKLSAgICB9CiB9CiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCiB7CiAgICAgaWYgKGNhblNlbmRNZXNzYWdlKCkpCiAgICAgICAgIHNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpEZXN0cm95U2Vzc2lvbiB7IHNlc3Npb25JRCB9LCAwKTsKLSAgICBp
ZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmVz
LnJlbW92ZShzZXNzaW9uSUQpOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlKiBOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQpCiB7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fd2Vic2l0ZURhdGFTdG9yZXMuZmluZChz
ZXNzaW9uSUQpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX3dlYnNpdGVEYXRhU3RvcmVzLmVuZCgp
KQotICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotCi0gICAgaWYgKGF1dG8q
IHdlYnNpdGVEYXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKSkgewot
ICAgICAgICBpZiAoc2Vzc2lvbklEID09IHdlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKQot
ICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAgfQotCi0gICAgaWYgKHNl
c3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKKyAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhp
c3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKIH0KIAogdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpyZXRyaWV2ZUNhY2hlU3RvcmFnZVBhcmFtZXRlcnMoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKQpAQCAtMTI5MCw3ICsxMzI1LDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpkaWREZXN0cm95V2ViVQogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdv
cmtQcm9jZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5l
Y3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwg
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgYXV0byBhZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5lc3RhYmxpc2hXb3JrZXJDb250ZXh0
Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFJlZ2lzdHJhYmxlRG9tYWluIHtyZWdp
c3RyYWJsZURvbWFpbn0sIHNlc3Npb25JRCwgW2FnZ3JlZ2F0b3IgPSBhZ2dyZWdhdG9yLmNvcHlS
ZWYoKV0oKSB7IH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OndvcmtlckNvbnRl
eHRDb25uZWN0aW9uTm9Mb25nZXJOZWVkZWQoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgaWRl
bnRpZmllcikKQEAgLTE0MjcsMjEgKzE0NjQsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnByZWNvbm5lY3RUbyhQCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vz
c0Fzc2VydGlvbigpCiB7Ci0gICAgaWYgKHByb2Nlc3NQb29sKCkuaGFzRm9yZWdyb3VuZFdlYlBy
b2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEZvcmVn
cm91bmRBY3Rpdml0eShtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcykpIHsKLSAgICAgICAgICAg
IG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCkuZm9yZWdyb3VuZEFjdGl2
aXR5KCJOZXR3b3JraW5nIGZvciBmb3JlZ3JvdW5kIHZpZXcocykiX3MpOwotICAgICAgICAgICAg
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9Gb3Jl
Z3JvdW5kKCksIDApOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KHByb2Nlc3NQb29sKCkuaGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKSB7Ci0gICAgICAgIGlm
ICghUHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEJhY2tncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5
RnJvbVdlYlByb2Nlc3NlcykpIHsKLSAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vz
c2VzID0gdGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5nIGZvciBiYWNr
Z3JvdW5kIHZpZXcocykiX3MpOwotICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9CYWNrZ3JvdW5kKCksIDApOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMg
PSBudWxscHRyOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlc2V0UXVvdGEoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjU3NTgxKQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDYgKzQzLDEwIEBACiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHkuaCIKICNlbmRpZgogCituYW1lc3BhY2UgQVBJIHsKK2NsYXNzIEN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudDsKK30KKwogbmFtZXNwYWNlIFBBTCB7CiBjbGFzcyBTZXNzaW9u
SUQ7CiB9CkBAIC02NSw3ICs2OSw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgRG93bmxv
YWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7CiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1j
bGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6IGJvb2w7CkBAIC05
MywxMiArOTYsMTMgQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFj
Y2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5lckRvbWFp
biA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0d29ya1By
b2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBOZXR3b3JrUHJvY2Vzc1By
b3h5JiBzaW5nbGV0b24oKTsKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KCk7CiAg
ICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6Okdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIAotICAgIERvd25sb2Fk
UHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkq
IG9yaWdpbmF0aW5nUGFnZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94
eShXZWJzaXRlRGF0YVN0b3JlJiwgV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5h
dGluZ1BhZ2UpOwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRp
b24+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAgICAgdm9pZCBk
ZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4sIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcik7CkBAIC0xODQsMTMgKzE4OCwxMSBAQCBwdWJsaWM6CiAgICAgUHJv
Y2Vzc1Rocm90dGxlciYgdGhyb3R0bGVyKCkgeyByZXR1cm4gbV90aHJvdHRsZXI7IH0KICAgICB2
b2lkIHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBwcm9j
ZXNzUG9vbCgpIHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KLQogI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICNlbmRpZgogCi0gICAgdm9p
ZCBhZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsKKyAgICB2b2lkIGFkZFNlc3Np
b24oV2Vic2l0ZURhdGFTdG9yZSYpOwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Np
b25JRCk7CiAgICAgCiAgICAgdm9pZCB0YWtlVXBsb2FkQXNzZXJ0aW9uKCk7CkBAIC0yMDgsNiAr
MjEwLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9t
UHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVn
YWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyNpZiBFTkFCTEUoTEVHQUNZX0NV
U1RPTV9QUk9UT0NPTF9NQU5BR0VSKQorICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KiBsZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSB7IHJldHVybiBtX2N1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudC5nZXQoKTsgfQorI2VuZGlmCisKKyAgICB2b2lkIG5ldHdv
cmtQcm9jZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQgcmVzb3VyY2VM
b2FkRGlkU2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVzb3VyY2VMb2FkSW5m
byYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik7CkBAIC0yMjAsNiArMjI4LDkgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0SW5BcHBCcm93c2VyUHJpdmFjeUVuYWJsZWQoUEFMOjpTZXNzaW9u
SUQsIGJvb2wsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgCiBwcml2YXRlOgor
ICAgIHZvaWQgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIHN0YXRp
YyB2b2lkIGF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeShWZWN0b3I8c3RkOjpw
YWlyPFJlZjxXZWJQcm9jZXNzUHJveHk+LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHk+PiYmKTsKKwogICAgIC8vIEF1eGls
aWFyeVByb2Nlc3NQcm94eQogICAgIEFTQ0lJTGl0ZXJhbCBwcm9jZXNzTmFtZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuICJOZXR3b3JraW5nIl9zOyB9CiAKQEAgLTIyNyw3ICsyMzgsNiBAQCBwcml2
YXRlOgogICAgIHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJy
aWRlOwogICAgIHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6OkNvbm5lY3Rpb24mKSBvdmVy
cmlkZTsKIAotICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgdm9pZCBjbGVh
ckNhbGxiYWNrU3RhdGVzKCk7CiAKICAgICAvLyBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50CkBAIC0y
ODMsOCArMjkzLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vzc0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eT4mJik7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9jZXNzUG9vbDsKLQogICAgIHN0cnVj
dCBDb25uZWN0aW9uUmVxdWVzdCB7CiAgICAgICAgIFdlYWtQdHI8V2ViUHJvY2Vzc1Byb3h5PiB3
ZWJQcm9jZXNzOwogICAgICAgICBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkgcmVwbHk7CkBAIC0zMTEsOSArMzE5LDEwIEBA
IHByaXZhdGU6CiAgICAgSGFzaFNldDxXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSo+IG1f
d2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveGllczsKICNlbmRpZgogCi0gICAgSGFzaE1hcDxQ
QUw6OlNlc3Npb25JRCwgUmVmUHRyPFdlYnNpdGVEYXRhU3RvcmU+PiBtX3dlYnNpdGVEYXRhU3Rv
cmVzOwotICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNzQXNzZXJ0aW9uPiBtX3VwbG9h
ZEFzc2VydGlvbjsKKyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9j
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90
b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24gMjU3NTgxKQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNyArNDQsMjAgQEAg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6On5MZWdhYwogCiB2b2lkIExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdGFydExvYWRpbmcodWludDY0X3QgY3VzdG9tUHJv
dG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAg
IG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCgpLnN0YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7
CisgICAgaWYgKGF1dG8qIGNsaWVudCA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LmxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpKQorICAgICAgICBjbGllbnQtPnN0
YXJ0TG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQg
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKHVpbnQ2NF90IGN1
c3RvbVByb3RvY29sSUQpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29s
KCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3Rv
bVByb3RvY29sSUQpOworICAgIGlmIChhdXRvKiBjbGllbnQgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5sZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSkKKyAgICAg
ICAgY2xpZW50LT5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CiB9CiAKIHZv
aWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQogewotICAg
IG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOworICAgIGlmIChhdXRvKiBjbGllbnQgPSBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5sZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQoKSkKKyAgICAgICAgY2xpZW50LT5pbnZhbGlkYXRlKCp0aGlzKTsKIH0KIAogdm9pZCBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6d2FzUmVkaXJlY3RlZFRvUmVxdWVzdCh1
aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9u
c2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAkocmV2aXNpb24gMjU3NTgxKQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRp
c3RpY3MuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2Vi
QmFja0ZvcndhcmRDYWNoZS5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgog
I2luY2x1ZGUgIldlYktpdDJJbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NhY2hlLmgiCkBAIC04MywxMyArODQsMjIgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjphbGxvd1dlYnNpdGVEYXRhUgogICAgIGFsbG93c1dlYnNpdGVEYXRh
UmVjb3Jkc0ZvckFsbE9yaWdpbnMgPSB0cnVlOwogfQogCi1zdGF0aWMgSGFzaE1hcDxQQUw6OlNl
c3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBub25EZWZhdWx0RGF0YVN0b3JlcygpCitzdGF0
aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBhbGxEYXRhU3Rv
cmVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4+
IG1hcDsKICAgICByZXR1cm4gbWFwOwogfQogCitWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKCkKK3sKKyAg
ICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGFsbFBhcmFtZXRlcnM7CisgICAg
YWxsUGFyYW1ldGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFsbERhdGFTdG9yZXMoKS5zaXpl
KCkpOworICAgIGZvciAoYXV0byogc3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCisg
ICAgICAgIGFsbFBhcmFtZXRlcnMudW5jaGVja2VkQXBwZW5kKHN0b3JlLT5wYXJhbWV0ZXJzKCkp
OworICAgIHJldHVybiBhbGxQYXJhbWV0ZXJzOworfQorCiBSZWY8V2Vic2l0ZURhdGFTdG9yZT4g
V2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlTm9uUGVyc2lzdGVudCgpCiB7CiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlv
bjo6Y3JlYXRlKElzUGVyc2lzdGVudDo6Tm8pLCBQQUw6OlNlc3Npb25JRDo6Z2VuZXJhdGVFcGhl
bWVyYWxTZXNzaW9uSUQoKSkpOwpAQCAtMTE1LDEwICsxMjUsMTEgQEAgV2Vic2l0ZURhdGFTdG9y
ZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8VwogI2VuZGlmCiB7CiAgICAgV1RGOjpzZXRQcm9jZXNz
UHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lv
bklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZvcm1J
bml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmFkZFNlc3Npb24oKnRoaXMpOwogfQogCiBXZWJz
aXRlRGF0YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCkBAIC0xMjcsMTcgKzEzOCwxMiBAQCBX
ZWJzaXRlRGF0YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCiAKICAgICBwbGF0Zm9ybURlc3Ry
b3koKTsKIAotICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpKSB7Ci0gICAgICAgIEFTU0VSVChub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldCht
X3Nlc3Npb25JRCkgPT0gdGhpcyk7Ci0gICAgICAgIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkucmVt
b3ZlKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlBy
b2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAgICAg
ICB9Ci0gICAgfQorICAgIEFTU0VSVChhbGxEYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9
PSB0aGlzKTsKKyAgICBhbGxEYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklE
KTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChhdXRvKiBncHVQcm9jZXNz
UHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQotICAgICAgICAg
ICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKKyAgICBpZiAo
YXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0
ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklE
KTsKICNlbmRpZgogfQogCkBAIC0xNjgsMTcgKzE3NCwxNSBAQCBib29sIFdlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHREYXRhU3RvcmVFCiAgICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9y
ZSgpOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lv
bklETWFwKCkKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KCkKIHsKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IG5vbkRlZmF1bHREYXRhU3RvcmVzKCku
YWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJl
c3VsdC5pc05ld0VudHJ5KTsKLSAgICB9CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVz
KCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVz
dWx0LmlzTmV3RW50cnkpOwogfQogCi1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3Jl
OjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQorV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdE
YXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHJl
dHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5v
bkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCkgOiBudWxscHRyOworICAgIHJldHVy
biBhbGxEYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKQEAgLTE5NCwx
MiArMTk4LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJvY2VzcwogICAg
IG1fcHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKIH0KIAotV2ViUHJvY2Vzc1Bvb2wqIFdlYnNp
dGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKQotewot
ICAgIGF1dG8gcG9vbHMgPSBwcm9jZXNzUG9vbHMoMSwgZmFsc2UpOwotICAgIHJldHVybiBwb29s
cy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7Ci19Ci0KIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKQogewogICAg
IGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC0xODc4LDEzICsxODc2LDYgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENhY2hlTWF4QWdlQwogI2VuZGlmCiB9CiAKLWJvb2wg
V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wm
IHByb2Nlc3NQb29sKSBjb25zdAotewotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbERhdGFTdG9y
ZSA9IHByb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIHByb2Nl
c3NQb29sRGF0YVN0b3JlID09IHRoaXM7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBIYXNoU2V0
PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29scyhz
aXplX3QgY291bnQsIGJvb2wgZW5zdXJlQVBvb2xFeGlzdHMpIGNvbnN0CiB7CiAgICAgSGFzaFNl
dDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBwcm9jZXNzUG9vbHM7CkBAIC0xODkzLDE5ICsxODg0
LDYgQEAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRAogICAgICAgICAg
ICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7CiAgICAgfQogCi0gICAgaWYgKHByb2Nl
c3NQb29scy5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgb25lIG9mIHRo
ZSBsZWdhY3kgZGF0YSBzdG9yZXMuCi0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmICghaXNB
c3NvY2lhdGVkUHJvY2Vzc1Bvb2woKnByb2Nlc3NQb29sKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7Ci0KLSAg
ICAgICAgICAgIGlmIChwcm9jZXNzUG9vbHMuc2l6ZSgpID09IGNvdW50KQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgaWYgKHByb2Nlc3NQb29scy5pc0Vt
cHR5KCkgJiYgY291bnQgJiYgZW5zdXJlQVBvb2xFeGlzdHMpIHsKICAgICAgICAgYXV0byBwcm9j
ZXNzUG9vbCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb246OmNyZWF0ZSgpKTsKICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbC5w
dHIoKSk7CkBAIC0yMDgzLDI5ICsyMDYxLDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVh
clJlc291cmNlTG9hZAogfQogI2VuZGlmCiAKLVZlY3RvcjxXZWJDb3JlOjpDb29raWU+IFdlYnNp
dGVEYXRhU3RvcmU6OnBlbmRpbmdDb29raWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29weVRv
VmVjdG9yKG1fcGVuZGluZ0Nvb2tpZXMpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFk
ZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9w
ZW5kaW5nQ29va2llcy5yZW1vdmVJZihbJmNvb2tpZV0oYXV0byYgcGVuZGluZ0Nvb2tpZSkgewot
ICAgICAgICByZXR1cm4gcGVuZGluZ0Nvb2tpZS5pc0tleUVxdWFsKGNvb2tpZSk7Ci0gICAgfSk7
Ci0gICAgbV9wZW5kaW5nQ29va2llcy5hZGQoY29va2llKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2ll
KQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlKGNvb2tpZSk7Ci19Ci0gICAgCi12b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUGVuZGluZ0Nvb2tpZXMoKQotewotICAgIG1fcGVuZGlu
Z0Nvb2tpZXMuY2xlYXIoKTsKLX0KLQogdWludDY0X3QgV2Vic2l0ZURhdGFTdG9yZTo6cGVyVGhp
cmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IENvbnNp
ZGVyIHdoZXRoZXIgYWxsb3dpbmcgdG8gc2V0IGEgcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VR
dW90YSBmcm9tIGEgV2Vic2l0ZURhdGFTdG9yZS4KQEAgLTIxNTYsNiArMjExMSwxMCBAQCBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0CiAKICAgICBwbGF0Zm9ybVNldE5l
dHdvcmtQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwogCisjaWYgVVNFKFNPVVApCisgICAgV2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldENvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlKHNlc3Npb25JRCgpLCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5j
b29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisjZW5kaWYKKyAgICAKICAgICBy
ZXR1cm4gcGFyYW1ldGVyczsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkocmV2aXNpb24g
MjU3NTgxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgcHVibGljOgogICAg
IFdlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmLCBQ
QUw6OlNlc3Npb25JRCk7CiAgICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgIHN0YXRpYyBX
ZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQo
UEFMOjpTZXNzaW9uSUQpOworICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0Rh
dGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lz
dGVudCgpIGNvbnN0IHsgcmV0dXJuICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAg
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0K
QEAgLTIxNCwxNSArMjE0LDggQEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3Jh
Z2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29v
a2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQb29s
KFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyBwYXJhbWV0ZXJzKCk7Ci0KLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5nQ29v
a2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpD
b29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29v
a2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CisgICAgc3RhdGljIFZlY3Rv
cjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsK
IAogI2lmIFVTRShDVVJMKQogICAgIHZvaWQgc2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoV2ViQ29y
ZTo6Q3VybFByb3h5U2V0dGluZ3MmJik7CkBAIC0zMDUsNyArMjk4LDcgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsKICAgICBzdGF0aWMgdm9pZCBy
ZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBj
b25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKIAotICAgIHZvaWQg
bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2b2lkIHJlZ2lzdGVyV2l0aFNl
c3Npb25JRE1hcCgpOwogCiAgICAgY29uc3QgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAK
QEAgLTMzMiw4ICszMjUsNiBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkN1cmxQcm94eVNldHRp
bmdzIG1fcHJveHlTZXR0aW5nczsKICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29r
aWU+IG1fcGVuZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1By
b3h5PiBtX3Byb2Nlc3NlczsKIAogI2lmIEhBVkUoU0VDX0tFWV9QUk9YWSkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2Nv
YS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9D
b2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0JKHJldmlzaW9uIDI1NzU4MSkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2Nv
YS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTk2LDggKzE5Niw2IEBAIFdlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3QKICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBjb25maWd1cmF0aW9u
KCkuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCk7CiAgICAgcGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlm
aWVyID0gY29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmll
cigpOwogCi0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3RvcihtX3Bl
bmRpbmdDb29raWVzKTsKLQogICAgIGlmICghY29va2llRmlsZS5pc0VtcHR5KCkpCiAgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShGaWxl
U3lzdGVtOjpkaXJlY3RvcnlOYW1lKGNvb2tpZUZpbGUpLCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3Jh
Z2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3Jl
U291cC5jcHAJKHJldmlzaW9uIDI1NzU4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw4ICszNyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3IK
IHsKICAgICBhdXRvJiBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVyczsKIAotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50
U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlVHlwZSk7CisgICAgV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmds
ZXRvbigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdM
aWIuY3BwCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGli
L1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBA
IHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE8KICAgICAgICAgaWYgKCFk
YXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2
ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURhdGFT
dG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNz
IHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0
aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAgICAgIGRhdGFTdG9y
ZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAgICAgICAgIGRhdGFT
dG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUpOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAu
Y3BwCShyZXZpc2lvbiAyNTc1ODEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dl
YkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5
LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29v
a2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKIApAQCAt
MzQsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5
cGUgc3RvcmFnZVR5cGUpCiB7CiAgICAgbV9jb29raWVQZXJzaXN0ZW50U3RvcmFnZU1hcC5zZXQo
c2Vzc2lvbklELCBzdGQ6Om1ha2VfcGFpcihzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKLSAg
ICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBzdG9yYWdl
UGF0aCwgc3RvcmFnZVR5cGUpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lz
dGVudFN0b3JhZ2VUeXBlJiBzdG9yYWdlVHlwZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAJKHJldmlzaW9u
IDI1NzU4MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xT
b3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjcgKzM3LDIzIEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJv
Y2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKLSAg
ICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYgZGVmYXVsdFNlc3Npb25QYXJhbWV0
ZXJzID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnM7Ci0gICAgc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9u
SUQsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgs
IGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwor
ICAgIC8vIEZJWE1FOiBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5IHNob3VsZCBiZSBt
b3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAvLyBGSVhNRTogbV9pZ25vcmVUTFNF
cnJvcnMgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlIG9yIHJlbW92ZWQu
CisgICAgLy8gRklYTUU6IG1fbmV0d29ya1Byb3h5U2V0dGluZ3Mgc2hvdWxkIGJlIG1vdmVkIHRv
IHRoZSBXZWJzaXRlRGF0YVN0b3JlLgogCi0gICAgcGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xp
Y3kgPSBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5OwotICAgIHBhcmFtZXRlcnMuaWdu
b3JlVExTRXJyb3JzID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAgcGFyYW1ldGVycy5sYW5ndWFn
ZXMgPSB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgcGFyYW1ldGVycy5wcm94eVNldHRp
bmdzID0gbV9uZXR3b3JrUHJveHlTZXR0aW5nczsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIG1faWdub3Jl
VExTRXJyb3JzID0gaWdub3JlVExTRXJyb3JzOwotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0SWdub3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vycm9ycyksIDApOwogfQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhjb25zdCBXZWJDb3JlOjpTb3VwTmV0
d29ya1Byb3h5U2V0dGluZ3MmIHNldHRpbmdzKQogewogICAgIG1fbmV0d29ya1Byb3h5U2V0dGlu
Z3MgPSBzZXR0aW5nczsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94
eVNldHRpbmdzKG1fbmV0d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0
d29ya1Byb3h5U2V0dGluZ3MobV9uZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOwogfQogCiB9Cklu
ZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNTc1ODEpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNiBAQAorMjAyMC0wMi0yNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgorCisgICAgICAgIFVzZSBhIE5ldHdvcmtQcm9jZXNzUHJveHkgc2luZ2xldG9uIGlu
c3RlYWQgb2Ygb25lIHBlciBXZWJQcm9jZXNzUG9vbAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dLSFRUUENvb2tpZVN0b3JlLm1tOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURl
bGVnYXRlIHdhaXRGb3JNZXNzYWdlXSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJ
RGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKC1b
Q2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBh
bmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVs
ZXRlZC4KKwogMjAyMC0wMi0yNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIEFkZCBTUEkgdG8gcXVlcnkgV0tGcmFtZUluZm9zIGluIGEgV0tX
ZWJWaWV3CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQkZpbGVOYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0JKHJldmlzaW9uIDI1NzU4MSkKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0J
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgLSAodm9pZCl1c2VyQ29udGVudENvbnRy
b2xsZXI6KFdLVXNlckNvbgogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoKQorc3RhdGlj
IHZvaWQgcnVuVGVzdChib29sIG9sZEZpbGVTaG91bGRFeGlzdCA9IHRydWUpCiB7CiAgICAgYXV0
byBoYW5kbGVyID0gYWRvcHROUyhbW0luZGV4ZWREQkZpbGVOYW1lTWVzc2FnZUhhbmRsZXIgYWxs
b2NdIGluaXRdKTsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3
Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwpAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgdm9p
ZCBydW5UZXN0KCkKICAgICBOU1VSTCAqb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9IFtv
bGRWZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogQCJmaWxl
X18wIl07CiAgICAgTlNVUkwgKm5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbbmV3VmVy
c2lvbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJd
OwogICAgIE5TVVJMICpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xk
VmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6dW51
c2VkRGF0YWJhc2VOYW1lXTsKLSAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0
b3J5VVJMLnBhdGhdKTsKKyAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1h
bmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5
VVJMLnBhdGhdID09IG9sZEZpbGVTaG91bGRFeGlzdCk7CiAgICAgCiAgICAgLy8gRm9yIGRhdGFi
YXNlIHRoYXQgaXMgb3BlbmVkIGFmdGVyIHVwZ3JhZGUsIGl0cyBmaWxlIHNob3VsZCBvbmx5IGJl
IGluIHYxLgogICAgIE5TVVJMICpvbGRWZXJzaW9uRXhpc3RpbmdEYXRhYmFzZURpcmVjdG9yeVVS
TCA9IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDogZXhpc3RpbmdEYXRhYmFzZU5hbWVdOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyB2
b2lkIGNyZWF0ZURpcmVjdG9yaWVzKFN0cmluZyB0ZXMKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVk
REJGaWxlTmFtZSkKIHsKICAgICBjcmVhdGVEaXJlY3Rvcmllcygibm9uZSIpOwotICAgIHJ1blRl
c3QoKTsKKyAgICBydW5UZXN0KGZhbHNlKTsKIH0KIAogVEVTVChJbmRleGVkREIsIEluZGV4ZWRE
QkZpbGVOYW1lVjApCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCShyZXZpc2lv
biAyNTc1ODEpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsOSBAQCBU
RVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIEdyYW5kZmF0aGVyCiAgICAgW3dlYlZpZXcgbG9h
ZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAImFib3V0OmJsYW5rIl1dXTsKIAogICAgIGlmIChpc0lUUERhdGFiYXNlRW5hYmxlZCgpKSB7
CisgICAgICAgIFdURkxvZ0Fsd2F5cygiV0FJVCAxIik7CiAgICAgICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZ3JhbmRmYXRoZXJlZEZsYWcpOworICAgICAgICBXVEZMb2dBbHdheXMoIldB
SVQgMSIpOwogCiAgICAgICAgIC8vIFNpbmNlIHRoZSBkYXRhYmFzZSBzdG9yZSBpcyBlbmFibGVk
LCB3ZSBuZWVkIHRvIGRpc2FibGUgaXQgdG8gdGVzdCB0aGlzIGZ1bmN0aW9uYWxpdHkgd2l0aCB0
aGUgcGxpc3QuCiAgICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIE5ldHdvcmtQcm9jZXNzIHVw
IGFuZCBydW5uaW5nIHdpdGggSVRQIGVuYWJsZWQuIFdlIG5vdyBtYWtlIGFub3RoZXIgY2FsbCBp
bml0aWFsaXppbmcKQEAgLTEzNywxOCArMTM5LDI0IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlz
dGljcywgR3JhbmRmYXRoZXIKICAgICAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKICAgICAgICAg
fV07CiAKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJXQUlUIDIiKTsKICAgICAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiV0FJVCAy
Iik7CiAgICAgfQogCisgICAgV1RGTG9nQWx3YXlzKCJXQUlUIDMiKTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmdyYW5kZmF0aGVyZWRGbGFnKTsKKyAgICBXVEZMb2dBbHdheXMoIldB
SVQgMyIpOwogCiAgICAgLy8gU3BpbiB0aGUgcnVubG9vcCB1bnRpbCB0aGUgcmVzb3VyY2UgbG9h
ZCBzdGF0aXN0aWNzIGZpbGUgaGFzIHdyaXR0ZW4gdG8gZGlzay4KICAgICAvLyBJZiB0aGUgdGVz
dCBlbnRlcnMgYSBzcGluIGxvb3AgaGVyZSwgaXQgaGFzIGZhaWxlZC4KKyAgICBXVEZMb2dBbHdh
eXMoIldBSVQgNCIpOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlmIChbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9v
cCgxKTsKICAgICB9CisgICAgV1RGTG9nQWx3YXlzKCJXQUlUIDQiKTsKIAogICAgIGdyYW5kZmF0
aGVyZWRGbGFnID0gZmFsc2U7CiAgICAgZG9uZUZsYWcgPSBmYWxzZTsKQEAgLTE1Niw3ICsxNjQs
OSBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIEdyYW5kZmF0aGVyCiAgICAgICAgIGRv
bmVGbGFnID0gdHJ1ZTsKICAgICB9XTsKIAorICAgIFdURkxvZ0Fsd2F5cygiV0FJVCA1Iik7CiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CisgICAgV1RGTG9nQWx3YXlz
KCJXQUlUIDUiKTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxMCk7CiAK
ICAgICAvLyBUaGUgd2Vic2l0ZSBkYXRhIHN0b3JlIHJlbW92ZSBzaG91bGQgaGF2ZSBjb21wbGV0
ZWQsIGJ1dCBzaW5jZSB3ZSByZW1vdmVkIGFsbCBvZiB0aGUgZGF0YSB0eXBlcyB0aGF0IGFyZSBt
b25pdG9yZWQgYnkgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzLApAQCAtMTcxLDE2ICsxODEsMjIg
QEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBHcmFuZGZhdGhlcgogCiAgICAgLy8gU2lu
Y2Ugd2UgZGlkIG5vdCByZW1vdmUgZXZlcnkgZGF0YSB0eXBlIGNvdmVyZWQgYnkgcmVzb3VyY2Ug
bG9hZCBzdGF0aXN0aWNzLCB3ZSBkbyBleHBlY3QgdGhhdCBncmFuZGZhdGhlcmluZyB0b29rIHBs
YWNlIGFnYWluLgogICAgIC8vIElmIHRoZSB0ZXN0IGhhbmdzIHdhaXRpbmcgb24gZWl0aGVyIG9m
IHRoZXNlIGNvbmRpdGlvbnMsIGl0IGhhcyBmYWlsZWQuCisgICAgV1RGTG9nQWx3YXlzKCJXQUlU
IDYiKTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdyYW5kZmF0aGVyZWRGbGFnKTsK
KyAgICBXVEZMb2dBbHdheXMoIldBSVQgNiIpOworICAgIFdURkxvZ0Fsd2F5cygiV0FJVCA3Iik7
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CisgICAgV1RGTG9nQWx3
YXlzKCJXQUlUIDciKTsKIAogICAgIC8vIFNwaW4gdGhlIHJ1bmxvb3AgdW50aWwgdGhlIHJlc291
cmNlIGxvYWQgc3RhdGlzdGljcyBmaWxlIGhhcyB3cml0dGVuIHRvIGRpc2suCiAgICAgLy8gSWYg
dGhlIHRlc3QgZW50ZXJzIGEgc3BpbiBsb29wIGhlcmUsIGl0IGhhcyBmYWlsZWQuCisgICAgV1RG
TG9nQWx3YXlzKCJXQUlUIDgiKTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBpZiAoW1tO
U0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOmZpbGVVUkwucGF0
aF0pCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3Bp
blJ1bkxvb3AoMSk7CiAgICAgfQorICAgIFdURkxvZ0Fsd2F5cygiV0FJVCA4Iik7CiB9CiAKIFRF
U1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgR3JhbmRmYXRoZXJDYWxsYmFja0RhdGFiYXNlKQpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UTFNEZXByZWNhdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1RMU0RlcHJlY2F0aW9uLm1tCShyZXZpc2lvbiAyNTc1ODEpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjEsNyArMTYxLDggQEAgVEVTVChUTFNWZXJzaW9uLCBESVNBQkxFRF9OZXR3b3JrU2Vzc2lv
bgogICAgIH07CiAgICAgewogICAgICAgICBUQ1BTZXJ2ZXIgc2VydmVyKFRDUFNlcnZlcjo6UHJv
dG9jb2w6OkhUVFBTLCBUQ1BTZXJ2ZXI6OnJlc3BvbmRXaXRoT0ssIHRsczFfMSk7Ci0gICAgICAg
IGF1dG8gd2ViVmlldyA9IG1ha2VXZWJWaWV3V2l0aChbV0tXZWJzaXRlRGF0YVN0b3JlIGRlZmF1
bHREYXRhU3RvcmVdKTsKKyAgICAgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24g
KmNvbmZpZ3VyYXRpb24gPSBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBhdXRvIHdlYlZpZXcgPSBtYWtlV2ViVmll
d1dpdGgoW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXSk7CiAgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1
ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJodHRwczovLzEyNy4wLjAuMTolZC8iLCBzZXJ2ZXIu
cG9ydCgpXV1dXTsKICAgICAgICAgW2RlbGVnYXRlIHdhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9u
XTsKICAgICB9CkBAIC0xODcsNyArMTg4LDggQEAgVEVTVChUTFNWZXJzaW9uLCBESVNBQkxFRF9O
ZXR3b3JrU2Vzc2lvbgogICAgICAgICBUQ1BTZXJ2ZXIgc2VydmVyKFRDUFNlcnZlcjo6UHJvdG9j
b2w6OkhUVFBTLCBbXShTU0wgKnNzbCkgewogICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHNzbCk7
CiAgICAgICAgIH0sIHRsczFfMSk7Ci0gICAgICAgIGF1dG8gd2ViVmlldyA9IG1ha2VXZWJWaWV3
V2l0aChbV0tXZWJzaXRlRGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdKTsKKyAgICAgICAgX1dL
V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1tfV0tXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAg
ICAgICBhdXRvIHdlYlZpZXcgPSBtYWtlV2ViVmlld1dpdGgoW1tbV0tXZWJzaXRlRGF0YVN0b3Jl
IGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNl
XSk7CiAgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdp
dGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJo
dHRwczovLzEyNy4wLjAuMTolZC8iLCBzZXJ2ZXIucG9ydCgpXV1dXTsKICAgICAgICAgW2RlbGVn
YXRlIHdhaXRGb3JEaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uXTsKICAgICB9CkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tI
VFRQQ29va2llU3RvcmUubW0JKHJldmlzaW9uIDI1NzU4MSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0JKHdvcmtpbmcgY29weSkK
QEAgLTQ3Niw4ICs0NzYsNiBAQCAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcg
cnVuCiB9CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJIHByb2Nlc3Mgc2hvdWxkIGJlIHVz
aW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3b3JrIHByb2Nlc3MgZm9yIGRlZmF1
bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVtIGNsYXNzIFNob3VsZEVuYWJsZVBy
b2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBydW5XS0hUVFBDb29raWVTdG9yZVdp
dGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyBzaG91bGRFbmFi
bGVQcm9jZXNzUHJld2FybWluZykKIHsKQEAgLTU4NiwyMCArNTg0LDY2IEBAIFRFU1QoV0tIVFRQ
Q29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG8KICAgICBydW5XS0hUVFBDb29raWVTdG9yZVdp
dGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZzo6WWVzKTsKIH0K
IAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQogQGludGVyZmFjZSBDaGVja1Nlc3Npb25Db29r
aWVVSURlbGVnYXRlIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0ZT4KKy0gKE5TU3RyaW5nICopYWxl
cnRDb29raWVIVE1MOworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZTsKIEBlbmQKIAotQGlt
cGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUKK0BpbXBsZW1lbnRhdGlv
biBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+
IF9tZXNzYWdlOworfQorCiAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVu
SmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRp
YXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgRVhQRUNUX1NUUkVRKCJTZXNzaW9u
Q29va2llTmFtZT1Db29raWVWYWx1ZSIsIG1lc3NhZ2UuVVRGOFN0cmluZyk7CisgICAgX21lc3Nh
Z2UgPSBtZXNzYWdlOwogICAgIGZpbmlzaGVkID0gdHJ1ZTsKICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwogfQorCistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlCit7CisgICAgd2hpbGUgKCFf
bWVzc2FnZSkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAg
ICByZXR1cm4gX21lc3NhZ2UuYXV0b3JlbGVhc2UoKTsKK30KKworLSAoTlNTdHJpbmcgKilhbGVy
dENvb2tpZUhUTUwKK3sKKyAgICByZXR1cm4gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1l
bnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7
IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgp
OyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Cit9CisKIEBlbmQKIAorVEVT
VChXZWJLaXQsIFdLSFRUUENvb2tpZVN0b3JlTXVsdGlwbGVWaWV3cykKK3sKKyAgICBUZXN0V0tX
ZWJWaWV3ICp3ZWJWaWV3MSA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAg
ICBbd2ViVmlldzEgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAic3RhcnQgbmV0d29yayBw
cm9jZXNzIl07CisKKyAgICBOU0hUVFBDb29raWUgKnNlc3Npb25Db29raWUgPSBbTlNIVFRQQ29v
a2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOkB7CisgICAgICAgIE5TSFRUUENvb2tpZVBhdGg6IEAi
LyIsCisgICAgICAgIE5TSFRUUENvb2tpZU5hbWU6IEAiU2Vzc2lvbkNvb2tpZU5hbWUiLAorICAg
ICAgICBOU0hUVFBDb29raWVWYWx1ZTogQCJDb29raWVWYWx1ZSIsCisgICAgICAgIE5TSFRUUENv
b2tpZURvbWFpbjogQCIxMjcuMC4wLjEiLAorICAgIH1dOworCisgICAgX19ibG9jayBib29sIHNl
dENvb2tpZURvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldzEuY29uZmlndXJhdGlvbi53ZWJzaXRl
RGF0YVN0b3JlLmh0dHBDb29raWVTdG9yZSBzZXRDb29raWU6c2Vzc2lvbkNvb2tpZSBjb21wbGV0
aW9uSGFuZGxlcjpeeworICAgICAgICBzZXRDb29raWVEb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnNldENvb2tpZURvbmUpOworCisgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgbmV3XSk7Cisg
ICAgW3dlYlZpZXcxIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZp
ZXcxIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19T
VFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2ll
VmFsdWUiKTsKKworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcyID0gW1tUZXN0V0tXZWJWaWV3
IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MiBzZXRVSURlbGVnYXRlOmRlbGVnYXRl
LmdldCgpXTsKKyAgICBbd2ViVmlldzIgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29v
a2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEi
XV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNz
aW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworfQorCiBURVNUKFdLSFRUUENvb2tpZVN0b3Jl
LCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogewogICAgIFJldGFpblB0cjxX
S1dlYnNpdGVEYXRhU3RvcmU+IGVwaGVtZXJhbFN0b3JlV2l0aENvb2tpZXMgPSBbV0tXZWJzaXRl
RGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOwpAQCAtNjI0LDkgKzY2OCw4IEBAIFRF
U1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG8KICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKICAgICBmaW5pc2hlZCA9IGZhbHNlOwogICAgIAotICAg
IE5TU3RyaW5nICphbGVydENvb2tpZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1
bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0
aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0
KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKLSAgICBbd2ViVmlldyBs
b2FkSFRNTFN0cmluZzphbGVydENvb2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZm
aW5pc2hlZCk7CisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29v
a2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEi
XV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNz
aW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVDb29raWVz
RXF1YWwoTlNIVFRQQ29va2llICpmaXJzdCwgTlNIVFRQQ29va2llICpzZWNvbmQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406104</attachid>
            <date>2020-08-06 13:02:35 -0700</date>
            <delta_ts>2020-08-06 13:13:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20200806130234.patch</filename>
            <type>text/plain</type>
            <size>206822</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBAQAorMjAyMC0wOC0wNiAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBhIE5ldHdv
cmtQcm9jZXNzUHJveHkgc2luZ2xldG9uIGluc3RlYWQgb2Ygb25lIHBlciBXZWJQcm9jZXNzUG9v
bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToK
KyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhU
VFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tp
ZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3Jl
Ojpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoQVBJOjpI
VFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoQVBJ
OjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6CisgICAgICAgIChX
S0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9zZXRDb29raWVBY2Nl
cHRQb2xpY3k6XSk6CisgICAgICAgICh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tp
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNN
b2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpw
cm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250
ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6CisgICAgICAg
IChXZWJLaXQ6Om1fd2ViUHJvY2Vzc0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6On5XZWJQcm9jZXNzUG9vbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0
Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9O
ZXR3b3JraW5nUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVh
ckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyTGVnYWN5UHJpdmF0ZUJy
b3dzaW5nTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFs
bG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRXZWJQcm9jZXNzSGFzVXBsb2Fkcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVhcldlYlByb2Nlc3NIYXNVcGxv
YWRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMjAtMDgtMDMgIFdl
bnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgLWFj
Y2Vzc29yeURvbmUgdG8gYmx1ciB0aGUgZm9jdXNlZCBlbGVtZW50IG9uIGlQYWQgd2hlbiBBdXRv
RmlsbGluZyBzdHJvbmcgcGFzc3dvcmRzCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkocmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0NSwyOSArMzQ1LDE5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3
b3JrUHIKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJzLmVu
YWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5zaW9u
Ojpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRl
cnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6
Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6
Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBwYXJh
bWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQgPSBk
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7Cisg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShkYXRhU3RvcmVQYXJh
bWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFk
ZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVy
cy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0
eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJl
Y3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0
YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAg
ICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQorICAgICAgICBt
X3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmxv
Y2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6
ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUoZGF0YVN0b3JlUGFy
YW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBib29sIHNlcnZpY2VX
b3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSB0cnVlOwotICAgIGFkZFNlcnZp
Y2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUocGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVycy5zZXJ2aWNl
V29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRk
U2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUoZGF0YVN0b3Jl
UGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgZGF0YVN0b3Jl
UGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNzaW9uID0gbmV0
d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAgYXV0
byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdvcmtTdG9yYWdl
U2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgZGVmYXVsdFN0
b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAgICB9CiAKICAgICBmb3IgKGF1dG8m
IHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVtZW50
LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNDI3LDEyICs0MTcsNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNs
ZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmNy
ZWRlbnRpYWxTdG9yYWdlKCkuY2xlYXJDcmVkZW50aWFscygpOwotICAgIGlmIChhdXRvKiBuZXR3
b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpKQotICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+Y2xlYXJDcmVkZW50aWFscygp
OwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KICAgICBmb3JFYWNo
TmV0d29ya1Nlc3Npb24oW10gKGF1dG8mIG5ldHdvcmtTZXNzaW9uKSB7CiAgICAgICAgIGlmIChh
dXRvIHN0b3JhZ2VTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24ubmV0d29ya1N0b3JhZ2VTZXNzaW9u
KCkpCiAgICAgICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVudGlhbFN0b3JhZ2UoKS5jbGVh
ckNyZWRlbnRpYWxzKCk7CkBAIC01MTIsOCArNDk2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
ZW5zdXJlU2Vzc2lvbihjb25zdAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihj
b25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3
b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSkKICNlbmRpZgogewotICAg
IEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5hZGQoc2Vz
c2lvbklELCBudWxscHRyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAg
ICByZXR1cm47CkBAIC01MjgsNyArNTEwLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJl
U2Vzc2lvbihjb25zdAogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0g
bWFrZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fu
b25pY2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQu
aXNFcGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVBy
aXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAg
ZWxzZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
CiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpjcmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkp
OwogCiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQ
SSgpKSB7CkBAIC01NTEsMjEgKzUzMywxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVB
Y2NlcHRQb2xpY3lDCiAKIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogTmV0d29ya1By
b2Nlc3M6OnN0b3JhZ2VTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpIGNv
bnN0CiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKQotICAgICAgICByZXR1cm4gJmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwogICAgIHJl
dHVybiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMuZ2V0KHNlc3Npb25JRCk7CiB9CiAKLVdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdl
U2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Np
b24pCi0gICAgICAgIG1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgcmV0dXJuICptX2RlZmF1bHROZXR3b3Jr
U3RvcmFnZVNlc3Npb247Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3Jr
U3RvcmFnZVNlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mKT4mIGZ1bmN0b3IpCiB7Ci0gICAgZnVuY3RvcihkZWZhdWx0U3RvcmFnZVNlc3Np
b24oKSk7CiAgICAgZm9yIChhdXRvJiBzdG9yYWdlU2Vzc2lvbiA6IG1fbmV0d29ya1N0b3JhZ2VT
ZXNzaW9ucy52YWx1ZXMoKSkKICAgICAgICAgZnVuY3Rvcigqc3RvcmFnZVNlc3Npb24pOwogfQpJ
bmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAko
cmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQo
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNv
bnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNz
aW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0z
NjksNyArMzY4LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
PiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9p
ZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYpOwogCkBAIC01NDYsNyArNTQ0LDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8
UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29y
a1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7
Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFn
ZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzOjplCiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0
KCkpOwogICAgIGVuY29kZXIgPDwgc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7CiAjZW5kaWYKLSAg
ICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGVuY29kZXIgPDwg
ZGF0YVN0b3JlUGFyYW1ldGVyczsKICNpZiBVU0UoU09VUCkKICAgICBlbmNvZGVyIDw8IGNvb2tp
ZUFjY2VwdFBvbGljeTsKICAgICBlbmNvZGVyIDw8IGlnbm9yZVRMU0Vycm9yczsKQEAgLTEyMSwx
MSArMTIxLDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAgICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+
PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzKQorICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cz4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiBkYXRhU3RvcmVQYXJhbWV0
ZXJzOworICAgIGlmICghZGF0YVN0b3JlUGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJlc3VsdC5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKKyAgICByZXN1bHQuZGF0YVN0b3JlUGFyYW1ldGVycyA9
IFdURk1vdmUoKmRhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAjaWYgVVNFKFNPVVApCiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29va2llQWNjZXB0UG9saWN5KSkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMgCiAgICAgYm9vbCBzdG9yYWdlQWNjZXNzQVBJRW5hYmxlZDsKICNlbmRpZgog
Ci0gICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnM7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkYXRhU3RvcmVQYXJh
bWV0ZXJzOwogICAgIAogI2lmIFVTRShTT1VQKQogICAgIFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5IHsgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBv
bGljeTo6QWx3YXlzQWNjZXB0IH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAy
NjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6
Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25I
YW5kbGVyKG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xp
Y3koKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpLT5jb29raWVBY2NlcHRQb2xpY3koKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQkocmV2
aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3
b3JrUHJvY2Vzc0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4NSw2IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBTYW5kYm94RXh0ZW5zaW9u
Ojpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHko
cGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAg
IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBhcmVudEJ1
bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdvcmtTZXRB
VFNDb250ZXh0KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAtMTE0LDEx
ICsxMTEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAg
W05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vz
czo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5l
dHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYg
VVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJVF9EQVRBKQpJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAJ
KHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9O
ZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSArMzksNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiB7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dT
cGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2Vy
dGlmaWNhdGVJbmZvLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtp
bmdDb250ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
bWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQko
d29ya2luZyBjb3B5KQpAQCAtNTUsMTUgKzU1LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQ6OmVuc3VyZVdlYnMKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1h
bmVudGx5KHBhcmFtZXRlcnMuY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCiAg
ICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IHVpUHJvY2Vzc0Nvb2tpZVN0b3Jh
Z2U7Ci0gICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSAmJiAhcGFyYW1ldGVycy51aVBy
b2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci5pc0VtcHR5KCkpCisgICAgaWYgKCFzZXNzaW9u
SUQuaXNFcGhlbWVyYWwoKSAmJiAhcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRl
bnRpZmllci5pc0VtcHR5KCkgJiYgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
c2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAg
IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UgPSBjb29raWVTdG9yYWdlRnJvbUlkZW50aWZ5aW5nRGF0
YShwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyKTsKIAogICAgIG5l
dHdvcmtQcm9jZXNzLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIG1ha2VTdHJp
bmcoYmFzZSwgJy4nLCBzZXNzaW9uSUQudG9VSW50NjQoKSksIFdURk1vdmUodWlQcm9jZXNzQ29v
a2llU3RvcmFnZSkpOwogCi0gICAgYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtQcm9jZXNzLnN0b3Jh
Z2VTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjb29raWUgOiBwYXJh
bWV0ZXJzLnBlbmRpbmdDb29raWVzKQotICAgICAgICBzZXNzaW9uLT5zZXRDb29raWUoY29va2ll
KTsKLQogICAgIG5ldHdvcmtQcm9jZXNzLnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vz
c2lvbjo6Y3JlYXRlKG5ldHdvcmtQcm9jZXNzLCBXVEZNb3ZlKHBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzKSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAkocmV2aXNpb24g
MjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9j
ZXNzU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCwxMSArMTQ0LDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgIH0pOwogfQogCi1zdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBt
YWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9y
ZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAgICBTb3VwTmV0d29ya1Nlc3Np
b246OnNldFNob3VsZElnbm9yZVRMU0Vycm9ycyhpZ25vcmVUTFNFcnJvcnMpOwpJbmRleDogU291
cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNw
cAkocmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsOSBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUoCiAgICAgZW5jb2RlciA8PCBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NDb29raWVTdG9y
YWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9u
SGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nvb2tpZXM7CiAKICNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA8
PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKQEAgLTgzLDEyICs3OSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzPiBXZWIKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJz
LmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3RvcmFn
ZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4+IHBlbmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7Ci0g
ICAgaWYgKCFwZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMpOwot
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBpbmRl
eGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VEaXJl
Y3Rvcnk7CkBAIC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM+IFdlYgogICAgIGlmICghaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBpbmRleGVkRGF0YWJhc2VU
ZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IGluZGV4ZWRE
YXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmICghaW5kZXhl
ZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZVRlbXBCbG9i
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDE1ICs1MSwxMSBAQCBzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgewogCiAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAg
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRs
ZTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5nQ29va2llczsKICAgICBOZXR3
b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAK
ICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBTdHJpbmcgaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5h
Z2VyUHJveHkuY3BwCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9yaWdpbi5o
IgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3b3Jr
UHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCiAjaW5jbHVk
ZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdl
clByb3h5TWVzc2FnZXMuaCIKQEAgLTM5LDIwICs0MCwxNSBAQAogbmFtZXNwYWNlIFdlYktpdCB7
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29va2llTWFuYWdl
clByb3h5OjpzdXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHkmIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkKIHsKLSAgICByZXR1cm4gIldlYkNvb2tpZU1hbmFn
ZXJQcm94eSI7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4gbWFuYWdlcjsKKyAgICByZXR1cm4gbWFuYWdlcjsKIH0KIAotUmVmPFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4gV2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHBy
b2Nlc3NQb29sKQorV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHko
KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShwcm9j
ZXNzUG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJDb250ZXh0U3VwcGxl
bWVudChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVudDo6cHJvY2Vzc1Bv
b2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
clByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29va2llTWFu
YWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KCkKQEAgLTY1LDU5ICs2MSwyNSBAQCB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZUNsCiAgICAgbV9jbGllbnQuaW5p
dGlhbGl6ZShjbGllbnQpOwogfQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3Rv
cjxPYnNlcnZlcio+IG9ic2VydmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9j
b29raWVPYnNlcnZlcnMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6
IG9ic2VydmVyU2V0KQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0g
ICAgfQotCi0gICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2Jz
ZXJ2ZXItPm1hbmFnZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVy
cy5pc0VtcHR5KCkpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0Rp
ZENsb3NlKFdlYlByb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5Ojpwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAg
QVBJOjpPYmplY3Q6OnJlZigpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVy
ZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19
Ci0KIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0
cmluZz4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0
d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3
b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OkdldEhvc3RuYW1lc1dpdGhDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBob3N0bmFtZXMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxl
dGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENv
b2tpZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpk
ZWxldGVDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUmIGNvb2tp
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAg
YXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBbY2Fs
bGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbildKCkgbXV0YWJsZSB7CiAg
ICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTEyNSw0MiArODcsNDIgQEAg
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3Mg
PSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENv
b2tpZXNNb2RpZmllZFNpbmNlKHNlc3Npb25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Cisg
ICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tp
ZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2ll
cywgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3VtZW50VVJMLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0
byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAg
ICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlNldENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVS
TCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Z2V0QWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsK
LSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92
ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikK
IHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQp
CiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGlu
Z0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
ewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJ
Zk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tp
ZUNoYW5nZXMoc2Vzc2lvbklEKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNo
YW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV1RGOjpG
dW5jdGlvbjx2b2lkICgpPiYmIGNhbGxiYWNrKQpAQCAtMjExLDIxICsxNzMsMTMgQEAgdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNEaWRDaAogCiB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgSFRUUENv
b2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxs
YmFja0Z1bmN0aW9uKQogewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmICghcHJvY2Vzc1Bv
b2woKS0+aXNVc2luZ1Rlc3RpbmdOZXR3b3JrU2Vzc2lvbigpKQotICAgICAgICBwZXJzaXN0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpOwotI2VuZGlmCi0jaWYgVVNFKFNPVVApCi0gICAg
cHJvY2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsK
LSNlbmRpZgotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwogfQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxs
YmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wo
KS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSgpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIH0KIApJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgJKHJldmlz
aW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMSArNTYsOSBAQCB0eXBlZGVmIEdlbmVyaWND
YWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyCiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXZWJDb3Jl
OjpIVFRQQ29va2llQWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0UG9saWN5Q2FsbGJhY2s7
CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiY+
IEdldENvb2tpZXNDYWxsYmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVi
bGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHB1
YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7
CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQ
STo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNl
aXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7
Ci0KLSAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlByb2Nl
c3NQb29sKik7CisgICAgc3RhdGljIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgc2luZ2xldG9uKCk7
CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdlclByb3h5KCk7CiAKICAgICB2b2lkIGluaXRp
YWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSopOwpAQCAtMTA0LDE3
ICsxMDIsMTEgQEAgcHVibGljOgogICAgIHVzaW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsKIAogcHJp
dmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBX
ZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKKyAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8V2ViQ29v
a2llTWFuYWdlclByb3h5PjsKIAogICAgIHZvaWQgY29va2llc0RpZENoYW5nZShQQUw6OlNlc3Np
b25JRCk7CiAKLSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAotICAgIHZvaWQgcHJvY2Vzc1Bv
b2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShXZWJQcm9j
ZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJv
Y2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJDb250ZXh0U3VwcGxlbWVudCgp
IG92ZXJyaWRlOwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRl
OwotCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTIwLDYgKzIwLDYgQEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAot
bWVzc2FnZXMgLT4gV2ViQ29va2llTWFuYWdlclByb3h5IHsKK21lc3NhZ2VzIC0+IFdlYkNvb2tp
ZU1hbmFnZXJQcm94eSBOb3RSZWZDb3VudGVkIHsKICAgICBDb29raWVzRGlkQ2hhbmdlKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE4NywxMSArMzE4Nyw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBCb3VuZE0KIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJvY2VzcygpCiB7
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNz
YWdlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVu
dCgpLCAwKTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1l
bnQoKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtMzIwMCwxMyArMzE5Niw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnQKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAm
JiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpDbGVhclNlcnZpY2VXb3Jr
ZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3Nh
Z2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1l
bnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCks
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CiAjZW5kaWYKQEAgLTk4OTksNTggKzk4ODksMjcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN5
c3RlbVByZXZpZXdBY3Rpb25UcgogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZHVtcEFkQ2xpY2tBdHRy
aWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+
cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1By
b2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBt
X3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAo
IW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0gZWxzZQotICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0
dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmli
dXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3Rpbmco
bV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tB
dHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rp
bmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9j
ZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNr
QXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxG
b3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNr
QXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
fQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBp
cmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCShyZXZpc2lv
biAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzMiw2ICsyMzIsMTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5n
LCBBU0NJSUNhc2VJbnNlbnNpdAogICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+
IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQor
eworICAgIHJldHVybiBjb3B5VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90
b2NvbEhhbmRsZXJzKCkpOworfQorCiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJ
OjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2NvbmZp
Z3VyYXRpb24oY29uZmlndXJhdGlvbi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdlR3JvdXAo
V2ViUGFnZUdyb3VwOjpjcmVhdGUoKSkKQEAgLTIzOSw3ICsyNDQsNiBAQCBXZWJQcm9jZXNzUG9v
bDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jCiAgICAgLCBtX2F1dG9tYXRpb25DbGllbnQobWFr
ZVVuaXF1ZTxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2FkQ2xpZW50
KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlzdG9yeUNs
aWVudChtYWtlVW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkpCi0gICAg
LCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRM
aW5rU3RvcmU6OmNyZWF0ZSgpKQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGlnaFBlcmZv
cm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFw
aGljc1VzYWdlU2FtcGxlcj4oKnRoaXMpKQpAQCAtMjY3LDkgKzI3MSw2IEBAIFdlYlByb2Nlc3NQ
b29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2MKICNlbmRpZgogICAgIH0pOwogCi0gICAgaWYg
KCFtX3dlYnNpdGVEYXRhU3RvcmUgJiYgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpOwotCiAgICAgZm9yIChhdXRvJiBz
Y2hlbWUgOiBtX2NvbmZpZ3VyYXRpb24tPmFsd2F5c1JldmFsaWRhdGVkVVJMU2NoZW1lcygpKQog
ICAgICAgICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNBbHdheXNSZXZhbGlkYXRlZC5hZGQoc2NoZW1l
KTsKIApAQCAtMjg1LDcgKzI4Niw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChB
UEk6OlByb2MKICAgICBhZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29s
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIAogICAgIC8vIE5PVEU6IFRoZXNlIHN1
Yi1vYmplY3RzIG11c3QgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVjZWl2ZXJNYXAu
LgotICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1
cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVu
dDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJ
T04pCkBAIC0zNDIsOSArMzQyLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6On5XZWJQcm9jZXNzUG9vbCgp
CiAgICAgcHJvY2Vzc1Bvb2xDb3VudGVyLmRlY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2h1dERvd25Qcm9j
ZXNzKCk7Ci0KICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICBpZiAoIW1fcHJvY2Vzc2VzVXNpbmdH
YW1lcGFkcy5pc0VtcHR5KCkpCiAgICAgICAgIFVJR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24o
KS5wcm9jZXNzUG9vbFN0b3BwZWRVc2luZ0dhbWVwYWRzKCp0aGlzKTsKQEAgLTQwMiwxNiArMzk5
LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudAogICAgICAgICBt
X2F1dG9tYXRpb25DbGllbnQgPSBXVEZNb3ZlKGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3Rk
Ojp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCkKLXsKLSNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NP
TF9NQU5BR0VSKQotICAgIGlmICghY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAg
ICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQ+KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCA9IFdURk1vdmUoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsK
LSNlbmRpZgotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRTdG9yYWdlQWNjZXNzQVBJRW5h
YmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9zdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IGVu
YWJsZWQ7CkBAIC00MzEsNyArNDE4LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9t
V2ViQ29udGVudAogCiBJUEM6OkNvbm5lY3Rpb24qIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5n
UHJvY2Vzc0Nvbm5lY3Rpb24oKQogewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzLT5jb25u
ZWN0aW9uKCk7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNv
bm5lY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKHZv
aWQqIGNvbnRleHQpCkBAIC00NDMsOCArNDMwLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFu
Z3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKCkpOwogI2lmIFVTRShTT1VQKQot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQo
dXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRM
YW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOwogI2VuZGlmCiB9
CiAKQEAgLTQ4MiwyNjcgKzQ2OCwxMyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzY3JlZW5Qcm9w
ZXJ0aWVzU3RhCiAjZW5kaWYKIH0KIAotTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bv
b2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0
YVN0b3JlKQorTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdv
cmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqKQogewotICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3Vu
ZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCi0gICAgLy8g
V2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9u
IGNoZWNrIG9uIG91ciBBUElzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDAyNDYuCi0gICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgewotICAgICAg
ICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKV0gewotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAg
fSk7Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsK
LSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdl
YnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVh
clBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQ
cm9jZXNzOwotICAgIH0KLQotICAgIGF1dG8gbmV0d29ya1Byb2Nlc3MgPSBtYWtlVW5pcXVlPE5l
dHdvcmtQcm9jZXNzUHJveHk+KCp0aGlzKTsKLQotICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0g
ICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tp
ZXMgPSBjb3B5VG9WZWN0b3IobV93ZWJzaXRlRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsK
LSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0jaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRl
bnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxp
Y2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlv
blNlY29uZGFyeUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24o
KS5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRpZgotICAgIH0K
LQotICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IGdsb2JhbFVS
TFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJz
LnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOwot
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVj
dG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYg
KCFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0KLSAgICBTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6
Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvbnRhaW5lckNhY2hlc0Rp
cmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRl
cnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmlu
ZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGly
ZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5k
bGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShl
bXB0eVN0cmluZygpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHBhcmFtZXRlcnMu
aHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPmhzdHNTdG9yYWdlRGlyZWN0
b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgp
KQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJl
Y3RvcnkocGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5oc3RzU3Rv
cmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6
OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7Ci0gICAgcGFyYW1ldGVy
cy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0g
Y29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9S
ZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkpOwotICAgIHBhcmFtZXRl
cnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2Jh
bFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7Ci0gICAg
cGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3Io
TGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0Fj
Y2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIC8vICoqKioqKioq
KgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNoYW5nZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVy
ZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlzayB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcg
YSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjovL3Byb2JsZW0vMTc0NTQ3MTI+KQotICAgIC8v
ICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0g
bV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpOwot
ICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4
aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwotICAg
IAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdy
YWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVk
U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIGlmICghcGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQotICAgICAgICBwYXJhbWV0ZXJz
LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSAgV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnksIHBhcmFtZXRlcnMuc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYK
LQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8g
bV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExvY2FsU3RvcmFnZURpcmVjdG9yeSgpIDogbnVs
bFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQotICAgICAgICBsb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRMb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKLSAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9j
YWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvIGNhY2hl
U3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9y
ZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFjYWNo
ZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNoZVN0b3JhZ2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZNb3ZlKGNhY2hlU3RvcmFnZURp
cmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJl
Y3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7Ci0gICAgZWxz
ZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkp
Ci0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5kaXJlY3Rvcnk7
Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHko
KSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGly
ZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnksIHJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYm9vbCBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91bGRJbmNsdWRlTG9j
YWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1
Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAg
IFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgdGhpcmRQYXJ0eUNvb2tpZUJs
b2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU6OkFsbDsK
LSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCBzYW1lU2l0ZVN0
cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gV2ViQ29yZTo6
Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXM7Ci0gICAgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAg
IEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGFwcEJvdW5kRG9tYWluczsKLSAg
ICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLQot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQgPSBkb2VzQXBw
SGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUgJiYgIXdpdGhX
ZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAg
ICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNp
dGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFTdG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlT
ZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVm
ZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9
IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSAmJiAh
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5pc0l0cFN0YXRlRXhwbGljaXRs
eVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1By
ZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSNlbmRpZgotCi0gICAgaWYgKHdpdGhX
ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
PSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsK
LSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUt
Pmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3Qg
PSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRl
cnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50
RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBz
dGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWlu
OwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAg
ICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyT3Jp
Z2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0
YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIAotICAg
ICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3
b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtD
YWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hF
eHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0
b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3dlYnNpdGVE
YXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0xvZ1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rl
c3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9
IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
czsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxv
Y2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01v
ZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgot
ICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRp
b25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBw
Qm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZh
bGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9y
YWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwot
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFy
dHlPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlP
cmlnaW5TdG9yYWdlUXVvdGEoKTsKLQotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0
b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJl
Y3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29y
a0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4
aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5l
dHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJv
eEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZORVRXT1JLX0FMVEVSTkFUSVZF
X1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxlZCgpKSB7Ci0g
ICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICgh
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHAzRW5hYmxlZCA9IHRy
dWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRlRXhwbGljaXRseVNldCA9IGZh
bHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzID0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAgICBlbmFibGVSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGljaXRseVNldCwKLSAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCwKLSAgICAgICAgc2hv
dWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAg
ICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAgICBzYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluLAotICAgICAg
ICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlLAotICAg
IH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBhcmFtZXRlcnMKLSAgICBw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKLQotICAgIC8vIElu
aXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0
ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3JrUHJvY2Vzc0xhdGVuY3lR
T1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsKLSNlbmRpZgotCi0gICAg
bmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKLQotICAgIGlmICh3aXRo
V2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbiht
YWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSB0
aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUgc2Vzc2lvbnMgdGhhdCBoYXZl
IGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAgICBmb3IgKGF1dG8mIHNlc3Np
b25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHRE
YXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICB9Ci0KLSAgICBtX25ldHdv
cmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0gICAgcmV0dXJuICptX25ldHdv
cmtQcm9jZXNzOworICAgIHJldHVybiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsK
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQ
cm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHJveHkpCiB7Ci0gICAgQVNTRVJUKG1fbmV0d29y
a1Byb2Nlc3MpOwotICAgIEFTU0VSVCgmbmV0d29ya1Byb2Nlc3NQcm94eSA9PSBtX25ldHdvcmtQ
cm9jZXNzLmdldCgpKTsKLQogICAgIGZvciAoYXV0byYgc3VwcGxlbWVudCA6IG1fc3VwcGxlbWVu
dHMudmFsdWVzKCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPnByb2Nlc3NEaWRDbG9zZSgmbmV0d29y
a1Byb2Nlc3NQcm94eSk7CiAKQEAgLTc1MSw5ICs0ODMsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpuZXR3b3JrUHJvY2Vzc0NyYXNoCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24pCiAgICAg
ICAgIG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVhdmUgdGhl
IHByb2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0aGUgY2xp
ZW50IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3b3JrUHJv
Y2VzcyA9IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCkBA
IC03NjcsMTEgKzQ5NiwxMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJv
Y2VzCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2Vi
UHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6
OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCiB7CiAg
ICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBbdGhpcywgd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94eSA9IG1ha2VXZWFrUHRyKHdlYlByb2Nl
c3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSldIChhdXRvJiBjb25uZWN0aW9uSW5mbykg
bXV0YWJsZSB7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZ2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9jZXNzUHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNz
UHJveHkpLCByZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11
dGFibGUgewogICAgICAgICBpZiAoVU5MSUtFTFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmll
cklzVmFsaWQoY29ubmVjdGlvbkluZm8uaWRlbnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkg
JiYgd2Vha1RoaXMpKSB7CiAgICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19F
UlJPUihQcm9jZXNzLCAiZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3Qg
YXR0ZW1wdCwgcmV0cnlpbmciKTsKICAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7
Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOworICAgICAgICAgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3
ZWJQcm9jZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7CkBAIC04MDQsMTUgKzUzMyw5
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWMKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250
ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHks
IFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIEFTU0VSVF9VTlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdl
dCgpKTsKLQotICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKLQotICAg
IGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9y
ZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgICAgICB3ZWJzaXRlRGF0YVN0b3Jl
ID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwotICAgIH0KKyAgICBhdXRvKiB3ZWJzaXRlRGF0
YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQo
c2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpCisgICAgICAgIHdlYnNpdGVE
YXRhU3RvcmUgPSB3ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7CiAKICAgICBXZWJQcm9jZXNzUHJveHkqIHNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHkgeyBudWxscHRyIH07CiAgICAgaWYgKCFtX3VzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MpIHsKQEAgLTkyMiw3ICs2NDUsNyBAQCBSZWZQdHI8V2ViUHJvY2Vz
c1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6CiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShX
UEUpCiAgICAgLy8gSW4gcGxhdGZvcm1zIHVzaW5nIEJ1YmJsZXdyYXAgZm9yIHNhbmRib3hpbmcs
IHByZXdhcm1lZCBwcm9jZXNzIGlzIGxhdW5jaGVkIHVzaW5nIHRoZSBXZWJQcm9jZXNzUG9vbCBw
cmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUsCiAgICAgLy8gc28gd2UgZG9uJ3QgdXNlIGl0IGluIGNh
c2Ugb2YgdXNpbmcgYSBkaWZmZXJlbnQgV2Vic2l0ZURhdGFTdG9yZS4KLSAgICBpZiAobV9zYW5k
Ym94RW5hYmxlZCAmJiBtX3dlYnNpdGVEYXRhU3RvcmUgJiYgbV93ZWJzaXRlRGF0YVN0b3JlLmdl
dCgpICE9ICZ3ZWJzaXRlRGF0YVN0b3JlKQorICAgIGlmIChtX3NhbmRib3hFbmFibGVkKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgogCkBAIC0xMTk4LDkgKzkyMSw2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXUKICAgICAgICAgcHJvY2Vzcy0+Y29u
bmVjdGlvbigpLT5pZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoKTsKIAogICAgIG1fY29ubmVjdGlv
bkNsaWVudC5kaWRDcmVhdGVDb25uZWN0aW9uKHRoaXMsIHByb2Nlc3MtPndlYkNvbm5lY3Rpb24o
KSk7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBtX3dlYnNpdGVEYXRh
U3RvcmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKQEAgLTEyOTUs
MTAgKzEwMTUsNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlCiAg
ICAgaWYgKCFwYWdlQ29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAg
IC8vIFdlIHRyeSB0byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxv
bmcgYXMgcG9zc2libGUuCiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRv
IGNyZWF0ZSBhIHdlYiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVu
IHdlIGhhdmUgdG8gY3JlYXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9u
LT5zZXRXZWJzaXRlRGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAg
IHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzOwpAQCAtMTM2NSwxNSArMTA4Miw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2kKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1f
c2Vzc2lvblRvUGFnZUlEc01hcC5hZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBIYXNoU2V0PFdl
YlBhZ2VQcm94eUlkZW50aWZpZXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQocGFnZUlEKTsKICAg
ICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwotCi0gICAgYXV0byBz
ZXNzaW9uSUQgPSBkYXRhU3RvcmUuc2Vzc2lvbklEKCk7Ci0gICAgaWYgKHNlc3Npb25JRCAhPSBQ
QUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFTU0VSVCghc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCkgfHwgZGF0YVN0b3JlLnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEID09IHNlc3Npb25JRCk7Ci0gICAgICAgIGlmIChtX25l
dHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9u
KG1ha2VSZWYoZGF0YVN0b3JlKSk7Ci0gICAgICAgICAgICBkYXRhU3RvcmUuY2xlYXJQZW5kaW5n
Q29va2llcygpOwotICAgICAgICB9Ci0gICAgfQogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpw
YWdlRW5kVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlE
LCBXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpCkBAIC0xNDA5LDI2ICsxMTE3LDIzIEBAIERv
d25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZCgKICAgICAgICAgaXNBcHBCb3Vu
ZCA9IGluaXRpYXRpbmdQYWdlLT5pc1RvcEZyYW1lTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4o
KTsKICAgICB9CiAKLSAgICBpZiAobmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBSZXNvdXJj
ZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgIC8vIFJlcXVlc3QncyBm
aXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJlIHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBk
b3dubG9hZCByZXF1ZXN0LgotICAgICAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZl
bCBkb2N1bWVudCdzIFVSTC4KLSAgICAgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7Ci0gICAgICAg
ICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9LCBpbml0aWF0aW5nUGFn
ZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5z
ZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7Ci0gICAgICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGlu
aXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVybCgpKSk7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0
ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkK
LSAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRp
bmdQYWdlLT51c2VyQWdlbnQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1cGRh
dGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7Ci0gICAgICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKLSAgICAgICAgICAgIGlmICghdXBk
YXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQp
KQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2ViUGFn
ZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCgpKTsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVk
UmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOwotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1ZXN0KHNlc3Npb25JRCwg
ZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5kLCBz
dWdnZXN0ZWRGaWxlbmFtZSksIDApOwotICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKKyAg
ICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVxdWVzdCk7CisgICAgLy8gUmVxdWVz
dCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2Yg
dGhlIGRvd25sb2FkIHJlcXVlc3QuCisgICAgLy8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2
ZWwgZG9jdW1lbnQncyBVUkwuCisgICAgaWYgKGluaXRpYXRpbmdQYWdlKSB7CisgICAgICAgIFVS
TCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5wYWdl
TG9hZFN0YXRlKCkudXJsKCkgfTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0
eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VVUkwpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5z
ZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdlVVJM
LCByZXF1ZXN0LnVybCgpKSk7CisgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhl
YWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRl
ZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50KCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29r
aWVzKFVSTCgpKTsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7
CisgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFk
ZXJOYW1lOjpVc2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVz
ZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwogICAgIH0KKyAgICB1
cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFsc2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJl
cXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVl
c3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7CiAKICAgICByZXR1cm4gZG93
bmxvYWRQcm94eTsKIH0KQEAgLTE0NDIsMTEgKzExNDcsNyBAQCBEb3dubG9hZFByb3h5JiBXZWJQ
cm9jZXNzUG9vbDo6cmVzdW1lRG93CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAobmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRv
d25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRl
bnNpb25IYW5kbGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0gICAgfQot
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3du
bG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKQEAgLTE1MTcs
NyArMTIxOCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkKIAogUHJv
Y2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQogewotICAg
IHJldHVybiBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50
aWZpZXIoKSA6IDA7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LnByb2Nlc3NJZGVudGlmaWVyKCk7CiB9CiAKIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJl
d2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKQpAQCAtMTYxNCwxMCArMTMxNSw3IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2MKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Z2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkuYWRkKHVybFNjaGVt
ZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVn
YWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1
cmxTY2hlbWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJM
U2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2No
ZW1lKQpAQCAtMTYyNiwxMCArMTMyNCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0
ZXJHbG9iYWxVUkwKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhD
dXN0b21Qcm90b2NvbEhhbmRsZXJzKCkucmVtb3ZlKHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRv
KiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2Nv
bCh1cmxTY2hlbWUpOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS51bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9u
ZWQoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjYzLDE2ICsxMzU4LDE0IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwoQ2FjaGUKIAogICAgIHNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CiAK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDAp
OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKENhY2hl
TW9kZWwgY2FjaGVNb2RlbCkKIHsKICAgICB1cGRhdGVCYWNrRm9yd2FyZENhY2hlQ2FwYWNpdHko
KTsKIAotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJv
bm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIHsg
fSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91dElu
dGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCkBAIC0xNjgyLDcgKzEzNzUsNyBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpCiAKIERvd25sb2FkUHJveHkmIFdl
YlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFT
dG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9yaWdp
bmF0aW5nUGFnZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAgIHJldHVy
biBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBy
ZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CisgICAgcmV0dXJuIGVuc3VyZU5l
dHdvcmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1
ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQpAQCAtMTc1OCwy
NSArMTQ1MSwxMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAg
ICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2Ft
cGxlcigpKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXNlVGVzdGluZ05ldHdvcmtTZXNz
aW9uKCkKLXsKLSAgICBBU1NFUlQobV9wcm9jZXNzZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQo
IW1fbmV0d29ya1Byb2Nlc3MpOwotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghbV9wcm9jZXNzZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3Nob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiA9IHRydWU7Ci19Ci0K
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSkKIHsKLSAg
ICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2Fn
ZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4o
bWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihyZXBseSksIDApOworICAgIGlmIChOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5jYW5TZW5kTWVzc2FnZSgpKQorICAgICAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2Fn
ZSksIHN0ZDo6Zm9yd2FyZDxVPihyZXBseSksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKQEAg
LTE3ODYsMTkgKzE0NjUsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NM
Q2VydAogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIHsK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKSwgMCk7
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKSwgMCk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKICAgICB0ZXJtaW5hdGVT
ZXJ2aWNlV29ya2VycygpOwogCi0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0gICAgbV9u
ZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQpAQCAtMTgxMCwyMiArMTQ4NCwxNyBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAo
IW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwot
Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9u
SW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9u
SW1taW5lbnQ6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRl
c3RpbmcoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5k
SW1taW5lbnRseUZvclRlc3RpbmcoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5l
dHdvcmtQcm9jZXNzRGlkUmVzdW1lKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwogfQog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCkBAIC0xODUw
LDE1ICsxNTE5LDE0IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UoQ28K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0
b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2Nh
bFN0b3JhZ2UoKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9j
YWxTdG9yYWdlKCksIDApOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBX
ZWJDZXJ0aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAg
ICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOworICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRp
ZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0
ZUF1dG9tYXRpb25DYXBhYmlsaXRpZXMoKSBjb25zdApAQCAtMjM3NywxMCArMjA0NSw3IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ3VycmVudE1vZGlmaWUKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NT
aXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRv
RG9tYWluLCBPcHRpb25TZXQ8Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4g
bmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdlUHJv
eHlJRCwgUGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKQogewotICAgIGlmICghbV9uZXR3b3JrUHJv
Y2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlkQ29tbWl0
Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0b0Rv
bWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGlkQ29tbWl0Q3Jvc3NTaXRl
TG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0b0RvbWFpbiwgbmF2
aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkocmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtODEs
NyArODEsNiBAQCBPQkpDX0NMQVNTIFdLUHJlZmVyZW5jZU9ic2VydmVyOwogCiBuYW1lc3BhY2Ug
QVBJIHsKIGNsYXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQ7CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNsYXNzIEhUVFBDb29raWVTdG9yZTsK
IGNsYXNzIEluamVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTgwLDcgKzE3OSw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29u
dGV4dEhpc3RvcnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0RG93bmxvYWRDbGllbnQoVW5pcXVl
UmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0QXV0b21hdGlvbkNsaWVu
dChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAgICB2b2lkIHNl
dExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpD
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRDdXN0b21XZWJD
b250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3Qg
U3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7IHJldHVy
biBtX2NvbmZpZ3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmll
cigpOyB9CkBAIC0yMDksOSArMjA3LDYgQEAgcHVibGljOgogICAgIC8vIERpc2Nvbm5lY3QgdGhl
IHByb2Nlc3MgZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdl
YlByb2Nlc3NQcm94eSopOwogCi0gICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRl
RGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9Ci0g
ICAgdm9pZCBzZXRQcmltYXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgZGF0
YVN0b3JlKSB7IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7IH0KLQogICAgIFJlZjxX
ZWJQYWdlUHJveHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6OlBhZ2VDb25m
aWd1cmF0aW9uPiYmKTsKIAogICAgIHZvaWQgcGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3Jl
KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYnNpdGVEYXRhU3RvcmUmKTsKQEAgLTMwOSw4ICsz
MDQsNiBAQCBwdWJsaWM6CiAgICAgQVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudCYgaGlz
dG9yeUNsaWVudCgpIHsgcmV0dXJuICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJDb250ZXh0
Q2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIGNvbnN0
IHsgcmV0dXJuICptX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAgICAgc3RydWN0
IFN0YXRpc3RpY3MgewogICAgICAgICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAgICAgICAgdW5z
aWduZWQgd2tQYWdlQ291bnQ7CkBAIC0zMTgsOSArMzExLDYgQEAgcHVibGljOgogICAgIH07CiAg
ICAgc3RhdGljIFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MoKTsgICAgCiAKLSAgICB2b2lkIHVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbigpOwotICAgIGJvb2wgaXNVc2luZ1Rlc3RpbmdOZXR3b3JrU2Vz
c2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uOyB9
Ci0KICAgICB2b2lkIHNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wp
OwogCiAgICAgdm9pZCBjbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7CkBAIC00MDAsNyArMzkwLDYg
QEAgcHVibGljOgogCiAgICAgLy8gTmV0d29yayBQcm9jZXNzIE1hbmFnZW1lbnQKICAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5JiBlbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3
aXRoV2Vic2l0ZURhdGFTdG9yZSA9IG51bGxwdHIpOwotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkq
IG5ldHdvcmtQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKTsg
fQogICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsK
IAogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYs
IE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRl
bGF5ZWRSZXBseSYmKTsKQEAgLTU1Nyw2ICs1NDYsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc2Vu
ZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29i
amVjdF90PiBlbmRwb2ludE1lc3NhZ2UpOwogI2VuZGlmCiAKKyAgICBzdGF0aWMgdm9pZCBwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyYpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzV2l0aEN1c3RvbVBy
b3RvY29sSGFuZGxlcnMoKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgc3RhdGlj
IFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBwYXJl
bnRCdW5kbGVEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNE
aXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3Rvcnko
KTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOworI2Vu
ZGlmCisKIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIApAQCAtNTcw
LDggKzU3MCw2IEBAIHByaXZhdGU6CiAgICAgV2ViUHJvY2Vzc1Byb3h5JiBjcmVhdGVOZXdXZWJQ
cm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkID0g
V2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogICAgIHZvaWQgaW5pdGlhbGl6ZU5l
d1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiwgV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nl
c3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7
CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1l
c3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2Fn
ZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlckRhdGEmJik+JiYpOwogCkBAIC01OTUs
MTQgKzU5Myw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVzZXNTaW5nbGVXZWJQcm9jZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT51c2VzU2luZ2xlV2ViUHJvY2VzcygpOyB9
CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyBTdHJpbmcgY29va2llU3Rv
cmFnZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5
KCk7Ci0gICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAg
c3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0
cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKLSNlbmRpZgotCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgdm9pZCByZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwogICAg
IHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwpAQCAtNjYyLDcgKzY1Miw2
IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4g
bV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiBt
X2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRI
aXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4gbV9hdXRvbWF0aW9uU2Vzc2lv
bjsKIApAQCAtNjk0LDggKzY4Myw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21lbW9yeVNhbXBs
ZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwg
eyAxNDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU+IG1fd2Vi
c2l0ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwgUmVmUHRy
PFdlYkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFzaDxjb25zdCBjaGFyKj4+IFdlYkNvbnRleHRT
dXBwbGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRTdXBwbGVtZW50TWFwIG1fc3VwcGxlbWVudHM7
CiAKQEAgLTczMCw4ICs3MTcsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3Byb2Nlc3NUZXJt
aW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1By
b2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKLQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJl
ZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25hcnlDYWxsYmFja3M7CiAKICNpZiBV
U0UoU09VUCkKQEAgLTg1MSwxNSArODM2LDE1IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1l
c3NhZ2UpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+
Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZv
cndhcmQ8VD4obWVzc2FnZSksIDApOworICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKS5jYW5TZW5kTWVzc2FnZSgpKQorICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJv
Y2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCiB7CiAgICAgZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxU
PihtZXNzYWdlKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2Vu
ZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29r
aWVTdG9yZS5jcHAJKHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElIVFRQQ29va2llU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw2
IEBAIG5hbWVzcGFjZSBBUEkgewogSFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQogICAgIDogbV9vd25pbmdE
YXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAgIHJlZ2lz
dGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9CiAKIEhUVFBDb29raWVTdG9y
ZTo6fkhUVFBDb29raWVTdG9yZSgpCkBAIC01NSw4ICs1Myw2IEBAIEhUVFBDb29raWVTdG9yZTo6
fkhUVFBDb29raWVTdG9yZSgpCiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7CiAg
ICAgQVNTRVJUKCFtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5KTsKICAgICBBU1NFUlQoIW1f
Y29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotCi0gICAgdW5yZWdpc3RlckZvck5ld1Byb2Nl
c3NQb29sTm90aWZpY2F0aW9ucygpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVy
QXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtODEsMzMgKzc3LDE2IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpm
aWx0ZXJBcHBCb3VuZENvb2sKIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewot
ICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBhbGxDb29raWVzOwotICAgICAgICBpZiAo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpCi0gICAgICAgICAgICBhbGxDb29raWVzID0gZ2V0QWxsRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwotICAgICAgICBhbGxDb29raWVzLmFwcGVuZFZlY3Rv
cihtX293bmluZ0RhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7Ci0KLSAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGFsbENvb2tp
ZXNdICgpIG11dGFibGUgewotICAgICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGFsbENv
b2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgfSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxl
bWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2Vy
LT5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8
V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFu
YWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBj
b29raWVNYW5hZ2VyLmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4mIGNvb2tpZXMpIG11dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMo
Y29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lk
IEhUVFBDb29raWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6OlVSTCYmIHVybCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29s
Rm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpCi0gICAgICAgIHJl
dHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9
IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAg
Y29va2llTWFuYWdlci0+Z2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IHVybCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29r
aWU+JiYgY29va2llcykgbXV0YWJsZSB7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2Vy
LmdldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwsIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYmIGNvb2tpZXMp
IG11dGFibGUgewogICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29va2llcywgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMTE1LDgxICs5NCwyOSBAQCB2
b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llc0ZvclVSTChXVEY6CiB2b2lkIEhUVFBDb29raWVT
dG9yZTo6c2V0Q29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGZp
bHRlckFwcEJvdW5kQ29va2llcyhjb29raWVzLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoYXV0byYmIGFwcEJvdW5kQ29va2llcykgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgbmVlZHNG
bHVzaCA9IGZhbHNlOwotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnBy
b2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0
U2Vzc2lvbiBiZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBO
ZXR3b3JrIFByb2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAg
ICAgICAgICAgICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG5lZWRzRmx1c2ggPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBz
ZXRDb29raWVJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+YWRk
UGVuZGluZ0Nvb2tpZShjb29raWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
bmVlZHNGbHVzaCkKLSAgICAgICAgICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVT
dG9yZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8q
IGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5PigpOwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9v
bCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11
dGFibGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7Cisg
ICAgICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c2luZ2xldG9uKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293bmlu
Z0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRl
Q29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5n
RGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAg
aWYgKCFwb29sKSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkg
PT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24p
Ci0gICAgICAgICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
KGNvb2tpZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5y
ZW1vdmVQZW5kaW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
KSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBv
b2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29v
a2llTWFuYWdlci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwg
Y29va2llLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7Ci0gICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNv
b2tpZShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29v
a2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25p
bmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBkZWxl
dGVDb29raWVzSW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVt
ZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmRlbGV0ZUFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBh
dXRvJiBjb29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmds
ZXRvbigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxsQ29va2llcyhtX293bmluZ0RhdGFT
dG9yZS0+c2Vzc2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBUaGUgQ29tcGxldGlvbkhhbmRsZXIg
c2hvdWxkIGJlIHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tp
ZXMuCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9v
d25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsK
LSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lv
bklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3lJbkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xpY3kpOwotICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1l
bnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+
c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCks
IHBvbGljeSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
ICgpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2llTWFuYWdlci5zZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJs
ZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgfSk7CiB9CkBAIC0yMjcsMjEg
KzE1NCw3IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKE8KIAogICAg
IG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIgPSBtYWtlVW5pcXVlPEFQSVdlYkNvb2tpZU1h
bmFnZXJQcm94eU9ic2VydmVyPigqdGhpcyk7CiAKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdE
YXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLQotICAg
IGlmICghcG9vbCkgewotICAgICAgICBBU1NFUlQoIW1fb2JzZXJ2aW5nVUlQcm9jZXNzQ29va2ll
cyk7Ci0KLSAgICAgICAgLy8gTGlzdGVuIGZvciBjb29raWUgbm90aWZpY2F0aW9ucyBpbiB0aGUg
VUlQcm9jZXNzIGluIHRoZSBtZWFudGltZS4KLSAgICAgICAgc3RhcnRPYnNlcnZpbmdDaGFuZ2Vz
VG9EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoW3RoaXNdICgpIHsKLSAgICAgICAgICAgIGNv
b2tpZXNEaWRDaGFuZ2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgbV9vYnNlcnZpbmdVSVBy
b2Nlc3NDb29raWVzID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fb2Jz
ZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSAm
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG1fb2JzZXJ2
ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdEYXRhU3RvcmUt
PnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9CiAKQEAgLTI3
Niw0NiArMTg5LDEwIEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRGlkQ2hhbmdlKCkK
IHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKCkKIHsKICAgICBt
X29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT51bnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7Ci0g
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG51bGxwdHI7Ci0KLSAgICBhdXRvKiBw
b29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJh
dGlvbnMoKTsKLQotICAgIGlmICghcG9vbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vYnNl
cnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbV9vYnNlcnZl
ZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+
c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIAotdm9pZCBI
VFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkK
LXsKLSAgICBBU1NFUlQoIW1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7
Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSBXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIoW3RoaXNdKFdlYlBy
b2Nlc3NQb29sJiBuZXdQcm9jZXNzUG9vbCkgewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0
b3JlLT5pc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChuZXdQcm9jZXNzUG9vbCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgLy8gTm93IHRoYXQgYW4gYXNzb2NpYXRlZCBwcm9jZXNzIHBv
b2wgZXhpc3RzLCB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBVSSBwcm9jZXNzIGNvb2tpZSBzdG9yZQot
ICAgICAgICAvLyB0byBtYWtlIHN1cmUgYW55IGNoYW5nZXMgYXJlIHJlZmxlY3RlZCB3aXRoaW4g
dGhlIG5ldyBwcm9jZXNzIHBvb2wuCi0gICAgICAgIGZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tp
ZVN0b3JlKFtdIHsgfSk7Ci0gICAgICAgIG5ld1Byb2Nlc3NQb29sLmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCk7Ci0KLSAgICAgICAgaWYgKG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpIHsKLSAg
ICAgICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBuZXdQcm9jZXNzUG9vbC5z
dXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgICAgICAgICAg
bV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAg
ICAgICAgfQotICAgICAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25z
KCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3
UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBpZiAobV9wcm9jZXNzUG9vbENyZWF0
aW9uTGlzdGVuZXJJZGVudGlmaWVyKQotICAgICAgICBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rl
clByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5l
cklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlm
aWVyID0gMDsKLX0KLQogI2lmICFQTEFURk9STShDT0NPQSkKIHZvaWQgSFRUUENvb2tpZVN0b3Jl
OjpmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIoKTsgfQogVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4gSFRUUENvb2tpZVN0b3JlOjpnZXRBbGxEZWZhdWx0VUlQcm9jZXNz
Q29va2llU3RvcmVDb29raWVzKCkgeyByZXR1cm4geyB9OyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCShyZXZpc2lvbiAyNjUy
NDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDkgKzgyLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBI
VFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJik7CiAKLSAgICB2b2lkIHJl
Z2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0gICAgdm9pZCB1bnJlZ2lz
dGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7Ci0KICAgICB2b2lkIGZsdXNoRGVm
YXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAg
ICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGdldEFsbERlZmF1bHRVSVByb2Nlc3ND
b29raWVTdG9yZUNvb2tpZXMoKTsKICAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVJbkRlZmF1bHRV
SVByb2Nlc3NDb29raWVTdG9yZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAkocmV2aXNpb24gMjY1MjQ5
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDI2LDkgKzQyNiw5IEBAIHZvaWQgV0tDb250ZXh0UHJlY29ubmVjdFRvU2Vy
dmVyKFdLQ29udGUKIHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVmIFdLQ29udGV4dEdldENvb2tp
ZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCitXS0Nvb2tpZU1hbmFnZXJSZWYgV0tD
b250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYpCiB7Ci0gICAgcmV0dXJuIFdlYktp
dDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1cHBsZW1lbnQ8V2ViS2l0OjpX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOworICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkpOwogfQogCiBXS1dlYnNpdGVE
YXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRSZWYpCkBA
IC01NDMsOSArNTQzLDggQEAgdm9pZCBXS0NvbnRleHRTZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxl
YwogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNv
bGxlY3RvclRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFVzZVRlc3Rp
bmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYgY29udGV4dCkKK3ZvaWQgV0tDb250ZXh0VXNl
VGVzdGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZikKIHsKLSAgICBXZWJLaXQ6OnRvSW1w
bChjb250ZXh0KS0+dXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKCk7CiB9CiAKIHZvaWQgV0tDb250
ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nKFdLQ29udGV4
dFJlZiBjb250ZXh0LCBib29sIGFsbG93cykKQEAgLTY3MSw3ICs2NzAsNiBAQCB2b2lkIFdLQ29u
dGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlCiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4
dFJlZiktPnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVE
YXRhU3RvcmUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiB3
ZWJzaXRlRGF0YVN0b3JlKQordm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9y
ZShXS0NvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJlZikKIHsKLSAgICBXZWJLaXQ6OnRv
SW1wbChjb250ZXh0UmVmKS0+c2V0UHJpbWFyeURhdGFTdG9yZSgqV2ViS2l0Ojp0b0ltcGwod2Vi
c2l0ZURhdGFTdG9yZSkpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tDb250ZXh0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAkocmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MCw3ICs5MCw3IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTEMK
IFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmLCBib29sKTsKIAogLy8gVGVzdCBvbmx5LiBT
aG91bGQgYmUgY2FsbGVkIGJlZm9yZSBhbnkgc2Vjb25kYXJ5IHByb2Nlc3NlcyBhcmUgc3RhcnRl
ZC4KLVdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0Nv
bnRleHRSZWYgY29udGV4dCk7CitXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0
d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiAK
IC8vIFRlc3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgcnVubmluZyBhIHRlc3QuCiBX
S19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLQ29udGV4dFJl
ZiBjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1By
b2Nlc3NQb29sLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1Byb2Nlc3NQb29sLm1tCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjAxLDcgKzIwMSw3IEBAIC0gKHZvaWQpX3NldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmEK
IAogLSAodm9pZClfc2V0Q29va2llQWNjZXB0UG9saWN5OihOU0hUVFBDb29raWVBY2NlcHRQb2xp
Y3kpcG9saWN5CiB7Ci0gICAgX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5PigpLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIFdlYkNvcmU6OnRvSFRUUENvb2tpZUFjY2VwdFBvbGlj
eShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnNpbmdsZXRvbigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSwgV2ViQ29yZTo6dG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGlj
eSksIFtdKCkgeyB9KTsKIH0KIAogLSAoaWQpX29iamVjdEZvckJ1bmRsZVBhcmFtZXRlcjooTlNT
dHJpbmcgKilwYXJhbWV0ZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAyNjUyNDkp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsOCArNjQsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tp
ZU1hbmFnZXJQcml2YXRlIHsKIAogICAgIH5fV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKQog
ICAgIHsKLSAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckdldFByb2Nlc3NQb29scyhkYXRhTWFuYWdlcikpCi0gICAgICAgICAgICBwcm9jZXNz
UG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2Vy
dmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOworICAgICAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklE
KCksIG51bGxwdHIpOwogICAgIH0KIAogICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0
YU1hbmFnZXI7CkBAIC0xMzksMTEgKzEzOCw5IEBAIFdlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtp
dENvb2tpZU1hbmFnZXIKIHsKICAgICBXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyID0gV0VC
S0lUX0NPT0tJRV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT09LSUVfTUFOQUdF
UiwgbnVsbHB0cikpOwogICAgIG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyID0gZGF0YU1hbmFn
ZXI7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpIHsKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29r
aWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdlcl0g
ewotICAgICAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAw
KTsKLSAgICAgICAgfSk7Ci0gICAgfQorICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xl
dG9uKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQo
KSwgW21hbmFnZXJdIHsKKyAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NI
QU5HRURdLCAwKTsKKyAgICB9KTsKICAgICByZXR1cm4gbWFuYWdlcjsKIH0KIApAQCAtMTczLDgg
KzE3MCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW4KICAgICBp
ZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAo
YXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9v
bHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKHNlc3Npb25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlVHlwZShzdG9yYWdlKSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5
OjpzaW5nbGV0b24oKS5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmlu
Zzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUo
c3RvcmFnZSkpOwogfQogCiAvKioKQEAgLTE5Miw4ICsxODgsNyBAQCB2b2lkIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2
LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2
LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9
KTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2Vw
dFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CiB9CiAKIC8qKgpAQCAtMjI0LDcgKzIxOSw3IEBA
IHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG8KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCktPmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vz
c2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFjY2Vw
dFBvbGljeSBwb2xpY3kpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigp
LmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0
YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xp
Y3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQoKSwgdG9XZWJLaXRDb29r
aWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0yNjksMTEgKzI2NCw3IEBA
IHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2UKICAgICBnX3JldHVybl9p
Zl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdf
dGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0g
ICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRh
dGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2Vz
cyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29u
c3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vz
c1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0t
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXIt
PnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0g
V1RGTW92ZSh0YXNrKV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24o
KS5zZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tp
ZShjb29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19y
ZXR1cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KQEAgLTMyMCwxMSAr
MzExLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMoVwogICAgIGdf
cmV0dXJuX2lmX2ZhaWwodXJpKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdS
ZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7
Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxp
dGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2Ug
YWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAg
ICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQ
cm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29s
c1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkp
KSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYg
Y29va2llcykgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZ2V0Q29v
a2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21V
VEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiBjb29raWVzKSB7CiAgICAgICAgIEdMaXN0KiBjb29raWVzTGlzdCA9IG51bGxwdHI7
CiAgICAgICAgIGZvciAoYXV0byYgY29va2llIDogY29va2llcykKICAgICAgICAgICAgIGNvb2tp
ZXNMaXN0ID0gZ19saXN0X3ByZXBlbmQoY29va2llc0xpc3QsIGNvb2tpZS50b1NvdXBDb29raWUo
KSk7CkBAIC0zNzgsMTEgKzM2NSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0
ZV9jb29raWUKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdU
YXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNh
bGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZy
b20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8v
IG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJz
dCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2Vy
KTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNv
b2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYtPnNlc3Np
b25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgp
IHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAg
IH0pOwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vi
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0V2ViQ29udGV4dC5jcHAJKHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MDcsNyArNDA3LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4dENvbnN0cnVj
dGVkKAogICAgICAgICBjb25maWd1cmF0aW9uLnNldEhTVFNTdG9yYWdlRGlyZWN0b3J5KEZpbGVT
eXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24od2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9oc3RzX2NhY2hlX2RpcmVjdG9yeShwcml2LT53ZWJzaXRlRGF0YU1h
bmFnZXIuZ2V0KCkpKSk7CiAKICAgICBwcml2LT5wcm9jZXNzUG9vbCA9IFdlYlByb2Nlc3NQb29s
OjpjcmVhdGUoY29uZmlndXJhdGlvbik7Ci0gICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFByaW1h
cnlEYXRhU3RvcmUod2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndl
YnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpOwogICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRVc2Vy
TWVzc2FnZUhhbmRsZXIoW3dlYkNvbnRleHRdKFVzZXJNZXNzYWdlJiYgbWVzc2FnZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChVc2VyTWVzc2FnZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgewog
ICAgICAgICAvLyBTaW5rIHRoZSBmbG9hdGluZyByZWYuCiAgICAgICAgIEdSZWZQdHI8V2ViS2l0
VXNlck1lc3NhZ2U+IHVzZXJNZXNzYWdlID0gd2Via2l0VXNlck1lc3NhZ2VDcmVhdGUoV1RGTW92
ZShtZXNzYWdlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbi5jcHAJKHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzkzLDggKzEzOTMsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29r
CiAgICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigiaHR0cE9ubHkiX3MsIGNvb2tpZS5o
dHRwT25seSkpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9E
RVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdodHRwT25seScgd2FzIG5v
dCBmb3VuZC4iKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9
IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAg
IGNvb2tpZU1hbmFnZXItPnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Np
b25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2tdKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vz
c2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5z
ZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQxMCw4ICsxNDA5LDcgQEAgdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29vawogCiAgICAgU3RyaW5nIGhvc3QgPSBhY3Rp
dmVVUkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNv
b2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBh
Z2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGlu
Z0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
c2luZ2xldG9uKCkuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0
b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRl
ZChob3N0KSB9KTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0U2Vzc2lvblBl
cm1pc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4mIG91dF9wZXJtaXNz
aW9ucykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29s
Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UHJvY2Vzc1Bvb2xDb2NvYS5tbQkocmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTMzLDggKzEzMyw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQK
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKQog
ewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0UHJvY2Vzc1N1cHByZXNz
aW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpOwogCiAjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVk
Rm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTE2NSw4ICsxNjQsNiBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoCiAgICAgaWYgKCFbW05TVXNlckRlZmF1bHRzIHN0
YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVz
c3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1lbW9yeVByZXNzdXJlSGFuZGxlcigpOwog
Ci0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8TGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKTsKLQogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBpZiAoIV9NR0NhY2hlVmFsaWQo
KSkgewogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJ
U1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeewpAQCAtNDc5LDIyICs0NzYsNiBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAKICAgICBOU1VzZXJE
ZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
OwogCi0gICAgewotICAgICAgICBib29sIGlzU2FmYXJpID0gZmFsc2U7Ci0gICAgICAgIGJvb2wg
aXNNaW5pQnJvd3NlciA9IGZhbHNlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAg
IGlzU2FmYXJpID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCk7Ci0g
ICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNNaW5pQnJv
d3NlcigpOwotI2VsaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6
Ok1hY0FwcGxpY2F0aW9uOjppc1NhZmFyaSgpOwotICAgICAgICBpc01pbmlCcm93c2VyID0gV2Vi
Q29yZTo6TWFjQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbmRpZgotICAgICAgICBp
ZiAoaXNTYWZhcmkgfHwgaXNNaW5pQnJvd3NlcikgewotICAgICAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cFBy
b3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdlYktp
dDJIVFRQUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cHNQcm94eSA9
IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJLaXQySFRU
UFNQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBwYXJhbWV0ZXJz
Lm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihfQ0ZOZXR3b3JrQ29weUFUU0NvbnRleHQoKSk7
CiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyID0g
W2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXJE
ZWZhdWx0c0tleV07CkBAIC01MDUsMTcgKzQ4NiwxMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOCiAgICAgcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdl
SWRlbnRpZmllciA9IGlkZW50aWZ5aW5nRGF0YUZyb21Db29raWVTdG9yYWdlKFtbTlNIVFRQQ29v
a2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gX2Nvb2tpZVN0b3JhZ2VdKTsKICNl
bmRpZgogCi0gICAgcGFyYW1ldGVycy5zdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IHN0b3JhZ2VB
Y2Nlc3NBUElFbmFibGVkKCk7Ci0KICAgICBOU051bWJlciAqZGF0YWJhc2VFbmFibGVkVmFsdWUg
PSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50
ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5
KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogICAgIGlmIChkYXRhYmFzZUVuYWJsZWRWYWx1
ZSkKICAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRhdGFiYXNl
RW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmFtZXRlcnMuc2hv
dWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCku
aXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0
dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5OjphZENsaWNr
QXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1d
OwotCi0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNz
aW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmNwcAkocmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw4ICs3NSw3IEBAIHZv
aWQgRG93bmxvYWRQcm94eTo6Y2FuY2VsKCkKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2Vz
cyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3du
bG9hZElEKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDAp
OwogfQogCiB2b2lkIERvd25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpAQCAtMTA2LDEyICsxMDUs
MTAgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpwdWJsaXNoUHJvZ3Jlc3MoY29ucwogICAgIGlmICgh
bV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBib29sIGNyZWF0ZWRTYW5kYm94
RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVt
UGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7Ci0gICAg
ICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94
RXh0ZW5zaW9uKTsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFu
ZGxlKSwgMCk7Ci0gICAgfQorICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7Cisg
ICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZFdyaXRlLCBoYW5kbGUpOworICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNp
b24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2Fk
UHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwogfQogI2VuZGlmIC8vIFBM
QVRGT1JNKENPQ09BKQogCkBAIC0xNDYsMTUgKzE0Myw3IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6
d2lsbFNlbmRSZXF1ZXN0KFJlc28KIAogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50
KCkud2lsbFNlbmRSZXF1ZXN0KCp0aGlzLCBXVEZNb3ZlKHByb3Bvc2VkUmVxdWVzdCksIHJlZGly
ZWN0UmVzcG9uc2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFJlc291
cmNlUmVxdWVzdCYmIG5ld1JlcXVlc3QpIHsKICAgICAgICAgbV9yZWRpcmVjdENoYWluLmFwcGVu
ZChuZXdSZXF1ZXN0LnVybCgpKTsKLQotICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fcHJv
Y2Vzc1Bvb2wpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byogbmV0d29ya1By
b2Nlc3NQcm94eSA9IHByb3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCk7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3NQcm94eSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBuZXR3b3JrUHJvY2Vzc1Byb3h5LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9h
ZElELCBuZXdSZXF1ZXN0KSwgMCk7CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVx
dWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKICAgICB9
KTsKIH0KIApAQCAtMTc5LDE2ICsxNjgsMTIgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkZWNpZGVE
ZXN0aW5hdGlvbldpdAogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzYW5p
dGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRCA9IGRvd25sb2FkSURdIChBbGxvd092
ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CisgICAgbV9wcm9j
ZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmls
ZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbZG93bmxvYWRJRCA9IGRvd25sb2FkSURdIChBbGxv
d092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CiAgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgICAg
ICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFk
V3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgICAgIGlmICghbV9wcm9jZXNz
UG9vbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lk
ZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVz
KSwgMCk7CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3Rp
bmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBh
bGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAgICAgfSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRQcm94eU1hcC5jcHAJKHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA5LDkgKzEwOSw2IEBAIHZvaWQgRG93bmxvYWRQcm94eU1hcDo6ZG93bmxvYWRGaW5pc2hlZCgK
IAogICAgIFJFTEVBU0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1NjQg
IiBmcm9tIFVJUHJvY2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3dubG9hZElE
KCkpOwogCi0gICAgLy8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3Qg
cmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNz
UG9vbCA9IG1ha2VSZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAgIEFTU0VS
VChtX2Rvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKICAgICBtX3Byb2Nlc3MtPnJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJ
KHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNp
bmNsdWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUg
IkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgorI2lu
Y2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIk5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JbmZvLmgiCkBAIC01MSw3ICs1Miw2IEBACiAjaW5j
bHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5j
bHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHlN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgpA
QCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVDbGllbnQuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaXN0
cmFibGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJ
TSkKQEAgLTcwLDE4ICs3MSwxMDQgQEAKICNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9YUENTUEku
aD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2RlZmluZSBNRVNTQUdFX0NIRUNL
KGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgY29ubmVjdGlvbigpKQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1OZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNz
UG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9jZXNzUG9vbC5hbHdheXNSdW5z
QXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vzc1Bvb2wocHJvY2Vzc1Bvb2wp
CitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+JiBnbG9iYWxOZXR3
b3JrUHJvY2VzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6dW5pcXVlX3B0
cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gbmV0d29ya1Byb2Nlc3M7CisgICAgcmV0dXJuIG5ldHdv
cmtQcm9jZXNzOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKQoreworICAgIGlmICghZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSkgeworICAg
ICAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1By
b3h5PigpOworICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpLT5zZW5kQ3JlYXRpb25QYXJh
bWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgfQorICAgIHJldHVybiAqZ2xvYmFsTmV0d29ya1By
b2Nlc3MoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphdHRlbXB0UmVsYXVuY2hB
ZnRlckNyYXNoSWZOZWNlc3NhcnkoVmVjdG9yPHN0ZDo6cGFpcjxSZWY8V2ViUHJvY2Vzc1Byb3h5
PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
RGVsYXllZFJlcGx5Pj4mJiBwZW5kaW5nUmVxdWVzdHMpCit7CisgICAgZ2xvYmFsTmV0d29ya1By
b2Nlc3MoKSA9IG51bGxwdHI7CisgICAgaWYgKHBlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBuZXdOZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpOworICAgIGZvciAoYXV0byYgcmVxdWVzdCA6IHBlbmRpbmdS
ZXF1ZXN0cykKKyAgICAgICAgbmV3TmV0d29ya1Byb2Nlc3MuZ2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKHJlcXVlc3QuZmlyc3QuZ2V0KCksIFdURk1vdmUocmVxdWVzdC5zZWNvbmQpKTsKK30K
Kwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQ
cm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8gRklY
TUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQg
QVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCisgICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9u
Y2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCisgICAg
aWYgKCFSdW5Mb29wOjppc01haW4oKSkgeworICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdh
aXQoW3RoaXNdIHsKKyAgICAgICAgICAgIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nl
c3MoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMgcGFyYW1ldGVyczsKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgcGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKKyAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1l
dGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworI2VuZGlmCisg
ICAgaWYgKCFwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKQorICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFy
YW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzU2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3Rv
cihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5
cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6
c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOworICAgIHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2Jh
bFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7Cisg
ICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRv
bigpLmNhY2hlTW9kZWwoKTsKKyAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IFdlYlByb2Nlc3NQb29s
Ojp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKKyAgICAgICAgcGFyYW1l
dGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1l
KTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChTdHJpbmcgY29va2llU3RvcmFn
ZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFj
b29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Cisg
ICAgaWYgKFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6
bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOyAhY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5Lmlz
RW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdy
aXRlRGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWlu
ZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgcGFyZW50
QnVuZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgp
OyAhcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lv
bjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKKyNlbmRpZgorICAgIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKKyAgICBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBh
cmFtZXRlcnMgPSBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpOwor
ICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MocGFyYW1ldGVycyksIDApOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEFsd2F5
c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJv
Y2Vzc1Bvb2wtPmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wg
YW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkKK3sKKyAgICBm
b3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygp
KSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2Vy
dGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eSgpCisgICAg
OiBBdXhpbGlhcnlQcm9jZXNzUHJveHkoYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3Jv
dW5kUHJpb3JpdHkoKSkKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VS
KQogICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKICNlbmRpZgotICAg
ICwgbV90aHJvdHRsZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tncm91bmRB
c3NlcnRpb24oKSkKKyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBhbnlQcm9jZXNzUG9vbFNob3Vs
ZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKIHsKICAgICBjb25uZWN0KCk7CiB9CkBAIC0x
MDQsMTYgKzE5MSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW8K
IHsKICAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID0gUHJvY2Vzc0xhdW5jaGVyOjpQcm9j
ZXNzVHlwZTo6TmV0d29yazsKICAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OmdldExhdW5jaE9w
dGlvbnMobGF1bmNoT3B0aW9ucyk7Ci0KLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5zaG91bGRNYWtl
TmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgewotICAgICAgICBwcm9j
ZXNzUG9vbCgpLnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVz
dGluZyhmYWxzZSk7Ci0gICAgICAgIGxhdW5jaE9wdGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZyA9IHRydWU7Ci0gICAgfQotCi0jaWYgUExBVEZPUk0oUExBWVNUQVRJ
T04pCi0gICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNzUGF0aCA9IG1fcHJvY2Vzc1Bvb2wubmV0d29y
a1Byb2Nlc3NQYXRoKCk7Ci0gICAgbGF1bmNoT3B0aW9ucy51c2VySWQgPSBtX3Byb2Nlc3NQb29s
LnVzZXJJZCgpOwotI2VuZGlmCiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y29ubmVj
dGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbikKQEAgLTE2NiwxMiArMjQz
LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c3ludGhlc2l6ZUFwcEkKICAgICB9CiB9
CiAKLURvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJv
eHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
c291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJv
eHkqIG9yaWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQcm9j
ZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1
ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2lu
YXRpbmdQYWdlKQogewogICAgIGlmICghbV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rv
d25sb2FkUHJveHlNYXAgPSBtYWtlVW5pcXVlPERvd25sb2FkUHJveHlNYXA+KCp0aGlzKTsKIAot
ICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0
b3JlLCBtX3Byb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRp
bmdQYWdlKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFBy
b3h5KGRhdGFTdG9yZSwgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBv
cmlnaW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmZldGNoV2Vi
c2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9w
dGlvbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTIzNyw4ICszMTQsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Om5l
dHdvcmtQcm9jZXNzCiB7CiAgICAgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCi0gICAgLy8gVGVs
bCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMgbmV0d29y
ayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4KLSAgICBt
X3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAgZm9yIChhdXRv
KiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAg
ICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CiB9CiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0YXRlcygpCkBAIC0yNTgsOSArMzM1
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzcwogICAgIGlmIChk
aXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX3Byb2Nlc3NQb29sLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
KSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlN
ZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCkBAIC0yNzQsOCArMzQ4LDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlU3luYwogCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7Ci0gICAgYXV0byBwcm90ZWN0
ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWYobV9wcm9jZXNzUG9vbCk7Ci0KICAgICBpZiAobV9kb3du
bG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFsaWRhdGUoKTsK
ICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQpAQCAtMzM0LDExICs0
MDYsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRvcE9yaWdpbiB8fCAhbV9wcm9jZXNzUG9vbC5p
c1NlcnZpY2VXb3JrZXJQYWdlSUQocGFnZUlEKSkgewotICAgICAgICBwcm9jZXNzQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2Uoc2Vzc2lvbklELCBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBXZWJQYWdlUHJveHk6OmZvck1vc3RW
aXNpYmxlV2ViUGFnZUlmQW55KHNlc3Npb25JRCwgKnRvcE9yaWdpbiwgW3RoaXMsIHdlYWtUaGlz
ID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwgYXV0aGVudGljYXRpb25DaGFsbGVuZ2Ug
PSBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgbmVnb3RpYXRlZExlZ2FjeVRMU10o
YXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0zOTUsMTEgKzQ2Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
ZGlkRmluaXNoTGF1bmMKICAgICAgICAgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAobV9wcm9jZXNz
UG9vbC5wcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCi0gICAgICAgIHNldFByb2Nlc3NTdXBw
cmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKICAgICAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogICAgIGlmICh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0
aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSkKQEAgLTExOTcsNyArMTI1OSw4IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2V0VG9TYW1lU2l0ZVMKIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5zV2l0
aFVzZXJJbnRlcmFjdGlvbihXVEZNb3ZlKGRvbWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nl
c3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9j
ZXNzUG9vbC0+c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbj4geyBkb21haW5zIH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTEyNjIsMTQgKzEzMjUsMTQgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpkaWRTeW5jQWxsQ29vawogICAgIH0KIH0KIAotdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjphZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmIHN0b3JlKQor
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmIHN0
b3JlKQogewogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0ZURhdGFTdG9yZSB7IHN0b3JlLT5wYXJhbWV0ZXJz
KCkgfSwgMCk7Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS0+c2Vzc2lvbklEKCk7CisgICAg
ICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsg
c3RvcmUucGFyYW1ldGVycygpIH0sIDApOworICAgIGF1dG8gc2Vzc2lvbklEID0gc3RvcmUuc2Vz
c2lvbklEKCk7CiAgICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgewogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUo
c3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCkpOworICAgICAgICBjcmVh
dGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUucmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnkoKSk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC0xMjgyLDE2ICsxMzQ1LDcgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKAogCiBXZWJzaXRlRGF0YVN0b3JlKiBO
ZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJzaXRlRGF0
YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICBp
ZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBz
ZXNzaW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9y
ZSgpLnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdO
b25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFdl
YnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7
CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3JhZ2VQYXJh
bWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzMzgsNyArMTM5Miw5IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVzdHJveVdlYlUKICNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRl
eHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJh
YmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3Byb2Nlc3NQb29sLmVzdGFibGlz
aFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgV1RGTW92ZShy
ZWdpc3RyYWJsZURvbWFpbiksIHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OworICAgIGF1dG8gYWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+ZXN0
YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBSZWdp
c3RyYWJsZURvbWFpbiB7cmVnaXN0cmFibGVEb21haW59LCBzZXNzaW9uSUQsIFthZ2dyZWdhdG9y
ID0gYWdncmVnYXRvci5jb3B5UmVmKCldKCkgeyB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5Ojp3b3JrZXJDb250ZXh0Q29ubmVjdGlvbk5vTG9uZ2VyTmVlZGVkKFdlYkNvcmU6OlBy
b2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC0xNTAxLDE2ICsxNTU3LDM0IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6cHJlY29ubmVjdFRvKFAKICAgICBzZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6UHJlY29ubmVjdFRvKHNlc3Npb25JRCwgd2ViUGFnZVByb3h5SUQsIHdl
YlBhZ2VJRCwgdXJsLCB1c2VyQWdlbnQsIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBpc05hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluKSwgMCk7CiB9CiAKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQ
b29sSGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNz
UG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAo
cHJvY2Vzc1Bvb2wtPmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGFu
eVByb2Nlc3NQb29sSGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpCit7CisgICAgZm9yIChhdXRv
KiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAg
ICAgICBpZiAocHJvY2Vzc1Bvb2wtPmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpCiB7Ci0gICAgaWYg
KHByb2Nlc3NQb29sKCkuaGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7CisgICAgaWYgKGFu
eVByb2Nlc3NQb29sSGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7CiAgICAgICAgIGlmICgh
UHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEZvcmVncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5RnJv
bVdlYlByb2Nlc3NlcykpIHsKICAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2Vz
ID0gdGhyb3R0bGVyKCkuZm9yZWdyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5nIGZvciBmb3JlZ3Jv
dW5kIHZpZXcocykiX3MpOwogICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9Gb3JlZ3JvdW5kKCksIDApOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHByb2Nlc3NQb29sKCkuaGFzQmFja2dyb3Vu
ZFdlYlByb2Nlc3NlcygpKSB7CisgICAgaWYgKGFueVByb2Nlc3NQb29sSGFzQmFja2dyb3VuZFdl
YlByb2Nlc3NlcygpKSB7CiAgICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEJh
Y2tncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcykpIHsKICAgICAgICAg
ICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCkuYmFja2dyb3VuZEFj
dGl2aXR5KCJOZXR3b3JraW5nIGZvciBiYWNrZ3JvdW5kIHZpZXcocykiX3MpOwogICAgICAgICAg
ICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9C
YWNrZ3JvdW5kKCksIDApOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDI2NTI0OSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw2ICs1MiwxMCBAQCBuYW1lc3BhY2UgSVBDIHsKIGNsYXNzIEZvcm1E
YXRhUmVmZXJlbmNlOwogfQogCituYW1lc3BhY2UgQVBJIHsKK2NsYXNzIEN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudDsKK30KKwogbmFtZXNwYWNlIFBBTCB7CiBjbGFzcyBTZXNzaW9uSUQ7CiB9
CkBAIC03NCw3ICs3OCw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgRG93bmxvYWRQcm94
eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7CiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBX
ZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OwogCiBl
bnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6IGJvb2w7CkBAIC0xMDIsMTIg
KzEwNSwxMyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNz
ID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAgICAgdXNpbmcgT3BlbmVyRG9tYWluID0g
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAKLSAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vz
c1Byb3h5KFdlYlByb2Nlc3NQb29sJik7CisgICAgc3RhdGljIE5ldHdvcmtQcm9jZXNzUHJveHkm
IHNpbmdsZXRvbigpOworICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9jZXNzUHJveHkoKTsKICAgICB+
TmV0d29ya1Byb2Nlc3NQcm94eSgpOwogCiAgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCi0gICAgRG93bmxvYWRQcm94
eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3Jp
Z2luYXRpbmdQYWdlKTsKKyAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9hZFByb3h5KFdl
YnNpdGVEYXRhU3RvcmUmLCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5n
UGFnZSk7CiAKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPiYmKTsKICAgICB2b2lkIGRlbGV0
ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwg
V2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKTsKQEAgLTIwMywxMyArMjA3LDExIEBAIHB1YmxpYzoKICAgICBQcm9jZXNz
VGhyb3R0bGVyJiB0aHJvdHRsZXIoKSBmaW5hbCB7IHJldHVybiBtX3Rocm90dGxlcjsgfQogICAg
IHZvaWQgdXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwogCi0gICAgV2ViUHJvY2Vzc1Bvb2wmIHBy
b2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9vbDsgfQotCiAjaWYgRU5BQkxFKENPTlRF
TlRfRVhURU5TSU9OUykKICAgICB2b2lkIGRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eShXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSYpOwogI2VuZGlmCiAKLSAgICB2
b2lkIGFkZFNlc3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYpOworICAgIHZvaWQgYWRkU2Vz
c2lvbihXZWJzaXRlRGF0YVN0b3JlJik7CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uKFBBTDo6U2Vz
c2lvbklEKTsKICAgICAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKQEAgLTIyNSw2ICsy
MjcsMTIgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Q
cm90b2NvbChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdh
Y3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKIAorI2lmIEVOQUJMRShMRUdBQ1lfQ1VT
VE9NX1BST1RPQ09MX01BTkFHRVIpCisgICAgQVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQqIGxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIHsgcmV0dXJuIG1fY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmdldCgpOyB9CisjZW5kaWYKKworICAgIHZvaWQgbmV0d29y
a1Byb2Nlc3NDcmFzaGVkKCk7CisgICAgCiAgICAgdm9pZCByZXNldFF1b3RhKFBBTDo6U2Vzc2lv
bklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiAgICAgdm9pZCByZXNvdXJjZUxv
YWREaWRTZW5kUmVxdWVzdChXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBSZXNvdXJjZUxvYWRJbmZv
JiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBPcHRpb25hbDxJUEM6OkZvcm1EYXRhUmVm
ZXJlbmNlPiYmKTsKQEAgLTI0Myw2ICsyNTEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckJ1
bmRsZUlkZW50aWZpZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogcHJpdmF0ZToK
KyAgICB2b2lkIHNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICBzdGF0
aWMgdm9pZCBhdHRlbXB0UmVsYXVuY2hBZnRlckNyYXNoSWZOZWNlc3NhcnkoVmVjdG9yPHN0ZDo6
cGFpcjxSZWY8V2ViUHJvY2Vzc1Byb3h5PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5Pj4mJik7CisKICAgICAvLyBBdXhp
bGlhcnlQcm9jZXNzUHJveHkKICAgICBBU0NJSUxpdGVyYWwgcHJvY2Vzc05hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiTmV0d29ya2luZyJfczsgfQogCkBAIC0yNTAsNyArMjYxLDYgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKSBvdmVy
cmlkZTsKICAgICB2b2lkIHByb2Nlc3NXaWxsU2h1dERvd24oSVBDOjpDb25uZWN0aW9uJikgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgIHZvaWQgY2xl
YXJDYWxsYmFja1N0YXRlcygpOwogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKQEAg
LTMwNiw4ICszMTYsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwcm9jZXNzQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQsIFJlZjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5PiYmKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBtX3Byb2Nlc3NQb29sOwotCiAgICAgSGFz
aE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4+IG1f
cGVuZGluZ0ZldGNoV2Vic2l0ZURhdGFDYWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUNh
bGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2luc0NhbGxiYWNrczsKQEAgLTM0
NSw2ICszNTMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgV2Vha1B0cjxOZXR3b3JrUHJvY2Vzc1By
b3h5PiBtX25ldHdvcmtQcm9jZXNzOwogICAgIH07CiAjZW5kaWYKKworI2lmIEVOQUJMRShMRUdB
Q1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCisgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsK
KyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlD
b2NvYS5tbQkocmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxLDgg
KzUxLDcgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZQogICAgIGlm
IChtZXNzYWdlTmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
IChtZXNzYWdlTmFtZSA9PSBMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzOjp4cGNM
YXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDRW5kcG9pbnRNZXNzYWdlTmFtZSkKLSAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2lu
dFRvV2ViUHJvY2VzcyhldmVudCk7CisgICAgLy8gRklYTUU6IE5vdCBzdXJlIHdoYXQgZXF1aXZh
bGVudCBpcyBoZXJlLgogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3Bw
CShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1
c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDE3ICs0NCwyMCBAQCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQ
cm94eTo6fkxlZ2FjCiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0
YXJ0TG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBtX25ldHdvcmtQcm9j
ZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdGFy
dExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOworICAgIGlmIChhdXRv
KiBjbGllbnQgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5sZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQoKSkKKyAgICAgICAgY2xpZW50LT5zdGFydExvYWRpbmcoKnRo
aXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1
c3RvbVByb3RvY29sSUQpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29s
KCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1c3Rv
bVByb3RvY29sSUQpOworICAgIGlmIChhdXRvKiBjbGllbnQgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5sZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSkKKyAgICAg
ICAgY2xpZW50LT5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CiB9CiAKIHZv
aWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQogewotICAg
IG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOworICAgIGlmIChhdXRvKiBjbGllbnQgPSBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5sZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQoKSkKKyAgICAgICAgY2xpZW50LT5pbnZhbGlkYXRlKCp0aGlzKTsKIH0KIAogdm9pZCBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6d2FzUmVkaXJlY3RlZFRvUmVxdWVzdChM
ZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYg
cmVkaXJlY3RSZXNwb25zZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCShyZXZpc2lvbiAyNjUyNDkp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkFQSVByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIkFQSVdlYnNpdGVEYXRhUmVjb3JkLmgi
CiAjaW5jbHVkZSAiQXV0aGVudGljYXRvck1hbmFnZXIuaCIKKyNpbmNsdWRlICJEZWZhdWx0V2Vi
QnJvd3NlckNoZWNrcy5oIgogI2luY2x1ZGUgIkRldmljZUlkSGFzaFNhbHRTdG9yYWdlLmgiCiAj
aW5jbHVkZSAiR1BVUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiTW9ja0F1dGhlbnRpY2F0b3JN
YW5hZ2VyLmgiCkBAIC0zNyw2ICszOCw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJT
dGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUg
IldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHku
aCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpAQCAtODMsMTMgKzg1LDIyIEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVIKICAgICBhbGxvd3NXZWJzaXRl
RGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8UEFM
OjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFTdG9yZXMoKQor
c3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgYWxsRGF0
YVN0b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9y
ZSo+PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAorVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpCit7
CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBhbGxQYXJhbWV0ZXJzOwor
ICAgIGFsbFBhcmFtZXRlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhbGxEYXRhU3RvcmVzKCku
c2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygp
KQorICAgICAgICBhbGxQYXJhbWV0ZXJzLnVuY2hlY2tlZEFwcGVuZChzdG9yZS0+cGFyYW1ldGVy
cygpKTsKKyAgICByZXR1cm4gYWxsUGFyYW1ldGVyczsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3Rv
cmU+IFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3Vy
YXRpb246OmNyZWF0ZShJc1BlcnNpc3RlbnQ6Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRl
RXBoZW1lcmFsU2Vzc2lvbklEKCkpKTsKQEAgLTExNSwxMCArMTI2LDExIEBAIFdlYnNpdGVEYXRh
U3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoUmVmPFcKICNlbmRpZgogewogICAgIFdURjo6c2V0UHJv
Y2Vzc1ByaXZpbGVnZXMoYWxsUHJpdmlsZWdlcygpKTsKLSAgICBtYXliZVJlZ2lzdGVyV2l0aFNl
c3Npb25JRE1hcCgpOworICAgIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogICAgIHBsYXRm
b3JtSW5pdGlhbGl6ZSgpOwogCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5hZGRTZXNzaW9uKCp0aGlzKTsKIH0KIAog
V2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQpAQCAtMTI4LDE3ICsxNDAsMTIg
QEAgV2Vic2l0ZURhdGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1E
ZXN0cm95KCk7CiAKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NFUlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5n
ZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOwotICAgICAgICBub25EZWZhdWx0RGF0YVN0b3Jlcygp
LnJlbW92ZShtX3Nlc3Npb25JRCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBX
ZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAg
ICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQoYWxsRGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25J
RCkgPT0gdGhpcyk7CisgICAgYWxsRGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucmVtb3ZlU2Vzc2lvbihtX3Nlc3Np
b25JRCk7CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQotICAgICAgICBpZiAoYXV0byogZ3B1UHJv
Y2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKLSAgICAg
ICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAg
aWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xldG9uSWZD
cmVhdGVkKCkpCisgICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Np
b25JRCk7CiAjZW5kaWYKIH0KIApAQCAtMTY5LDE3ICsxNzYsMTUgQEAgYm9vbCBXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRQogICAgIHJldHVybiAhIWdsb2JhbERlZmF1bHREYXRh
U3RvcmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNl
c3Npb25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25J
RE1hcCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25EZWZhdWx0RGF0YVN0b3Jl
cygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgfQorICAgIGF1dG8gcmVzdWx0ID0gYWxsRGF0YVN0
b3JlcygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQs
IHJlc3VsdC5pc05ld0VudHJ5KTsKIH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFT
dG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCkKK1dlYnNpdGVEYXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0
aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAg
ICByZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkg
PyBub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICBy
ZXR1cm4gYWxsRGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCkBAIC0x
OTUsMTIgKzIwMCw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dW5yZWdpc3RlclByb2Nlc3MK
ICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9CiAKLVdlYlByb2Nlc3NQb29sKiBX
ZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkK
LXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEpOwotICAgIHJldHVybiBwb29scy5p
c0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKQogewogICAgIGlm
IChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC00NDMsOCArNDQyLDYgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nl
c3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVu
Y2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgpAQCAtNDU2LDcg
KzQ1Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2Fs
bGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5mZXRj
aFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxi
YWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7Cisg
ICAgICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5mZXRjaFdlYnNpdGVE
YXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVn
YXRvciwgcHJvY2Vzc1Bvb2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3
ZWJzaXRlRGF0YSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTcyNyw4ICs3MjQs
NiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uCiAgICAgICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3
b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5
cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVu
Y2g6CkBAIC03NDAsNyArNzM1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRh
KE9wdGlvbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3It
PmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlm
aWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CisgICAgICAgICAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5kZWxldGVXZWJzaXRlRGF0YShtX3Nl
c3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBw
cm9jZXNzUG9vbF0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3Zl
UGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQpAQCAtODkxLDE0ICs4ODYsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlbW92ZURhdGEoT3B0aW9uCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljcykpIHsKICAgICAgICAgaWYgKCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1Rv
RGVsZXRlV2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9k
aWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRlV2Vic2l0ZURhdGEo
bV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0Nh
bGxiYWNrKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTIsOCArOTgyLDYgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5
SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgpAQCAt
MTAxOSw3ICsxMDA3LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlv
bgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBl
bmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCktPmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBv
cmlnaW5zLCBjb29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVE
b21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0geworICAgICAgICAgICAg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmln
aW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNU
U0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Is
IHByb2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1v
dmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0xMTgz
LDggKzExNzEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFCiAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRy
eUNvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtX3Nl
c3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBw
cnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xMTkzLDggKzExODAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBy
dW5lRW50cmllc0RvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Np
b25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0UHJ1bmVFbnRy
aWVzRG93blRvKG1fc2Vzc2lvbklELCBwcnVuZVRhcmdldENvdW50LCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5n
VGltZShTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTEyMDMsOCArMTE4OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0R3JhbmRmYXRoZXJpbmcKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNz
aW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldEdyYW5kZmF0aGVyaW5nVGlt
ZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xMjEzLDIwICsxMTk4LDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0TWluaW11bVRpbWVCZXQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRh
UmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vj
b25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICAgICAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmR1bXBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjM4LDEyICsxMjE2LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cgogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmlzUHJldmFsZW50UmVzb3VyY2UobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0
aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZh
bGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjU1LDEyICsxMjI4LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoYwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIHByb2Nlc3MtPmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2luZ2xldG9uKCkuaXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEyNzQsOCArMTI0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50
UmVzb3UKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVS
TCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xMjg5LDEwICsxMjU2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRS
ZXNvdQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJv
Y2Vzcy0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVudCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA0LDEyICsxMjY4LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgICAgICBwcm9jZXNzLT5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTEzMjMsMTAgKzEyODIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFZlcnlQcmV2YWxlbnRSCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzM1LDggKzEyOTEsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5CiAgICAgCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vz
c2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNv
dXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZy
YW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwm
IHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xMzUwLDIyICsxMzA1LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3Vi
ZnJhbWVVbmRlclQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNl
dFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVVJMIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3Vi
RnJhbWVVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5k
ZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0
IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTEzNzksMjMgKzEzMjYsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuZAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1Jl
Z2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2Up
OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmlzUmVnaXN0ZXJlZEFzU3Vi
cmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBz
dWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJM
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJj
ZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0MDksMTAgKzEzNDcsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RU
byhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVS
TCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3Qg
VVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTQyNCwxMiArMTM1OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U3VicmVzb3VyY2VVbmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRp
cmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRp
cmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9w
RnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDQxLDEyICsxMzcxLDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5z
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmxSZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0
ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFt
ZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ1OCwyNSArMTM4MywxNCBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVk
aXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBVUkwmIHVy
bFJlZGlyZWN0ZWRGcm9tLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1Jl
ZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
UmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVj
dGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5n
VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3Rl
ZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0ODgsNDYgKzE0MDIsMjcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlcwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNs
ZWFyUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5jbGVhclByZXZhbGVudFJl
c291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNl
dFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
dWJtaXRUZWxlbWV0cnkoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7Ci0g
ICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnN1Ym1pdFRlbGVtZXRy
eShtX3Nlc3Npb25JRCwgW10geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIFNo
b3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQs
IG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuc2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9k
aWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YVN1bW1hcnkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xNTcwLDIyICsxNDY1LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVD
bGVhckluTWUKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lz
dGVudChtX3Nlc3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5z
Y2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuc2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTU5NCwyNCArMTQ4MSwxMyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljCiAgICAgCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZVN0YXRpc3RpY3NB
bmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKS5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNz
aW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJs
ZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNl
KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzRGF0YWJh
c2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwg
U2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNjIzLDIyICsxNDk5LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
TGFzdFNlZW4oY29uc3QKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldExhc3RT
ZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNv
bmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0luRGF0YWJh
c2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5kb21haW5JREV4aXN0c0luRGF0YWJhc2UobV9zZXNzaW9uSUQsIGRv
bWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBV
UkwmIHRvcEZyYW1lVXJsMSwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDIsIFNlY29uZHMgbGFzdFNl
ZW4sIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBTZWNvbmRzIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb24sIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBib29sIGlzUHJldmFsZW50LCBib29sIGlzVmVy
eVByZXZhbGVudCwgdW5zaWduZWQgZGF0YVJlY29yZHNSZW1vdmVkLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjUwLDEwICsxNTE4LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvcgogCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNW
ZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5tZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJh
bWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxh
c3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlz
R3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNS
ZW1vdmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBi
b29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURh
dGFSZW1vdmFsLCBib29sIGlzUHJldmFsZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjY1LDE4ICsxNTMwLDE0IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVy
YWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVu
dCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBo
YWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWws
IGlzUHJldmFsZW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9v
bCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vz
c2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0
YVJlY29yZHNXZXJlU2Nhbm5lZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY4NCw4ICsxNTQ1LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRJc1J1bm5pbmdSZXNvdQogICAgIHVzZUV4cGxpY2l0SVRQU3RhdGUoKTsK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vz
c2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nlc3NF
bnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
Njk2LDcgKzE1NTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VBY2Nl
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB3ZWJQYWdlLT5wcm9jZXNzKCkucHJvY2Vz
c1Bvb2woKS5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVz
KG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNz
aW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogCkBAIC0xNzA0LDggKzE1
NjQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VyCiB7CiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRz
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29u
ZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzE5LDEwICsxNTc4LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3RpbwogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzM0LDEzICsx
NTkwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhYwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5oYXNIYWRVc2VySW50ZXJh
Y3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2luZ2xldG9uKCkuaGFzSGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5E
YXRhYmFzZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0IFVSTCYgdG9wVXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc1MiwxMyAr
MTYwMiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmwKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWxhdGlvbnNoaXBP
bmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkuaXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTc3MiwxMCArMTYxNiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50
ZXJhY3QKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+Y2xlYXJVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVy
ZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzg5LDEwICsxNjMwLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKAogICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0R3JhbmRmYXRoZXJlZCht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZh
dGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VXNlSVRQ
RGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTgwMSwxMCArMTYzOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0VXNlSVRQRGF0YWJhc2UKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuc2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENy
b3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZnJvbVVS
TCwgY29uc3QgVVJMJiB0b1VSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTgxMyw2MiArMTY0OCwzOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldENyb3NzU2l0ZUxvYWRXCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5zZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9y
VGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBmcm9tVVJM
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRo
TGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVj
b3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnJlc2V0Q3Jvc3NT
aXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNv
b2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGluY2x1ZGVIdHRwT25seUNvb2tp
ZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFn
ZUZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+aGFzTG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmhhc0xvY2FsU3RvcmFnZShtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVk
U2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+aGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIo
ZmFsc2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmhhc0lzb2xhdGVk
U2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3Rp
bmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhl
bmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3Rp
bmcoZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFURk9S
TShDT0NPQSkKQEAgLTE4OTksMTAgKzE3MTAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFRoaXJkUGFydHlDb29rCiAgICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFRoaXJkUGFydHlDb29r
aWVCbG9ja2luZ01vZGUoYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
ICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUaGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNl
dFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50Rm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE5MTAsMTAgKzE3MTgsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0CiAgICAgYXV0byBmbGFnID0gZW5hYmxlZCA/IFdlYkNv
cmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJDb3JlOjpTYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRW5ibGVTYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGlu
ZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkyMSwyMCArMTcyNiwxNCBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgYXV0byBtb2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzIDogV2ViQ29yZTo6Rmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5n
KG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRGaXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
PnNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0VG9TYW1lU2l0
ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmIC8v
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKQEAgLTE5NDMsOCArMTc0Miw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXAKICNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQ
cmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0Q2FjaGVN
YXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZWNvbmRzKTsK
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMTk1NiwyMiArMTc1NCwxMiBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xP
QURfU1RBVElTVElDUykKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJl
c291cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucmVzZXRDYWNoZU1heEFnZUNhcEZv
clByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgogfQogCi1ib29sIFdl
YnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBw
cm9jZXNzUG9vbCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2xEYXRhU3RvcmUg
PSBwcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAgICAgIHJldHVybiBwcm9jZXNz
UG9vbERhdGFTdG9yZSA9PSB0aGlzOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogSGFzaFNldDxS
ZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6
ZV90IGxpbWl0KSBjb25zdAogewogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4g
cHJvY2Vzc1Bvb2xzOwpAQCAtMTk4Niw5ICsxNzc0LDYgQEAgSGFzaFNldDxSZWZQdHI8V2ViUHJv
Y2Vzc1Bvb2w+PiBXZWJzaXRlRAogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uZSBvZiB0aGUgbGVnYWN5IGRhdGEgc3RvcmVzLgog
ICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKCpw
cm9jZXNzUG9vbCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgICAgIHBy
b2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOwogICAgICAgICAgICAgaWYgKHByb2Nlc3NQb29s
cy5zaXplKCkgPT0gbGltaXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTQ4LDggKzE5
MzMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0CiAKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVu
YWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nlc3Np
b25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKGVuYWJsZWQpOwogICAgIFVOVVNFRF9QQVJBTShjb21wbGV0aW9uSGFuZGxlcik7
CkBAIC0yMTY0LDIwICsxOTQ4LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJj
ZUxvYWRTdGEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmlzUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogI2VuZGlmCiAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShib29s
IGVuYWJsZWQpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRBZENsaWNr
QXR0cmlidXRpb25EZWJ1Z01vZGUoZW5hYmxlZCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOwogfQog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIxOTksMjkgKzE5Nzcs
NiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUmVzb3VyY2VMb2FkCiB9CiAjZW5kaWYK
IAotVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gV2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tp
ZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7
Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJD
b3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZUlmKFsm
Y29va2llXShhdXRvJiBwZW5kaW5nQ29va2llKSB7Ci0gICAgICAgIHJldHVybiBwZW5kaW5nQ29v
a2llLmlzS2V5RXF1YWwoY29va2llKTsKLSAgICB9KTsKLSAgICBtX3BlbmRpbmdDb29raWVzLmFk
ZChjb29raWUpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29r
aWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2ll
cy5yZW1vdmUoY29va2llKTsKLX0KLSAgICAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQ
ZW5kaW5nQ29va2llcygpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5jbGVhcigpOwotfQotCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYg
ZnVuY3Rpb24pCiB7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goV1RGTW92ZShmdW5jdGlvbikpOwpA
QCAtMjI0NSw4ICsyMDAwLDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURh
dGFTdAogCiAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3NhcnkoKTsKIAotICAgIHBhcmFt
ZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBwZW5kaW5nQ29va2llcygpOwotCiAgICAgYXV0byByZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlIYW5kbGU7CiAgICAgaWYgKCFyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKQEAgLTIzNDQsNyArMjA5NywxMiBAQCBX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0CiAgICAgcGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
ZW5hYmxlZCA9IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ7CiAjZW5kaWYKICAgICBw
bGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOworICAgIHBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFwcEhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNr
aW5nUGVybWlzc2lvbiA9IGhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lv
bigpOwogCisjaWYgVVNFKFNPVVApCisgICAgV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnNpbmdsZXRvbigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCgpLCBwYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBh
dGgsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlVHlwZSk7CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gcGFyYW1ldGVyczsKIH0KIApA
QCAtMjM5OCwxMCArMjE1Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9y
YWdlRGUKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMjQzOSwzNCArMjE5NCwyMSBAQCBXVEY6OlN0
cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGV2CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6aGFzQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
aGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmhh
c0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jbGVhckFw
cEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNs
ZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEo
VVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFtZSwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
ZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQs
IG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICAgICAgfQotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5h
ZGRTZXNzaW9uKCp0aGlzKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5y
ZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBk
YXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiBQTEFURk9STShD
T0NPQSkKQEAgLTI0ODksNyArMjIzMSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2Fy
ZEFwcEJvdW5kRG8KIAogICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhnbG9iYWxEZWZhdWx0
RGF0YVN0b3JlKCkuZ2V0KCksICphcHBCb3VuZERvbWFpbnMpOwogCi0gICAgZm9yIChhdXRvKiBz
dG9yZSA6IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgZm9yIChhdXRvKiBz
dG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKICAgICAgICAgcHJvcGFnYXRlQXBwQm91
bmREb21haW5zKHN0b3JlLCAqYXBwQm91bmREb21haW5zKTsKIH0KIApAQCAtMjQ5NywxMCArMjIz
OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW4KIHsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5z
ZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBk
b21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogI2VuZGlmCiAKQEAgLTI1MDgsMTYgKzIyNDcsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjp1cGRhdGVCdW5kbGVJZGVudAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVy
KGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJ
ZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1
bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkocmV2aXNpb24gMjY1MjQ5
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgcHVibGljOgogICAgIFdlYnNp
dGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmLCBQQUw6OlNl
c3Npb25JRCk7CiAgICAgfldlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgIHN0YXRpYyBXZWJzaXRl
RGF0YVN0b3JlKiBleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpT
ZXNzaW9uSUQpOworICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9y
ZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgp
IGNvbnN0IHsgcmV0dXJuICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTIy
NiwxNSArMjI2LDggQEAgcHVibGljOgogCiAgICAgRGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UmIGRl
dmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1cm4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFn
ZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sRm9yQ29va2llU3Rv
cmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlBy
b2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBwYXJh
bWV0ZXJzKCk7Ci0KLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5nQ29va2llcygp
IGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUm
KTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7
Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVzKCk7CisgICAgc3RhdGljIFZlY3RvcjxXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMoKTsKIAogICAg
IHZvaWQgZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAKQEAgLTM0Miw3ICsz
MzUsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBT
dHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIFdhbGxUaW1lIG1vZGlmaWVkU2luY2Up
OwogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5
c1N0b3JhZ2VEaXJlY3RvcnksIGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhPiYpOwogCi0gICAgdm9pZCBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOworICAg
IHZvaWQgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICBzdGF0aWMgT3B0aW9uYWw8SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+
IGFwcEJvdW5kRG9tYWluc0lmSW5pdGlhbGl6ZWQoKTsKQEAgLTM4MCw4ICszNzMsNiBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkIHsgdHJ1
ZSB9OwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb2tpZT4gbV9wZW5kaW5nQ29v
a2llczsKLSAgICAKICAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fcHJvY2Vzc2Vz
OwogCiAgICAgYm9vbCBtX2lzSXRwU3RhdGVFeHBsaWNpdGx5U2V0IHsgZmFsc2UgfTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9y
ZVNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCShyZXZpc2lvbiAyNjUyNDkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVT
b3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnBsYXRmb3JtU2V0TmV0d29yCiAgICAgYXV0byYgbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3Bl
cnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQ7CiAKLSAgICBpZiAoYXV0byogcHJvY2Vz
c1Bvb2wgPSBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29v
a2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5j
b29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAgIFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25J
RCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwg
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdl
RW5hYmxlZChib29sIGVuYWJsZWQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGli
L1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAJKHJldmlzaW9uIDI2NTI0OSkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRm
b3JtR2V0TGF1bmNoTwogICAgICAgICBpZiAoIWRhdGFTdG9yZSkgewogICAgICAgICAgICAgLy8g
UHJld2FybWVkIHByb2Nlc3NlcyBkb24ndCBoYXZlIGEgV2Vic2l0ZURhdGFTdG9yZSB5ZXQsIHNv
IHVzZSB0aGUgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlIGZyb20gdGhlIFdlYlByb2Nlc3NQb29s
LgogICAgICAgICAgICAgLy8gVGhlIHByb2Nlc3Mgd29uJ3QgYmUgdXNlZCBpZiBjdXJyZW50IFdl
YnNpdGVEYXRhU3RvcmUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIFdlYlByb2Nlc3NQb29sIHByaW1h
cnkgb25lLgotICAgICAgICAgICAgZGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC0+d2Vic2l0ZURh
dGFTdG9yZSgpOworICAgICAgICAgICAgZGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZSgpLnB0cigpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGRhdGFT
dG9yZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eVNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3Nv
dXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAJKHJldmlzaW9uIDI2NTI0OSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzUG9vbC5oIgogCkBAIC0zNCw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwg
U291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKICAgICBtX2Nv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0
b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0
ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgs
IHN0b3JhZ2VUeXBlKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRD
b29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYg
c3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUmIHN0b3JhZ2VUeXBl
KSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9v
bFNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2Vi
UHJvY2Vzc1Bvb2xTb3VwLmNwcAkocmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NywzMCArMzcsMjQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJh
bWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICBzdXBwbGVtZW50
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoZGVm
YXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJz
LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLmNv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQoKTsKKyAgICAvLyBGSVhNRTogbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBv
bGljeSBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgLy8gRklY
TUU6IG1faWdub3JlVExTRXJyb3JzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFT
dG9yZSBvciByZW1vdmVkLgorICAgIC8vIEZJWE1FOiBtX25ldHdvcmtQcm94eVNldHRpbmdzIHNo
b3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KIAotICAgIHBhcmFtZXRlcnMu
Y29va2llQWNjZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeTsKLSAg
ICBwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1faWdub3JlVExTRXJyb3JzOwogICAgIHBh
cmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExhbmd1YWdlcygpOwotICAgIHBhcmFt
ZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5U2V0dGluZ3M7CiAgICAgcGFyYW1l
dGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IHRydWU7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAgICBt
X2lnbm9yZVRMU0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKLSAgICBpZiAobmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vycm9ycyksIDApOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRJZ25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoY29uc3QgV2ViQ29yZTo6
U291cE5ldHdvcmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykKIHsKICAgICBtX25ldHdvcmtQcm94
eVNldHRpbmdzID0gc2V0dGluZ3M7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3
b3JrUHJveHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fbmV0d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKIH0K
IAogfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjY1MjQ5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMjAtMDgtMDYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5z
ZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBVc2UgYSBOZXR3b3JrUHJvY2Vzc1Byb3h5IHNpbmds
ZXRvbiBpbnN0ZWFkIG9mIG9uZSBwZXIgV2ViUHJvY2Vzc1Bvb2wKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzU0NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29v
a2llVUlEZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0pOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25D
b29raWVVSURlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0pOgorICAgICAgICAoVEVTVCk6CisgICAg
ICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0
QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6
XSk6IERlbGV0ZWQuCisKIDIwMjAtMDgtMDQgIEhlY3RvciBMb3BleiAgPGhlY3Rvcl9pX2xvcGV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgbXlzZWxmIHRvIGNvbnRyaWJ1dG9ycy5qc29uCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVO
YW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSW5kZXhlZERCRmlsZU5hbWUubW0JKHJldmlzaW9uIDI2NTI0OSkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgLSAodm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdL
VXNlckNvbgogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoKQorc3RhdGljIHZvaWQgcnVu
VGVzdChib29sIG9sZEZpbGVTaG91bGRFeGlzdCA9IHRydWUpCiB7CiAgICAgYXV0byBoYW5kbGVy
ID0gYWRvcHROUyhbW0luZGV4ZWREQkZpbGVOYW1lTWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRd
KTsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJh
dGlvbiBhbGxvY10gaW5pdF0pOwpAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0
KCkKICAgICBOU1VSTCAqb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9u
RGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogQCJmaWxlX18wIl07CiAg
ICAgTlNVUkwgKm5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbbmV3VmVyc2lvbkRpcmVj
dG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwogICAgIE5T
VVJMICpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbk9y
aWdpbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6dW51c2VkRGF0YWJh
c2VOYW1lXTsKLSAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMLnBh
dGhdKTsKKyAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZp
bGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMLnBhdGhd
ID09IG9sZEZpbGVTaG91bGRFeGlzdCk7CiAgICAgCiAgICAgLy8gRm9yIGRhdGFiYXNlIHRoYXQg
aXMgb3BlbmVkIGFmdGVyIHVwZ3JhZGUsIGl0cyBmaWxlIHNob3VsZCBvbmx5IGJlIGluIHYxLgog
ICAgIE5TVVJMICpvbGRWZXJzaW9uRXhpc3RpbmdEYXRhYmFzZURpcmVjdG9yeVVSTCA9IFtvbGRW
ZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogZXhp
c3RpbmdEYXRhYmFzZU5hbWVdOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0
ZURpcmVjdG9yaWVzKFN0cmluZyB0ZXMKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJGaWxlTmFt
ZSkKIHsKICAgICBjcmVhdGVEaXJlY3Rvcmllcygibm9uZSIpOwotICAgIHJ1blRlc3QoKTsKKyAg
ICBydW5UZXN0KGZhbHNlKTsKIH0KIAogVEVTVChJbmRleGVkREIsIEluZGV4ZWREQkZpbGVOYW1l
VjApCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCShyZXZpc2lvbiAyNjUyNDkp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsOSBAQCBURVNUKFJlc291
cmNlTG9hZFN0YXRpc3RpY3MsIEdyYW5kZmF0aGVyCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6
W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImFib3V0
OmJsYW5rIl1dXTsKIAogICAgIGlmIChpc0lUUERhdGFiYXNlRW5hYmxlZCgpKSB7CisgICAgICAg
IFdURkxvZ0Fsd2F5cygiV0FJVCAxIik7CiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZ3JhbmRmYXRoZXJlZEZsYWcpOworICAgICAgICBXVEZMb2dBbHdheXMoIldBSVQgMSIpOwog
CiAgICAgICAgIC8vIFNpbmNlIHRoZSBkYXRhYmFzZSBzdG9yZSBpcyBlbmFibGVkLCB3ZSBuZWVk
IHRvIGRpc2FibGUgaXQgdG8gdGVzdCB0aGlzIGZ1bmN0aW9uYWxpdHkgd2l0aCB0aGUgcGxpc3Qu
CiAgICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIE5ldHdvcmtQcm9jZXNzIHVwIGFuZCBydW5u
aW5nIHdpdGggSVRQIGVuYWJsZWQuIFdlIG5vdyBtYWtlIGFub3RoZXIgY2FsbCBpbml0aWFsaXpp
bmcKQEAgLTEzNywxOCArMTM5LDI0IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgR3Jh
bmRmYXRoZXIKICAgICAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKICAgICAgICAgfV07CiAKKyAg
ICAgICAgV1RGTG9nQWx3YXlzKCJXQUlUIDIiKTsKICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lRmxhZyk7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiV0FJVCAyIik7CiAgICAg
fQogCisgICAgV1RGTG9nQWx3YXlzKCJXQUlUIDMiKTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmdyYW5kZmF0aGVyZWRGbGFnKTsKKyAgICBXVEZMb2dBbHdheXMoIldBSVQgMyIpOwog
CiAgICAgLy8gU3BpbiB0aGUgcnVubG9vcCB1bnRpbCB0aGUgcmVzb3VyY2UgbG9hZCBzdGF0aXN0
aWNzIGZpbGUgaGFzIHdyaXR0ZW4gdG8gZGlzay4KICAgICAvLyBJZiB0aGUgdGVzdCBlbnRlcnMg
YSBzcGluIGxvb3AgaGVyZSwgaXQgaGFzIGZhaWxlZC4KKyAgICBXVEZMb2dBbHdheXMoIldBSVQg
NCIpOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlmIChbW05TRmlsZU1hbmFnZXIgZGVm
YXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxKTsKICAg
ICB9CisgICAgV1RGTG9nQWx3YXlzKCJXQUlUIDQiKTsKIAogICAgIGdyYW5kZmF0aGVyZWRGbGFn
ID0gZmFsc2U7CiAgICAgZG9uZUZsYWcgPSBmYWxzZTsKQEAgLTE1Niw3ICsxNjQsOSBAQCBURVNU
KFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIEdyYW5kZmF0aGVyCiAgICAgICAgIGRvbmVGbGFnID0g
dHJ1ZTsKICAgICB9XTsKIAorICAgIFdURkxvZ0Fsd2F5cygiV0FJVCA1Iik7CiAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CisgICAgV1RGTG9nQWx3YXlzKCJXQUlUIDUi
KTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxMCk7CiAKICAgICAvLyBU
aGUgd2Vic2l0ZSBkYXRhIHN0b3JlIHJlbW92ZSBzaG91bGQgaGF2ZSBjb21wbGV0ZWQsIGJ1dCBz
aW5jZSB3ZSByZW1vdmVkIGFsbCBvZiB0aGUgZGF0YSB0eXBlcyB0aGF0IGFyZSBtb25pdG9yZWQg
YnkgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzLApAQCAtMTcxLDE2ICsxODEsMjIgQEAgVEVTVChS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBHcmFuZGZhdGhlcgogCiAgICAgLy8gU2luY2Ugd2UgZGlk
IG5vdCByZW1vdmUgZXZlcnkgZGF0YSB0eXBlIGNvdmVyZWQgYnkgcmVzb3VyY2UgbG9hZCBzdGF0
aXN0aWNzLCB3ZSBkbyBleHBlY3QgdGhhdCBncmFuZGZhdGhlcmluZyB0b29rIHBsYWNlIGFnYWlu
LgogICAgIC8vIElmIHRoZSB0ZXN0IGhhbmdzIHdhaXRpbmcgb24gZWl0aGVyIG9mIHRoZXNlIGNv
bmRpdGlvbnMsIGl0IGhhcyBmYWlsZWQuCisgICAgV1RGTG9nQWx3YXlzKCJXQUlUIDYiKTsKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdyYW5kZmF0aGVyZWRGbGFnKTsKKyAgICBXVEZM
b2dBbHdheXMoIldBSVQgNiIpOworICAgIFdURkxvZ0Fsd2F5cygiV0FJVCA3Iik7CiAgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CisgICAgV1RGTG9nQWx3YXlzKCJXQUlU
IDciKTsKIAogICAgIC8vIFNwaW4gdGhlIHJ1bmxvb3AgdW50aWwgdGhlIHJlc291cmNlIGxvYWQg
c3RhdGlzdGljcyBmaWxlIGhhcyB3cml0dGVuIHRvIGRpc2suCiAgICAgLy8gSWYgdGhlIHRlc3Qg
ZW50ZXJzIGEgc3BpbiBsb29wIGhlcmUsIGl0IGhhcyBmYWlsZWQuCisgICAgV1RGTG9nQWx3YXlz
KCJXQUlUIDgiKTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBpZiAoW1tOU0ZpbGVNYW5h
Z2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOmZpbGVVUkwucGF0aF0pCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3Ao
MSk7CiAgICAgfQorICAgIFdURkxvZ0Fsd2F5cygiV0FJVCA4Iik7CiB9CiAKIFRFU1QoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcywgR3JhbmRmYXRoZXJDYWxsYmFja0RhdGFiYXNlKQpJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UTFNEZXByZWNhdGlvbi5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RMU0RlcHJl
Y2F0aW9uLm1tCShyZXZpc2lvbiAyNjUyNDkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyAr
MTc2LDggQEAgVEVTVChUTFNWZXJzaW9uLCBOZXR3b3JrU2Vzc2lvbikKICAgICB9OwogICAgIHsK
ICAgICAgICAgVENQU2VydmVyIHNlcnZlcihUQ1BTZXJ2ZXI6OlByb3RvY29sOjpIVFRQUywgVENQ
U2VydmVyOjpyZXNwb25kV2l0aE9LLCB0bHMxXzEpOwotICAgICAgICBhdXRvIHdlYlZpZXcgPSBt
YWtlV2ViVmlld1dpdGgoW1dLV2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3JlXSk7Cisg
ICAgICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0g
W1tbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxl
YXNlXTsKKyAgICAgICAgYXV0byB3ZWJWaWV3ID0gbWFrZVdlYlZpZXdXaXRoKFtbW1dLV2Vic2l0
ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSBh
dXRvcmVsZWFzZV0pOwogICAgICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiaHR0cHM6Ly8xMjcuMC4wLjE6JWQvIiwgc2VydmVyLnBvcnQoKV1dXV07CiAgICAg
ICAgIFtkZWxlZ2F0ZSB3YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAgICAgfQpAQCAtMjAy
LDcgKzIwMyw4IEBAIFRFU1QoVExTVmVyc2lvbiwgTmV0d29ya1Nlc3Npb24pCiAgICAgICAgIFRD
UFNlcnZlciBzZXJ2ZXIoVENQU2VydmVyOjpQcm90b2NvbDo6SFRUUFMsIFtdKFNTTCAqc3NsKSB7
CiAgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc3NsKTsKICAgICAgICAgfSwgdGxzMV8xKTsKLSAg
ICAgICAgYXV0byB3ZWJWaWV3ID0gbWFrZVdlYlZpZXdXaXRoKFtXS1dlYnNpdGVEYXRhU3RvcmUg
ZGVmYXVsdERhdGFTdG9yZV0pOworICAgICAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbiAqY29uZmlndXJhdGlvbiA9IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGF1dG8gd2ViVmlldyA9IG1ha2VX
ZWJWaWV3V2l0aChbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3Vy
YXRpb246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdKTsKICAgICAgICAgW3dlYlZpZXcgbG9h
ZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImh0dHBzOi8vMTI3LjAuMC4xOiVkLyIsIHNl
cnZlci5wb3J0KCldXV1dOwogICAgICAgICBbZGVsZWdhdGUgd2FpdEZvckRpZEZhaWxQcm92aXNp
b25hbE5hdmlnYXRpb25dOwogICAgIH0KQEAgLTQzOSw2ICs0NDEsMTYgQEAgVEVTVChUTFNWZXJz
aW9uLCBCYWNrRm9yd2FyZEhhc09ubHlTZWN1cgogICAgIEVYUEVDVF9GQUxTRShbd2ViVmlldyBo
YXNPbmx5U2VjdXJlQ29udGVudF0pOwogfQogCitURVNUKFdlYktpdCwgVGVzdFNlcnZlcikKK3sK
KyAgICBIVFRQU2VydmVyIHNlcnZlcih7CisgICAgICAgIHsgIi8iLCB7ICI8aWZyYW1lIHNyYz1p
ZnJhbWUuaHRtbD48L2lmcmFtZT4iIH19LAorICAgICAgICB7ICIvaWZyYW1lLmh0bWwiLCB7IDMw
MSwge3sgIkxvY2F0aW9uIiwgIi9yZWRpcmVjdFRhcmdldCIgfX0gfSB9LAorICAgICAgICB7ICIv
cmVkaXJlY3RUYXJnZXQiLCB7IHt7ICJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vb2N0ZXQt
c3RyZWFtIiB9fSwgInRlc3RkYXRhIiB9fSwKKyAgICB9KTsKKyAgICBOU0xvZyhAImh0dHA6Ly8x
MjcuMC4wLjE6JWQvIiwgc2VydmVyLnBvcnQoKSk7CisgICAgQ0ZSdW5Mb29wUnVuKCk7Cit9CiAj
ZW5kaWYgLy8gSEFWRShORVRXT1JLX0ZSQU1FV09SSykgJiYgSEFWRShUTFNfUFJPVE9DT0xfVkVS
U0lPTl9UKQogCiB9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dLSFRUUENvb2tpZVN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0JKHJldmlzaW9uIDI2NTI0OSkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3Rv
cmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3OSw4ICs0NzksNiBAQCAtICh2b2lkKXdlYlZpZXc6
KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuCiB9CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJ
IHByb2Nlc3Mgc2hvdWxkIGJlIHVzaW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3
b3JrIHByb2Nlc3MgZm9yIGRlZmF1bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVt
IGNsYXNzIFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBy
dW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNz
UHJld2FybWluZyBzaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZykKIHsKQEAgLTU4OSwyMCAr
NTg3LDY2IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG8KICAgICBy
dW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNz
UHJld2FybWluZzo6WWVzKTsKIH0KIAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQogQGludGVy
ZmFjZSBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0
ZT4KKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MOworLSAoTlNTdHJpbmcgKil3YWl0Rm9y
TWVzc2FnZTsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVs
ZWdhdGUKK0BpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHsKKyAg
ICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9tZXNzYWdlOworfQorCiAtICh2b2lkKXdlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNT
dHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAg
RVhQRUNUX1NUUkVRKCJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIsIG1lc3NhZ2UuVVRG
OFN0cmluZyk7CisgICAgX21lc3NhZ2UgPSBtZXNzYWdlOwogICAgIGZpbmlzaGVkID0gdHJ1ZTsK
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQorCistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNz
YWdlCit7CisgICAgd2hpbGUgKCFfbWVzc2FnZSkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6c3BpblJ1bkxvb3AoKTsKKyAgICByZXR1cm4gX21lc3NhZ2UuYXV0b3JlbGVhc2UoKTsKK30K
KworLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUwKK3sKKyAgICByZXR1cm4gQCI8c2NyaXB0
PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAw
OyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJp
bSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0
PiI7Cit9CisKIEBlbmQKIAorVEVTVChXZWJLaXQsIFdLSFRUUENvb2tpZVN0b3JlTXVsdGlwbGVW
aWV3cykKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MSA9IFtbVGVzdFdLV2ViVmlldyBu
ZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzEgc3luY2hyb25vdXNseUxvYWRIVE1MU3Ry
aW5nOkAic3RhcnQgbmV0d29yayBwcm9jZXNzIl07CisKKyAgICBOU0hUVFBDb29raWUgKnNlc3Np
b25Db29raWUgPSBbTlNIVFRQQ29va2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOkB7CisgICAgICAg
IE5TSFRUUENvb2tpZVBhdGg6IEAiLyIsCisgICAgICAgIE5TSFRUUENvb2tpZU5hbWU6IEAiU2Vz
c2lvbkNvb2tpZU5hbWUiLAorICAgICAgICBOU0hUVFBDb29raWVWYWx1ZTogQCJDb29raWVWYWx1
ZSIsCisgICAgICAgIE5TSFRUUENvb2tpZURvbWFpbjogQCIxMjcuMC4wLjEiLAorICAgIH1dOwor
CisgICAgX19ibG9jayBib29sIHNldENvb2tpZURvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldzEu
Y29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlLmh0dHBDb29raWVTdG9yZSBzZXRDb29raWU6
c2Vzc2lvbkNvb2tpZSBjb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBzZXRDb29raWVEb25l
ID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnNldENvb2tp
ZURvbmUpOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW0NoZWNrU2Vzc2lvbkNvb2tp
ZVVJRGVsZWdhdGUgbmV3XSk7CisgICAgW3dlYlZpZXcxIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUu
Z2V0KCldOworCisgICAgW3dlYlZpZXcxIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENv
b2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4x
Il1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vz
c2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKKworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZp
ZXcyID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MiBz
ZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIgbG9hZEhUTUxTdHJp
bmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3
YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworfQorCiBU
RVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9u
KQogewogICAgIFJldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IGVwaGVtZXJhbFN0b3JlV2l0
aENvb2tpZXMgPSBbV0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOwpA
QCAtNjI3LDkgKzY3MSw4IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNz
UG8KICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKICAgICBmaW5pc2hl
ZCA9IGZhbHNlOwogICAgIAotICAgIE5TU3RyaW5nICphbGVydENvb2tpZUhUTUwgPSBAIjxzY3Jp
cHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9
IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50
cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3Jp
cHQ+IjsKLSAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzphbGVydENvb2tpZUhUTUwgYmFzZVVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07Ci0gICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJp
bmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3
YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOwogfQogCiBz
dGF0aWMgYm9vbCBhcmVDb29raWVzRXF1YWwoTlNIVFRQQ29va2llICpmaXJzdCwgTlNIVFRQQ29v
a2llICpzZWNvbmQpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gMjY1MjQ5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNzQsOSArMzE3NCw4IEBAIFBsYXRmb3Jt
V2ViVmlldyogVGVzdENvbnRyb2xsZXI6OnBsYXRmb3IKICAgICByZXR1cm4gbmV3IFBsYXRmb3Jt
V2ViVmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0KIAotV0tDb250ZXh0UmVmIFRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdL
Q29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZpZ3VyYXRpb24pCitXS0NvbnRleHRS
ZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRSZWYgY29u
dGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsKLSAgICBXS0NvbnRleHRTZXRQcmlt
YXJ5V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0V2Vic2l0ZURhdGFTdG9yZSgpKTsK
ICAgICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406105</attachid>
            <date>2020-08-06 13:13:03 -0700</date>
            <delta_ts>2020-08-11 16:51:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20200806131302.patch</filename>
            <type>text/plain</type>
            <size>206520</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBAQAorMjAyMC0wOC0wNiAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBhIE5ldHdv
cmtQcm9jZXNzUHJveHkgc2luZ2xldG9uIGluc3RlYWQgb2Ygb25lIHBlciBXZWJQcm9jZXNzUG9v
bAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToK
KyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHA6CisgICAgICAgIChBUEk6OkhU
VFBDb29raWVTdG9yZTo6SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tp
ZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3Jl
Ojpjb29raWVzKToKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKToK
KyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoQVBJOjpI
VFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAgICAoQVBJ
OjpIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQpOgorICAgICAgICAoQVBJOjpIVFRQ
Q29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lzdGVyRm9yTmV3UHJv
Y2Vzc1Bvb2xOb3RpZmljYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSUhUVFBDb29raWVTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcik6CisgICAgICAgIChX
S0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sLm1tOgorICAgICAgICAoLVtXS1Byb2Nlc3NQb29sIF9zZXRDb29raWVBY2Nl
cHRQb2xpY3k6XSk6CisgICAgICAgICh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kpOiBEZWxldGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tp
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eU1hcDo6ZG93bmxv
YWRGaW5pc2hlZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OnN0YXJ0TG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNN
b2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRB
bGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpw
cm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250
ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbCk6CisgICAgICAg
IChXZWJLaXQ6Om1fd2ViUHJvY2Vzc0NhY2hlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6On5XZWJQcm9jZXNzUG9vbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0
Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9O
ZXR3b3JraW5nUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVh
ckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzRGlkUmVzdW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyTGVnYWN5UHJpdmF0ZUJy
b3dzaW5nTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFs
bG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRXZWJQcm9jZXNzSGFzVXBsb2Fkcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpjbGVhcldlYlByb2Nlc3NIYXNVcGxv
YWRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMjAtMDgtMDMgIFdl
bnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgLWFj
Y2Vzc29yeURvbmUgdG8gYmx1ciB0aGUgZm9jdXNlZCBlbGVtZW50IG9uIGlQYWQgd2hlbiBBdXRv
RmlsbGluZyBzdHJvbmcgcGFzc3dvcmRzCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkocmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0NSwyOSArMzQ1LDE5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3
b3JrUHIKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJzLmVu
YWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5zaW9u
Ojpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRl
cnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6
Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6
Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBwYXJh
bWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQgPSBk
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7Cisg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShkYXRhU3RvcmVQYXJh
bWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFk
ZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVy
cy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0
eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJl
Y3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0
YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAg
ICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQorICAgICAgICBt
X3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmxv
Y2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6
ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUoZGF0YVN0b3JlUGFy
YW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBib29sIHNlcnZpY2VX
b3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSB0cnVlOwotICAgIGFkZFNlcnZp
Y2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUocGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVycy5zZXJ2aWNl
V29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRk
U2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUoZGF0YVN0b3Jl
UGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgZGF0YVN0b3Jl
UGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNzaW9uID0gbmV0
d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAgYXV0
byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdvcmtTdG9yYWdl
U2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgZGVmYXVsdFN0
b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAgICB9CiAKICAgICBmb3IgKGF1dG8m
IHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVtZW50
LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNDI3LDEyICs0MTcsNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNs
ZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmNy
ZWRlbnRpYWxTdG9yYWdlKCkuY2xlYXJDcmVkZW50aWFscygpOwotICAgIGlmIChhdXRvKiBuZXR3
b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpKQotICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+Y2xlYXJDcmVkZW50aWFscygp
OwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KICAgICBmb3JFYWNo
TmV0d29ya1Nlc3Npb24oW10gKGF1dG8mIG5ldHdvcmtTZXNzaW9uKSB7CiAgICAgICAgIGlmIChh
dXRvIHN0b3JhZ2VTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24ubmV0d29ya1N0b3JhZ2VTZXNzaW9u
KCkpCiAgICAgICAgICAgICBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVudGlhbFN0b3JhZ2UoKS5jbGVh
ckNyZWRlbnRpYWxzKCk7CkBAIC01MTIsOCArNDk2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
ZW5zdXJlU2Vzc2lvbihjb25zdAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihj
b25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3
b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSkKICNlbmRpZgogewotICAg
IEFTU0VSVChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7
Ci0KICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy5hZGQoc2Vz
c2lvbklELCBudWxscHRyKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAg
ICByZXR1cm47CkBAIC01MjgsNyArNTEwLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJl
U2Vzc2lvbihjb25zdAogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0g
bWFrZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlQ2Fu
b25pY2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChzZXNzaW9uSUQu
aXNFcGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENGKGNyZWF0ZVBy
aXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBlbHNlCisgICAg
ZWxzZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
CiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpjcmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkp
OwogCiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQ
SSgpKSB7CkBAIC01NTEsMjEgKzUzMywxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb29raWVB
Y2NlcHRQb2xpY3lDCiAKIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogTmV0d29ya1By
b2Nlc3M6OnN0b3JhZ2VTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpIGNv
bnN0CiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKQotICAgICAgICByZXR1cm4gJmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwogICAgIHJl
dHVybiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMuZ2V0KHNlc3Npb25JRCk7CiB9CiAKLVdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdl
U2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Np
b24pCi0gICAgICAgIG1fZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHBsYXRmb3JtQ3Jl
YXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgcmV0dXJuICptX2RlZmF1bHROZXR3b3Jr
U3RvcmFnZVNlc3Npb247Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3Jr
U3RvcmFnZVNlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mKT4mIGZ1bmN0b3IpCiB7Ci0gICAgZnVuY3RvcihkZWZhdWx0U3RvcmFnZVNlc3Np
b24oKSk7CiAgICAgZm9yIChhdXRvJiBzdG9yYWdlU2Vzc2lvbiA6IG1fbmV0d29ya1N0b3JhZ2VT
ZXNzaW9ucy52YWx1ZXMoKSkKICAgICAgICAgZnVuY3Rvcigqc3RvcmFnZVNlc3Npb24pOwogfQpJ
bmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAko
cmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQo
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNv
bnN0OwotICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNz
aW9uSUQmLCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0z
NjksNyArMzY4LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
PiBwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9p
ZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYpOwogCkBAIC01NDYsNyArNTQ0LDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8
UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29y
a1Nlc3Npb25zOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7
Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPiBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFn
ZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzOjplCiAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgbmV0d29ya0FUU0NvbnRleHQuZ2V0
KCkpOwogICAgIGVuY29kZXIgPDwgc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7CiAjZW5kaWYKLSAg
ICBlbmNvZGVyIDw8IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGVuY29kZXIgPDwg
ZGF0YVN0b3JlUGFyYW1ldGVyczsKICNpZiBVU0UoU09VUCkKICAgICBlbmNvZGVyIDw8IGNvb2tp
ZUFjY2VwdFBvbGljeTsKICAgICBlbmNvZGVyIDw8IGlnbm9yZVRMU0Vycm9yczsKQEAgLTEyMSwx
MSArMTIxLDExIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmQKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSAgICBPcHRpb25hbDxXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycz4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgZGVjb2RlciA+
PiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVyczsKLSAgICBpZiAoIWRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzKQorICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cz4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZGVjb2RlciA+PiBkYXRhU3RvcmVQYXJhbWV0
ZXJzOworICAgIGlmICghZGF0YVN0b3JlUGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJlc3VsdC5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyA9IFdURk1vdmUoKmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKKyAgICByZXN1bHQuZGF0YVN0b3JlUGFyYW1ldGVycyA9
IFdURk1vdmUoKmRhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAjaWYgVVNFKFNPVVApCiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29va2llQWNjZXB0UG9saWN5KSkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMgCiAgICAgYm9vbCBzdG9yYWdlQWNjZXNzQVBJRW5hYmxlZDsKICNlbmRpZgog
Ci0gICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnM7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkYXRhU3RvcmVQYXJh
bWV0ZXJzOwogICAgIAogI2lmIFVTRShTT1VQKQogICAgIFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5IHsgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBv
bGljeTo6QWx3YXlzQWNjZXB0IH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAy
NjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2ll
TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OnNldEhUVFBDb29raWVBY2NlCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6
Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGNvbXBsZXRpb25I
YW5kbGVyKG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jb29raWVBY2NlcHRQb2xp
Y3koKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9wcm9jZXNzLnN0b3JhZ2VTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpLT5jb29raWVBY2NlcHRQb2xpY3koKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQkocmV2
aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3
b3JrUHJvY2Vzc0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4NSw2IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KICAgICBTYW5kYm94RXh0ZW5zaW9u
Ojpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHko
cGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAg
IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLnBhcmVudEJ1
bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9DRk5ldHdvcmtTZXRB
VFNDb250ZXh0KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkpOwpAQCAtMTE0LDEx
ICsxMTEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiAgICAg
W05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vz
czo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5l
dHdvcmtQcm9jZXNzOjpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYg
VVNFKFNPVVJDRV9BUFBMSUNBVElPTl9BVURJVF9EQVRBKQpJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAJ
KHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9O
ZXR3b3JrUHJvY2Vzc0N1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSArMzksNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOCiB7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpw
bGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1ha2VVbmlxdWU8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dT
cGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2Vy
dGlmaWNhdGVJbmZvLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtp
bmdDb250ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
bWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQko
d29ya2luZyBjb3B5KQpAQCAtNTUsMTUgKzU1LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQ6OmVuc3VyZVdlYnMKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1h
bmVudGx5KHBhcmFtZXRlcnMuY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCiAg
ICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IHVpUHJvY2Vzc0Nvb2tpZVN0b3Jh
Z2U7Ci0gICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSAmJiAhcGFyYW1ldGVycy51aVBy
b2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci5pc0VtcHR5KCkpCisgICAgaWYgKCFzZXNzaW9u
SUQuaXNFcGhlbWVyYWwoKSAmJiAhcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRl
bnRpZmllci5pc0VtcHR5KCkgJiYgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
c2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCiAgICAgICAg
IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UgPSBjb29raWVTdG9yYWdlRnJvbUlkZW50aWZ5aW5nRGF0
YShwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyKTsKIAogICAgIG5l
dHdvcmtQcm9jZXNzLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIG1ha2VTdHJp
bmcoYmFzZSwgJy4nLCBzZXNzaW9uSUQudG9VSW50NjQoKSksIFdURk1vdmUodWlQcm9jZXNzQ29v
a2llU3RvcmFnZSkpOwogCi0gICAgYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtQcm9jZXNzLnN0b3Jh
Z2VTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjb29raWUgOiBwYXJh
bWV0ZXJzLnBlbmRpbmdDb29raWVzKQotICAgICAgICBzZXNzaW9uLT5zZXRDb29raWUoY29va2ll
KTsKLQogICAgIG5ldHdvcmtQcm9jZXNzLnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vz
c2lvbjo6Y3JlYXRlKG5ldHdvcmtQcm9jZXNzLCBXVEZNb3ZlKHBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzKSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAkocmV2aXNpb24g
MjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9j
ZXNzU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCwxMSArMTQ0LDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTgogICAgIH0pOwogfQogCi1zdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBt
YWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9y
ZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAgICBTb3VwTmV0d29ya1Nlc3Np
b246OnNldFNob3VsZElnbm9yZVRMU0Vycm9ycyhpZ25vcmVUTFNFcnJvcnMpOwpJbmRleDogU291
cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNw
cAkocmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsOSBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUoCiAgICAgZW5jb2RlciA8PCBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NDb29raWVTdG9y
YWdlSWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9u
SGFuZGxlOwotICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nvb2tpZXM7CiAKICNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKICAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA8
PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKQEAgLTgzLDEyICs3OSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzPiBXZWIKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJz
LmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3RvcmFn
ZVBhdGhFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgT3B0aW9uYWw8VmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4+IHBlbmRpbmdDb29raWVzOwotICAgIGRlY29kZXIgPj4gcGVuZGluZ0Nvb2tpZXM7Ci0g
ICAgaWYgKCFwZW5kaW5nQ29va2llcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gV1RGTW92ZSgqcGVuZGluZ0Nvb2tpZXMpOwot
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgT3B0aW9uYWw8U3RyaW5nPiBpbmRl
eGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgZGVjb2RlciA+PiBpbmRleGVkRGF0YWJhc2VEaXJl
Y3Rvcnk7CkBAIC0xMDEsMTQgKzkxLDYgQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM+IFdlYgogICAgIGlmICghaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBpbmRleGVkRGF0YWJhc2VU
ZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IGluZGV4ZWRE
YXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmICghaW5kZXhl
ZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZVRlbXBCbG9i
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDE1ICs1MSwxMSBAQCBzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgewogCiAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyOwogICAg
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRs
ZTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5kaW5nQ29va2llczsKICAgICBOZXR3
b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7CiAK
ICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBTdHJpbmcgaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5h
Z2VyUHJveHkuY3BwCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0eU9yaWdpbi5o
IgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3b3Jr
UHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCiAjaW5jbHVk
ZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdl
clByb3h5TWVzc2FnZXMuaCIKQEAgLTM5LDIwICs0MCwxNSBAQAogbmFtZXNwYWNlIFdlYktpdCB7
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29va2llTWFuYWdl
clByb3h5OjpzdXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHkmIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkKIHsKLSAgICByZXR1cm4gIldlYkNvb2tpZU1hbmFn
ZXJQcm94eSI7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4gbWFuYWdlcjsKKyAgICByZXR1cm4gbWFuYWdlcjsKIH0KIAotUmVmPFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4gV2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHBy
b2Nlc3NQb29sKQorV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHko
KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94eShwcm9j
ZXNzUG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJDb250ZXh0U3VwcGxl
bWVudChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVudDo6cHJvY2Vzc1Bv
b2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
clByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViQ29va2llTWFu
YWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KCkKQEAgLTY1LDU5ICs2MSwyNSBAQCB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZUNsCiAgICAgbV9jbGllbnQuaW5p
dGlhbGl6ZShjbGllbnQpOwogfQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3Rv
cjxPYnNlcnZlcio+IG9ic2VydmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9j
b29raWVPYnNlcnZlcnMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6
IG9ic2VydmVyU2V0KQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0g
ICAgfQotCi0gICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2Jz
ZXJ2ZXItPm1hbmFnZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVy
cy5pc0VtcHR5KCkpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0Rp
ZENsb3NlKFdlYlByb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5Ojpwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAg
QVBJOjpPYmplY3Q6OnJlZigpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVy
ZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19
Ci0KIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0
cmluZz4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0
d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3
b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OkdldEhvc3RuYW1lc1dpdGhDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBob3N0bmFtZXMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxl
dGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENv
b2tpZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpk
ZWxldGVDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUmIGNvb2tp
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAg
YXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBbY2Fs
bGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbildKCkgbXV0YWJsZSB7CiAg
ICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTEyNSw0MiArODcsNDIgQEAg
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBXYWxsVGltZSB0aW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3Mg
PSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENv
b2tpZXNNb2RpZmllZFNpbmNlKHNlc3Npb25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Cisg
ICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OlNldENvb2tpZShzZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tp
ZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2ll
cywgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgbWFpbkRvY3VtZW50VVJMLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3Jr
UHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0
byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAg
ICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlNldENvb2tpZXMoc2Vzc2lvbklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVS
TCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6Z2V0QWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsK
LSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92
ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikK
IHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQp
CiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGlu
Z0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nv
b2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
ewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJ
Zk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tp
ZUNoYW5nZXMoc2Vzc2lvbklEKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNo
YW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
ZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV1RGOjpG
dW5jdGlvbjx2b2lkICgpPiYmIGNhbGxiYWNrKQpAQCAtMjExLDIxICsxNzMsMTMgQEAgdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OmNvb2tpZXNEaWRDaAogCiB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwgSFRUUENv
b2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxs
YmFja0Z1bmN0aW9uKQogewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmICghcHJvY2Vzc1Bv
b2woKS0+aXNVc2luZ1Rlc3RpbmdOZXR3b3JrU2Vzc2lvbigpKQotICAgICAgICBwZXJzaXN0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpOwotI2VuZGlmCi0jaWYgVVNFKFNPVVApCi0gICAg
cHJvY2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsK
LSNlbmRpZgotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwogfQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4mJiBjYWxs
YmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wo
KS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSgpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIH0KIApJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgJKHJldmlz
aW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMSArNTYsOSBAQCB0eXBlZGVmIEdlbmVyaWND
YWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyCiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxXZWJDb3Jl
OjpIVFRQQ29va2llQWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0UG9saWN5Q2FsbGJhY2s7
CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiY+
IEdldENvb2tpZXNDYWxsYmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVi
bGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHB1
YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7
CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQ
STo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNl
aXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7
Ci0KLSAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlByb2Nl
c3NQb29sKik7CisgICAgc3RhdGljIFdlYkNvb2tpZU1hbmFnZXJQcm94eSYgc2luZ2xldG9uKCk7
CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdlclByb3h5KCk7CiAKICAgICB2b2lkIGluaXRp
YWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSopOwpAQCAtMTA0LDE3
ICsxMDIsMTEgQEAgcHVibGljOgogICAgIHVzaW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsKIAogcHJp
dmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBX
ZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKKyAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8V2ViQ29v
a2llTWFuYWdlclByb3h5PjsKIAogICAgIHZvaWQgY29va2llc0RpZENoYW5nZShQQUw6OlNlc3Np
b25JRCk7CiAKLSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAotICAgIHZvaWQgcHJvY2Vzc1Bv
b2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShXZWJQcm9j
ZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJv
Y2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJDb250ZXh0U3VwcGxlbWVudCgp
IG92ZXJyaWRlOwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRl
OwotCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTIwLDYgKzIwLDYgQEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAot
bWVzc2FnZXMgLT4gV2ViQ29va2llTWFuYWdlclByb3h5IHsKK21lc3NhZ2VzIC0+IFdlYkNvb2tp
ZU1hbmFnZXJQcm94eSBOb3RSZWZDb3VudGVkIHsKICAgICBDb29raWVzRGlkQ2hhbmdlKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE4NywxMSArMzE4Nyw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBCb3VuZE0KIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJvY2VzcygpCiB7
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNz
YWdlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVu
dCgpLCAwKTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1l
bnQoKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtMzIwMCwxMyArMzE5Niw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnQKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAm
JiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpDbGVhclNlcnZpY2VXb3Jr
ZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3Nh
Z2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1l
bnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCks
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CiAjZW5kaWYKQEAgLTk4OTksNTggKzk4ODksMjcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN5
c3RlbVByZXZpZXdBY3Rpb25UcgogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZHVtcEFkQ2xpY2tBdHRy
aWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+
cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1By
b2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklE
KCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBt
X3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAo
IW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0gZWxzZQotICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0
dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmli
dXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3Rpbmco
bV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tB
dHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rp
bmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9j
ZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNr
QXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNl
c3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxG
b3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNr
QXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0g
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYg
KCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBu
ZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
fQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBp
cmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCShyZXZpc2lv
biAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzMiw2ICsyMzIsMTEgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5n
LCBBU0NJSUNhc2VJbnNlbnNpdAogICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+
IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQor
eworICAgIHJldHVybiBjb3B5VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90
b2NvbEhhbmRsZXJzKCkpOworfQorCiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJ
OjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2NvbmZp
Z3VyYXRpb24oY29uZmlndXJhdGlvbi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdlR3JvdXAo
V2ViUGFnZUdyb3VwOjpjcmVhdGUoKSkKQEAgLTIzOSw3ICsyNDQsNiBAQCBXZWJQcm9jZXNzUG9v
bDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jCiAgICAgLCBtX2F1dG9tYXRpb25DbGllbnQobWFr
ZVVuaXF1ZTxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2FkQ2xpZW50
KG1ha2VVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlzdG9yeUNs
aWVudChtYWtlVW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkpCi0gICAg
LCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRM
aW5rU3RvcmU6OmNyZWF0ZSgpKQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGlnaFBlcmZv
cm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFw
aGljc1VzYWdlU2FtcGxlcj4oKnRoaXMpKQpAQCAtMjY3LDkgKzI3MSw2IEBAIFdlYlByb2Nlc3NQ
b29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2MKICNlbmRpZgogICAgIH0pOwogCi0gICAgaWYg
KCFtX3dlYnNpdGVEYXRhU3RvcmUgJiYgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0
RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpOwotCiAgICAgZm9yIChhdXRvJiBz
Y2hlbWUgOiBtX2NvbmZpZ3VyYXRpb24tPmFsd2F5c1JldmFsaWRhdGVkVVJMU2NoZW1lcygpKQog
ICAgICAgICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNBbHdheXNSZXZhbGlkYXRlZC5hZGQoc2NoZW1l
KTsKIApAQCAtMjg1LDcgKzI4Niw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChB
UEk6OlByb2MKICAgICBhZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29s
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIAogICAgIC8vIE5PVEU6IFRoZXNlIHN1
Yi1vYmplY3RzIG11c3QgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVjZWl2ZXJNYXAu
LgotICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1
cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVu
dDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJ
T04pCkBAIC0zNDIsOSArMzQyLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6On5XZWJQcm9jZXNzUG9vbCgp
CiAgICAgcHJvY2Vzc1Bvb2xDb3VudGVyLmRlY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2h1dERvd25Qcm9j
ZXNzKCk7Ci0KICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICBpZiAoIW1fcHJvY2Vzc2VzVXNpbmdH
YW1lcGFkcy5pc0VtcHR5KCkpCiAgICAgICAgIFVJR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24o
KS5wcm9jZXNzUG9vbFN0b3BwZWRVc2luZ0dhbWVwYWRzKCp0aGlzKTsKQEAgLTQwMiwxNiArMzk5
LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudAogICAgICAgICBt
X2F1dG9tYXRpb25DbGllbnQgPSBXVEZNb3ZlKGF1dG9tYXRpb25DbGllbnQpOwogfQogCi12b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3Rk
Ojp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiYmIGN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCkKLXsKLSNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NP
TF9NQU5BR0VSKQotICAgIGlmICghY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotICAgICAg
ICBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQ+KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCA9IFdURk1vdmUoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KTsK
LSNlbmRpZgotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRTdG9yYWdlQWNjZXNzQVBJRW5h
YmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9zdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IGVu
YWJsZWQ7CkBAIC00MzEsNyArNDE4LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q3VzdG9t
V2ViQ29udGVudAogCiBJUEM6OkNvbm5lY3Rpb24qIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5n
UHJvY2Vzc0Nvbm5lY3Rpb24oKQogewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzLT5jb25u
ZWN0aW9uKCk7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNv
bm5lY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKHZv
aWQqIGNvbnRleHQpCkBAIC00NDMsOCArNDMwLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFu
Z3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKCkpOwogI2lmIFVTRShTT1VQKQot
ICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQo
dXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRM
YW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDApOwogI2VuZGlmCiB9
CiAKQEAgLTQ4MiwyNjcgKzQ2OCwxMyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzY3JlZW5Qcm9w
ZXJ0aWVzU3RhCiAjZW5kaWYKIH0KIAotTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bv
b2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0
YVN0b3JlKQorTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdv
cmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqKQogewotICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3Vu
ZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCi0gICAgLy8g
V2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9u
IGNoZWNrIG9uIG91ciBBUElzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDAyNDYuCi0gICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgewotICAgICAg
ICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKV0gewotICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAg
fSk7Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsK
LSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZigqd2l0aFdl
YnNpdGVEYXRhU3RvcmUpKTsKLSAgICAgICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVh
clBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQ
cm9jZXNzOwotICAgIH0KLQotICAgIGF1dG8gbmV0d29ya1Byb2Nlc3MgPSBtYWtlVW5pcXVlPE5l
dHdvcmtQcm9jZXNzUHJveHk+KCp0aGlzKTsKLQotICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0KLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKSB7Ci0g
ICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tp
ZXMgPSBjb3B5VG9WZWN0b3IobV93ZWJzaXRlRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsK
LSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0jaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRl
bnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxp
Y2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlv
blNlY29uZGFyeUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24o
KS5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKTsKLSNlbmRpZgotICAgIH0K
LQotICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IGdsb2JhbFVS
TFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJz
LnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOwot
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBTdHJpbmcgY29va2llU3RvcmFnZURpcmVj
dG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYg
KCFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0KLSAgICBTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6
Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvbnRhaW5lckNhY2hlc0Rp
cmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRl
cnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmlu
ZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGly
ZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5k
bGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShl
bXB0eVN0cmluZygpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHBhcmFtZXRlcnMu
aHN0c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPmhzdHNTdG9yYWdlRGlyZWN0
b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgp
KQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJl
Y3RvcnkocGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5oc3RzU3Rv
cmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVt
ZXNSZWdpc3RlcmVkQXNTZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6
OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7Ci0gICAgcGFyYW1ldGVy
cy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0g
Y29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9S
ZWdpc3RlckFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkpOwotICAgIHBhcmFtZXRl
cnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2Jh
bFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7Ci0gICAg
cGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3Io
TGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0Fj
Y2VzcygpKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIC8vICoqKioqKioq
KgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNoYW5nZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVy
ZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlzayB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcg
YSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjovL3Byb2JsZW0vMTc0NTQ3MTI+KQotICAgIC8v
ICoqKioqKioqKgotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0g
bV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpOwot
ICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4
aXN0cygpKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwotICAg
IAotICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdy
YWRlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVk
U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIGlmICghcGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQotICAgICAgICBwYXJhbWV0ZXJz
LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSAgV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnksIHBhcmFtZXRlcnMuc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYK
LQotICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8g
bV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZExvY2FsU3RvcmFnZURpcmVjdG9yeSgpIDogbnVs
bFN0cmluZygpOwotICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQotICAgICAgICBsb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRMb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKLSAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9j
YWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBhdXRvIGNhY2hl
U3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9y
ZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFjYWNo
ZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNoZVN0b3JhZ2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZNb3ZlKGNhY2hlU3RvcmFnZURp
cmVjdG9yeSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJl
Y3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7Ci0gICAgZWxz
ZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkp
Ci0gICAgICAgIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5kaXJlY3Rvcnk7
Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHko
KSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGly
ZWN0b3J5KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnksIHJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYm9vbCBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gZmFsc2U7Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gZmFsc2U7Ci0gICAgYm9vbCBzaG91bGRJbmNsdWRlTG9j
YWxob3N0ID0gdHJ1ZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1
Z01vZGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAg
IFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgdGhpcmRQYXJ0eUNvb2tpZUJs
b2NraW5nTW9kZSA9IFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU6OkFsbDsK
LSAgICBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCBzYW1lU2l0ZVN0
cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnRFbmFibGVkOjpObzsKLSNlbmRpZgotICAgIFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gV2ViQ29yZTo6
Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXM7Ci0gICAgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4gc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAg
IEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGFwcEJvdW5kRG9tYWluczsKLSAg
ICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLQot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQgPSBkb2VzQXBw
SGF2ZUlUUEVuYWJsZWQoKTsKLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUgJiYgIXdpdGhX
ZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAg
ICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNp
dGVEYXRhU3RvcmUgJiYgIW1fd2Vic2l0ZURhdGFTdG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlT
ZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVm
ZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9
IGVsc2UgaWYgKFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSAmJiAh
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5pc0l0cFN0YXRlRXhwbGljaXRs
eVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1By
ZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCktPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSNlbmRpZgotCi0gICAgaWYgKHdpdGhX
ZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
PSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsK
LSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUt
Pmhhc1N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soKTsKLSNlbmRpZgotICAgICAgICBpZiAoZW5h
YmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgewotICAgICAgICAgICAgYXV0byBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3Qg
PSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRl
cnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzLnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50
RW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBz
dGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWlu
OwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAg
ICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+cGVyT3Jp
Z2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0
YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIAotICAg
ICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSB3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3
b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtD
YWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hF
eHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0
b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3dlYnNpdGVE
YXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0xvZ1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rl
c3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9
IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
czsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxv
Y2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01v
ZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsKLSNlbmRpZgot
ICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRp
b25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBw
Qm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZh
bGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9y
YWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwot
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFy
dHlPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlP
cmlnaW5TdG9yYWdlUXVvdGEoKTsKLQotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0
b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJl
Y3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29y
a0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4
aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5l
dHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJv
eEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lmIEhBVkUoQ0ZORVRXT1JLX0FMVEVSTkFUSVZF
X1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxlZCgpKSB7Ci0g
ICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2VzRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICgh
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHAzRW5hYmxlZCA9IHRy
dWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBpc0l0cFN0YXRlRXhwbGljaXRseVNldCA9IGZh
bHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzID0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewotICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpLAotICAgICAgICBlbmFibGVSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0YXRlRXhwbGljaXRseVNldCwKLSAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCwKLSAgICAgICAgc2hv
dWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAg
ICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlLAotICAgICAgICBzYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluLAotICAgICAg
ICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlLAotICAg
IH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBhcmFtZXRlcnMKLSAgICBw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKLQotICAgIC8vIElu
aXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0
ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBuZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3JrUHJvY2Vzc0xhdGVuY3lR
T1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsKLSNlbmRpZgotCi0gICAg
bmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKLQotICAgIGlmICh3aXRo
V2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbiht
YWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICB3aXRoV2Vic2l0ZURhdGFT
dG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSB0
aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUgc2Vzc2lvbnMgdGhhdCBoYXZl
IGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAgICBmb3IgKGF1dG8mIHNlc3Np
b25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHRE
YXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9j
ZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICB9Ci0KLSAgICBtX25ldHdv
cmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0gICAgcmV0dXJuICptX25ldHdv
cmtQcm9jZXNzOworICAgIHJldHVybiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsK
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQ
cm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHJveHkpCiB7Ci0gICAgQVNTRVJUKG1fbmV0d29y
a1Byb2Nlc3MpOwotICAgIEFTU0VSVCgmbmV0d29ya1Byb2Nlc3NQcm94eSA9PSBtX25ldHdvcmtQ
cm9jZXNzLmdldCgpKTsKLQogICAgIGZvciAoYXV0byYgc3VwcGxlbWVudCA6IG1fc3VwcGxlbWVu
dHMudmFsdWVzKCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPnByb2Nlc3NEaWRDbG9zZSgmbmV0d29y
a1Byb2Nlc3NQcm94eSk7CiAKQEAgLTc1MSw5ICs0ODMsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpuZXR3b3JrUHJvY2Vzc0NyYXNoCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24pCiAgICAg
ICAgIG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVhdmUgdGhl
IHByb2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0aGUgY2xp
ZW50IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3b3JrUHJv
Y2VzcyA9IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCkBA
IC03NjcsMTEgKzQ5NiwxMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJv
Y2VzCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2Vi
UHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6
OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCiB7CiAg
ICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1Byb3h5LCBbdGhpcywgd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94eSA9IG1ha2VXZWFrUHRyKHdlYlByb2Nl
c3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSldIChhdXRvJiBjb25uZWN0aW9uSW5mbykg
bXV0YWJsZSB7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZ2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nlc3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9jZXNzUHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNz
UHJveHkpLCByZXBseSA9IFdURk1vdmUocmVwbHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11
dGFibGUgewogICAgICAgICBpZiAoVU5MSUtFTFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmll
cklzVmFsaWQoY29ubmVjdGlvbkluZm8uaWRlbnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkg
JiYgd2Vha1RoaXMpKSB7CiAgICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19F
UlJPUihQcm9jZXNzLCAiZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3Qg
YXR0ZW1wdCwgcmV0cnlpbmciKTsKICAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7
Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkpOworICAgICAgICAgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3
ZWJQcm9jZXNzUHJveHksIFdURk1vdmUocmVwbHkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICByZXBseShjb25uZWN0aW9uSW5mbyk7CkBAIC04MDQsMTUgKzUzMyw5
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWMKICNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250
ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHks
IFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIEFTU0VSVF9VTlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdl
dCgpKTsKLQotICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpl
eGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKLQotICAg
IGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9y
ZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgICAgICB3ZWJzaXRlRGF0YVN0b3Jl
ID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwotICAgIH0KKyAgICBhdXRvKiB3ZWJzaXRlRGF0
YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQo
c2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpCisgICAgICAgIHdlYnNpdGVE
YXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5w
dHIoKTsKIAogICAgIFdlYlByb2Nlc3NQcm94eSogc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7
IG51bGxwdHIgfTsKICAgICBpZiAoIW1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcykg
ewpAQCAtOTIyLDcgKzY0NSw3IEBAIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQ
b29sOjoKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0
Zm9ybXMgdXNpbmcgQnViYmxld3JhcCBmb3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3Mg
aXMgbGF1bmNoZWQgdXNpbmcgdGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFT
dG9yZSwKICAgICAvLyBzbyB3ZSBkb24ndCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZl
cmVudCBXZWJzaXRlRGF0YVN0b3JlLgotICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vi
c2l0ZURhdGFTdG9yZSAmJiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRh
U3RvcmUpCisgICAgaWYgKG1fc2FuZGJveEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogI2VuZGlmCiAKQEAgLTExOTgsOSArOTIxLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJv
Y2Vzc0RpZEZpbmlzaExhdQogICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRp
bWVvdXRzRm9yVGVzdGluZygpOwogCiAgICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNv
bm5lY3Rpb24odGhpcywgcHJvY2Vzcy0+d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dl
YnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0
d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nl
c3MoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQpAQCAtMTI5NSwxMCArMTAxNSw3IEBAIFJlZjxX
ZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUKICAgICBpZiAoIXBhZ2VDb25maWd1
cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCkpIHsKICAgICAgICAgLy8gV2UgdHJ5IHRvIGF2b2lk
IGNyZWF0aW5nIHRoZSBkZWZhdWx0IGRhdGEgc3RvcmUgYXMgbG9uZyBhcyBwb3NzaWJsZS4KICAg
ICAgICAgLy8gQnV0IGlmIHRoZXJlIGlzIGFuIGF0dGVtcHQgdG8gY3JlYXRlIGEgd2ViIHBhZ2Ug
d2l0aG91dCBhbnkgc3BlY2lmaWVkIGRhdGEgc3RvcmUsIHRoZW4gd2UgaGF2ZSB0byBjcmVhdGUg
aXQuCi0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJz
aXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3Jl
KCkucHRyKCk7Ci0KLSAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3Rv
cmUobV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKKyAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24t
PnNldFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0
YVN0b3JlKCkucHRyKCkpOwogICAgIH0KIAogICAgIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IHBy
b2Nlc3M7CkBAIC0xMzY1LDE1ICsxMDgyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUJl
Z2luVXNpbmdXZWJzaQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9zZXNzaW9uVG9QYWdlSURzTWFw
LmFkZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIEhhc2hTZXQ8V2ViUGFnZVByb3h5SWRlbnRpZmll
cj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChwYWdlSUQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVz
dWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9y
ZS5zZXNzaW9uSUQoKTsKLSAgICBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNTRVJUKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KSB8fCBkYXRhU3RvcmUucGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNz
aW9uSUQgPT0gc2Vzc2lvbklEKTsKLSAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAg
ICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZihkYXRhU3RvcmUp
KTsKLSAgICAgICAgICAgIGRhdGFTdG9yZS5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgICAg
IH0KLSAgICB9CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VFbmRVc2luZ1dlYnNpdGVE
YXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUm
IGRhdGFTdG9yZSkKQEAgLTE0MDksMjYgKzExMTcsMjMgQEAgRG93bmxvYWRQcm94eSYgV2ViUHJv
Y2Vzc1Bvb2w6OmRvd25sb2FkKAogICAgICAgICBpc0FwcEJvdW5kID0gaW5pdGlhdGluZ1BhZ2Ut
PmlzVG9wRnJhbWVOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpOwogICAgIH0KIAotICAgIGlm
IChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVx
dWVzdChyZXF1ZXN0KTsKLSAgICAgICAgLy8gUmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVz
IHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCi0g
ICAgICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgot
ICAgICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKLSAgICAgICAgICAgIFVSTCBpbml0aWF0aW5n
UGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCku
dXJsKCkgfTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29r
aWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElz
U2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJl
cXVlc3QudXJsKCkpKTsKLSAgICAgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhl
YWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudCgp
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0
UGFydHlGb3JDb29raWVzKFVSTCgpKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElz
U2FtZVNpdGUoZmFsc2UpOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQ
SGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAg
dXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNl
ckFnZW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0
ZShmYWxzZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25s
b2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwg
MCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1
cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNv
b2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVz
dC4KKyAgICAvLyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4K
KyAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKKyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJM
ID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9
OworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0
aW5nUGFnZVVSTCk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVn
aXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsK
KyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRl
ck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNl
ckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoVVJMKCkpOworICAgICAg
ICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKKyAgICAgICAgaWYgKCF1cGRh
dGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkp
CisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94
eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAgICAgfQorICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElz
VG9wU2l0ZShmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRv
d25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3Vn
Z2VzdGVkRmlsZW5hbWUpLCAwKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAt
MTQ0MiwxMSArMTE0Nyw3IEBAIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVE
b3cKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGUocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1
bWVEb3dubG9hZChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVE
YXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwot
ICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKLSAgICB9Ci0KKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1l
RG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0
YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKICAg
ICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIApAQCAtMTUxNyw3ICsxMjE4LDcgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBsdWdpbnMoKQogCiBQcm9jZXNzSUQgV2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpCiB7Ci0gICAgcmV0dXJuIG1fbmV0d29ya1By
b2Nlc3MgPyBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmllcigpIDogMDsKKyAgICBy
ZXR1cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucHJvY2Vzc0lkZW50aWZpZXIo
KTsKIH0KIAogUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpwcmV3YXJtZWRQcm9jZXNzSWRlbnRp
ZmllcigpCkBAIC0xNjE0LDEwICsxMzE1LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0
ZXJHbG9iYWxVUkxTYwogICAgICAgICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0
aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5hZGQodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8q
IHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1
cmxTY2hlbWUpOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5y
ZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3Rv
bVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCkBAIC0xNjI2LDEwICsx
MzI0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVSTAogICAgICAg
ICByZXR1cm47CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxl
cnMoKS5yZW1vdmUodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogYWxs
UHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
dW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAg
fQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnVucmVnaXN0ZXJTY2hlbWVG
b3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZChjb25zdCBTdHJpbmcmIHVy
bFNjaGVtZSkKQEAgLTE2NjMsMTYgKzEzNTgsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0
Q2FjaGVNb2RlbChDYWNoZQogCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIAotICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CisgICAgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENh
Y2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRD
YWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQog
ewogICAgIHVwZGF0ZUJhY2tGb3J3YXJkQ2FjaGVDYXBhY2l0eSgpOwogCi0gICAgaWYgKG1fbmV0
d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNh
Y2hlTW9kZWwpLCB7IH0sIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hy
b25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVv
dXRJbnRlcnZhbCkKQEAgLTE2ODIsNyArMTM3NSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
dERlZmF1bHRSZXF1ZXN0VGkKIAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0
ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlLCBjb25zdCBG
cmFtZUluZm9EYXRhJiBmcmFtZUluZm8pCiB7Ci0gICAgcmV0dXJuIGVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZyYW1lSW5mbywg
b3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jcmVh
dGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgKnRoaXMsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3Jp
Z2luYXRpbmdQYWdlKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElz
QmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCkBAIC0xNzU4LDI1ICsxNDUxLDExIEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1vcnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQogCi12b2lk
IFdlYlByb2Nlc3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oKQotewotICAgIEFTU0VS
VChtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCghbV9uZXR3b3JrUHJvY2Vzcyk7
Ci0KLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxk
VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uID0gdHJ1ZTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3JraW5n
UHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYmIHJlcGx5KQogewotICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3
YXJkPFU+KHJlcGx5KSwgMCk7CisgICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLmNhblNlbmRNZXNzYWdlKCkpCisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+
KHJlcGx5KSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEFsbG93c0FueVNTTENl
cnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wgYWxsb3dzKQpAQCAtMTc4NiwxOSArMTQ2NSwxNCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBbGxvd3NBbnlTU0xDZXJ0CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogewotICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscygpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJD
YWNoZWRDcmVkZW50aWFscygpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MoKQogewogICAgIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiAK
LSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBt
X25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVs
bHB0cjsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5uZXR3b3JrUHJvY2Vz
c0NyYXNoZWQoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlQWxsV2ViQ29u
dGVudFByb2Nlc3NlcygpCkBAIC0xODEwLDIyICsxNDg0LDE3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnQKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdv
cmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykK
LSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0KLSAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5l
dHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpCiB7Ci0gICAgaWYg
KG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
ZygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1
bWUoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKQEAgLTE4NTAsMTUgKzE1MTksMTQgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c3luY0xvY2FsU3RvcmFnZShDbwogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpjbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpLCAwKTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoKSwgMCk7CiAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6YWxsb3dT
cGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRpZmljYXRlSW5mbyog
Y2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBlbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpBbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNl
cnRpZmljYXRlSW5mbygpLCBob3N0KSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQ
U0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3Qp
LCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXV0b21hdGlvbkNhcGFiaWxp
dGllcygpIGNvbnN0CkBAIC0yMzc3LDEwICsyMDQ1LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
Y2xlYXJDdXJyZW50TW9kaWZpZQogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFu
c2ZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBm
cm9tRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9Eb21haW4sIE9wdGlvblNldDxD
cm9zc1NpdGVOYXZpZ2F0aW9uRGF0YVRyYW5zZmVyOjpGbGFnPiBuYXZpZ2F0aW9uRGF0YVRyYW5z
ZmVyLCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlELCBQYWdlSWRlbnRpZmll
ciB3ZWJQYWdlSUQpCiB7Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERh
dGFUcmFuc2ZlcihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRvRG9tYWluLCBuYXZpZ2F0aW9uRGF0
YVRyYW5zZmVyLCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlEKTsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5kaWRDb21taXRDcm9zc1NpdGVMb2FkV2l0aERhdGFUcmFuc2Zl
cihzZXNzaW9uSUQsIGZyb21Eb21haW4sIHRvRG9tYWluLCBuYXZpZ2F0aW9uRGF0YVRyYW5zZmVy
LCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbj4mJiBkb21haW5zKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5oCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw2IEBAIE9CSkNfQ0xB
U1MgV0tQcmVmZXJlbmNlT2JzZXJ2ZXI7CiAKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXV0b21h
dGlvbkNsaWVudDsKLWNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKIGNsYXNzIERv
d25sb2FkQ2xpZW50OwogY2xhc3MgSFRUUENvb2tpZVN0b3JlOwogY2xhc3MgSW5qZWN0ZWRCdW5k
bGVDbGllbnQ7CkBAIC0xODAsNyArMTc5LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGlzdG9y
eUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4m
Jik7CiAgICAgdm9pZCBzZXREb3dubG9hZENsaWVudChVbmlxdWVSZWY8QVBJOjpEb3dubG9hZENs
aWVudD4mJik7CiAgICAgdm9pZCBzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6OkF1dG9tYXRpb25DbGllbnQ+JiYpOwotICAgIHZvaWQgc2V0TGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudD4mJik7CiAKICAgICB2b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxl
SWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGN1c3RvbVdlYkNv
bnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+
Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCk7IH0KQEAgLTIwOSw5ICsy
MDcsNiBAQCBwdWJsaWM6CiAgICAgLy8gRGlzY29ubmVjdCB0aGUgcHJvY2VzcyBmcm9tIHRoZSBj
b250ZXh0LgogICAgIHZvaWQgZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Kik7CiAK
LSAgICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUqIHdlYnNpdGVEYXRhU3RvcmUoKSBjb25zdCB7
IHJldHVybiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFByaW1hcnlE
YXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsgbV93ZWJzaXRl
RGF0YVN0b3JlID0gJmRhdGFTdG9yZTsgfQotCiAgICAgUmVmPFdlYlBhZ2VQcm94eT4gY3JlYXRl
V2ViUGFnZShQYWdlQ2xpZW50JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogCiAg
ICAgdm9pZCBwYWdlQmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRp
ZmllciwgV2Vic2l0ZURhdGFTdG9yZSYpOwpAQCAtMzA5LDggKzMwNCw2IEBAIHB1YmxpYzoKICAg
ICBBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xpZW50KCkgeyByZXR1
cm4gKm1faGlzdG9yeUNsaWVudDsgfQogICAgIFdlYkNvbnRleHRDbGllbnQmIGNsaWVudCgpIHsg
cmV0dXJuIG1fY2xpZW50OyB9CiAKLSAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gKm1fY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50OyB9Ci0KICAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CiAgICAg
ICAgIHVuc2lnbmVkIHdrVmlld0NvdW50OwogICAgICAgICB1bnNpZ25lZCB3a1BhZ2VDb3VudDsK
QEAgLTMxOCw5ICszMTEsNiBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBzdGF0aWMgU3RhdGlzdGlj
cyYgc3RhdGlzdGljcygpOyAgICAKIAotICAgIHZvaWQgdXNlVGVzdGluZ05ldHdvcmtTZXNzaW9u
KCk7Ci0gICAgYm9vbCBpc1VzaW5nVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkgY29uc3QgeyByZXR1
cm4gbV9zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb247IH0KLQogICAgIHZvaWQgc2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCk7CiAKICAgICB2b2lkIGNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMoKTsKQEAgLTQwMCw3ICszOTAsNiBAQCBwdWJsaWM6CiAKICAgICAv
LyBOZXR3b3JrIFByb2Nlc3MgTWFuYWdlbWVudAogICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVu
c3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3Jl
ID0gbnVsbHB0cik7Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSBj
b25zdCB7IHJldHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3Jr
UHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCiAgICAgdm9pZCBnZXROZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nl
c3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwpAQCAt
NTU3LDYgKzU0NiwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENF
bmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVz
c2FnZSk7CiAjZW5kaWYKIAorICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGlj
IFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOwor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgp
OworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0
YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJp
bmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAg
ICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCkBAIC01NzAsOCArNTcwLDYgQEAgcHJpdmF0
ZToKICAgICBXZWJQcm9jZXNzUHJveHkmIGNyZWF0ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFT
dG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6Oklz
UHJld2FybWVkOjpObyk7CiAgICAgdm9pZCBpbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9j
ZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1l
ZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmKTsKLQogICAgIHZvaWQgaGFuZGxlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZv
aWQgaGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJik7CiAKQEAgLTU5NSwxNCArNTkzLDYgQEAgcHJpdmF0
ZToKIAogICAgIGJvb2wgdXNlc1NpbmdsZVdlYlByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2Nv
bmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVXZWJQcm9jZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0g
ICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3Ry
aW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNv
bnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBv
cmFyeURpcmVjdG9yeSgpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lk
IHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90
aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBAIC02NjIsNyArNjUyLDYgQEAgcHJpdmF0ZToKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1dG9tYXRpb25DbGllbnQ7
CiAgICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+IG1faGlz
dG9yeUNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogCiAgICAgUmVmUHRyPFdl
YkF1dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRpb25TZXNzaW9uOwogCkBAIC02OTQsOCArNjgz
LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQgeyBmYWxzZSB9
OwogICAgIGRvdWJsZSBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCB7IDE0MDAuMCB9OwogCi0gICAg
UmVmUHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3JlOwotCiAg
ICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBSZWZQdHI8V2ViQ29udGV4dFN1cHBsZW1l
bnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gV2ViQ29udGV4dFN1cHBsZW1lbnRNYXA7CiAgICAg
V2ViQ29udGV4dFN1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKIApAQCAtNzMwLDggKzcxNyw2
IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCB7IHRy
dWUgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdv
cmtQcm9jZXNzOwotCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPERpY3Rpb25hcnlDYWxs
YmFjaz4+IG1fZGljdGlvbmFyeUNhbGxiYWNrczsKIAogI2lmIFVTRShTT1VQKQpAQCAtODUxLDE1
ICs4MzYsMTUgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKIHsKLSAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQot
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwg
MCk7CisgICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNhblNlbmRNZXNz
YWdlKCkpCisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoc3Rk
Ojpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5l
Y2Vzc2FyeShUJiYgbWVzc2FnZSkKIHsKICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKHN0ZDo6Zm9yd2FyZDxUPiht
ZXNzYWdlKSwgMCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcAkocmV2aXNp
b24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhUVFBDb29raWVT
dG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNwYWNlIEFQSSB7
CiBIVFRQQ29va2llU3RvcmU6OkhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmUmIHdlYnNpdGVEYXRhU3RvcmUpCiAgICAgOiBtX293bmluZ0RhdGFTdG9yZSh3ZWJzaXRlRGF0
YVN0b3JlKQogewotICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29v
a2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9v
bE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3Jl
KCkKQEAgLTU1LDggKzUzLDYgQEAgSFRUUENvb2tpZVN0b3JlOjp+SFRUUENvb2tpZVN0b3JlKCkK
ICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIW1fb2JzZXJ2
ZWRDb29raWVNYW5hZ2VyUHJveHkpOwogICAgIEFTU0VSVCghbV9jb29raWVNYW5hZ2VyUHJveHlP
YnNlcnZlcik7Ci0KLSAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25z
KCk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC04
MSwzMyArNzcsMTYgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJvdW5kQ29vawog
CiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2llcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0
b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIFZlY3RvcjxXZWJD
b3JlOjpDb29raWU+IGFsbENvb2tpZXM7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+
c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAg
ICAgICAgIGFsbENvb2tpZXMgPSBnZXRBbGxEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29r
aWVzKCk7Ci0gICAgICAgIGFsbENvb2tpZXMuYXBwZW5kVmVjdG9yKG1fb3duaW5nRGF0YVN0b3Jl
LT5wZW5kaW5nQ29va2llcygpKTsKLQotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgYWxsQ29va2llc10gKCkgbXV0YWJsZSB7Ci0g
ICAgICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tpZXMoYWxsQ29va2llcywgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmdldEFsbENvb2tpZXMobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBwb29sID0gV1RGTW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBj
b29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOworICAgIGNvb2tpZU1hbmFnZXIuZ2V0QWxs
Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgbXV0
YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhjb29raWVzLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpj
b29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8q
IHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotICAgIGlmICghcG9vbCkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKHsgfSk7Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRD
b29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRh
YmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnNpbmdsZXRvbigpOworICAgIGNvb2tpZU1hbmFnZXIuZ2V0Q29va2llcyhtX293bmlu
Z0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAg
IGZpbHRlckFwcEJvdW5kQ29va2llcyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgfSk7CiB9CkBAIC0xMTUsODEgKzk0LDI5IEBAIHZvaWQgSFRUUENvb2tpZVN0b3Jl
Ojpjb29raWVzRm9yVVJMKFdURjoKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVzKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29raWVz
KGNvb2tpZXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91bmRD
b29raWVzKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBuZWVkc0ZsdXNoID0gZmFsc2U7Ci0gICAg
ICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVT
dG9yYWdlT3BlcmF0aW9ucygpOwotICAgICAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgICAgIGZv
ciAoYXV0byYgY29va2llIDogYXBwQm91bmRDb29raWVzKSB7Ci0gICAgICAgICAgICAgICAgLy8g
RklYTUU6IHBlbmRpbmdDb29raWVzIHVzZWQgZm9yIGRlZmF1bHRTZXNzaW9uIGJlY2F1c2Ugc2Vz
c2lvbiBjb29raWVzIGNhbm5vdCBiZSBwcm9wYWdhdGVkIHRvIE5ldHdvcmsgUHJvY2VzcyB3aXRo
IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLgotICAgICAgICAgICAgICAgIGlmICht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pIHsKLSAgICAgICAgICAgICAgICAgICAgbmVl
ZHNGbHVzaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHNldENvb2tpZUluRGVmYXVsdFVJ
UHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5hZGRQZW5kaW5nQ29va2llKGNvb2tp
ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoKQotICAgICAg
ICAgICAgICAgIGZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byogY29va2llTWFuYWdlciA9IHBv
b2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgICAg
IGNvb2tpZU1hbmFnZXItPnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCBhcHBCb3VuZENvb2tpZXMsIFtwb29sID0gV1RGTW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKKyAgICAgICAgYXV0byYgY29va2ll
TWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsKKyAg
ICAgICAgY29va2llTWFuYWdlci5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgYXBwQm91bmRDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
fSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUoY29uc3QgV2ViQ29y
ZTo6Q29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQ
b29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAg
ICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgIGRlbGV0
ZUNvb2tpZUZyb21EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9vd25pbmdEYXRhU3RvcmUtPnJlbW92ZVBlbmRpbmdDb29raWUo
Y29va2llKTsKLQotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVD
b29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFtwb29sID0gV1RG
TW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsKKyAg
ICBhdXRvJiBjb29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNp
bmdsZXRvbigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpkZWxldGVBbGxDb29raWVzKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9v
d25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsK
LSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lv
bklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIGRlbGV0ZUNvb2tpZXNJbkRlZmF1bHRV
SVByb2Nlc3NDb29raWVTdG9yZSgpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQWxsQ29va2llcyht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIg
PSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2ll
TWFuYWdlci5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSk7
CiAgICAgLy8gRklYTUU6IFRoZSBDb21wbGV0aW9uSGFuZGxlciBzaG91bGQgYmUgcGFzc2VkIHRv
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcy4KICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIEhU
VFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShXZWJDb3JlOjpIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkgewot
ICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgp
KQotICAgICAgICAgICAgc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeUluRGVmYXVsdFVJUHJvY2Vz
c0Nvb2tpZVN0b3JlKHBvbGljeSk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAg
YXV0byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5n
bGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobV9v
d25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKICAgICB9KTsKIH0KQEAgLTIyNywyMSArMTU0LDcgQEAgdm9pZCBIVFRQ
Q29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIoTwogCiAgICAgbV9jb29raWVNYW5hZ2VyUHJv
eHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJV2ViQ29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXI+
KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bv
b2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKSB7Ci0gICAg
ICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29raWVzKTsKLQotICAgICAgICAvLyBM
aXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRpb25zIGluIHRoZSBVSVByb2Nlc3MgaW4gdGhlIG1l
YW50aW1lLgotICAgICAgICBzdGFydE9ic2VydmluZ0NoYW5nZXNUb0RlZmF1bHRVSVByb2Nlc3ND
b29raWVTdG9yZShbdGhpc10gKCkgewotICAgICAgICAgICAgY29va2llc0RpZENoYW5nZSgpOwot
ICAgICAgICB9KTsKLQotICAgICAgICBtX29ic2VydmluZ1VJUHJvY2Vzc0Nvb2tpZXMgPSB0cnVl
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQ
cm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9ICZXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94
eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nv
b2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIApAQCAtMjc2LDQ2ICsxODksMTAgQEAgdm9p
ZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNEaWRDaGFuZ2UoKQogdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQoKQogewogICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5h
Z2VyUHJveHktPnVucmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklE
KCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLSAgICBtX29ic2VydmVkQ29va2ll
TWFuYWdlclByb3h5ID0gbnVsbHB0cjsKLQotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFT
dG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0gICAgaWYg
KCFwb29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclBy
b3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsK
KyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gJldlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpzaW5nbGV0b24oKTsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5
LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29v
a2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lkIEhUVFBDb29raWVTdG9yZTo6cmVn
aXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIEFTU0VSVCghbV9w
cm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKTsKLQotICAgIG1fcHJvY2Vzc1Bv
b2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclBy
b2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2ViUHJvY2Vzc1Bvb2wmIG5ld1Byb2Nl
c3NQb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3RvcmUtPmlzQXNzb2NpYXRlZFBy
b2Nlc3NQb29sKG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAvLyBOb3cgdGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3MgcG9vbCBleGlzdHMsIHdlIG5lZWQg
dG8gZmx1c2ggdGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3JlCi0gICAgICAgIC8vIHRvIG1ha2Ug
c3VyZSBhbnkgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhpbiB0aGUgbmV3IHByb2Nlc3MgcG9v
bC4KLSAgICAgICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoW10geyB9KTsKLSAg
ICAgICAgbmV3UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgICAgICBp
ZiAobV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcikgewotICAgICAgICAgICAgbV9vYnNlcnZl
ZENvb2tpZU1hbmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29sLnN1cHBsZW1lbnQ8V2ViS2l0OjpX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgICAgICBtX29ic2VydmVkQ29va2llTWFu
YWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotICAgICAgICB9Ci0gICAgICAgIHVu
cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMoKQotewotICAgIGlmIChtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZp
ZXIpCi0gICAgICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyUHJvY2Vzc1Bvb2xDcmVhdGlv
bkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllcik7Ci0KLSAg
ICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIgPSAwOwotfQotCiAjaWYg
IVBMQVRGT1JNKENPQ09BKQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmZsdXNoRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikgeyBjb21wbGV0aW9uSGFuZGxlcigpOyB9CiBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBI
VFRQQ29va2llU3RvcmU6OmdldEFsbERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZUNvb2tpZXMo
KSB7IHJldHVybiB7IH07IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElI
VFRQQ29va2llU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJSFRUUENvb2tpZVN0b3JlLmgJKHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAt
ODIsOSArODIsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEhUVFBDb29raWVTdG9yZShXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmUmKTsKIAotICAgIHZvaWQgcmVnaXN0ZXJGb3JOZXdQcm9jZXNz
UG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9v
bE5vdGlmaWNhdGlvbnMoKTsKLQogICAgIHZvaWQgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2ll
U3RvcmUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICBzdGF0aWMgVmVjdG9yPFdl
YkNvcmU6OkNvb2tpZT4gZ2V0QWxsRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygp
OwogICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUluRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3Jl
KGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsOSAr
NDI2LDkgQEAgdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9TZXJ2ZXIoV0tDb250ZQogewogfQog
Ci1XS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRS
ZWYgY29udGV4dFJlZikKK1dLQ29va2llTWFuYWdlclJlZiBXS0NvbnRleHRHZXRDb29raWVNYW5h
Z2VyKFdLQ29udGV4dFJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRv
SW1wbChjb250ZXh0UmVmKS0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoJldlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKSk7CiB9CiAKIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRl
eHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZikKQEAgLTU0Myw5ICs1NDMsOCBAQCB2
b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjCiAgICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dFJlZiktPnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVk
KGVuYWJsZSk7CiB9CiAKLXZvaWQgV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKFdL
Q29udGV4dFJlZiBjb250ZXh0KQordm9pZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Np
b24oV0tDb250ZXh0UmVmKQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT51c2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24oKTsKIH0KIAogdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xD
ZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wg
YWxsb3dzKQpAQCAtNjcxLDcgKzY3MCw2IEBAIHZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2UKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsK
IH0KIAotdm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRleHRS
ZWYgY29udGV4dFJlZiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUpCit2
b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4dFJlZiwgV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmKQogewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5z
ZXRQcmltYXJ5RGF0YVN0b3JlKCpXZWJLaXQ6OnRvSW1wbCh3ZWJzaXRlRGF0YVN0b3JlKSk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJp
dmF0ZS5oCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHRQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgV0tf
RVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQwogV0tfRVhQT1JUIHZvaWQgV0tD
b250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhX
S0NvbnRleHRSZWYsIGJvb2wpOwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVm
b3JlIGFueSBzZWNvbmRhcnkgcHJvY2Vzc2VzIGFyZSBzdGFydGVkLgotV0tfRVhQT1JUIHZvaWQg
V0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KTsK
K1dLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRl
eHRSZWYgY29udGV4dCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIAogLy8gVGVzdCBvbmx5LiBTaG91
bGQgYmUgY2FsbGVkIGJlZm9yZSBydW5uaW5nIGEgdGVzdC4KIFdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dENsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tDb250ZXh0UmVmIGNvbnRleHQpOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wu
bW0JKHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1Byb2Nlc3NQb29sLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAxLDcgQEAgLSAo
dm9pZClfc2V0Q2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YQogCiAtICh2b2lkKV9zZXRDb29r
aWVBY2NlcHRQb2xpY3k6KE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSlwb2xpY3kKIHsKLSAgICBf
cHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkt
PnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSwgV2ViQ29yZTo6dG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9
KTsKKyAgICBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBX
ZWJDb3JlOjp0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOwogfQog
CiAtIChpZClfb2JqZWN0Rm9yQnVuZGxlUGFyYW1ldGVyOihOU1N0cmluZyAqKXBhcmFtZXRlcgpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0Q29va2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw4ICs2NCw3IEBAIHN0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUgewog
CiAgICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSgpCiAgICAgewotICAgICAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bv
b2xzKGRhdGFNYW5hZ2VyKSkKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdl
YkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9u
SUQoKSwgbnVsbHB0cik7CisgICAgICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9u
KCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAgICAg
fQogCiAgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEzOSwx
MSArMTM4LDkgQEAgV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlcgogewog
ICAgIFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBudWxscHRyKSk7CiAgICAg
bWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsKLSAgICBmb3IgKGF1dG8q
IHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1h
bmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxl
bWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2so
bWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0gICAgICAgICAgICBnX3Np
Z25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwotICAgICAgICB9KTsKLSAg
ICB9CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5zZXRDb29raWVPYnNl
cnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdlcl0geworICAg
ICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOworICAgIH0p
OwogICAgIHJldHVybiBtYW5hZ2VyOwogfQogCkBAIC0xNzMsOCArMTcwLDcgQEAgdm9pZCB3ZWJr
aXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbgogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhl
bWVyYWwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5k
YXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKS0+c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJp
bmc6OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
KHN0b3JhZ2UpKTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFt
ZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZShzdG9yYWdlKSk7CiB9CiAKIC8q
KgpAQCAtMTkyLDggKzE4OCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2Nl
cHRfcG8KIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUiht
YW5hZ2VyKSk7CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5z
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hU
VFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOworICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtd
KCkgeyB9KTsKIH0KIAogLyoqCkBAIC0yMjQsNyArMjE5LDcgQEAgdm9pZCB3ZWJraXRfY29va2ll
X21hbmFnZXJfZ2V0X2FjY2VwdF9wbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcHJv
Y2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBX
VEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgewor
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZ2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2sp
XShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkgewogICAgICAgICBnX3Rh
c2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCB0b1dlYktpdENvb2tpZUFjY2VwdFBvbGljeShwb2xp
Y3kpKTsKICAgICB9KTsKIH0KQEAgLTI2OSwxMSArMjY0LDcgQEAgdm9pZCB3ZWJraXRfY29va2ll
X21hbmFnZXJfYWRkX2Nvb2tpZShXZQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29va2llKTsKIAog
ICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBj
YW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSBy
ZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdh
cmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVz
dCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9v
bHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsK
KyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tpZXMobWFuYWdl
ci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sg
PSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2su
Z2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTEsNyBAQCB2b2lkIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXCiAgICAgZ19yZXR1cm5faWZfZmFpbCh1cmkp
OwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFn
ZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMg
YXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNr
IHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBz
byBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nl
c3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2Vy
LT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdl
YkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUo
dGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSB7CisgICAgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYt
PnNlc3Npb25JRCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0g
V1RGTW92ZSh0YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsK
ICAgICAgICAgR0xpc3QqIGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRv
JiBjb29raWUgOiBjb29raWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJl
cGVuZChjb29raWVzTGlzdCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzY1
LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZQogICAgIGdfcmV0
dXJuX2lmX2ZhaWwoY29va2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdS
ZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7
Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxp
dGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2Ug
YWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAg
ICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQ
cm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29s
c1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNvb2tpZSht
YW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNr
ID0gV1RGTW92ZSh0YXNrKV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0
b24oKS5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNv
b2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgewogICAgICAgICBnX3Rhc2tf
cmV0dXJuX2Jvb2xlYW4odGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0
LmNwcAkocmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0V2ViQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNyw3ICs0MDcsNiBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoCiAgICAgICAgIGNvbmZp
Z3VyYXRpb24uc2V0SFNUU1N0b3JhZ2VEaXJlY3RvcnkoRmlsZVN5c3RlbTo6c3RyaW5nRnJvbUZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2hz
dHNfY2FjaGVfZGlyZWN0b3J5KHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpKTsKIAog
ICAgIHByaXYtPnByb2Nlc3NQb29sID0gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0
aW9uKTsKLSAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0UHJpbWFyeURhdGFTdG9yZSh3ZWJraXRX
ZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdl
dCgpKSk7CiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFVzZXJNZXNzYWdlSGFuZGxlcihbd2Vi
Q29udGV4dF0oVXNlck1lc3NhZ2UmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVz
ZXJNZXNzYWdlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIC8vIFNpbmsgdGhl
IGZsb2F0aW5nIHJlZi4KICAgICAgICAgR1JlZlB0cjxXZWJLaXRVc2VyTWVzc2FnZT4gdXNlck1l
c3NhZ2UgPSB3ZWJraXRVc2VyTWVzc2FnZUNyZWF0ZShXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAkocmV2aXNp
b24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRv
bWF0aW9uU2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTMsOCArMTM5Myw3IEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2sKICAgICBpZiAoIWNvb2tpZU9i
amVjdC5nZXRCb29sZWFuKCJodHRwT25seSJfcywgY29va2llLmh0dHBPbmx5KSkKICAgICAgICAg
QVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFt
ZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2h0dHBPbmx5JyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAg
V2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0
Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0s
IFtjYWxsYmFja10oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5z
ZXRDb29raWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUg
fSwgW2NhbGxiYWNrXSgpIHsKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAgICAg
fSk7CiB9CkBAIC0xNDEwLDggKzE0MDksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpk
ZWxldGVBbGxDb29rCiAKICAgICBTdHJpbmcgaG9zdCA9IGFjdGl2ZVVSTC5ob3N0KCkudG9TdHJp
bmcoKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJv
Y2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tp
ZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9y
ZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQo
aG9zdCkgfSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5kZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwg
eyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOwogfQogCiB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRTZXNzaW9uUGVybWlzc2lvbnMoRXJyb3JTdHJp
bmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpTZXNzaW9uUGVybWlzc2lvbkRhdGE+PiYgb3V0X3Blcm1pc3Npb25zKQpJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
CShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsOCArMTMzLDcgQEAgc3Rh
dGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZAogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiB7Ci0gICAgaWYgKG1fbmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVzc2lv
bkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByb2Nlc3NT
dXBwcmVzc2lvbkVuYWJsZWQoKSk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
ICAgICBpZiAoIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1
ZSgpKQpAQCAtMTY1LDggKzE2NCw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5p
dGlhbGl6ZSgKICAgICBpZiAoIVtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
IGJvb2xGb3JLZXk6QCJXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciJdKQogICAg
ICAgICBpbnN0YWxsTWVtb3J5UHJlc3N1cmVIYW5kbGVyKCk7CiAKLSAgICBzZXRMZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ+KCkpOwotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JN
KE1BQ0NBVEFMWVNUKQogICAgIGlmICghX01HQ2FjaGVWYWxpZCgpKSB7CiAgICAgICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJ
VFlfREVGQVVMVCwgMCksIF57CkBAIC00NzksMjIgKzQ3Niw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU4KIAogICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9
IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAgICB7Ci0gICAgICAg
IGJvb2wgaXNTYWZhcmkgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlCcm93c2VyID0gZmFs
c2U7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3Jl
OjpJT1NBcHBsaWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3Nl
ciA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZWxpZiBQTEFU
Rk9STShNQUMpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBwbGljYXRpb246Omlz
U2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlv
bjo6aXNNaW5pQnJvd3NlcigpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1NhZmFyaSB8fCBpc01p
bmlCcm93c2VyKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBVUkwoVVJMKCksIFtk
ZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQcm94eURlZmF1bHRz
S2V5XSk7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVs
dHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXld
KTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQg
PSBhZG9wdENGKF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAgIHBhcmFtZXRlcnMu
c2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVsdHMgYm9vbEZvcktl
eTpXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRzS2V5XTsKQEAgLTUw
NSwxNyArNDg2LDExIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU4K
ICAgICBwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyID0gaWRlbnRp
ZnlpbmdEYXRhRnJvbUNvb2tpZVN0b3JhZ2UoW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhU
VFBDb29raWVTdG9yYWdlXSBfY29va2llU3RvcmFnZV0pOwogI2VuZGlmCiAKLSAgICBwYXJhbWV0
ZXJzLnN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkID0gc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoKTsK
LQogICAgIE5TTnVtYmVyICpkYXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtkZWZhdWx0cyBvYmplY3RG
b3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5hbERlYnVnJUAiLCBXZWJQ
cmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygp
LmdldCgpXV07CiAgICAgaWYgKGRhdGFiYXNlRW5hYmxlZFZhbHVlKQogICAgICAgICBwYXJhbWV0
ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gZGF0YWJhc2VFbmFibGVkVmFsdWUuYm9vbFZh
bHVlOwotICAgIGVsc2UKLSAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFz
ZSA9IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5pc0lUUERhdGFiYXNlRW5hYmxl
ZCgpOwogCiAgICAgcGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUg
PSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4cGVy
aW1lbnRhbCVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07Ci0KLSAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBI
YXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRD
cm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCShyZXZpc2lvbiAyNjUy
NDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDggKzc1LDcgQEAgdm9pZCBEb3dubG9hZFByb3h5Ojpj
YW5jZWwoKQogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxv
YWRQcm94eTo6aW52YWxpZGF0ZSgpCkBAIC0xMDYsMTIgKzEwNSwxMCBAQCB2b2lkIERvd25sb2Fk
UHJveHk6OnB1Ymxpc2hQcm9ncmVzcyhjb25zCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSBoYW5kbGU7Ci0gICAgICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRl
bnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChj
cmVhdGVkU2FuZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hFeHRlbnNpb24pOwotICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hE
b3dubG9hZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKLSAgICB9Cisg
ICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKKyAgICBib29sIGNyZWF0ZWRTYW5k
Ym94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lz
dGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7Cisg
ICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hF
eHRlbnNpb24pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2Fk
SUQsIFVSTCwgaGFuZGxlKSwgMCk7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCiAKQEAg
LTE0NiwxNSArMTQzLDcgQEAgdm9pZCBEb3dubG9hZFByb3h5Ojp3aWxsU2VuZFJlcXVlc3QoUmVz
bwogCiAgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS53aWxsU2VuZFJlcXVlc3Qo
KnRoaXMsIFdURk1vdmUocHJvcG9zZWRSZXF1ZXN0KSwgcmVkaXJlY3RSZXNwb25zZSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oUmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVx
dWVzdCkgewogICAgICAgICBtX3JlZGlyZWN0Q2hhaW4uYXBwZW5kKG5ld1JlcXVlc3QudXJsKCkp
OwotCi0gICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNzUG9vbCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVj
dGVkVGhpcy0+bV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgaWYgKCFu
ZXR3b3JrUHJvY2Vzc1Byb3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG5ldHdv
cmtQcm9jZXNzUHJveHktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdp
bGxTZW5kUmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAw
KTsKKyAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMt
Pm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOwogICAgIH0pOwogfQogCkBAIC0xNzksMTYg
KzE2OCwxMiBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0CiAgICAg
aWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9wcm9jZXNz
UG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxl
bmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5h
bWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBkb3dubG9hZElEID0gZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3Zlcndy
aXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKKyAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENs
aWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxl
bmFtZSksIFtkb3dubG9hZElEID0gZG93bmxvYWRJRF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3Zl
cndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgICAgIGlmICghZGVzdGluYXRpb24u
aXNOdWxsKCkpCiAgICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZGVz
dGluYXRpb24sIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVu
c2lvbkhhbmRsZSk7CiAKLSAgICAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVz
dGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUs
IGFsbG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZZXMpLCAwKTsKKyAgICAgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwg
ZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFs
bG93T3ZlcndyaXRlOjpZZXMpLCAwKTsKICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAko
cmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHlNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksOSArMTA5LDYgQEAgdm9p
ZCBEb3dubG9hZFByb3h5TWFwOjpkb3dubG9hZEZpbmlzaGVkKAogCiAgICAgUkVMRUFTRV9MT0co
TG9hZGluZywgIlJlbW92aW5nIGRvd25sb2FkICUiIFBSSXU2NCAiIGZyb20gVUlQcm9jZXNzIERv
d25sb2FkUHJveHlNYXAiLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7CiAKLSAgICAvLyBUaGUg
RG93bmxvYWRQcm94eSBtYXkgYmUgaG9sZGluZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIHBy
b2Nlc3MgcG9vbC4KLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZlB0ciht
X3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkpOwotCiAgICAgQVNTRVJUKG1fZG93bmxvYWRzLmNvbnRh
aW5zKGRvd25sb2FkSUQpKTsKIAogICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIGRvd25sb2Fk
SUQuZG93bmxvYWRJRCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjY1MjQ5KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkxlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2VuZGlmCisjaW5jbHVkZSAiTGVnYWN5R2xvYmFs
U2V0dGluZ3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NvbnRl
bnRSdWxlTGlzdE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbkluZm8uaCIKQEAgLTYwLDYgKzYxLDcgQEAKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0
b3JlQ2xpZW50LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+CisjaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdn
cmVnYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogCiAjaWYgRU5B
QkxFKFNFQ19JVEVNX1NISU0pCkBAIC03MCwxOCArNzIsMTA0IEBACiAjaW5jbHVkZSA8d3RmL3Nw
aS9kYXJ3aW4vWFBDU1BJLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1
ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oIgorI2VuZGlmCisKICNkZWZp
bmUgTUVTU0FHRV9DSEVDSyhhc3NlcnRpb24pIE1FU1NBR0VfQ0hFQ0tfQkFTRShhc3NlcnRpb24s
IGNvbm5lY3Rpb24oKSkKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAotTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9j
ZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCi0gICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJveHkocHJvY2Vz
c1Bvb2wuYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCi0gICAgLCBtX3Byb2Nlc3NQ
b29sKHByb2Nlc3NQb29sKQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1By
b3h5PiYgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4+IG5ldHdvcmtQcm9jZXNzOwor
ICAgIHJldHVybiBuZXR3b3JrUHJvY2VzczsKK30KKworTmV0d29ya1Byb2Nlc3NQcm94eSYgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkKK3sKKyAgICBpZiAoIWdsb2JhbE5ldHdvcmtQ
cm9jZXNzKCkpIHsKKyAgICAgICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSA9IG1ha2VVbmlxdWU8
TmV0d29ya1Byb2Nlc3NQcm94eT4oKTsKKyAgICAgICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKS0+
c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIH0KKyAgICByZXR1cm4g
Kmdsb2JhbE5ldHdvcmtQcm9jZXNzKCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
YXR0ZW1wdFJlbGF1bmNoQWZ0ZXJDcmFzaElmTmVjZXNzYXJ5KFZlY3RvcjxzdGQ6OnBhaXI8UmVm
PFdlYlByb2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseT4+JiYgcGVuZGluZ1JlcXVlc3RzKQoreworICAg
IGdsb2JhbE5ldHdvcmtQcm9jZXNzKCkgPSBudWxscHRyOworICAgIGlmIChwZW5kaW5nUmVxdWVz
dHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgYXV0byYgbmV3TmV0d29ya1Byb2Nl
c3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKKyAgICBmb3IgKGF1dG8mIHJl
cXVlc3QgOiBwZW5kaW5nUmVxdWVzdHMpCisgICAgICAgIG5ld05ldHdvcmtQcm9jZXNzLmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbihyZXF1ZXN0LmZpcnN0LmdldCgpLCBXVEZNb3ZlKHJlcXVl
c3Quc2Vjb25kKSk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9u
UGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFw
cHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgorICAgIC8vIFdlIHNob3Vs
ZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBv
biBvdXIgQVBJcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjAwMjQ2LgorICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKKyAgICAgICAgY2FsbE9u
TWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzXSB7CisgICAgICAgICAgICBzZW5kQ3JlYXRpb25QYXJh
bWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisjaWYgRU5BQkxFKFNFUlZJQ0Vf
V09SS0VSKQorICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5KCk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRl
RGlyZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwg
cGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKKyNlbmRpZgorICAgIGlmICghcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeS5p
c051bGwoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdy
aXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMu
aHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0
aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xp
Y3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVt
ZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsK
KyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1Zl
Y3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJB
c05vQWNjZXNzKCkpOworICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUg
OiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkp
CisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2Nv
bHMuYXBwZW5kKHNjaGVtZSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3Ry
aW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFn
ZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0g
V2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBh
cmFtZXRlcnMuY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBp
ZiAoU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRC
dW5kbGVEaXJlY3RvcnkoKTsgIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3Rvcnks
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRs
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgcGFyYW1l
dGVycy5kYXRhU3RvcmVQYXJhbWV0ZXJzID0gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zy
b21BbGxTdG9yZXMoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlh
bGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKK30KKworc3RhdGljIGJvb2wgYW55
UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAgIGZvciAo
YXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsK
KyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHko
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2Vy
dGlvbigpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjph
bGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRha2VV
SUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9j
ZXNzUHJveHkoKQorICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQb29sQWx3
YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01f
UFJPVE9DT0xfTUFOQUdFUikKICAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRo
aXMpCiAjZW5kaWYKLSAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBwcm9jZXNzUG9vbC5zaG91bGRU
YWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisgICAgLCBtX3Rocm90dGxlcigqdGhpcywgYW55
UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCiB7CiAgICAgY29u
bmVjdCgpOwogfQpAQCAtMTA0LDE2ICsxOTIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmdldExhdW5jaE9wdGlvCiB7CiAgICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9IFByb2Nl
c3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Ok5ldHdvcms7CiAgICAgQXV4aWxpYXJ5UHJvY2Vzc1By
b3h5OjpnZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9wdGlvbnMpOwotCi0gICAgaWYgKHByb2Nlc3NQ
b29sKCkuc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkp
IHsKLSAgICAgICAgcHJvY2Vzc1Bvb2woKS5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNz
TGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOwotICAgICAgICBsYXVuY2hPcHRpb25zLnNob3Vs
ZE1ha2VQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB0cnVlOwotICAgIH0KLQotI2lmIFBM
QVRGT1JNKFBMQVlTVEFUSU9OKQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1BhdGggPSBtX3By
b2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9wdGlvbnMudXNlcklk
ID0gbV9wcm9jZXNzUG9vbC51c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24p
CkBAIC0xNjYsMTIgKzI0NCwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNp
emVBcHBJCiAgICAgfQogfQogCi1Eb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpj
cmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1l
SW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCitEb3dubG9hZFByb3h5JiBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRh
dGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQ
YWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKIHsKICAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1h
cCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwID0gbWFrZVVuaXF1ZTxEb3dubG9hZFByb3h5
TWFwPigqdGhpcyk7CiAKLSAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3du
bG9hZFByb3h5KGRhdGFTdG9yZSwgbV9wcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFt
ZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CisgICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+
Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHByb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVl
c3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRj
aE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChXZWJzaXRlRGF0
YSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yMzcsOCArMzE1LDggQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpuZXR3b3JrUHJvY2VzcwogewogICAgIGNsZWFyQ2FsbGJhY2tTdGF0ZXMo
KTsKIAotICAgIC8vIFRlbGwgdGhlIG5ldHdvcmsgcHJvY2VzcyBtYW5hZ2VyIHRvIGZvcmdldCBh
Ym91dCB0aGlzIG5ldHdvcmsgcHJvY2VzcyBwcm94eS4gVGhpcyB3aWxsIGNhdXNlIHVzIHRvIGJl
IGRlbGV0ZWQuCi0gICAgbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRoaXMp
OworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vz
c1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRo
aXMpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNsZWFyQ2FsbGJhY2tTdGF0ZXMo
KQpAQCAtMjU4LDkgKzMzNiw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2
ZU1lc3MKICAgICBpZiAoZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5kaXNwYXRjaE1lc3NhZ2UoY29u
bmVjdGlvbiwgZGVjb2RlcikpCi0gICAgICAgIHJldHVybjsKLQogICAgIGRpZFJlY2VpdmVOZXR3
b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIApAQCAtMjc0
LDggKzM0OSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZVN5bmMKIAog
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewot
ICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwot
CiAgICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFw
LT5pbnZhbGlkYXRlKCk7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdF
UikKQEAgLTMzNCwxMSArNDA3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNl
aXZlQXV0aAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0b3BPcmlnaW4gfHwg
IW1fcHJvY2Vzc1Bvb2wuaXNTZXJ2aWNlV29ya2VyUGFnZUlEKHBhZ2VJRCkpIHsKLSAgICAgICAg
cHJvY2Vzc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHNlc3Npb25JRCwgV1RGTW92ZShhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgV2ViUGFn
ZVByb3h5Ojpmb3JNb3N0VmlzaWJsZVdlYlBhZ2VJZkFueShzZXNzaW9uSUQsICp0b3BPcmlnaW4s
IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIGF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlID0gV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIG5lZ290
aWF0ZWRMZWdhY3lUTFNdKGF1dG8qIHBhZ2UpIG11dGFibGUgewogICAgICAgICBpZiAoIXdlYWtU
aGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzk1LDExICs0NjMsNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzQ3Jh
c2hlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgaWYgKG1fcHJvY2Vzc1Bvb2wucHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKQotICAgICAg
ICBzZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHRydWUpOwotI2VuZGlmCiAgICAgCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9u
ID0gdGhpcy0+Y29ubmVjdGlvbigpLT54cGNDb25uZWN0aW9uKCkpCkBAIC0xMTk3LDcgKzEyNjAs
OCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNldFRvU2FtZVNpdGVTCiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewotICAgIHByb2Nlc3NQb29s
KCkuc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oV1RGTW92ZShkb21haW5zKSk7CisgICAg
Zm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMo
KSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhh
c2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHsgZG9tYWlucyB9KTsKIH0KICNlbmRp
ZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCkBAIC0xMjYyLDE0ICsxMzI2
LDE0IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkU3luY0FsbENvb2sKICAgICB9CiB9
CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFT
dG9yZT4mJiBzdG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJz
aXRlRGF0YVN0b3JlJiBzdG9yZSkKIHsKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAg
ICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBz
dG9yZS0+cGFyYW1ldGVycygpIH0sIDApOwotICAgIGF1dG8gc2Vzc2lvbklEID0gc3RvcmUtPnNl
c3Npb25JRCgpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vi
c2l0ZURhdGFTdG9yZSB7IHN0b3JlLnBhcmFtZXRlcnMoKSB9LCAwKTsKKyAgICBhdXRvIHNlc3Np
b25JRCA9IHN0b3JlLnNlc3Npb25JRCgpOwogICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFs
KCkpIHsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAgICAgY3JlYXRlU3ltTGlu
a0ZvckZpbGVVcGdyYWRlKHN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgp
KTsKKyAgICAgICAgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHN0b3JlLnJlc29sdmVkSW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5KCkpOwogI2VuZGlmCiAgICAgfQogfQpAQCAtMTI4MiwxNiAr
MTM0Niw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbigKIAogV2Vi
c2l0ZURhdGFTdG9yZSogTmV0d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21T
ZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIGlmIChzZXNzaW9uSUQg
PT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBpZiAoIVdl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkgewotICAgICAgICAgICAg
YXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgp
OwotICAgICAgICAgICAgaWYgKHdlYnNpdGVEYXRhU3RvcmUgJiYgd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCkgPT0gc2Vzc2lvbklEKQotICAgICAgICAgICAgICAgIHJldHVybiB3ZWJzaXRl
RGF0YVN0b3JlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYnNpdGVEYXRh
U3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQp
OworICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Np
b25JRChzZXNzaW9uSUQpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJldHJpZXZl
Q2FjaGVTdG9yYWdlUGFyYW1ldGVycyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCkBAIC0xMzM4
LDcgKzEzOTMsOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZERlc3Ryb3lXZWJVCiAj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojplc3Rh
Ymxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoUmVnaXN0cmFibGVE
b21haW4mJiByZWdpc3RyYWJsZURvbWFpbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9j
ZXNzUG9vbC5lc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3Mo
KnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCBzZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICBhdXRvIGFnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgZm9yIChhdXRvKiBw
cm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJv
Y2VzcygqdGhpcywgUmVnaXN0cmFibGVEb21haW4ge3JlZ2lzdHJhYmxlRG9tYWlufSwgc2Vzc2lv
bklELCBbYWdncmVnYXRvciA9IGFnZ3JlZ2F0b3IuY29weVJlZigpXSgpIHsgfSk7CiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2VyQ29udGV4dENvbm5lY3Rpb25Ob0xvbmdlck5l
ZWRlZChXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBpZGVudGlmaWVyKQpAQCAtMTUwMSwxNiAr
MTU1OCwzNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnByZWNvbm5lY3RUbyhQCiAgICAg
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByZWNvbm5lY3RUbyhzZXNzaW9uSUQsIHdl
YlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQsIHVybCwgdXNlckFnZW50LCBzdG9yZWRDcmVkZW50aWFs
c1BvbGljeSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiksIDApOwogfQogCitzdGF0aWMg
Ym9vbCBhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKQoreworICAgIGZv
ciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
IHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKQor
eworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vz
c1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5oYXNCYWNrZ3JvdW5kV2ViUHJv
Y2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRp
b24oKQogewotICAgIGlmIChwcm9jZXNzUG9vbCgpLmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMo
KSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9vbEhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkg
ewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRGb3JlZ3JvdW5kQWN0aXZp
dHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5
RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0eSgiTmV0d29y
a2luZyBmb3IgZm9yZWdyb3VuZCB2aWV3KHMpIl9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNzRGlkVHJhbnNpdGlvblRvRm9yZWdyb3VuZCgpLCAw
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChwcm9jZXNzUG9v
bCgpLmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgeworICAgIGlmIChhbnlQcm9jZXNzUG9v
bEhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkgewogICAgICAgICBpZiAoIVByb2Nlc3NUaHJv
dHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkobV9hY3Rpdml0eUZyb21XZWJQcm9jZXNz
ZXMpKSB7CiAgICAgICAgICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IHRocm90dGxl
cigpLmJhY2tncm91bmRBY3Rpdml0eSgiTmV0d29ya2luZyBmb3IgYmFja2dyb3VuZCB2aWV3KHMp
Il9zKTsKICAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcm9jZXNz
RGlkVHJhbnNpdGlvblRvQmFja2dyb3VuZCgpLCAwKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCShyZXZpc2lv
biAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTAgQEAgbmFtZXNwYWNlIElQ
QyB7CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFz
cyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xh
c3MgU2Vzc2lvbklEOwogfQpAQCAtNzQsNyArNzgsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNs
YXNzIERvd25sb2FkUHJveHk7CiBjbGFzcyBEb3dubG9hZFByb3h5TWFwOwogY2xhc3MgV2ViUGFn
ZVByb3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eTsKIAogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MgOiBi
b29sOwpAQCAtMTAyLDEyICsxMDUsMTMgQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVl
ZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5n
IE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGlj
aXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBOZXR3
b3JrUHJvY2Vzc1Byb3h5JiBzaW5nbGV0b24oKTsKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vz
c1Byb3h5KCk7CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAogICAgIHZvaWQgZ2V0TmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIAot
ICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBX
ZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRl
RG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiwgV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVBy
b3h5KiBvcmlnaW5hdGluZ1BhZ2UpOwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6
U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhRmV0Y2hPcHRpb24+LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7
CiAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CkBAIC0yMDMsMTMgKzIwNywxMSBAQCBwdWJs
aWM6CiAgICAgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVyKCkgZmluYWwgeyByZXR1cm4gbV90
aHJvdHRsZXI7IH0KICAgICB2b2lkIHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKIAotICAgIFdl
YlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCgpIHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KLQog
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsK
ICNlbmRpZgogCi0gICAgdm9pZCBhZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsK
KyAgICB2b2lkIGFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYpOwogICAgIHZvaWQgcmVtb3Zl
U2Vzc2lvbihQQUw6OlNlc3Npb25JRCk7CiAgICAgCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCkBAIC0yMjUsNiArMjI3LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1l
Rm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lz
dGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyNpZiBF
TkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQorICAgIEFQSTo6Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KiBsZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSB7
IHJldHVybiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5nZXQoKTsgfQorI2VuZGlmCisK
KyAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRR
dW90YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAg
IHZvaWQgcmVzb3VyY2VMb2FkRGlkU2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwg
UmVzb3VyY2VMb2FkSW5mbyYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8
SVBDOjpGb3JtRGF0YVJlZmVyZW5jZT4mJik7CkBAIC0yNDMsNiArMjUxLDkgQEAgcHVibGljOgog
ICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVudGlmaWVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CiAKIHByaXZhdGU6CisgICAgdm9pZCBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9j
ZXNzKCk7CisgICAgc3RhdGljIHZvaWQgYXR0ZW1wdFJlbGF1bmNoQWZ0ZXJDcmFzaElmTmVjZXNz
YXJ5KFZlY3RvcjxzdGQ6OnBhaXI8UmVmPFdlYlByb2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseT4+JiYp
OworCiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5CiAgICAgQVNDSUlMaXRlcmFsIHByb2Nl
c3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIk5ldHdvcmtpbmciX3M7IH0KIApAQCAtMjUw
LDcgKzI2MSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpD
b25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwcm9jZXNzV2lsbFNodXREb3duKElQQzo6
Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
KTsKICAgICB2b2lkIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKIAogICAgIC8vIElQQzo6Q29ubmVj
dGlvbjo6Q2xpZW50CkBAIC0zMDYsOCArMzE2LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJv
Y2Vzc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eT4mJik7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9jZXNz
UG9vbDsKLQogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChX
ZWJzaXRlRGF0YSk+PiBtX3BlbmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhh
c2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVs
ZXRlV2Vic2l0ZURhdGFDYWxsYmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnND
YWxsYmFja3M7CkBAIC0zNDUsNiArMzUzLDEwIEBAIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8
TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICB9OwogI2VuZGlmCisK
KyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQorICAgIHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0JKHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw4ICs1MSw3IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZl
bnRIYW5kbGUKICAgICBpZiAobWVzc2FnZU5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQ
Q0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5h
bWUpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZE5ldHdvcmtQ
cm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoZXZlbnQpOworICAgIC8vIEZJWE1FOiBOb3Qg
c3VyZSB3aGF0IGVxdWl2YWxlbnQgaXMgaGVyZS4KIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNyArNDQsMjAgQEAgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHk6On5MZWdhYwogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5OjpzdGFydExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Q
cm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0g
ICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KCkuc3RhcnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0
KTsKKyAgICBpZiAoYXV0byogY2xpZW50ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkubGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+
c3RhcnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKIH0KIAogdm9p
ZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RvcExvYWRpbmcoTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElEKQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQ
cm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2Fk
aW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKKyAgICBpZiAoYXV0byogY2xpZW50ID0gTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkubGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+c3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3Rv
Y29sSUQpOwogfQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZh
bGlkYXRlKCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsKKyAgICBpZiAoYXV0
byogY2xpZW50ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkubGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+aW52YWxpZGF0ZSgqdGhp
cyk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6Ondhc1JlZGly
ZWN0ZWRUb1JlcXVlc3QoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAko
cmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNp
bmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9yYWdl
QWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRDYWNoZS5oIgorI2luY2x1
ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdDJJbml0aWFsaXpl
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NhY2hl
LmgiCkBAIC03NSw2ICs3NiwxMCBAQAogI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3JkaW5h
dG9yLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkRlZmF1bHRX
ZWJCcm93c2VyQ2hlY2tzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRp
YyBib29sIGFsbG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnM7CkBAIC04MywxMyAr
ODgsMjIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphbGxvd1dlYnNpdGVEYXRhUgogICAgIGFs
bG93c1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMgPSB0cnVlOwogfQogCi1zdGF0aWMg
SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBub25EZWZhdWx0RGF0
YVN0b3JlcygpCitzdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9y
ZSo+JiBhbGxEYXRhU3RvcmVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1VJVGhyZWFkKCkp
OwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJz
aXRlRGF0YVN0b3JlKj4+IG1hcDsKICAgICByZXR1cm4gbWFwOwogfQogCitWZWN0b3I8V2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxs
U3RvcmVzKCkKK3sKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGFsbFBh
cmFtZXRlcnM7CisgICAgYWxsUGFyYW1ldGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFsbERh
dGFTdG9yZXMoKS5zaXplKCkpOworICAgIGZvciAoYXV0byogc3RvcmUgOiBhbGxEYXRhU3RvcmVz
KCkudmFsdWVzKCkpCisgICAgICAgIGFsbFBhcmFtZXRlcnMudW5jaGVja2VkQXBwZW5kKHN0b3Jl
LT5wYXJhbWV0ZXJzKCkpOworICAgIHJldHVybiBhbGxQYXJhbWV0ZXJzOworfQorCiBSZWY8V2Vi
c2l0ZURhdGFTdG9yZT4gV2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlTm9uUGVyc2lzdGVudCgpCiB7
CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0
b3JlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKElzUGVyc2lzdGVudDo6Tm8pLCBQQUw6OlNlc3Npb25J
RDo6Z2VuZXJhdGVFcGhlbWVyYWxTZXNzaW9uSUQoKSkpOwpAQCAtMTE1LDEwICsxMjksMTEgQEAg
V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8VwogI2VuZGlmCiB7CiAgICAg
V1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJlUmVn
aXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7
CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmFkZFNlc3Npb24oKnRo
aXMpOwogfQogCiBXZWJzaXRlRGF0YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCkBAIC0xMjgs
MTcgKzE0MywxMiBAQCBXZWJzaXRlRGF0YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCiAKICAg
ICBwbGF0Zm9ybURlc3Ryb3koKTsKIAotICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFTU0VSVChub25EZWZhdWx0RGF0
YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7Ci0gICAgICAgIG5vbkRlZmF1bHRE
YXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbW92ZVNlc3Npb24obV9zZXNz
aW9uSUQpOwotICAgICAgICB9Ci0gICAgfQorICAgIEFTU0VSVChhbGxEYXRhU3RvcmVzKCkuZ2V0
KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKKyAgICBhbGxEYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vz
c2lvbklEKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5yZW1vdmVTZXNz
aW9uKG1fc2Vzc2lvbklEKTsKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChh
dXRvKiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRl
ZCgpKQotICAgICAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lv
bklEKTsKKyAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b25JZkNyZWF0ZWQoKSkKKyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNz
aW9uKG1fc2Vzc2lvbklEKTsKICNlbmRpZgogfQogCkBAIC0xNjksMTcgKzE3OSwxNSBAQCBib29s
IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFCiAgICAgcmV0dXJuICEhZ2xvYmFs
RGVmYXVsdERhdGFTdG9yZSgpOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVn
aXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJX
aXRoU2Vzc2lvbklETWFwKCkKIHsKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9u
SUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IG5vbkRlZmF1
bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKLSAgICAgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICB9CisgICAgYXV0byByZXN1bHQg
PSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogfQogCi1XZWJzaXRlRGF0YVN0b3JlKiBX
ZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQorV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFT
dG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklEKQogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCkgOiBudWxs
cHRyOworICAgIHJldHVybiBhbGxEYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJv
Y2VzcykKQEAgLTE5NSwxMiArMjAzLDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1bnJlZ2lz
dGVyUHJvY2VzcwogICAgIG1fcHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsKIH0KIAotV2ViUHJv
Y2Vzc1Bvb2wqIFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9w
ZXJhdGlvbnMoKQotewotICAgIGF1dG8gcG9vbHMgPSBwcm9jZXNzUG9vbHMoMSk7Ci0gICAgcmV0
dXJuIHBvb2xzLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBwb29scy5iZWdpbigpLT5nZXQoKTsKLX0K
LQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgp
CiB7CiAgICAgaWYgKG1faGFzUmVzb2x2ZWREaXJlY3RvcmllcykKQEAgLTQ0Myw4ICs0NDUsNiBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5CiAgICAgICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3Jr
UHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6
Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6
CkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRB
cHBseQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFk
ZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCktPmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRp
b25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0
ZURhdGEpIHsKKyAgICAgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmZl
dGNoV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsK
ICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFj
ayhXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAt
NzI3LDggKzcyNyw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb24K
ICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7CiAgICAgICAgICAgICBz
d2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2FzZSBQcm9j
ZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vz
c1R5cGU6OkxhdW5jaDoKQEAgLTc0MCw3ICs3MzgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnJlbW92ZURhdGEoT3B0aW9uCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFU
eXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsK
KyAgICAgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmRlbGV0ZVdlYnNp
dGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC04OTEsMTQgKzg4OSw5IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb24KICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSkgewogICAgICAgICBpZiAoIWRpZE5vdGlmeU5ldHdv
cmtQcm9jZXNzVG9EZWxldGVXZWJzaXRlRGF0YSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAg
ICAgICAgICAgICAgICBwcm9jZXNzLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0
YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygp
OwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5kZWxldGVX
ZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1v
dmVQZW5kaW5nQ2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKQEAgLTk5Miw4ICs5
ODUsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uCiAgICAgICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChu
ZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vz
c1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpM
YXVuY2g6CkBAIC0xMDE5LDcgKzEwMTAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92
ZURhdGEoT3B0aW9uCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVn
YXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKG1fc2Vzc2lvbklELCBk
YXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNUU0NhY2hlSG9zdE5hbWVzLCBy
ZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7Cisg
ICAgICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5kZWxldGVXZWJzaXRl
RGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9z
dE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNr
QWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
IH0KQEAgLTExODMsOCArMTE3NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3Rh
dGlzdGljc0UKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtX3Nlc3Npb25JRCwg
bWF4aW11bUVudHJ5Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldE1heFN0YXRpc3RpY3NF
bnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3du
VG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTExOTMsOCArMTE4Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93
blRvKG1fc2Vzc2lvbklELCBwcnVuZVRhcmdldENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5z
ZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3Jh
bmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIwMyw4ICsxMTkyLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAg
ICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyaW5n
VGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0R3JhbmRm
YXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRh
dGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTMsMjAgKzEyMDEsMTMgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1l
QmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vz
c2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogICAgIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZHVtcFJlc291
cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMzgs
MTIgKzEyMTksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNQcmV2YWxlbnRSZXNv
dXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuaXNQcmV2YWxlbnRS
ZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyNTUsMTIgKzEyMzEs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNHcmFuZGZhdGhlcmVkKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTI3NCw4ICsxMjQ1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRQcmV2YWxlbnRSZXNvdQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJj
ZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01v
ZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTEyODksMTAgKzEyNTksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFByZXZhbGVudFJlc291CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBwcm9jZXNzLT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291
cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNWZXJ5UHJl
dmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMDQsMTIgKzEyNzEsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzVmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZl
cnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTMyMywxMCArMTI4NSw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFIKICAgICAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VmVyeVBy
ZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0VmVyeVByZXZhbGVudFJlc291
cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNo
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMzUs
OCArMTI5NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnkKICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRTaG91bGRD
bGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFs
dWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkws
IGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTEzNTAsMjIgKzEzMDgsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRTdWJmcmFtZVVuZGVyVAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29u
c3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3ViRnJh
bWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFt
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmlzUmVnaXN0ZXJlZEFz
U3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBz
dWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJj
ZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM3OSwyMyArMTMyOSwxNCBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVS
TCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNz
UG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRv
cEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHBy
b2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuaXNSZWdp
c3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwm
IHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQwOSwxMCArMTM1MCw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmkKIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3Rl
ZFRvIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVz
b3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8g
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNl
VVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDI0LDEyICsxMzYyLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29u
c3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDEsMTIgKzEzNzQs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBV
UkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDU4LDI1ICsxMzg2LDE0
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWUKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNv
bnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVn
aXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFs
c2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmlzUmVnaXN0ZXJlZEFz
UmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGly
ZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ4OCw0NiArMTQw
NSwyNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNsZWFy
UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nl
c3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwg
W10geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc3Vi
bWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoV2FsbFRpbWUgbW9kaWZp
ZWRTaW5jZSwgU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3VsZEdyYW5kZmF0aGVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCht
X3Nlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vz
c2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE1NzAsMjIgKzE0NjgsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzY2hlZHVsZUNsZWFySW5NZQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAg
ICAgCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hvdWxkR3Jh
bmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zY2hlZHVsZUNsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2No
ZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vz
c2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNTk0LDI0ICsxNDg0
LDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWMKICAgICAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxl
U3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpLnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vz
c2luZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPnN0YXRpc3RpY3NEYXRhYmFz
ZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnN0YXRp
c3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0
IFVSTCYgdXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE2MjMsMjIgKzE1MDIsMTQgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnNldExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuc2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKGludCBkb21haW5JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmRvbWFpbklERXhp
c3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nl
c3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwxLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vj
b25kcyBsYXN0U2VlbiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFNlY29uZHMgbW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQs
IGJvb2wgaXNWZXJ5UHJldmFsZW50LCB1bnNpZ25lZCBkYXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NTAsMTAgKzE1
MjEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yCiAKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bWVyZ2VTdGF0aXN0aWNG
b3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVy
YWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJl
dmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW3Byb2Nlc3NQb29s
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBk
YXRhUmVjb3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3Qg
VVJMJiB1cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxs
QnV0Q29va2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NjUsMTggKzE1MzMsMTQgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdAogCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBo
YWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWws
IGlzUHJldmFsZW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuaW5zZXJ0RXhwaXJlZFN0
YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVE
YXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1
bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjg0LDggKzE1NDgsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291CiAgICAgdXNlRXhwbGljaXRJ
VFBTdGF0ZSgpOwogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRJc1J1bm5p
bmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3Rv
cmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJiBkb21haW5zKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE2OTYsNyArMTU1OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxs
U3RvcmFnZUFjY2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdlYlBhZ2UtPnByb2Nl
c3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxsU3RvcmFnZUFj
Y2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50
cmllcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAKQEAg
LTE3MDQsOCArMTU2Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVz
ZXIKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9u
SUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2luZ2xldG9uKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3MTksMTAgKzE1ODEs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvCiAgICAgCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1VzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkubG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTE3MzQsMTMgKzE1OTMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRl
cmFjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmhhc0hh
ZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9u
c2hpcE9ubHlJbkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QgVVJMJiB0b3BV
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xNzUyLDEzICsxNjA1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hp
cE9ubAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1Jl
bGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BV
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5pc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNl
T25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJVcmwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0
aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xNzcyLDEwICsxNjE5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpj
bGVhclVzZXJJbnRlcmFjdAogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAg
ICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuY2xlYXJVc2VySW50ZXJh
Y3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3ODksMTAgKzE2
MzMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoCiAgICAgCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFu
ZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldEdyYW5kZmF0aGVyZWQobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJl
ZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODAxLDEwICsxNjQyLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9u
SUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwg
dmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoY29uc3Qg
VVJMJiBmcm9tVVJMLCBjb25zdCBVUkwmIHRvVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODEzLDYyICsxNjUxLDM4IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFcKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0Rl
Y29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9LCBbcHJv
Y2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlv
bkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJv
bVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJMIH0sIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDcm9zc1Np
dGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENyb3NzU2l0ZUxvYWRz
V2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9u
SUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaW5jbHVkZUh0
dHBPbmx5Q29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5kZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFz
TG9jYWxTdG9yYWdlRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxl
cihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuaGFzTG9jYWxT
dG9yYWdlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNJc29sYXRlZFNlc3Npb24obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0
aW9uSGFuZGxlcihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
aGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVy
cmVyRm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJG
b3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFNob3VsZERvd25ncmFkZVJlZmVy
cmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAj
aWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMTg5OSwxMCArMTcxMyw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2sKICAgICAgICAgICAgIHdlYlByb2Nlc3Muc2V0VGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFRoaXJk
UGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwgYmxv
Y2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3Ry
aWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkxMCwxMCArMTcyMSw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3QKICAgICBhdXRvIGZsYWcgPSBlbmFi
bGVkID8gV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6OlllcyA6IFdl
YkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKIAogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91
bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBm
bGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NG
aXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTIxLDIw
ICsxNzI5LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3QKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBhdXRvIG1vZGUgPSBlbmFibGVkID8gV2Vi
Q29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXMgOiBX
ZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9uZTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldEZpcnN0UGFy
dHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5z
ZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIApAQCAtMTk0Myw4
ICsxNzQ1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcAogI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1h
eEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vj
b25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KHNlY29uZHMpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0xOTU2LDIyICsxNzU3LDEy
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFnZUMKICNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENhY2hlTWF4QWdlQ2FwRm9y
UHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5yZXNldENhY2hl
TWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlmCiB9
CiAKLWJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJv
Y2Vzc1Bvb2wmIHByb2Nlc3NQb29sKSBjb25zdAotewotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9v
bERhdGFTdG9yZSA9IHByb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKSkKLSAgICAgICAgcmV0
dXJuIHByb2Nlc3NQb29sRGF0YVN0b3JlID09IHRoaXM7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
CiBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nl
c3NQb29scyhzaXplX3QgbGltaXQpIGNvbnN0CiB7CiAgICAgSGFzaFNldDxSZWZQdHI8V2ViUHJv
Y2Vzc1Bvb2w+PiBwcm9jZXNzUG9vbHM7CkBAIC0xOTg2LDkgKzE3NzcsNiBAQCBIYXNoU2V0PFJl
ZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVECiAgICAgaWYgKHByb2Nlc3NQb29scy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgb25lIG9mIHRoZSBsZWdhY3kgZGF0
YSBzdG9yZXMuCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9v
bDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmICghaXNBc3NvY2lhdGVkUHJv
Y2Vzc1Bvb2woKnByb2Nlc3NQb29sKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQogICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7CiAgICAgICAgICAgICBpZiAo
cHJvY2Vzc1Bvb2xzLnNpemUoKSA9PSBsaW1pdCkKICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTIxNDgsOCArMTkzNiw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2Fk
U3QKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShtX3Nl
c3Npb25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdN
b2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CiAgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRp
b25IYW5kbGVyKTsKQEAgLTIxNjQsMjAgKzE5NTEsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojppc1Jlc291cmNlTG9hZFN0YQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1f
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuaXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAjZW5kaWYKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxz
ZSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVi
dWdNb2RlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5h
YmxlZCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjE5
OSwyOSArMTk4MCw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJjZUxvYWQK
IH0KICNlbmRpZgogCi1WZWN0b3I8V2ViQ29yZTo6Q29va2llPiBXZWJzaXRlRGF0YVN0b3JlOjpw
ZW5kaW5nQ29va2llcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihtX3BlbmRp
bmdDb29raWVzKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29va2ll
KGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMu
cmVtb3ZlSWYoWyZjb29raWVdKGF1dG8mIHBlbmRpbmdDb29raWUpIHsKLSAgICAgICAgcmV0dXJu
IHBlbmRpbmdDb29raWUuaXNLZXlFcXVhbChjb29raWUpOwotICAgIH0pOwotICAgIG1fcGVuZGlu
Z0Nvb2tpZXMuYWRkKGNvb2tpZSk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3Zl
UGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3Bl
bmRpbmdDb29raWVzLnJlbW92ZShjb29raWUpOwotfQotICAgIAotdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpjbGVhclBlbmRpbmdDb29raWVzKCkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLmNsZWFy
KCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9u
PHZvaWQoKT4mJiBmdW5jdGlvbikKIHsKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChXVEZNb3ZlKGZ1
bmN0aW9uKSk7CkBAIC0yMjQ1LDggKzIwMDMsNiBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cyBXZWJzaXRlRGF0YVN0CiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwog
Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdDb29raWVzKCk7Ci0KICAg
ICBhdXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24t
PnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhhbmRsZTsKICAgICBpZiAo
IXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtMjM0NCw3ICsy
MTAwLDE0IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3QKICAgICBw
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5lbmFibGVkID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDsKICNl
bmRpZgogICAgIHBsYXRmb3JtU2V0TmV0d29ya1BhcmFtZXRlcnMocGFyYW1ldGVycyk7CisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
YXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVz
dGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CisjZW5kaWYKIAorI2lmIFVTRShT
T1VQKQorICAgIFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5nZXRD
b29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQoKSwgcGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBwYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworI2Vu
ZGlmCisgICAgCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CiAKQEAgLTIzOTgsMTAgKzIxNjEs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURlCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJv
Y2Vzcy0+cmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucmVzZXRRdW90YSht
X3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFURk9S
TShDT0NPQSkKQEAgLTI0MzksMzQgKzIxOTksMjEgQEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERldgogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vz
c2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBj
b25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0FwcEJvdW5kU2Vzc2lv
bihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsK
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5oYXNBcHBCb3VuZFNlc3Npb24o
bV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhckFwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9z
ZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5jbGVhckFwcEJvdW5kU2Vzc2lv
bihtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFVSTCYmIG9sZE5hbWUsIFVS
TCYmIG5ld05hbWUsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNz
UG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp0aGlzKTsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1l
LCBkYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuYWRkU2Vzc2lvbigqdGhpcyk7
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucmVuYW1lT3JpZ2luSW5XZWJz
aXRlRGF0YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0yNDg5LDcg
KzIyMzYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvCiAKICAg
ICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpLmdldCgp
LCAqYXBwQm91bmREb21haW5zKTsKIAotICAgIGZvciAoYXV0byogc3RvcmUgOiBub25EZWZhdWx0
RGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgIGZvciAoYXV0byogc3RvcmUgOiBhbGxEYXRhU3Rv
cmVzKCkudmFsdWVzKCkpCiAgICAgICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhzdG9yZSwg
KmFwcEJvdW5kRG9tYWlucyk7CiB9CiAKQEAgLTI0OTcsMTAgKzIyNDQsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0QXBwQm91bmREb21haW5z
Rm9yUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuc2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Np
b25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZgogCkBA
IC0yNTA4LDE2ICsyMjUyLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxl
SWRlbnQKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVy
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1
bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJv
Y2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBXZWJzaXRlRGF0YVN0b3JlKFJlZjxX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbj4mJiwgUEFMOjpTZXNzaW9uSUQpOwogICAgIH5X
ZWJzaXRlRGF0YVN0b3JlKCk7CiAKLSAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3Rp
bmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKKyAgICBz
dGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFM
OjpTZXNzaW9uSUQpOwogCiAgICAgYm9vbCBpc1BlcnNpc3RlbnQoKSBjb25zdCB7IHJldHVybiAh
bV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKTsgfQogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CkBAIC0yMjYsMTUgKzIyNiw4IEBAIHB1
YmxpYzoKIAogICAgIERldmljZUlkSGFzaFNhbHRTdG9yYWdlJiBkZXZpY2VJZEhhc2hTYWx0U3Rv
cmFnZSgpIHsgcmV0dXJuIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuZ2V0KCk7IH0KIAotICAg
IFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7
Ci0gICAgYm9vbCBpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYpIGNvbnN0
OwotCiAgICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgcGFyYW1ldGVycygpOwotCi0gICAg
VmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXMoKSBjb25zdDsKLSAgICB2b2lk
IGFkZFBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCByZW1v
dmVQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgY2xlYXJQ
ZW5kaW5nQ29va2llcygpOworICAgIHN0YXRpYyBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM+IHBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKCk7CiAKICAgICB2b2lkIGRpc3BhdGNoT25R
dWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYpOwogCkBAIC0zNDIsNyArMzM1LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsKICAgICBzdGF0aWMgdm9p
ZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5
LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKIAotICAgIHZv
aWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2b2lkIHJlZ2lzdGVyV2l0
aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgc3RhdGljIE9wdGlv
bmFsPEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiBhcHBCb3VuZERvbWFpbnNJ
ZkluaXRpYWxpemVkKCk7CkBAIC0zODAsOCArMzczLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCB7IHRydWUgfTsKICNlbmRpZgogCi0g
ICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1fcGVuZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAg
V2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3NlczsKIAogICAgIGJvb2wgbV9p
c0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVE
YXRhU3RvcmVTb3VwLmNwcAkocmV2aXNpb24gMjY1MjQ5KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDggKzM5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNl
dE5ldHdvcgogICAgIGF1dG8mIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwogICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5w
ZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gbV9wZXJzaXN0ZW50Q3JlZGVudGlh
bFN0b3JhZ2VFbmFibGVkOwogCi0gICAgaWYgKGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bv
b2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVu
dFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0
b3JhZ2VUeXBlKTsKKyAgICBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9u
KCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoYm9vbCBlbmFi
bGVkKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlH
TGliLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlBy
b2Nlc3NQcm94eUdMaWIuY3BwCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE8KICAg
ICAgICAgaWYgKCFkYXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8vIFByZXdhcm1lZCBwcm9jZXNz
ZXMgZG9uJ3QgaGF2ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBzbyB1c2UgdGhlIHByaW1hcnkg
V2Vic2l0ZURhdGFTdG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9vbC4KICAgICAgICAgICAgIC8v
IFRoZSBwcm9jZXNzIHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBXZWJzaXRlRGF0YVN0b3JlIGlz
IGRpZmZlcmVudCB0aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IG9uZS4KLSAgICAgICAg
ICAgIGRhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICAg
ICAgICAgIGRhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5w
dHIoKTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRhU3RvcmUpOwpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eVNvdXAuY3BwCShyZXZpc2lvbiAyNjUyNDkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2ll
TWFuYWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5j
bHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bv
b2wuaCIKIApAQCAtMzQsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCiB7CiAgICAgbV9jb29raWVQZXJzaXN0ZW50U3Rv
cmFnZU1hcC5zZXQoc2Vzc2lvbklELCBzdGQ6Om1ha2VfcGFpcihzdG9yYWdlUGF0aCwgc3RvcmFn
ZVR5cGUpKTsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lv
bklELCBzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSksIDAp
OwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llUGVyc2lzdGVudFN0
b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3Vw
Q29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlJiBzdG9yYWdlVHlwZSkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5j
cHAJKHJldmlzaW9uIDI2NTI0OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2Vi
UHJvY2Vzc1Bvb2xTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMzAgKzM3LDI0IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1l
dGVycykKIHsKLSAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYgZGVmYXVsdFNl
c3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAgc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKGRlZmF1bHRTZXNzaW9uUGFyYW1l
dGVycy5zZXNzaW9uSUQsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50
U3RvcmFnZVBhdGgsIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3Rv
cmFnZVR5cGUpOwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIGRlZmF1bHRT
ZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKCk7Cisg
ICAgLy8gRklYTUU6IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kgc2hvdWxkIGJlIG1v
dmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgorICAgIC8vIEZJWE1FOiBtX2lnbm9yZVRMU0Vy
cm9ycyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUgb3IgcmVtb3ZlZC4K
KyAgICAvLyBGSVhNRTogbV9uZXR3b3JrUHJveHlTZXR0aW5ncyBzaG91bGQgYmUgbW92ZWQgdG8g
dGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAKLSAgICBwYXJhbWV0ZXJzLmNvb2tpZUFjY2VwdFBvbGlj
eSA9IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7Ci0gICAgcGFyYW1ldGVycy5pZ25v
cmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRMU0Vycm9yczsKICAgICBwYXJhbWV0ZXJzLmxhbmd1YWdl
cyA9IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKTsKLSAgICBwYXJhbWV0ZXJzLnByb3h5U2V0dGlu
Z3MgPSBtX25ldHdvcmtQcm94eVNldHRpbmdzOwogICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxl
SVRQRGF0YWJhc2UgPSB0cnVlOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRJZ25vcmVU
TFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCiB7CiAgICAgbV9pZ25vcmVUTFNFcnJvcnMg
PSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5l
dHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJZ25vcmVU
TFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0SWdub3JlVExT
RXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKGNvbnN0IFdlYkNvcmU6OlNvdXBOZXR3b3JrUHJveHlT
ZXR0aW5ncyYgc2V0dGluZ3MpCiB7CiAgICAgbV9uZXR3b3JrUHJveHlTZXR0aW5ncyA9IHNldHRp
bmdzOwotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3Mo
bV9uZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlT
ZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7CiB9CiAKIH0KSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTI0
OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisy
MDIwLTA4LTA2ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgVXNlIGEgTmV0d29ya1Byb2Nlc3NQcm94eSBzaW5nbGV0b24gaW5zdGVhZCBvZiBv
bmUgcGVyIFdlYlByb2Nlc3NQb29sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDM1NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29v
a2llU3RvcmUubW06CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2Fp
dEZvck1lc3NhZ2VdKToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBh
bGVydENvb2tpZUhUTUxdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoLVtDaGVja1Nlc3Np
b25Db29raWVVSURlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVz
c2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorCiAy
MDIwLTA4LTA0ICBIZWN0b3IgTG9wZXogIDxoZWN0b3JfaV9sb3BlekBhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIG15c2VsZiB0byBjb250cmlidXRvcnMuanNvbgpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVO
YW1lLm1tCShyZXZpc2lvbiAyNjUyNDkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0
OSw3IEBAIC0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVyOihXS1VzZXJDb24KIAogQGVuZAog
Ci1zdGF0aWMgdm9pZCBydW5UZXN0KCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoYm9vbCBvbGRGaWxl
U2hvdWxkRXhpc3QgPSB0cnVlKQogewogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tJbmRl
eGVkREJGaWxlTmFtZU1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CiAgICAgYXV0byBjb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
KTsKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdCgpCiAgICAgTlNVUkwgKm9s
ZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbkRpcmVjdG9yeVVSTCBVUkxC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwogICAgIE5TVVJMICpuZXdWZXJz
aW9uT3JpZ2luRGlyZWN0b3J5VVJMID0gW25ld1ZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAgICBOU1VSTCAqb2xkVmVyc2lvblVu
dXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnVudXNlZERhdGFiYXNlTmFtZV07Ci0gICAgRVhQ
RUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRo
Om9sZFZlcnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSk7CisgICAgRVhQRUNU
X1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOm9s
ZFZlcnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRoXSA9PSBvbGRGaWxlU2hvdWxk
RXhpc3QpOwogICAgIAogICAgIC8vIEZvciBkYXRhYmFzZSB0aGF0IGlzIG9wZW5lZCBhZnRlciB1
cGdyYWRlLCBpdHMgZmlsZSBzaG91bGQgb25seSBiZSBpbiB2MS4KICAgICBOU1VSTCAqb2xkVmVy
c2lvbkV4aXN0aW5nRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbk9yaWdpbkRpcmVj
dG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IGV4aXN0aW5nRGF0YWJhc2VOYW1l
XTsKQEAgLTE1NCw3ICsxNTQsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVEaXJlY3RvcmllcyhTdHJp
bmcgdGVzCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCRmlsZU5hbWUpCiB7CiAgICAgY3JlYXRl
RGlyZWN0b3JpZXMoIm5vbmUiKTsKLSAgICBydW5UZXN0KCk7CisgICAgcnVuVGVzdChmYWxzZSk7
CiB9CiAKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJGaWxlTmFtZVYwKQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVz
b3VyY2VMb2FkU3RhdGlzdGljcy5tbQkocmV2aXNpb24gMjY1MjQ5KQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDkgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LCBHcmFuZGZhdGhlcgogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVx
dWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJhYm91dDpibGFuayJdXV07CiAKICAg
ICBpZiAoaXNJVFBEYXRhYmFzZUVuYWJsZWQoKSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIldB
SVQgMSIpOwogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdyYW5kZmF0aGVyZWRG
bGFnKTsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJXQUlUIDEiKTsKIAogICAgICAgICAvLyBTaW5j
ZSB0aGUgZGF0YWJhc2Ugc3RvcmUgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBkaXNhYmxlIGl0IHRv
IHRlc3QgdGhpcyBmdW5jdGlvbmFsaXR5IHdpdGggdGhlIHBsaXN0LgogICAgICAgICAvLyBXZSBh
bHJlYWR5IGhhdmUgYSBOZXR3b3JrUHJvY2VzcyB1cCBhbmQgcnVubmluZyB3aXRoIElUUCBlbmFi
bGVkLiBXZSBub3cgbWFrZSBhbm90aGVyIGNhbGwgaW5pdGlhbGl6aW5nCkBAIC0xMzcsMTggKzEz
OSwyNCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIEdyYW5kZmF0aGVyCiAgICAgICAg
ICAgICBkb25lRmxhZyA9IHRydWU7CiAgICAgICAgIH1dOwogCisgICAgICAgIFdURkxvZ0Fsd2F5
cygiV0FJVCAyIik7CiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcp
OworICAgICAgICBXVEZMb2dBbHdheXMoIldBSVQgMiIpOwogICAgIH0KIAorICAgIFdURkxvZ0Fs
d2F5cygiV0FJVCAzIik7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZncmFuZGZhdGhl
cmVkRmxhZyk7CisgICAgV1RGTG9nQWx3YXlzKCJXQUlUIDMiKTsKIAogICAgIC8vIFNwaW4gdGhl
IHJ1bmxvb3AgdW50aWwgdGhlIHJlc291cmNlIGxvYWQgc3RhdGlzdGljcyBmaWxlIGhhcyB3cml0
dGVuIHRvIGRpc2suCiAgICAgLy8gSWYgdGhlIHRlc3QgZW50ZXJzIGEgc3BpbiBsb29wIGhlcmUs
IGl0IGhhcyBmYWlsZWQuCisgICAgV1RGTG9nQWx3YXlzKCJXQUlUIDQiKTsKICAgICB3aGlsZSAo
dHJ1ZSkgewogICAgICAgICBpZiAoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxl
RXhpc3RzQXRQYXRoOmZpbGVVUkwucGF0aF0pCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CiAgICAgfQorICAgIFdURkxvZ0Fs
d2F5cygiV0FJVCA0Iik7CiAKICAgICBncmFuZGZhdGhlcmVkRmxhZyA9IGZhbHNlOwogICAgIGRv
bmVGbGFnID0gZmFsc2U7CkBAIC0xNTYsNyArMTY0LDkgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLCBHcmFuZGZhdGhlcgogICAgICAgICBkb25lRmxhZyA9IHRydWU7CiAgICAgfV07CiAK
KyAgICBXVEZMb2dBbHdheXMoIldBSVQgNSIpOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZG9uZUZsYWcpOworICAgIFdURkxvZ0Fsd2F5cygiV0FJVCA1Iik7CiAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMTApOwogCiAgICAgLy8gVGhlIHdlYnNpdGUgZGF0YSBz
dG9yZSByZW1vdmUgc2hvdWxkIGhhdmUgY29tcGxldGVkLCBidXQgc2luY2Ugd2UgcmVtb3ZlZCBh
bGwgb2YgdGhlIGRhdGEgdHlwZXMgdGhhdCBhcmUgbW9uaXRvcmVkIGJ5IHJlc291cmNlIGxvYWQg
c3RhdGlzdGljcywKQEAgLTE3MSwxNiArMTgxLDIyIEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlz
dGljcywgR3JhbmRmYXRoZXIKIAogICAgIC8vIFNpbmNlIHdlIGRpZCBub3QgcmVtb3ZlIGV2ZXJ5
IGRhdGEgdHlwZSBjb3ZlcmVkIGJ5IHJlc291cmNlIGxvYWQgc3RhdGlzdGljcywgd2UgZG8gZXhw
ZWN0IHRoYXQgZ3JhbmRmYXRoZXJpbmcgdG9vayBwbGFjZSBhZ2Fpbi4KICAgICAvLyBJZiB0aGUg
dGVzdCBoYW5ncyB3YWl0aW5nIG9uIGVpdGhlciBvZiB0aGVzZSBjb25kaXRpb25zLCBpdCBoYXMg
ZmFpbGVkLgorICAgIFdURkxvZ0Fsd2F5cygiV0FJVCA2Iik7CiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZncmFuZGZhdGhlcmVkRmxhZyk7CisgICAgV1RGTG9nQWx3YXlzKCJXQUlUIDYi
KTsKKyAgICBXVEZMb2dBbHdheXMoIldBSVQgNyIpOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZUZsYWcpOworICAgIFdURkxvZ0Fsd2F5cygiV0FJVCA3Iik7CiAKICAgICAvLyBT
cGluIHRoZSBydW5sb29wIHVudGlsIHRoZSByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3MgZmlsZSBo
YXMgd3JpdHRlbiB0byBkaXNrLgogICAgIC8vIElmIHRoZSB0ZXN0IGVudGVycyBhIHNwaW4gbG9v
cCBoZXJlLCBpdCBoYXMgZmFpbGVkLgorICAgIFdURkxvZ0Fsd2F5cygiV0FJVCA4Iik7CiAgICAg
d2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYgKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl0gZmlsZUV4aXN0c0F0UGF0aDpmaWxlVVJMLnBhdGhdKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKDEpOwogICAgIH0KKyAgICBX
VEZMb2dBbHdheXMoIldBSVQgOCIpOwogfQogCiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3Ms
IEdyYW5kZmF0aGVyQ2FsbGJhY2tEYXRhYmFzZSkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvVExTRGVwcmVjYXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UTFNEZXByZWNhdGlvbi5tbQkocmV2aXNp
b24gMjY1MjQ5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UTFNE
ZXByZWNhdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw4IEBAIFRFU1QoVExT
VmVyc2lvbiwgTmV0d29ya1Nlc3Npb24pCiAgICAgfTsKICAgICB7CiAgICAgICAgIFRDUFNlcnZl
ciBzZXJ2ZXIoVENQU2VydmVyOjpQcm90b2NvbDo6SFRUUFMsIFRDUFNlcnZlcjo6cmVzcG9uZFdp
dGhPSywgdGxzMV8xKTsKLSAgICAgICAgYXV0byB3ZWJWaWV3ID0gbWFrZVdlYlZpZXdXaXRoKFtX
S1dlYnNpdGVEYXRhU3RvcmUgZGVmYXVsdERhdGFTdG9yZV0pOworICAgICAgICBfV0tXZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbW19XS1dlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGF1
dG8gd2ViVmlldyA9IG1ha2VXZWJWaWV3V2l0aChbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2Nd
IF9pbml0V2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdKTsKICAg
ICAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpb
TlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImh0dHBzOi8v
MTI3LjAuMC4xOiVkLyIsIHNlcnZlci5wb3J0KCldXV1dOwogICAgICAgICBbZGVsZWdhdGUgd2Fp
dEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwogICAgIH0KQEAgLTIwMiw3ICsyMDMsOCBAQCBURVNU
KFRMU1ZlcnNpb24sIE5ldHdvcmtTZXNzaW9uKQogICAgICAgICBUQ1BTZXJ2ZXIgc2VydmVyKFRD
UFNlcnZlcjo6UHJvdG9jb2w6OkhUVFBTLCBbXShTU0wgKnNzbCkgewogICAgICAgICAgICAgRVhQ
RUNUX0ZBTFNFKHNzbCk7CiAgICAgICAgIH0sIHRsczFfMSk7Ci0gICAgICAgIGF1dG8gd2ViVmll
dyA9IG1ha2VXZWJWaWV3V2l0aChbV0tXZWJzaXRlRGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVd
KTsKKyAgICAgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRp
b24gPSBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdOworICAgICAgICBhdXRvIHdlYlZpZXcgPSBtYWtlV2ViVmlld1dpdGgoW1tbV0tX
ZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b25dIGF1dG9yZWxlYXNlXSk7CiAgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJl
cXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCJodHRwczovLzEyNy4wLjAuMTolZC8iLCBzZXJ2ZXIucG9ydCgpXV1dXTsK
ICAgICAgICAgW2RlbGVnYXRlIHdhaXRGb3JEaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uXTsK
ICAgICB9CkBAIC00MzksNiArNDQxLDE2IEBAIFRFU1QoVExTVmVyc2lvbiwgQmFja0ZvcndhcmRI
YXNPbmx5U2VjdXIKICAgICBFWFBFQ1RfRkFMU0UoW3dlYlZpZXcgaGFzT25seVNlY3VyZUNvbnRl
bnRdKTsKIH0KIAorVEVTVChXZWJLaXQsIFRlc3RTZXJ2ZXIpCit7CisgICAgSFRUUFNlcnZlciBz
ZXJ2ZXIoeworICAgICAgICB7ICIvIiwgeyAiPGlmcmFtZSBzcmM9aWZyYW1lLmh0bWw+PC9pZnJh
bWU+IiB9fSwKKyAgICAgICAgeyAiL2lmcmFtZS5odG1sIiwgeyAzMDEsIHt7ICJMb2NhdGlvbiIs
ICIvcmVkaXJlY3RUYXJnZXQiIH19IH0gfSwKKyAgICAgICAgeyAiL3JlZGlyZWN0VGFyZ2V0Iiwg
eyB7eyAiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgfX0sICJ0ZXN0
ZGF0YSIgfX0sCisgICAgfSk7CisgICAgTlNMb2coQCJodHRwOi8vMTI3LjAuMC4xOiVkLyIsIHNl
cnZlci5wb3J0KCkpOworICAgIENGUnVuTG9vcFJ1bigpOworfQogI2VuZGlmIC8vIEhBVkUoTkVU
V09SS19GUkFNRVdPUkspICYmIEhBVkUoVExTX1BST1RPQ09MX1ZFUlNJT05fVCkKIAogfQpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9y
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dLSFRUUENvb2tpZVN0b3JlLm1tCShyZXZpc2lvbiAyNjUyNDkpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00NzksOCArNDc5LDYgQEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJW
aWV3IHJ1bgogfQogQGVuZAogCi0vLyBGSVhNRTogb24gaU9TLCBVSSBwcm9jZXNzIHNob3VsZCBi
ZSB1c2luZyB0aGUgc2FtZSBjb29raWUgZmlsZSBhcyB0aGUgbmV0d29yayBwcm9jZXNzIGZvciBk
ZWZhdWx0IHNlc3Npb24uCi0jaWYgUExBVEZPUk0oTUFDKQogZW51bSBjbGFzcyBTaG91bGRFbmFi
bGVQcm9jZXNzUHJld2FybWluZyB7IE5vLCBZZXMgfTsKIHZvaWQgcnVuV0tIVFRQQ29va2llU3Rv
cmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxk
RW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcpCiB7CkBAIC01ODksMjAgKzU4Nyw2NiBAQCBURVNUKFdL
SFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1BvCiAgICAgcnVuV0tIVFRQQ29va2llU3Rv
cmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmc6Olllcyk7
CiB9CiAKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hlY2tTZXNzaW9u
Q29va2llVUlEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJRGVsZWdhdGU+CistIChOU1N0cmluZyAq
KWFsZXJ0Q29va2llSFRNTDsKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2U7CiBAZW5kCiAK
LUBpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlCitAaW1wbGVtZW50
YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TU3Ry
aW5nPiBfbWVzc2FnZTsKK30KKwogLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBp
bml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIEVYUEVDVF9TVFJFUSgiU2Vz
c2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiLCBtZXNzYWdlLlVURjhTdHJpbmcpOworICAgIF9t
ZXNzYWdlID0gbWVzc2FnZTsKICAgICBmaW5pc2hlZCA9IHRydWU7CiAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKIH0KKworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZQoreworICAgIHdoaWxl
ICghX21lc3NhZ2UpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7
CisgICAgcmV0dXJuIF9tZXNzYWdlLmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5TU3RyaW5nICop
YWxlcnRDb29raWVIVE1MCit7CisgICAgcmV0dXJuIEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRv
Y3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVu
Z3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNv
cnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOworfQorCiBAZW5kCiAK
K1RFU1QoV2ViS2l0LCBXS0hUVFBDb29raWVTdG9yZU11bHRpcGxlVmlld3MpCit7CisgICAgVGVz
dFdLV2ViVmlldyAqd2ViVmlldzEgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07
CisgICAgW3dlYlZpZXcxIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5ldHdv
cmsgcHJvY2VzcyJdOworCisgICAgTlNIVFRQQ29va2llICpzZXNzaW9uQ29va2llID0gW05TSFRU
UENvb2tpZSBjb29raWVXaXRoUHJvcGVydGllczpAeworICAgICAgICBOU0hUVFBDb29raWVQYXRo
OiBAIi8iLAorICAgICAgICBOU0hUVFBDb29raWVOYW1lOiBAIlNlc3Npb25Db29raWVOYW1lIiwK
KyAgICAgICAgTlNIVFRQQ29va2llVmFsdWU6IEAiQ29va2llVmFsdWUiLAorICAgICAgICBOU0hU
VFBDb29raWVEb21haW46IEAiMTI3LjAuMC4xIiwKKyAgICB9XTsKKworICAgIF9fYmxvY2sgYm9v
bCBzZXRDb29raWVEb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcxLmNvbmZpZ3VyYXRpb24ud2Vi
c2l0ZURhdGFTdG9yZS5odHRwQ29va2llU3RvcmUgc2V0Q29va2llOnNlc3Npb25Db29raWUgY29t
cGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgc2V0Q29va2llRG9uZSA9IHRydWU7CisgICAgfV07
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzZXRDb29raWVEb25lKTsKKworICAgIGF1
dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIG5ld10p
OworICAgIFt3ZWJWaWV3MSBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3
ZWJWaWV3MSBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJM
OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNv
b2tpZVZhbHVlIik7CisKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbVGVzdFdLV2Vi
VmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0ZTpkZWxl
Z2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcyIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVy
dENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAu
MC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAi
U2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKK30KKwogVEVTVChXS0hUVFBDb29raWVT
dG9yZSwgV2l0aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKIHsKICAgICBSZXRhaW5Q
dHI8V0tXZWJzaXRlRGF0YVN0b3JlPiBlcGhlbWVyYWxTdG9yZVdpdGhDb29raWVzID0gW1dLV2Vi
c2l0ZURhdGFTdG9yZSBub25QZXJzaXN0ZW50RGF0YVN0b3JlXTsKQEAgLTYyNyw5ICs2NzEsOCBA
QCBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1BvCiAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CiAgICAgZmluaXNoZWQgPSBmYWxzZTsKICAgICAK
LSAgICBOU1N0cmluZyAqYWxlcnRDb29raWVIVE1MID0gQCI8c2NyaXB0PnZhciBjb29raWVzID0g
ZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5s
ZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMu
c29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Ci0gICAgW3dlYlZp
ZXcgbG9hZEhUTUxTdHJpbmc6YWxlcnRDb29raWVIVE1MIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhT
dHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZmluaXNoZWQpOworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVy
dENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAu
MC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAi
U2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKIH0KIAogc3RhdGljIGJvb2wgYXJlQ29v
a2llc0VxdWFsKE5TSFRUUENvb2tpZSAqZmlyc3QsIE5TSFRUUENvb2tpZSAqc2Vjb25kKQpJbmRl
eDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI2
NTI0OSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTc0LDkgKzMxNzQsOCBAQCBQbGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250
cm9sbGVyOjpwbGF0Zm9yCiAgICAgcmV0dXJuIG5ldyBQbGF0Zm9ybVdlYlZpZXcoY29uZmlndXJh
dGlvbiwgb3B0aW9ucyk7CiB9CiAKLVdLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZv
cm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0
aW9uUmVmIGNvbnRleHRDb25maWd1cmF0aW9uKQorV0tDb250ZXh0UmVmIFRlc3RDb250cm9sbGVy
OjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLQ29udGV4dENv
bmZpZ3VyYXRpb25SZWYpCiB7Ci0gICAgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3Rv
cmUoY29udGV4dCwgZGVmYXVsdFdlYnNpdGVEYXRhU3RvcmUoKSk7CiAgICAgcmV0dXJuIGNvbnRl
eHQ7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406434</attachid>
            <date>2020-08-11 16:51:26 -0700</date>
            <delta_ts>2020-08-11 16:57:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20200811165125.patch</filename>
            <type>text/plain</type>
            <size>231458</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MzQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGUxOTY4MWU4YmI2MDc1MjVm
ZDY3NzkwMTFkZjg2MDM0OWE0ODQ0NDAuLmY3MjcwNGViMGZmODE1ODU0ZTk3ZWI2NzgwNmFiMTYx
MTgyZTlkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgyIEBACisyMDIwLTA4LTExICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIGEgTmV0
d29ya1Byb2Nlc3NQcm94eSBzaW5nbGV0b24gaW5zdGVhZCBvZiBvbmUgcGVyIFdlYlByb2Nlc3NQ
b29sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM1
NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZh
dWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKToK
KyAgICAgICAgKFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChX
S0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXS0NvbnRleHRT
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbToKKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2V0Q29va2llQWNjZXB0UG9saWN5Ol0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0
ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZTo6fl9XZWJLaXRDb29raWVN
YW5hZ2VyUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKToKKyAg
ICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKToKKyAg
ICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAg
ICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9jb29raWVzKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfY29va2llKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4
dC5jcHA6CisgICAgICAgICh3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
UHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lk
ZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9O
ZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojpz
dGFydExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RvcExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Omdsb2JhbE5ldHdv
cmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YXR0ZW1wdFJlbGF1bmNoQWZ0
ZXJDcmFzaElmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OmFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KToKKyAgICAgICAg
KFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vz
c1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25z
dCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJD
b250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzYWJs
ZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25P
dmVycmlkZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9y
VGVzdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9v
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xv
YmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29ya1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJMZWdhY3lQ
cml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5z
ZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVG
b3JTZXNzaW9uSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERh
dGFBbmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURh
dGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNz
RW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50
cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5k
ZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVC
bG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3Rp
Y0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50
cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNI
YWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpp
c1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRz
V2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3Rpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9k
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1Nh
bWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2
YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9j
ZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlc2V0UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNB
cHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQ
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRp
ZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1
bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJv
Y2Vzc1Bvb2wgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwZW5kaW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdv
cmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dl
YnNpdGVEYXRhU3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2ds
aWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
cm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291
cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIw
MjAtMDgtMDYgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBX
VEY6Om1ha2VTdHJpbmcoKSBzaG91bGQgaGFuZGxlIGVudW0gdmFsdWVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5j
cHAKaW5kZXggZmNlMjM4OTg3YTc4NTBmMThjOWYzMDZjNTBlOThjZTk4OGQxMjVmZC4uZWI1OGZj
OTQ1ZDE5MjU1NDYxYjg2MGY0YThiOGRjNjEyNWY1M2Y4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcApA
QCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6c2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwKIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyOjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
Y29tcGxldGlvbkhhbmRsZXIobV9wcm9jZXNzLmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmNvb2tp
ZUFjY2VwdFBvbGljeSgpKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihtX3Byb2Nlc3Muc3RvcmFn
ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSktPmNvb2tpZUFjY2Vw
dFBvbGljeSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDc5MDg1N2Q1NzZiMTU0
NGYzMmMzMDA1YzhlMzc5YWU5ODNkMzNiYWUuLmRjMjMzMGYyNDUwNDE3YTg3Y2Q5MmNjMTU2YThi
ZWUxYWMxYzlmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwCkBAIC0zNDUsMjkgKzM0NSwxOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpp
bml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMm
JgogCiAgICAgc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKHBhcmFtZXRlcnMuZW5hYmxl
QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKTsKIAotICAgIFNhbmRib3hFeHRlbnNpb246OmNv
bnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5k
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5z
ZXNzaW9uSUQ7Ci0gICAgc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVh
dGUoKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7Ci0KLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25z
dW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNo
ZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIGFkZFNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLQorICAgIGZvciAoYXV0byYgZGF0YVN0b3JlUGFyYW1ldGVycyA6IHBhcmFtZXRl
cnMuZGF0YVN0b3JlUGFyYW1ldGVycykgeworICAgICAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKKyAgICAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGRhdGFTdG9yZVBhcmFtZXRl
cnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkU2Vz
c2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnBl
ck9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhLCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eSwgZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIGFkZEluZGV4ZWREYXRhYmFz
ZVNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAg
ICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1ldGVy
cy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgotCisgICAgICAgIG1fc3Rv
cmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1
cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbigqdGhpcywgV1RGTW92ZShkYXRhU3RvcmVQYXJhbWV0
ZXJzKSk7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGJvb2wgc2VydmljZVdvcmtl
clByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCA9IHRydWU7Ci0gICAgYWRkU2VydmljZVdv
cmtlclNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc2VydmljZVdv
cmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBhZGRTZXJ2
aWNlV29ya2VyU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFTdG9yZVBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShkYXRhU3RvcmVQYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBkYXRhU3RvcmVQYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwogI2VuZGlmCi0KLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byogZGVmYXVsdFNlc3Npb24gPSBuZXR3b3Jr
U2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLSAgICBhdXRvKiBk
ZWZhdWx0U3RvcmFnZVNlc3Npb24gPSBkZWZhdWx0U2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNz
aW9uKCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjb29raWUgOiBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzKQotICAgICAgICBkZWZhdWx0U3RvcmFn
ZVNlc3Npb24tPnNldENvb2tpZShjb29raWUpOworICAgIH0KIAogICAgIGZvciAoYXV0byYgc3Vw
cGxlbWVudCA6IG1fc3VwcGxlbWVudHMudmFsdWVzKCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPmlu
aXRpYWxpemUocGFyYW1ldGVycyk7CkBAIC00MjcsMTIgKzQxNyw2IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmNyZWF0ZU5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKFByb2Nlc3NJZGVudGlm
aWVyIGlkZW50CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMo
KQogewotICAgIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuY2xl
YXJDcmVkZW50aWFscygpOwotICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5l
dHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpKQotICAgICAg
ICBuZXR3b3JrU2Vzc2lvbi0+Y2xlYXJDcmVkZW50aWFscygpOwotICAgIGVsc2UKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KICAgICBmb3JFYWNoTmV0d29ya1Nlc3Npb24oW10gKGF1
dG8mIG5ldHdvcmtTZXNzaW9uKSB7CiAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VTZXNzaW9uID0g
bmV0d29ya1Nlc3Npb24ubmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkpCiAgICAgICAgICAgICBzdG9y
YWdlU2Vzc2lvbi0+Y3JlZGVudGlhbFN0b3JhZ2UoKS5jbGVhckNyZWRlbnRpYWxzKCk7CkBAIC01
MTIsOCArNDk2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihjb25zdCBQ
QUw6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBib29sIHNob3VsZFUKIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBz
aG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllckJh
c2UpCiAjZW5kaWYKIHsKLSAgICBBU1NFUlQoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCkpOwotCiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX25ldHdvcmtTdG9y
YWdlU2Vzc2lvbnMuYWRkKHNlc3Npb25JRCwgbnVsbHB0cik7CiAgICAgaWYgKCFhZGRSZXN1bHQu
aXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTI4LDcgKzUxMCw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25J
RCwgYm9vbCBzaG91bGRVCiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZklkZW50aWZpZXIg
PSBtYWtlU3RyaW5nKGlkZW50aWZpZXJCYXNlLCAiLlByaXZhdGVCcm93c2luZy4iLCBjcmVhdGVD
YW5vbmljYWxVVUlEU3RyaW5nKCkpLmNyZWF0ZUNGU3RyaW5nKCk7CiAgICAgaWYgKHNlc3Npb25J
RC5pc0VwaGVtZXJhbCgpKQogICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9IGFkb3B0Q0YoY3JlYXRl
UHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGNmSWRlbnRpZmllci5nZXQoKSkpOwotICAgIGVsc2UKKyAg
ICBlbHNlIGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmNyZWF0ZUNGU3RvcmFnZVNlc3Npb25Gb3JJZGVudGlmaWVyKGNmSWRlbnRpZmllci5nZXQo
KSk7CiAKICAgICBpZiAoTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpwcm9jZXNzTWF5VXNlQ29va2ll
QVBJKCkpIHsKQEAgLTU1MSwyMSArNTMzLDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNvb2tp
ZUFjY2VwdFBvbGljeUNoYW5nZWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSBuZXdQb2xpY3kpCiAK
IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VT
ZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpIGNvbnN0CiB7Ci0gICAgaWYg
KHNlc3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQotICAgICAg
ICByZXR1cm4gJmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwogICAgIHJldHVybiBtX25ldHdvcmtT
dG9yYWdlU2Vzc2lvbnMuZ2V0KHNlc3Npb25JRCk7CiB9CiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYgTmV0d29ya1Byb2Nlc3M6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24pCi0gICAgICAgIG1f
ZGVmYXVsdE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiA9IHBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3Jh
Z2VTZXNzaW9uKCk7Ci0gICAgcmV0dXJuICptX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb247
Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU3RvcmFnZVNlc3Npb24o
Y29uc3QgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mKT4mIGZ1
bmN0b3IpCiB7Ci0gICAgZnVuY3RvcihkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSk7CiAgICAgZm9y
IChhdXRvJiBzdG9yYWdlU2Vzc2lvbiA6IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9ucy52YWx1ZXMo
KSkKICAgICAgICAgZnVuY3Rvcigqc3RvcmFnZVNlc3Npb24pOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IDRkZmExNGM4NzgzZGEyMjZj
MzI4MDQwYTMyZDU5YzVhNTkzNzA3MzkuLmJkNzQ5ZDY4YjczOTIwYjQ5MjM4MDc4ODJkMjlhYTgw
YmM3NzZiYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKQEAgLTE3MCw3ICsxNzAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZvckVhY2hOZXR3
b3JrU3RvcmFnZVNlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mKT4mKTsKICAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHN0
b3JhZ2VTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJikgY29uc3Q7Ci0gICAgV2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdDsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBuZXdUZXN0
aW5nU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpOwogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIHZvaWQgZW5zdXJlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYsIGJvb2wgc2hvdWxk
VXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiYmKTsKQEAgLTM2OSw3ICszNjgsNiBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
cyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IHBsYXRmb3JtQ3JlYXRlRGVm
YXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIGRpZFJlY2VpdmVOZXR3b3Jr
UHJvY2Vzc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CiAKQEAgLTU0
Niw3ICs1NDQsNiBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtTZXNzaW9uPj4gbV9uZXR3b3JrU2Vzc2lvbnM7CiAgICAgSGFz
aE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbj4+IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9uczsKLSAgICBtdXRhYmxlIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG1fZGVmYXVsdE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjsKIAogICAgIFJlZlB0cjxTdG9yYWdlTWFuYWdlclNldD4gbV9zdG9y
YWdlTWFuYWdlclNldDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRleCBh
YThjZTc1M2M2MzIwN2QyYTYwZDVkM2UwMTdiMmUwZWJmNDU2MjZkLi5hMjRjMjBiM2Y4NzdmYTNi
YWFjNjI4NTIzM2M4N2QxMTBlNjFmZjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcApAQCAtNTYsNyArNTYsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIElQQzo6ZW5jb2Rl
KGVuY29kZXIsIG5ldHdvcmtBVFNDb250ZXh0LmdldCgpKTsKICAgICBlbmNvZGVyIDw8IHN0b3Jh
Z2VBY2Nlc3NBUElFbmFibGVkOwogI2VuZGlmCi0gICAgZW5jb2RlciA8PCBkZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVyczsKKyAgICBlbmNvZGVyIDw8IGRhdGFTdG9yZVBhcmFtZXRlcnM7CiAjaWYg
VVNFKFNPVVApCiAgICAgZW5jb2RlciA8PCBjb29raWVBY2NlcHRQb2xpY3k7CiAgICAgZW5jb2Rl
ciA8PCBpZ25vcmVUTFNFcnJvcnM7CkBAIC02OSw5ICs2OSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiAgICAgZW5jb2RlciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgZW5jb2Rl
ciA8PCB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCi0gICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5IDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUg
PDwgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKLSNl
bmRpZgogICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiAgICAgZW5jb2Rl
ciA8PCBlbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGU7CiAgICAgZW5jb2RlciA8PCBo
c3RzU3RvcmFnZURpcmVjdG9yeTsKQEAgLTEyMSwxMSArMTE4LDExIEBAIGJvb2wgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5l
dHdvcmtQcm9jCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0gICAgT3B0aW9uYWw8
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwot
ICAgIGRlY29kZXIgPj4gZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnM7Ci0gICAgaWYgKCFkZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycykKKyAgICBPcHRpb25hbDxWZWN0b3I8V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM+PiBkYXRhU3RvcmVQYXJhbWV0ZXJzOworICAgIGRlY29kZXIgPj4gZGF0
YVN0b3JlUGFyYW1ldGVyczsKKyAgICBpZiAoIWRhdGFTdG9yZVBhcmFtZXRlcnMpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMgPSBX
VEZNb3ZlKCpkZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyk7CisgICAgcmVzdWx0LmRhdGFTdG9y
ZVBhcmFtZXRlcnMgPSBXVEZNb3ZlKCpkYXRhU3RvcmVQYXJhbWV0ZXJzKTsKIAogI2lmIFVTRShT
T1VQKQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvb2tpZUFjY2VwdFBvbGljeSkp
CkBAIC0xNDcsMjAgKzE0NCw2IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jCiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIXNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1
bHQuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdU
Rk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkRGlzYWJsZVNlcnZpY2VX
b3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNl
bmRpZgotCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkRW5hYmxlSVRQRGF0
YWJhc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaAppbmRleCBjZjE1Y2E0MWJmYmVhY2QzZGUxYzYzZTM3ZDM3MmRmZTI0OWM4NDk2Li43M2Nk
ZjJmYzQ0NGI0NWY2NGQzYzMyYzhlZjYzNmZmYjE1YzU1OTM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oCkBAIC03Miw3ICs3Miw3IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyB7CiAgICAgYm9vbCBzdG9yYWdlQWNjZXNzQVBJRW5hYmxlZDsKICNlbmRp
ZgogCi0gICAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnM7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkYXRhU3RvcmVQ
YXJhbWV0ZXJzOwogICAgIAogI2lmIFVTRShTT1VQKQogICAgIFdlYkNvcmU6OkhUVFBDb29raWVB
Y2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5IHsgV2ViQ29yZTo6SFRUUENvb2tpZUFjY2Vw
dFBvbGljeTo6QWx3YXlzQWNjZXB0IH07CkBAIC04NiwxMiArODYsNyBAQCBzdHJ1Y3QgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVt
ZXNSZWdpc3RlcmVkQXNMb2NhbDsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzTm9BY2Nlc3M7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgU3RyaW5n
IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGU7Ci0gICAgYm9vbCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlv
bkRlbGF5IHsgZmFsc2UgfTsKLSNlbmRpZgotICAgIGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0YWJh
c2UgeyBmYWxzZSB9OworICAgIGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgeyB0cnVlIH07
CiAgICAgYm9vbCBlbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUgeyBmYWxzZSB9Owog
ICAgIFN0cmluZyBoc3RzU3RvcmFnZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUgaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2Eu
bW0KaW5kZXggYWZiZDkzMGY0YjM1ZTI0OWE4OGExMDhmNTUxMWMwNGQ3ZWVkMzU1MS4uOGU3OGU2
YWZlYWI3ZTczMWQ1ZTIyMmViNjBlMjliNTJmOTFmMGMyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpA
QCAtODUsOSArODUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVO
ZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5l
bnRseShwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucGFy
ZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgX0NGTmV0d29y
a1NldEFUU0NvbnRleHQocGFyYW1ldGVycy5uZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CkBAIC0x
MTQsMTEgKzExMSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgW05TVVJMQ2FjaGUg
c2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1D
cmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIHJldHVybiBtYWtlVW5p
cXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIFJldGFpblB0cjxDRkRhdGFSZWY+IE5ldHdvcmtQcm9jZXNz
Ojpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgVVNFKFNPVVJDRV9B
UFBMSUNBVElPTl9BVURJVF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAppbmRleCBkOTlmOWRkNjRiYWQ2
ZTQyZGNjOGUzZjliOGYxNjkyOTk3ZjY3MTkyLi40OTUzODExYjIxNjRlODk4NDZmOTI3OWU2MjI5
ZDU5M2UyMjU2YTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1
cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcApAQCAtMzksMTEgKzM5LDYgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0
d29ya1Byb2Nlc3NDcmVhdGkKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0
b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
OwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0
ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IFN0
cmluZyYgaG9zdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5t
bQppbmRleCBjMjczNmUwMjZhNTVkM2Q0MDIwZjg0ZjRkNjkzZDE2YjQ2NTJlZDIzLi4xZTE4NDg5
Zjk0NjIwZjAyYTdkOWU5ZTg2OWVjODY0OTFiN2JiZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5t
bQpAQCAtNTUsMTUgKzU1LDExIEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3Vy
ZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3CiAgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNvb2tpZVN0b3Jh
Z2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9y
YWdlUmVmPiB1aVByb2Nlc3NDb29raWVTdG9yYWdlOwotICAgIGlmICghc2Vzc2lvbklELmlzRXBo
ZW1lcmFsKCkgJiYgIXBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIu
aXNFbXB0eSgpKQorICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgIXBhcmFtZXRl
cnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIHBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9yYWdlID0gY29v
a2llU3RvcmFnZUZyb21JZGVudGlmeWluZ0RhdGEocGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVT
dG9yYWdlSWRlbnRpZmllcik7CiAKICAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNl
c3Npb25JRCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVz
dGluZ05ldHdvcmtTZXNzaW9uLCBtYWtlU3RyaW5nKGJhc2UsICcuJywgc2Vzc2lvbklELnRvVUlu
dDY0KCkpLCBXVEZNb3ZlKHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UpKTsKIAotICAgIGF1dG8qIHNl
c3Npb24gPSBuZXR3b3JrUHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGZv
ciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAg
ICAgc2Vzc2lvbi0+c2V0Q29va2llKGNvb2tpZSk7Ci0KICAgICBuZXR3b3JrUHJvY2Vzcy5zZXRT
ZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2Vzcywg
V1RGTW92ZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNz
U291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nl
c3NTb3VwLmNwcAppbmRleCA2MGZhNTU2YjllNGY0ODc5NGQ1YWEyZjA1NjlmYmJkZWU2NTMyOTkw
Li4wMWNiYjdiYTliZDhhYzBmZjBjNWRmNGIzNDIyZjNkNzg0MzU2ZDJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3Vw
LmNwcApAQCAtMTQ0LDExICsxNDQsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUlu
aXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIH0p
OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBO
ZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZhdWx0U3RvcmFnZVNlc3Npb24oKSBjb25z
dAotewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bj4oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci19Ci0KIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9ycykKIHsKICAg
ICBTb3VwTmV0d29ya1Nlc3Npb246OnNldFNob3VsZElnbm9yZVRMU0Vycm9ycyhpZ25vcmVUTFNF
cnJvcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMuY3BwCmluZGV4IDZkMGMxMjlhNzQwNTEwZDM4Njk3MzcwNWFkMDkyZWYxMzJjYzA3
NWEuLjA0ODEwYjNlMTliZTk2Y2FkMWFkODJhNDRkY2VkYjI2ZWY3ODI2MWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKQEAg
LTQwLDEzICs0MCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZShJ
UEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnM7CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRp
ZmllcjsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwot
ICAgIGVuY29kZXIgPDwgcGVuZGluZ0Nvb2tpZXM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKICAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA8PCBpbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
QEAgLTgzLDEyICs3OSw2IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lv
bkhhbmRsZSA9IFdURk1vdmUoKmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAot
ICAgIE9wdGlvbmFsPFZlY3RvcjxXZWJDb3JlOjpDb29raWU+PiBwZW5kaW5nQ29va2llczsKLSAg
ICBkZWNvZGVyID4+IHBlbmRpbmdDb29raWVzOwotICAgIGlmICghcGVuZGluZ0Nvb2tpZXMpCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2ll
cyA9IFdURk1vdmUoKnBlbmRpbmdDb29raWVzKTsKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQogICAgIE9wdGlvbmFsPFN0cmluZz4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAg
IGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwpAQCAtMTAxLDE0ICs5MSw2IEBA
IE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgaWYgKCFpbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3Zl
KCppbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGlu
ZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29k
ZXIgPj4gaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0g
ICAgaWYgKCFpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRh
YmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERh
dGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYK
IAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IGYyN2RmNDg5ODA5ZjMxOTYwOGI2
ODBjYjJhOGExYzE0YjcwMTg0MzkuLmUxYjIzMzcwMTk5ZmUzNzAzMWU5ZGM1YzA1NzgxNTUwMjFl
MzRkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMuaApAQCAtNTEsMTUgKzUxLDExIEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycyB7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2llU3RvcmFnZUlk
ZW50aWZpZXI7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0b3JhZ2VQYXRo
RXh0ZW5zaW9uSGFuZGxlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29r
aWVzOwogICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzIG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVyczsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIFN0cmluZyBp
bmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBpbmRleGVkRGF0YWJhc2VUZW1w
QmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElIVFRQQ29va2llU3RvcmUuY3BwCmluZGV4IGE2ZTE1OTFlNTUwNDlkMjllNzc2MTQxOWFhMzE4
ZGYwMGE0Nzc5OGMuLmU1ZjE4ZWUxYmI4YzYyYTJlM2U0OTI2NzY1M2MxMDkyMDU0OGYxMjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUu
Y3BwCkBAIC00Niw4ICs0Niw2IEBAIG5hbWVzcGFjZSBBUEkgewogSFRUUENvb2tpZVN0b3JlOjpI
VFRQQ29va2llU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3Jl
KQogICAgIDogbV9vd25pbmdEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSkKIHsKLSAgICBpZiAo
IW1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25z
KCkpCi0gICAgICAgIHJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCk7CiB9
CiAKIEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCkBAIC01NSw4ICs1Myw2IEBA
IEhUVFBDb29raWVTdG9yZTo6fkhUVFBDb29raWVTdG9yZSgpCiAgICAgQVNTRVJUKG1fb2JzZXJ2
ZXJzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5
KTsKICAgICBBU1NFUlQoIW1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwotCi0gICAgdW5y
ZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwogfQogCiB2b2lkIEhUVFBD
b29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtODEsMzMgKzc3LDE2IEBAIHZvaWQg
SFRUUENvb2tpZVN0b3JlOjpmaWx0ZXJBcHBCb3VuZENvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mIGNvb2tpCiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnBy
b2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsK
LSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gYWxsQ29va2llczsKLSAgICAgICAgaWYg
KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKQotICAgICAgICAgICAgYWxsQ29va2llcyA9IGdldEFsbERlZmF1bHRVSVBy
b2Nlc3NDb29raWVTdG9yZUNvb2tpZXMoKTsKLSAgICAgICAgYWxsQ29va2llcy5hcHBlbmRWZWN0
b3IobV9vd25pbmdEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotCi0gICAgICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBhbGxDb29r
aWVzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhhbGxD
b29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+Z2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHBvb2wgPSBXVEZNb3ZlKHBvb2wpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1h
bmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAg
Y29va2llTWFuYWdlci5nZXRBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVz
KGNvb2tpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAogdm9p
ZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9v
bEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKQotICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIg
PSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAg
IGNvb2tpZU1hbmFnZXItPmdldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgp
LCB1cmwsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8V2ViQ29yZTo6Q29v
a2llPiYmIGNvb2tpZXMpIG11dGFibGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2llTWFuYWdl
ci5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsLCBbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mJiBjb29raWVz
KSBtdXRhYmxlIHsKICAgICAgICAgZmlsdGVyQXBwQm91bmRDb29raWVzKGNvb2tpZXMsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTExNSw4MSArOTQsMjkgQEAg
dm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNGb3JVUkwoV1RGOjpVUkwmJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG8KIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpzZXRDb29raWVz
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgZmlsdGVyQXBwQm91bmRDb29r
aWVzKGNvb2tpZXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgYXBwQm91
bmRDb29raWVzKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBuZWVkc0ZsdXNoID0gZmFsc2U7Ci0g
ICAgICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29r
aWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgICAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgICAg
IGZvciAoYXV0byYgY29va2llIDogYXBwQm91bmRDb29raWVzKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gRklYTUU6IHBlbmRpbmdDb29raWVzIHVzZWQgZm9yIGRlZmF1bHRTZXNzaW9uIGJlY2F1c2Ug
c2Vzc2lvbiBjb29raWVzIGNhbm5vdCBiZSBwcm9wYWdhdGVkIHRvIE5ldHdvcmsgUHJvY2VzcyB3
aXRoIHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLgotICAgICAgICAgICAgICAgIGlm
IChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pIHsKLSAgICAgICAgICAgICAgICAgICAg
bmVlZHNGbHVzaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHNldENvb2tpZUluRGVmYXVs
dFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5hZGRQZW5kaW5nQ29va2llKGNv
b2tpZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoKQotICAg
ICAgICAgICAgICAgIGZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byogY29va2llTWFuYWdlciA9
IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAg
ICAgIGNvb2tpZU1hbmFnZXItPnNldENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCBhcHBCb3VuZENvb2tpZXMsIFtwb29sID0gV1RGTW92ZShwb29sKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKKyAgICAgICAgYXV0byYgY29v
a2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsK
KyAgICAgICAgY29va2llTWFuYWdlci5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgfSk7CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpkZWxldGVDb29raWUoY29uc3QgV2Vi
Q29yZTo6Q29va2llJiBjb29raWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nl
c3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAoIXBvb2wpIHsKLSAg
ICAgICAgaWYgKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSA9PSBQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpICYmICFjb29raWUuc2Vzc2lvbikKLSAgICAgICAgICAgIGRl
bGV0ZUNvb2tpZUZyb21EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoY29va2llKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9vd25pbmdEYXRhU3RvcmUtPnJlbW92ZVBlbmRpbmdDb29r
aWUoY29va2llKTsKLQotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxX
ZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxl
dGVDb29raWUobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBjb29raWUsIFtwb29sID0g
V1RGTW92ZShwb29sKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICB9KTsK
KyAgICBhdXRvJiBjb29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnNpbmdsZXRvbigpOworICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQ29va2llKG1fb3duaW5nRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpkZWxldGVBbGxDb29raWVzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0g
bV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMo
KTsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIGRlbGV0ZUNvb2tpZXNJbkRlZmF1
bHRVSVByb2Nlc3NDb29raWVTdG9yZSgpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQWxsQ29va2ll
cyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkpOworICAgIGF1dG8mIGNvb2tpZU1hbmFn
ZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CisgICAgY29v
a2llTWFuYWdlci5kZWxldGVBbGxDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSk7CiAgICAgLy8gRklYTUU6IFRoZSBDb21wbGV0aW9uSGFuZGxlciBzaG91bGQgYmUgcGFzc2Vk
IHRvIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcy4KICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IEhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+
cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkg
ewotICAgICAgICBpZiAoIW1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJh
bCgpKQotICAgICAgICAgICAgc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeUluRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKHBvbGljeSk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBhdXRvKiBjb29raWVNYW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Cisg
ICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpz
aW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBwb2xpY3ksIFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKICAgICB9KTsKIH0KQEAgLTIyNywyMSArMTU0LDcgQEAgdm9pZCBI
VFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogCiAg
ICAgbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlciA9IG1ha2VVbmlxdWU8QVBJV2ViQ29va2ll
TWFuYWdlclByb3h5T2JzZXJ2ZXI+KCp0aGlzKTsKIAotICAgIGF1dG8qIHBvb2wgPSBtX293bmlu
Z0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotCi0g
ICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIEFTU0VSVCghbV9vYnNlcnZpbmdVSVByb2Nlc3NDb29r
aWVzKTsKLQotICAgICAgICAvLyBMaXN0ZW4gZm9yIGNvb2tpZSBub3RpZmljYXRpb25zIGluIHRo
ZSBVSVByb2Nlc3MgaW4gdGhlIG1lYW50aW1lLgotICAgICAgICBzdGFydE9ic2VydmluZ0NoYW5n
ZXNUb0RlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShbdGhpc10gKCkgewotICAgICAgICAgICAg
Y29va2llc0RpZENoYW5nZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICBtX29ic2VydmluZ1VJ
UHJvY2Vzc0Nvb2tpZXMgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9v
YnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9
ICZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbV9vYnNl
cnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0KIApAQCAt
Mjc2LDQ2ICsxODksMTAgQEAgdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZXNEaWRDaGFuZ2Uo
KQogdm9pZCBIVFRQQ29va2llU3RvcmU6OmNvb2tpZU1hbmFnZXJEZXN0cm95ZWQoKQogewogICAg
IG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnVucmVnaXN0ZXJPYnNlcnZlcihtX293bmlu
Z0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsK
LSAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gbnVsbHB0cjsKLQotICAgIGF1dG8q
IHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpOwotCi0gICAgaWYgKCFwb29sKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29i
c2VydmVkQ29va2llTWFuYWdlclByb3h5ID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKTsKKyAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5ID0g
JldlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKTsKICAgICBtX29ic2Vy
dmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5nRGF0YVN0b3Jl
LT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwogfQogCi12b2lk
IEhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMo
KQotewotICAgIEFTU0VSVCghbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVy
KTsKLQotICAgIG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRlbnRpZmllciA9IFdlYlBy
b2Nlc3NQb29sOjpyZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihbdGhpc10oV2Vi
UHJvY2Vzc1Bvb2wmIG5ld1Byb2Nlc3NQb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRh
U3RvcmUtPmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKG5ld1Byb2Nlc3NQb29sKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAvLyBOb3cgdGhhdCBhbiBhc3NvY2lhdGVkIHByb2Nlc3Mg
cG9vbCBleGlzdHMsIHdlIG5lZWQgdG8gZmx1c2ggdGhlIFVJIHByb2Nlc3MgY29va2llIHN0b3Jl
Ci0gICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIHdpdGhp
biB0aGUgbmV3IHByb2Nlc3MgcG9vbC4KLSAgICAgICAgZmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29v
a2llU3RvcmUoW10geyB9KTsKLSAgICAgICAgbmV3UHJvY2Vzc1Bvb2wuZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLQotICAgICAgICBpZiAobV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcikgewot
ICAgICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG5ld1Byb2Nlc3NQb29s
LnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgICAgICAg
ICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT5yZWdpc3Rlck9ic2VydmVyKG1fb3duaW5n
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgKm1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIpOwot
ICAgICAgICB9Ci0gICAgICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlv
bnMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0ZXJGb3JO
ZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKQotewotICAgIGlmIChtX3Byb2Nlc3NQb29sQ3Jl
YXRpb25MaXN0ZW5lcklkZW50aWZpZXIpCi0gICAgICAgIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lz
dGVyUHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVyKG1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3Rl
bmVySWRlbnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50
aWZpZXIgPSAwOwotfQotCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogdm9pZCBIVFRQQ29va2llU3Rv
cmU6OmZsdXNoRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgeyBjb21wbGV0aW9uSGFuZGxlcigpOyB9CiBWZWN0
b3I8V2ViQ29yZTo6Q29va2llPiBIVFRQQ29va2llU3RvcmU6OmdldEFsbERlZmF1bHRVSVByb2Nl
c3NDb29raWVTdG9yZUNvb2tpZXMoKSB7IHJldHVybiB7IH07IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElIVFRQQ29va2llU3RvcmUuaAppbmRleCAyMGRlYzY1NjU4OGEz
NThiY2QxYWY0MGNmZTdmZmE0MzI3ZjI0ZWM0Li5iMGIyYjgxMTM1MmU4ODRhZDZlMjRiOWVkMTJj
N2E3MWY2MTc0NTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
SFRUUENvb2tpZVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUhU
VFBDb29raWVTdG9yZS5oCkBAIC04Miw5ICs4Miw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
SFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYpOwogCi0gICAgdm9pZCBy
ZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotICAgIHZvaWQgdW5yZWdp
c3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9ucygpOwotCiAgICAgdm9pZCBmbHVzaERl
ZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwog
ICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBnZXRBbGxEZWZhdWx0VUlQcm9jZXNz
Q29va2llU3RvcmVDb29raWVzKCk7CiAgICAgc3RhdGljIHZvaWQgc2V0Q29va2llSW5EZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAppbmRleCA4ZmI4ZTA5NmQ0NjZlMjM2
MWNkYjUyMDNlZmM5YzU2OGM5ZTY5NTExLi5iNmQ4ODYxY2YzNDAyYzgyNDE4OWQxOWUzZDI3MDQ1
MmM2OTlhNGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5j
cHAKQEAgLTQyNiw5ICs0MjYsOSBAQCB2b2lkIFdLQ29udGV4dFByZWNvbm5lY3RUb1NlcnZlcihX
S0NvbnRleHRSZWYsIFdLVVJMUmVmKQogewogfQogCi1XS0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250
ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dFJlZikKK1dLQ29va2llTWFu
YWdlclJlZiBXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKFdLQ29udGV4dFJlZikKIHsKLSAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c3VwcGxlbWVu
dDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6
dG9BUEkoJldlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKSk7CiB9CiAK
IFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKFdLQ29u
dGV4dFJlZikKQEAgLTU0Myw5ICs1NDMsOCBAQCB2b2lkIFdLQ29udGV4dFNldEphdmFTY3JpcHRH
YXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLAogICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3Rv
clRpbWVyRW5hYmxlZChlbmFibGUpOwogfQogCi12b2lkIFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3
b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYgY29udGV4dCkKK3ZvaWQgV0tDb250ZXh0VXNlVGVzdGlu
Z05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZikKIHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250
ZXh0KS0+dXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKCk7CiB9CiAKIHZvaWQgV0tDb250ZXh0U2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nKFdLQ29udGV4dFJlZiBj
b250ZXh0LCBib29sIGFsbG93cykKQEAgLTU1MywxMyArNTUyLDYgQEAgdm9pZCBXS0NvbnRleHRT
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRlc3RpbmcoV0tDb250ZXh0UmVm
IGNvbnRleHQKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+c2V0QWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGVGb3JXZWJTb2NrZXQoYWxsb3dzKTsKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRBbGxv
d3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiBj
b250ZXh0LCBib29sIGFsbG93cykKLXsKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAg
V2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0KIHZvaWQgV0tDb250ZXh0Q2xlYXJDYWNo
ZWRDcmVkZW50aWFscyhXS0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICBXZWJLaXQ6OnRvSW1w
bChjb250ZXh0KS0+Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpOwpAQCAtNjcxLDcgKzY2Myw2IEBA
IHZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRl
eHRSZWYgY29udGV4dFJlZiwgYm9vbCB1CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZikt
PnNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcyk7CiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3Rv
cmUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiB3ZWJzaXRl
RGF0YVN0b3JlKQordm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0Nv
bnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJlZikKIHsKLSAgICBXZWJLaXQ6OnRvSW1wbChj
b250ZXh0UmVmKS0+c2V0UHJpbWFyeURhdGFTdG9yZSgqV2ViS2l0Ojp0b0ltcGwod2Vic2l0ZURh
dGFTdG9yZSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tDb250ZXh0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250
ZXh0UHJpdmF0ZS5oCmluZGV4IDM5YzBjYTdjYzZhNmI2YjU1YzgwM2I4M2NkZTViMzhiZmMxOWM5
OGUuLjg4NDc0ZDMwYTBkMGJiODRhMTliNjEwYzJjMTViOWFjMTJiZDA5Y2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKQEAgLTg3LDEw
ICs4Nyw5IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
KFdLQ29udGV4dFJlZik7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNl
V29ya2VycyhXS0NvbnRleHRSZWYpOwogCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRBbGxv
d3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRlc3RpbmcoV0tDb250ZXh0UmVmLCBib29s
KTsKLVdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
U2VydmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmLCBib29sKTsKIAogLy8gVGVzdCBvbmx5
LiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBhbnkgc2Vjb25kYXJ5IHByb2Nlc3NlcyBhcmUgc3Rh
cnRlZC4KLVdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihX
S0NvbnRleHRSZWYgY29udGV4dCk7CitXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRVc2VUZXN0aW5n
TmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURUQ7
CiAKIC8vIFRlc3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgcnVubmluZyBhIHRlc3Qu
CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLQ29udGV4
dFJlZiBjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1Byb2Nlc3NQb29sLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2wubW0KaW5kZXggNjgyMGY0OTFlOTQ3NTk1ZTAwZDBjYmQyZDU4ODk1MjA3
MDNhNTgwOC4uM2Q5NWY5ZGI4MWIzYjgyZjNlZjBmZjRiOWU2NTQxZjc3M2FlZTZlYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0K
QEAgLTIwMSw3ICsyMDEsNyBAQCBzdGF0aWMgV0tQcm9jZXNzUG9vbCAqc2hhcmVkUHJvY2Vzc1Bv
b2w7CiAKIC0gKHZvaWQpX3NldENvb2tpZUFjY2VwdFBvbGljeTooTlNIVFRQQ29va2llQWNjZXB0
UG9saWN5KXBvbGljeQogewotICAgIF9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBXZWJDb3JlOjp0b0hUVFBDb29raWVBY2NlcHRQ
b2xpY3kocG9saWN5KSwgW10oKSB7IH0pOworICAgIFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpzaW5nbGV0b24oKS5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCksIFdlYkNvcmU6OnRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShw
b2xpY3kpLCBbXSgpIHsgfSk7CiB9CiAKIC0gKGlkKV9vYmplY3RGb3JCdW5kbGVQYXJhbWV0ZXI6
KE5TU3RyaW5nICopcGFyYW1ldGVyCkBAIC01NzgsMTMgKzU3OCw2IEBAIHN0YXRpYyBOU0RpY3Rp
b25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywg
SGFzaE1hcDxTCiAgICAgX3Byb2Nlc3NQb29sLT5zeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJh
Y2tncm91bmQpOwogfQogCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNl
cnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQot
ICAgIF9wcm9jZXNzUG9vbC0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAtIChp
ZCA8X1dLR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlcj4pX2NvcmVMb2NhdGlvblByb3Zp
ZGVyCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cm9jZXNzUG9vbFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oCmluZGV4IGQzOWRiMWRkYjA5YzA4Y2M3ODAxN2Q0ZTFmNDVm
YzhkMjU2ZjVjZGYuLjg4NTRlZjZjMzA2ZmMxMGM3OTdiODMzOTkwMmQ1NTRiNDA0MmYzYzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29s
UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nl
c3NQb29sUHJpdmF0ZS5oCkBAIC0xMjIsNyArMTIyLDYgQEAKIC0gKHZvaWQpX3ByZWNvbm5lY3RU
b1NlcnZlcjooTlNVUkwgKilzZXJ2ZXJVUkwgV0tfQVBJX0RFUFJFQ0FURURfV0lUSF9SRVBMQUNF
TUVOVCgiV0tXZWJWaWV3Ll9wcmVjb25uZWN0VG9TZXJ2ZXIiLCBtYWNvcygxMC4xMy40LCBXS19N
QUNfVEJBKSwgaW9zKDExLjMsIFdLX0lPU19UQkEpKTsKIAogLy8gVGVzdCBvbmx5LgotLSAodm9p
ZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFsbG93
cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpOwogLSAodm9pZClf
Z2V0QWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVzdGluZzoocGlkX3QpcGlkIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4gKikpY29tcGxldGlv
bkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIC0g
KEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0cmluZyAq
KWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7
CiAtICh2b2lkKV9jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNwYWNlOihO
U1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3RlY3Rpb25TcGFjZSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE1KSwgaW9zKDEzLjApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKaW5kZXggMWVlNzNlYmMwZWEw
MzZmODZiM2ZlOTQ0MTQ5MDcyZTZhYzRkYzc2Ny4uZmI5OGQwNTkwYzlhZDI4MjM1ZDcxMWI3Y2Fh
YzliYzU1YzlhNjQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKQEAgLTY0LDggKzY0LDcgQEAgc3RydWN0
IF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7CiAKICAgICB+X1dlYktpdENvb2tpZU1hbmFn
ZXJQcml2YXRlKCkKICAgICB7Ci0gICAgICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMoZGF0YU1hbmFnZXIpKQotICAgICAg
ICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5z
ZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsKKyAgICAgICAg
V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5zZXRDb29raWVPYnNlcnZlckNhbGxi
YWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsKICAgICB9CiAKICAgICBXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwpAQCAtMTM5LDExICsxMzgsOSBAQCBXZWJLaXRDb29raWVN
YW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ciogZGF0YU1hbgogewogICAgIFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRf
Q09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBu
dWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFuYWdlcjsK
LSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0
UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkgewotICAgICAgICBwcm9j
ZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZU9i
c2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7Ci0g
ICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOwot
ICAgICAgICB9KTsKLSAgICB9CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24o
KS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBb
bWFuYWdlcl0geworICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdF
RF0sIDApOworICAgIH0pOwogICAgIHJldHVybiBtYW5hZ2VyOwogfQogCkBAIC0xNzMsOCArMTcw
LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZShX
ZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLAogICAgIGlmIChzZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRh
TWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKS0+c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6
OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0
b3JhZ2UpKTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSks
IHRvU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZShzdG9yYWdlKSk7CiB9CiAKIC8qKgpA
QCAtMTkyLDggKzE4OCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRf
cG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFdlYktpCiB7CiAgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOwogCi0gICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQ
b29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5z
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5
KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRv
bigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CiB9CiAKIC8qKgpA
QCAtMjI0LDcgKzIxOSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRf
cG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdDYW5jCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFu
YWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNl
c3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNvcmU6OkhUVFBDb29raWVBY2Nl
cHRQb2xpY3kgcG9saWN5KSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24o
KS5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBb
dGFzayA9IFdURk1vdmUodGFzayldKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9s
aWN5KSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5faW50KHRhc2suZ2V0KCksIHRvV2ViS2l0Q29v
a2llQWNjZXB0UG9saWN5KHBvbGljeSkpOwogICAgIH0pOwogfQpAQCAtMjY5LDExICsyNjQsNyBA
QCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKFdlYktpdENvb2tpZU1hbmFn
ZXIqIG1hbmFnZXIsIFNvdXBDb29raWUqCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwog
CiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIs
IGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJl
IHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJl
Z2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBq
dXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQ
b29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5w
cml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQo
KSwgeyBXZWJDb3JlOjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkg
eworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2llcyhtYW5h
Z2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJDb3JlOjpDb29raWUoY29va2llKSB9LCBbdGFz
ayA9IFdURk1vdmUodGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFz
ay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9CkBAIC0zMjAsMTEgKzMxMSw3IEBAIHZvaWQgd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFn
ZXIsIGNvbnN0IGdjaGFyCiAgICAgZ19yZXR1cm5faWZfZmFpbCh1cmkpOwogCiAgICAgR1JlZlB0
cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxl
LCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQvd3JpdHRl
biBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxlc3MKLSAg
ICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVzZSB0aGUg
Zmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFu
YWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKS0+Z2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJMKFVSTCgp
LCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSB7CisgICAgV2ViQ29va2llTWFuYWdlclBy
b3h5OjpzaW5nbGV0b24oKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBV
UkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAgR0xpc3Qq
IGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUgOiBjb29r
aWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29raWVzTGlz
dCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzY1LDcgQEAgdm9pZCB3ZWJr
aXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5h
Z2VyLCBTb3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAgICBHUmVm
UHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFi
bGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVhZC93cml0
dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJkbGVzcwot
ICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRo
ZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Vi
a2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFN
YW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdl
clByb3h5PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNv
cmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAgIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYt
PnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRh
c2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCksIFRSVUUp
OwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCBkMDM3OTM5ZWJkZGQ4NTNkYjhkZWIzYWQ1MWU5
NTdkOGE1ODljZmNiLi5hMzAwNGJmNmUwNmRkMjljMDEzNThkZDBkNDc2NjBlOGUwMGI1YTBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJD
b250ZXh0LmNwcApAQCAtNDA3LDcgKzQwNyw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNvbnRl
eHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIGNvbmZpZ3VyYXRpb24uc2V0
SFNUU1N0b3JhZ2VEaXJlY3RvcnkoRmlsZVN5c3RlbTo6c3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2hzdHNfY2FjaGVfZGly
ZWN0b3J5KHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpKTsKIAogICAgIHByaXYtPnBy
b2Nlc3NQb29sID0gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0aW9uKTsKLSAgICBw
cml2LT5wcm9jZXNzUG9vbC0+c2V0UHJpbWFyeURhdGFTdG9yZSh3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJHZXREYXRhU3RvcmUocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKSk7CiAgICAg
cHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFVzZXJNZXNzYWdlSGFuZGxlcihbd2ViQ29udGV4dF0oVXNl
ck1lc3NhZ2UmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJNZXNzYWdlJiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIC8vIFNpbmsgdGhlIGZsb2F0aW5nIHJl
Zi4KICAgICAgICAgR1JlZlB0cjxXZWJLaXRVc2VyTWVzc2FnZT4gdXNlck1lc3NhZ2UgPSB3ZWJr
aXRVc2VyTWVzc2FnZUNyZWF0ZShXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9u
L1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IGU2ZTRhY2MxMWE5MWEzNzBmYjY4
OGZhYjQ4ZDI1MjA2OTZkNTAyOGYuLjUyZWIzOTk4OGFhZTAwZGVkZWViN2I0NjQ3ZjQ0MjQyMGJk
MjMxODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2Vi
QXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xMzkzLDggKzEzOTMsNyBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3QgU3RyaW5nJiBicm93
c2luZ0NvbnRleHRIYW5kbGUsCiAgICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigiaHR0
cE9ubHkiX3MsIGNvb2tpZS5odHRwT25seSkpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVy
ICdodHRwT25seScgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94
eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFu
YWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldENvb2tpZXMocGFnZS0+d2Vic2l0
ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2tdKCkgeworICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2llcyhwYWdlLT53ZWJz
aXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CiAg
ICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQxMCw4ICsx
NDA5LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmkKIAogICAgIFN0cmluZyBob3N0ID0gYWN0
aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBj
b29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhw
YWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRp
bmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnNpbmdsZXRvbigpLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFT
dG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVk
ZWQoaG9zdCkgfSk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldFNlc3Npb25Q
ZXJtaXNzaW9ucyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT4+JiBvdXRfcGVybWlz
c2lvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9j
ZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94
eS5oCmluZGV4IDQxYzBhMGZiZjUwNmVmYTE0MDhiY2VmOWFmOGE5MGI4NWExYWQwOGEuLjRmMzk4
YjUzMGY2MDg1NzVjOTY3YjgzYzc0ZmEyZjQzMjhmNmNlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oCkBAIC00OCw3ICs0OCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5BdXhpbGlhcnlQcm9jZXNzUHJveHkoKTsKIAogICAgIHZvaWQg
Y29ubmVjdCgpOwotICAgIHZvaWQgdGVybWluYXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHRlcm1p
bmF0ZSgpOwogCiAgICAgdmlydHVhbCBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSA9IDA7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQ
b29sQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9v
bENvY29hLm1tCmluZGV4IDVkOTYwZTFmMzI2ZDJiNzI5MWU3MTMwOTZkZWVlZWQ5OGNhY2EwNmEu
LjEzMWVkNTk0N2MzM2M1ZGQ3ODdiZjBkNWZmNmQ2YTQ4NjI0ZDE1MjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAt
MTM0LDggKzEzNCw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQo
KQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgp
CiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgp
KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRQcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7CiAKICNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAoIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJs
ZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpKQpAQCAtMTY2LDggKzE2NSw2IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAgICAgaWYgKCFbW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2ViS2l0U3VwcHJlc3NNZW1vcnlQ
cmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1lbW9yeVByZXNzdXJlSGFuZGxlcigp
OwogCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKTsKLQogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBpZiAoIV9NR0NhY2hlVmFs
aWQoKSkgewogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVl
KERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeewpAQCAtNDgwLDIyICs0Nzcs
NiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
cyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogCiAgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1
bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKIAotICAgIHsKLSAg
ICAgICAgYm9vbCBpc1NhZmFyaSA9IGZhbHNlOwotICAgICAgICBib29sIGlzTWluaUJyb3dzZXIg
PSBmYWxzZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpc1NhZmFyaSA9IFdl
YkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01vYmlsZVNhZmFyaSgpOwotICAgICAgICBpc01pbmlC
cm93c2VyID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbGlm
IFBMQVRGT1JNKE1BQykKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpNYWNBcHBsaWNhdGlv
bjo6aXNTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6Ok1hY0FwcGxp
Y2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGlzU2FmYXJpIHx8
IGlzTWluaUJyb3dzZXIpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBQcm94eSA9IFVSTChVUkwo
KSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJLaXQySFRUUFByb3h5RGVm
YXVsdHNLZXldKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBzUHJveHkgPSBVUkwoVVJMKCksIFtk
ZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBTUHJveHlEZWZhdWx0
c0tleV0pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcGFyYW1ldGVycy5uZXR3b3JrQVRTQ29u
dGV4dCA9IGFkb3B0Q0YoX0NGTmV0d29ya0NvcHlBVFNDb250ZXh0KCkpOwogCiAgICAgcGFyYW1l
dGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciA9IFtkZWZhdWx0cyBib29s
Rm9yS2V5OldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyRGVmYXVsdHNLZXldOwpA
QCAtNTA2LDE3ICs0ODcsMTEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFs
aXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKICAgICBwYXJhbWV0
ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyID0gaWRlbnRpZnlpbmdEYXRhRnJv
bUNvb2tpZVN0b3JhZ2UoW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9y
YWdlXSBfY29va2llU3RvcmFnZV0pOwogI2VuZGlmCiAKLSAgICBwYXJhbWV0ZXJzLnN0b3JhZ2VB
Y2Nlc3NBUElFbmFibGVkID0gc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoKTsKLQogICAgIE5TTnVt
YmVyICpkYXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtkZWZhdWx0cyBvYmplY3RGb3JLZXk6W05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5hbERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tl
eTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07CiAg
ICAgaWYgKGRhdGFiYXNlRW5hYmxlZFZhbHVlKQogICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVu
YWJsZUlUUERhdGFiYXNlID0gZGF0YWJhc2VFbmFibGVkVmFsdWUuYm9vbFZhbHVlOwotICAgIGVs
c2UKLSAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IG1fZGVmYXVs
dFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5pc0lUUERhdGFiYXNlRW5hYmxlZCgpOwogCiAgICAg
cGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUgPSBbZGVmYXVsdHMg
Ym9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4cGVyaW1lbnRhbCVAIiwg
V2ViUHJlZmVyZW5jZXNLZXk6OmFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWRLZXko
KS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07Ci0KLSAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRD
cm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVU
cmFja2luZ1Blcm1pc3Npb24oKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1J
bnZhbGlkYXRlQ29udGV4dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5jcHAKaW5kZXggYzVkZTRlN2QwZjU5MTk0ZjQzYTAyM2IwODll
MzcyYzU4Y2Y4ZWUwNi4uYTk3YTYyZGRjMDhjZDllM2FkODFlYmY2Y2QwMDdjZGMxYzJhNGU5ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFBy
b3h5LmNwcApAQCAtNzUsOCArNzUsNyBAQCB2b2lkIERvd25sb2FkUHJveHk6OmNhbmNlbCgpCiAg
ICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoTmV0d29y
a1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5j
ZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5Ojpp
bnZhbGlkYXRlKCkKQEAgLTEwNiwxMiArMTA1LDEwIEBAIHZvaWQgRG93bmxvYWRQcm94eTo6cHVi
bGlzaFByb2dyZXNzKGNvbnN0IFVSTCYgVVJMKQogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgaGFuZGxlOwotICAgICAgICBib29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0
ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQo
Y3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsKLSAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNo
RG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7Ci0gICAgfQor
ICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7CisgICAgYm9vbCBjcmVhdGVkU2Fu
ZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5
c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOwor
ICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94
RXh0ZW5zaW9uKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9h
ZElELCBVUkwsIGhhbmRsZSksIDApOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogCkBA
IC0xNDYsMTUgKzE0Myw3IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1ZXN0KFJl
c291cmNlUmVxdWVzdCYmIHByb3Bvc2VkUmVxdWVzdCwgY29uc3QgUmVzCiAKICAgICBtX3Byb2Nl
c3NQb29sLT5kb3dubG9hZENsaWVudCgpLndpbGxTZW5kUmVxdWVzdCgqdGhpcywgV1RGTW92ZShw
cm9wb3NlZFJlcXVlc3QpLCByZWRpcmVjdFJlc3BvbnNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpXShSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAgICAgICAg
IG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobmV3UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAgICAgaWYg
KCFwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpOwotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzUHJv
eHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3NQcm94eS0+
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHBy
b3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOworICAgICAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBu
ZXdSZXF1ZXN0KSwgMCk7CiAgICAgfSk7CiB9CiAKQEAgLTE3OSwxNiArMTY4LDEyIEBAIHZvaWQg
RG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3lu
YyhEb3dubG9hZElEIGRvd25sCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0
aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6
OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3dubG9hZElEID0gZG93bmxvYWRJRF0gKEFs
bG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKKyAgICBt
X3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dl
c3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0
ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSksIFtkb3dubG9hZElEID0gZG93bmxvYWRJRF0g
KEFsbG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsKICAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAg
ICAgICAgIGlmICghZGVzdGluYXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZGVzdGluYXRpb24sIFNhbmRib3hFeHRlbnNpb246OlR5cGU6
OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICAgICAgaWYgKCFtX3By
b2Nlc3NQb29sKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVl
RGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGluYXRpb24s
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRl
OjpZZXMpLCAwKTsKKyAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2Fk
RGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZZXMpLCAwKTsKICAgICB9KTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHlNYXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHlNYXAuY3BwCmluZGV4IDc2YTA3MTU3YjU5MWFhY2U1MGYxNWQxNTI1ZGJjZmI4YzZh
NGJiYzguLjlmZGY5N2EwMzExYTVkN2NiMzE4NjRlNzkwNmJhY2RmNmY2MTk2MWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1h
cC5jcHAKQEAgLTEwOSw5ICsxMDksNiBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRvd25sb2Fk
RmluaXNoZWQoRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkKIAogICAgIFJFTEVBU0VfTE9H
KExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJvY2VzcyBE
b3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAgLy8gVGhl
IERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBw
cm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWZQdHIo
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fkcy5jb250
YWlucyhkb3dubG9hZElEKSk7CiAKICAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBkb3dubG9h
ZElELmRvd25sb2FkSUQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKaW5kZXggOGMyM2JiZThjMDZhMTU5OWNi
OWI5MTZhMGIzMmFmYjM3NzgzZjMwNS4uYzIzOGJlMDY4ZGNmOTNmMTVmZTYyNmYxNzE4YjkwOGE3
MmVmYTE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0
b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5LmNwcApAQCAtNDQsMTcgKzQ0LDIwIEBAIExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHko
KQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdGFydExvYWRpbmco
TGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnBy
b2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRMb2FkaW5nKCp0
aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKKyAgICBpZiAoYXV0byogY2xpZW50ID0g
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkubGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+c3RhcnRMb2FkaW5nKCp0aGlzLCBjdXN0b21Q
cm90b2NvbElELCByZXF1ZXN0KTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RvcExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2Nv
bElEKQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElE
KTsKKyAgICBpZiAoYXV0byogY2xpZW50ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkubGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+
c3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOwogfQogCiB2b2lkIExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX25ldHdvcmtQ
cm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5p
bnZhbGlkYXRlKCp0aGlzKTsKKyAgICBpZiAoYXV0byogY2xpZW50ID0gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkubGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkpCisg
ICAgICAgIGNsaWVudC0+aW52YWxpZGF0ZSgqdGhpcyk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyUHJveHk6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QoTGVnYWN5Q3VzdG9t
UHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVz
cG9uc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCAyMjdjNWRjNGJjZDZmZDJjNTUyOTczMDljNmYzZTJh
OGY4YThmMjdiLi41ZjMwMjMyM2IzZTIxYTc2NDE4OGRkZGQ4MzhmYmExMGM5NmQyNTI3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgorI2luY2x1ZGUgIkxlZ2FjeUdsb2JhbFNldHRp
bmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb250ZW50UnVs
ZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b25JbmZvLmgiCkBAIC02MCw2ICs2MSw3IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZUNs
aWVudC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0
b3IuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogI2lmIEVOQUJMRShT
RUNfSVRFTV9TSElNKQpAQCAtNzAsMTggKzcyLDEwOSBAQAogI2luY2x1ZGUgPHd0Zi9zcGkvZGFy
d2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNlbmRpZgorCiAjZGVmaW5lIE1F
U1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBjb25u
ZWN0aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKLU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Bv
b2wmIHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHByb2Nlc3NQb29s
LmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9jZXNzUG9vbChw
cm9jZXNzUG9vbCkKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4m
IGdsb2JhbE5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBuZXR3b3JrUHJvY2VzczsKKyAgICBy
ZXR1cm4gbmV0d29ya1Byb2Nlc3M7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHkmIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpCit7CisgICAgaWYgKCFnbG9iYWxOZXR3b3JrUHJvY2Vz
cygpKSB7CisgICAgICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNzKCkgPSBtYWtlVW5pcXVlPE5ldHdv
cmtQcm9jZXNzUHJveHk+KCk7CisgICAgICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNzKCktPnNlbmRD
cmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICB9CisgICAgcmV0dXJuICpnbG9i
YWxOZXR3b3JrUHJvY2VzcygpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnRlcm1p
bmF0ZSgpCit7CisgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKTsKKyAgICBn
bG9iYWxOZXR3b3JrUHJvY2VzcygpID0gbnVsbHB0cjsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjphdHRlbXB0UmVsYXVuY2hBZnRlckNyYXNoSWZOZWNlc3NhcnkoVmVjdG9yPHN0ZDo6
cGFpcjxSZWY8V2ViUHJvY2Vzc1Byb3h5PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5Pj4mJiBwZW5kaW5nUmVxdWVzdHMp
Cit7CisgICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSA9IG51bGxwdHI7CisgICAgaWYgKHBlbmRp
bmdSZXF1ZXN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBuZXdOZXR3
b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOworICAgIGZvciAo
YXV0byYgcmVxdWVzdCA6IHBlbmRpbmdSZXF1ZXN0cykKKyAgICAgICAgbmV3TmV0d29ya1Byb2Nl
c3MuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHJlcXVlc3QuZmlyc3QuZ2V0KCksIFdURk1v
dmUocmVxdWVzdC5zZWNvbmQpKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5k
Q3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3Vu
ZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCisgICAgLy8g
V2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlvbGF0aW9u
IGNoZWNrIG9uIG91ciBBUElzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDAyNDYuCisgICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgeworICAgICAg
ICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXNdIHsKKyAgICAgICAgICAgIHNlbmRDcmVh
dGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAg
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBpZiAoIXBh
cmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpCisgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmhz
dHNTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUg
PSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNU
b1JlZ2lzdGVyQXNTZWN1cmUoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExlZ2FjeUds
b2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNzaW5nQ29u
dGVudFNlY3VyaXR5UG9saWN5KCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVy
ZWRBc0xvY2FsID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVz
UmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6
OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKKyAgICBwYXJhbWV0
ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVN
b2RlbCgpOworICAgIGZvciAoYXV0byYgc2NoZW1lIDogV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVt
ZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQorICAgICAgICBwYXJhbWV0ZXJzLnVybFNj
aGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5
ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsgIWNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1l
dGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3Ry
aW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5n
Q2FjaGVzRGlyZWN0b3J5KCk7ICFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQor
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rv
cnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0Rp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBwYXJlbnRCdW5kbGVEaXJl
Y3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7ICFwYXJlbnRC
dW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpS
ZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OworI2VuZGlmCisgICAgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKHBhcmFtZXRlcnMpOworICAgIHBhcmFtZXRlcnMuZGF0YVN0b3JlUGFyYW1ldGVycyA9
IFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKCk7CisgICAgc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0
ZXJzKSwgMCk7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFj
a2dyb3VuZFByaW9yaXR5KCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJv
Y2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+
YWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNz
UG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKQoreworICAgIGZvciAoYXV0byog
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAg
ICAgaWYgKHByb2Nlc3NQb29sLT5zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KCkKKyAgICA6IEF1eGlsaWFy
eVByb2Nlc3NQcm94eShhbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0
eSgpKQogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCiAgICAgLCBt
X2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5KCp0aGlzKQogI2VuZGlmCi0gICAgLCBtX3Rocm90
dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigp
KQorICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFj
a2dyb3VuZEFzc2VydGlvbigpKQorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICwgbV9jdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQ+KCkpCisjZW5kaWYKIHsKICAgICBjb25uZWN0KCk7CiB9CkBAIC0xMDQsMTYgKzE5
Nyw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNz
TGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jCiB7CiAgICAgbGF1bmNoT3B0aW9ucy5wcm9j
ZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Ok5ldHdvcms7CiAgICAgQXV4
aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9wdGlvbnMpOwotCi0g
ICAgaWYgKHByb2Nlc3NQb29sKCkuc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZh
aWxGb3JUZXN0aW5nKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2woKS5zZXRTaG91bGRNYWtlTmV4
dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOwotICAgICAgICBsYXVu
Y2hPcHRpb25zLnNob3VsZE1ha2VQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB0cnVlOwot
ICAgIH0KLQotI2lmIFBMQVRGT1JNKFBMQVlTVEFUSU9OKQotICAgIGxhdW5jaE9wdGlvbnMucHJv
Y2Vzc1BhdGggPSBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzUGF0aCgpOwotICAgIGxhdW5j
aE9wdGlvbnMudXNlcklkID0gbV9wcm9jZXNzUG9vbC51c2VySWQoKTsKLSNlbmRpZgogfQogCiB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24pCkBAIC0xNjYsMTIgKzI0OSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnN5bnRoZXNpemVBcHBJc0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQogICAgIH0K
IH0KIAotRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQ
cm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQ
cm94eSogb3JpZ2luYXRpbmdQYWdlKQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94
eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBy
b2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJl
cXVlc3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmln
aW5hdGluZ1BhZ2UpCiB7CiAgICAgaWYgKCFtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1f
ZG93bmxvYWRQcm94eU1hcCA9IG1ha2VVbmlxdWU8RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwog
Ci0gICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRh
U3RvcmUsIG1fcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5h
dGluZ1BhZ2UpOworICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2Fk
UHJveHkoZGF0YVN0b3JlLCBwcm9jZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8s
IG9yaWdpbmF0aW5nUGFnZSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hX
ZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNo
T3B0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMjM3LDggKzMyMCwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpCiB7CiAgICAgY2xlYXJDYWxsYmFja1N0YXRlcygpOwog
Ci0gICAgLy8gVGVsbCB0aGUgbmV0d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0
IHRoaXMgbmV0d29yayBwcm9jZXNzIHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVs
ZXRlZC4KLSAgICBtX3Byb2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7Cisg
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9v
bHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7
CisKKyAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpID0gbnVsbHB0cjsKIH0KIAogdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpjbGVhckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICszNDMsNiBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVj
dGlvbiwgZGVjb2RlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29s
LmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRl
Y29kZXIpOwogfQogCkBAIC0yNzQsOCArMzU2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEMK
IAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQog
ewotICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wp
OwotCiAgICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5
TWFwLT5pbnZhbGlkYXRlKCk7CiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFO
QUdFUikKQEAgLTMzNCwxMSArNDE0LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29s
LmlzU2VydmljZVdvcmtlclBhZ2VJRChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShzZXNzaW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVu
Z2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9z
dFZpc2libGVXZWJQYWdlSWZBbnkoc2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSA9IFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExT
XShhdXRvKiBwYWdlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTM5NSwxMSArNDcwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb24K
ICAgICAgICAgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3Vw
cHJlc3Npb25FbmFibGVkKCkpCi0gICAgICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQo
dHJ1ZSk7Ci0jZW5kaWYKICAgICAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4
cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5l
Y3Rpb24oKSkKQEAgLTExOTcsNyArMTI2Nyw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlCiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24o
SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewotICAgIHBy
b2Nlc3NQb29sKCkuc2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oV1RGTW92ZShkb21haW5z
KSk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9j
ZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNldERvbWFpbnNXaXRoVXNlckludGVy
YWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHsgZG9tYWlucyB9KTsK
IH0KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCkBAIC0xMjYy
LDE0ICsxMzMzLDE0IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkU3luY0FsbENvb2tp
ZXMoKQogICAgIH0KIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphZGRTZXNzaW9uKFJl
ZjxXZWJzaXRlRGF0YVN0b3JlPiYmIHN0b3JlKQordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojph
ZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmIHN0b3JlKQogewogICAgIGlmIChjYW5TZW5kTWVz
c2FnZSgpKQotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0
ZURhdGFTdG9yZSB7IHN0b3JlLT5wYXJhbWV0ZXJzKCkgfSwgMCk7Ci0gICAgYXV0byBzZXNzaW9u
SUQgPSBzdG9yZS0+c2Vzc2lvbklEKCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUucGFyYW1ldGVycygpIH0sIDApOwor
ICAgIGF1dG8gc2Vzc2lvbklEID0gc3RvcmUuc2Vzc2lvbklEKCk7CiAgICAgaWYgKCFzZXNzaW9u
SUQuaXNFcGhlbWVyYWwoKSkgewogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgICAg
ICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5KCkpOworICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3Rv
cmUucmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiAjZW5kaWYKICAgICB9CiB9
CkBAIC0xMjgyLDE2ICsxMzUzLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVT
ZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIAogV2Vic2l0ZURhdGFTdG9yZSogTmV0
d29ya1Byb2Nlc3NQcm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEKQogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBpZiAoIVdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkgewotICAgICAgICAgICAgYXV0byogd2Vic2l0ZURhdGFT
dG9yZSA9IG1fcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpOwotICAgICAgICAgICAgaWYg
KHdlYnNpdGVEYXRhU3RvcmUgJiYgd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gc2Vz
c2lvbklEKQotICAgICAgICAgICAgICAgIHJldHVybiB3ZWJzaXRlRGF0YVN0b3JlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS5wdHIoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9u
RGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIHJldHVybiBXZWJz
aXRlRGF0YVN0b3JlOjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwog
fQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJldHJpZXZlQ2FjaGVTdG9yYWdlUGFyYW1l
dGVycyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCkBAIC0xMzM4LDcgKzE0MDAsMTAgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHkoV2ViVXNlckNvbnRlbnQKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3
b3JrUHJvY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBtX3Byb2Nlc3NQb29sLmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25u
ZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiks
IHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIC8vIEZJWE1FOiBU
aGlzIGlzbid0IHF1aXRlIGNvcnJlY3QuCisgICAgYXV0byBhZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGZvciAo
YXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisg
ICAgICAgIHByb2Nlc3NQb29sLT5lc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0
d29ya1Byb2Nlc3MoKnRoaXMsIFJlZ2lzdHJhYmxlRG9tYWluIHtyZWdpc3RyYWJsZURvbWFpbn0s
IHNlc3Npb25JRCwgW2FnZ3JlZ2F0b3IgPSBhZ2dyZWdhdG9yLmNvcHlSZWYoKV0oKSB7IH0pOwog
fQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OndvcmtlckNvbnRleHRDb25uZWN0aW9uTm9M
b25nZXJOZWVkZWQoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTE1
MDEsMTYgKzE1NjYsMzQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpwcmVjb25uZWN0VG8o
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJQYWdlUHJveHlJZGUKICAgICBzZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlY29ubmVjdFRvKHNlc3Npb25JRCwgd2ViUGFnZVByb3h5
SUQsIHdlYlBhZ2VJRCwgdXJsLCB1c2VyQWdlbnQsIHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBp
c05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKSwgMCk7CiB9CiAKK3N0YXRpYyBib29sIGFueVBy
b2Nlc3NQb29sSGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpCit7CisgICAgZm9yIChhdXRvKiBw
cm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAg
ICBpZiAocHJvY2Vzc1Bvb2wtPmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBi
b29sIGFueVByb2Nlc3NQb29sSGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpCit7CisgICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkg
eworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPmhhc0JhY2tncm91bmRXZWJQcm9jZXNzZXMoKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpCiB7Ci0g
ICAgaWYgKHByb2Nlc3NQb29sKCkuaGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7CisgICAg
aWYgKGFueVByb2Nlc3NQb29sSGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7CiAgICAgICAg
IGlmICghUHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEZvcmVncm91bmRBY3Rpdml0eShtX2FjdGl2
aXR5RnJvbVdlYlByb2Nlc3NlcykpIHsKICAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJv
Y2Vzc2VzID0gdGhyb3R0bGVyKCkuZm9yZWdyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5nIGZvciBm
b3JlZ3JvdW5kIHZpZXcocykiX3MpOwogICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9Gb3JlZ3JvdW5kKCksIDApOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHByb2Nlc3NQb29sKCkuaGFzQmFj
a2dyb3VuZFdlYlByb2Nlc3NlcygpKSB7CisgICAgaWYgKGFueVByb2Nlc3NQb29sSGFzQmFja2dy
b3VuZFdlYlByb2Nlc3NlcygpKSB7CiAgICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxlcjo6aXNW
YWxpZEJhY2tncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcykpIHsKICAg
ICAgICAgICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCkuYmFja2dy
b3VuZEFjdGl2aXR5KCJOZXR3b3JraW5nIGZvciBiYWNrZ3JvdW5kIHZpZXcocykiX3MpOwogICAg
ICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0
aW9uVG9CYWNrZ3JvdW5kKCksIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAppbmRleCA4NTQ1MDJjYmM2ZWRhNGE2MDBm
YzgxYjFiYzJlMDAxYzY2MzhkYTQyLi41MmIwZTdiMDgxMWQxZWQ0YzczZmE0OTYzYTllNzk3M2Uz
NTIxMDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzUHJveHkuaApAQCAtNTIsNiArNTIsMTAgQEAgbmFtZXNwYWNlIElQQyB7CiBj
bGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xhc3MgU2Vz
c2lvbklEOwogfQpAQCAtNzQsNyArNzgsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIERv
d25sb2FkUHJveHk7CiBjbGFzcyBEb3dubG9hZFByb3h5TWFwOwogY2xhc3MgV2ViUGFnZVByb3h5
OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eTsKIAogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MgOiBib29sOwpA
QCAtMTAyLDEyICsxMDUsMTUgQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3Rv
cmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5nIE9wZW5l
ckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGljaXQgTmV0
d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBzaW5nbGV0b24oKTsKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5
KCk7CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHZvaWQgdGVybWluYXRlKCkg
ZmluYWw7CisKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNz
UHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb25EZWxheWVkUmVwbHkmJik7CiAKLSAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVEb3dubG9h
ZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOwor
ICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYs
IFdlYlByb2Nlc3NQb29sJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
RnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKIAogICAgIHZv
aWQgZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChXZWJzaXRlRGF0YSk+JiYpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEoUEFM
OjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2RpZmll
ZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwpA
QCAtMjAzLDEzICsyMDksMTEgQEAgcHVibGljOgogICAgIFByb2Nlc3NUaHJvdHRsZXImIHRocm90
dGxlcigpIGZpbmFsIHsgcmV0dXJuIG1fdGhyb3R0bGVyOyB9CiAgICAgdm9pZCB1cGRhdGVQcm9j
ZXNzQXNzZXJ0aW9uKCk7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2woKSB7IHJl
dHVybiBtX3Byb2Nlc3NQb29sOyB9Ci0KICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQog
ICAgIHZvaWQgZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkU2Vzc2lvbihS
ZWY8V2Vic2l0ZURhdGFTdG9yZT4mJik7CisgICAgdm9pZCBhZGRTZXNzaW9uKFdlYnNpdGVEYXRh
U3RvcmUmKTsKICAgICB2b2lkIHJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwogICAgIAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpAQCAtMjI1LDYgKzIyOSwxMiBAQCBwdWJsaWM6
CiAgICAgdm9pZCByZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKGNvbnN0IFN0
cmluZyYpOwogICAgIHZvaWQgdW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29s
KGNvbnN0IFN0cmluZyYpOwogCisjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFO
QUdFUikKKyAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCogbGVnYWN5Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgeyByZXR1cm4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQuZ2V0KCk7IH0KKyNlbmRpZgorCisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
KTsKKyAgICAKICAgICB2b2lkIHJlc2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICB2b2lkIHJlc291cmNlTG9hZERpZFNlbmRSZXF1ZXN0
KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFJlc291cmNlTG9hZEluZm8mJiwgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiYsIE9wdGlvbmFsPElQQzo6Rm9ybURhdGFSZWZlcmVuY2U+JiYpOwpAQCAt
MjQzLDYgKzI1Myw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllcihD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiBwcml2YXRlOgorICAgIHZvaWQgc2VuZENy
ZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIHN0YXRpYyB2b2lkIGF0dGVtcHRS
ZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeShWZWN0b3I8c3RkOjpwYWlyPFJlZjxXZWJQcm9j
ZXNzUHJveHk+LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb25EZWxheWVkUmVwbHk+PiYmKTsKKwogICAgIC8vIEF1eGlsaWFyeVByb2Nlc3NQcm94
eQogICAgIEFTQ0lJTGl0ZXJhbCBwcm9jZXNzTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJO
ZXR3b3JraW5nIl9zOyB9CiAKQEAgLTI1MCw3ICsyNjMsNiBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQg
cHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKIAotICAgIHZv
aWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgdm9pZCBjbGVhckNhbGxiYWNrU3RhdGVz
KCk7CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudApAQCAtMzA2LDggKzMxOCw2IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShQQUw6
OlNlc3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwogCi0gICAg
V2ViUHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBIYXNoTWFwPENhbGxiYWNrSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPj4gbV9wZW5kaW5nRmV0Y2hXZWJz
aXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhh
c2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVs
ZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zQ2FsbGJhY2tzOwpAQCAtMzQ1LDYgKzM1NSwxMCBAQCBw
cml2YXRlOgogICAgICAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1By
b2Nlc3M7CiAgICAgfTsKICNlbmRpZgorCisjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9D
T0xfTUFOQUdFUikKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OworI2VuZGlmCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXggYjhkYWVkZjdi
ZWJhMWNkODFmNmU1MjQ0OTYwMzEwZjEzMzEwYzExZS4uNDk5ZTY4MThhNDIzZTViMWFlODIwZjYx
ZTA5NjIzYTA1YWY4ZGI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTUxLDggKzUxLDcg
QEAgYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRsZXI6OmhhbmRsZVhQQ0V2
ZW50KHhwY19vYmplY3RfdCBldmVudCkgY28KICAgICBpZiAobWVzc2FnZU5hbWUuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNo
U2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQ
Q0VuZHBvaW50TWVzc2FnZU5hbWUpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnByb2Nlc3NQ
b29sKCkuc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoZXZlbnQpOwor
ICAgIC8vIEZJWE1FOiBOb3Qgc3VyZSB3aGF0IGVxdWl2YWxlbnQgaXMgaGVyZS4KIAogICAgIHJl
dHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29v
a2llTWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5jcHAKaW5kZXggNDAxODYwZDIwYzI3ODc2ZWM0MDgyNzU0YzVmMGIyZDZiMzc1
YWYzNi4uY2I3YWQ3ODA1ZTI0YTJjZjA1NzYxYTdkODI4MmEyYzYxNTI3MmFmYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNsdWRlICJBUElTZWN1cml0
eU9yaWdpbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRl
ICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgi
CiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29v
a2llTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKQEAgLTM5LDIwICs0MCwxNSBAQAogbmFtZXNwYWNl
IFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY29uc3QgY2hhciogV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSgpCitXZWJDb29raWVNYW5hZ2VyUHJveHkm
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkKIHsKLSAgICByZXR1cm4gIldlYkNv
b2tpZU1hbmFnZXJQcm94eSI7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4gbWFuYWdlcjsKKyAgICByZXR1cm4gbWFuYWdlcjsKIH0KIAotUmVmPFdlYkNv
b2tpZU1hbmFnZXJQcm94eT4gV2ViQ29va2llTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vz
c1Bvb2wqIHByb2Nlc3NQb29sKQorV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5h
Z2VyUHJveHkoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkNvb2tpZU1hbmFnZXJQ
cm94eShwcm9jZXNzUG9vbCkpOwotfQotCi1XZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCi0gICAgOiBXZWJDb250
ZXh0U3VwcGxlbWVudChwcm9jZXNzUG9vbCkKLXsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVudDo6
cHJvY2Vzc1Bvb2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2Vi
Q29va2llTWFuYWdlclByb3h5Ojp+V2ViQ29va2llTWFuYWdlclByb3h5KCkKQEAgLTY1LDU5ICs2
MSwyNSBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZUNsaWVudChjb25z
dCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNlKiBjbAogICAgIG1fY2xpZW50LmluaXRpYWxpemUo
Y2xpZW50KTsKIH0KIAotLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLQotdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVzdHJveWVkKCkKLXsKLSAgICBWZWN0b3I8T2JzZXJ2
ZXIqPiBvYnNlcnZlcnM7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlclNldCA6IG1fY29va2llT2Jz
ZXJ2ZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZl
clNldCkKLSAgICAgICAgICAgIG9ic2VydmVycy5hcHBlbmQob2JzZXJ2ZXIpOwotICAgIH0KLQot
ICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyLT5t
YW5hZ2VyRGVzdHJveWVkKCk7Ci0KLSAgICBBU1NFUlQobV9jb29raWVPYnNlcnZlcnMuaXNFbXB0
eSgpKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnByb2Nlc3NEaWRDbG9zZShX
ZWJQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJv
Y2Vzc0RpZENsb3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKQotewotfQotCi12b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6cmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2Jq
ZWN0OjpyZWYoKTsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlcmVmV2ViQ29u
dGV4dFN1cHBsZW1lbnQoKQotewotICAgIEFQSTo6T2JqZWN0OjpkZXJlZigpOwotfQotCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYp
PiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9j
ZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nl
c3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIb3N0
bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsK
IH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5h
bWVzKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVu
Y2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcykpOworICAgIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpLCAwKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNz
UmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRl
QWxsQ29va2llcyhzZXNzaW9uSUQpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzKHNl
c3Npb25JRCksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29v
a2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ29va2llJiBjb29raWUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAg
ICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
OwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6RGVsZXRlQ29va2llKHNlc3Npb25JRCwgY29va2llKSwgW2NhbGxiYWNrRnVu
Y3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pXSgpIG11dGFibGUgewogICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgfSk7CkBAIC0xMjUsNDIgKzg3LDQyIEBAIHZvaWQgV2Vi
Q29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBDb29raWUmCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxD
b29raWVzTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdhbGxUaW1lIHRp
bWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2Uoc2Vzc2lv
bklELCB0aW1lKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llKHNl
c3Npb25JRCwgY29va2llcyksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwogfQogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBjb25zdCBVUkwmIHVybCwgY29uc3Qg
VVJMJiBtYWluRG9jdW1lbnRVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFj
a0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29va2llcyhzZXNzaW9u
SUQsIGNvb2tpZXMsIHVybCwgbWFpbkRvY3VtZW50VVJMKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8Q29v
a2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3
b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdv
cmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
R2V0QWxsQ29va2llcyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIH0K
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8
Q29va2llPiYmKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBu
ZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5l
dHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6R2V0Q29va2llcyhzZXNzaW9uSUQsIHVybCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikp
OwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5z
ZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsK
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdG9wT2JzZXJ2aW5nQ29va2llQ2hh
bmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2Vu
ZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpKTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0K
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2so
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiYgY2FsbGJh
Y2spCkBAIC0yMTEsMjEgKzE3MywxMyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y29v
a2llc0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBI
VFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKCFwcm9j
ZXNzUG9vbCgpLT5pc1VzaW5nVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkpCi0gICAgICAgIHBlcnNp
c3RIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0jZW5kaWYKLSNpZiBVU0UoU09VUCkK
LSAgICBwcm9jZXNzUG9vbCgpLT5zZXRJbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xp
Y3kpOwotI2VuZGlmCi0KLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCkt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3kocG9saWN5KSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiB9CiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYm
IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNz
ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Mu
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCmluZGV4IDBi
ZGZjMGQ0ZTQ3YzQzNmY1ODVjZjI5YzA5ZDUxYTI5YmM4MTFhOWQuLmU3MzhiODU4MDIxNzA5YTg4
OGJjMDM4MjliNDlkZTFjMGZjOWVkYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oCkBAIC01NiwxMSArNTYsOSBAQCB0eXBlZGVmIEdlbmVy
aWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyYXlDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0Nh
bGxiYWNrPFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xpY3k+IEhUVFBDb29raWVBY2NlcHRQ
b2xpY3lDYWxsYmFjazsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpDb29raWU+Jj4gR2V0Q29va2llc0NhbGxiYWNrOwogCi1jbGFzcyBXZWJDb29raWVNYW5h
Z2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29r
aWVNYW5hZ2VyPiwgcHVibGljIFdlYkNvbnRleHRTdXBwbGVtZW50LCBwcml2YXRlIElQQzo6TWVz
c2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6
Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+LCBwcml2YXRlIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc3Vw
cGxlbWVudE5hbWUoKTsKLQotICAgIHN0YXRpYyBSZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBj
cmVhdGUoV2ViUHJvY2Vzc1Bvb2wqKTsKKyAgICBzdGF0aWMgV2ViQ29va2llTWFuYWdlclByb3h5
JiBzaW5nbGV0b24oKTsKICAgICB2aXJ0dWFsIH5XZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKIAog
ICAgIHZvaWQgaW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0Nvb2tpZU1hbmFnZXJDbGllbnRCYXNl
Kik7CkBAIC0xMDQsMTcgKzEwMiwxMSBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpPYmplY3Q6
OmRlcmVmOwogCiBwcml2YXRlOgotICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9jZXNz
UG9vbCopOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSgpOworICAgIGZyaWVuZCBOZXZlckRl
c3Ryb3llZDxXZWJDb29raWVNYW5hZ2VyUHJveHk+OwogCiAgICAgdm9pZCBjb29raWVzRGlkQ2hh
bmdlKFBBTDo6U2Vzc2lvbklEKTsKIAotICAgIC8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0gICAg
dm9pZCBwcm9jZXNzUG9vbERlc3Ryb3llZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0Rp
ZENsb3NlKFdlYlByb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvY2Vzc0RpZENs
b3NlKE5ldHdvcmtQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlZldlYkNvbnRl
eHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXJlZldlYkNvbnRleHRTdXBwbGVt
ZW50KCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgogICAgIHZvaWQg
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJp
ZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5tZXNzYWdlcy5pbgppbmRleCBhMDZiNzdiNDczZWM2MDJiZDdjOGMxNDk1Y2Qw
YTIyODZlOGNhNTNiLi43MjRhZWQzMDA0MjRjMTkzNjc2MTNkNDJlNjU5N2IxMDY5MzhmYjMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
bWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdl
clByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yMCw2ICsyMCw2IEBACiAjIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAKLW1lc3NhZ2VzIC0+IFdlYkNvb2tpZU1hbmFnZXJQcm94eSB7
CittZXNzYWdlcyAtPiBXZWJDb29raWVNYW5hZ2VyUHJveHkgTm90UmVmQ291bnRlZCB7CiAgICAg
Q29va2llc0RpZENoYW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAwZWQ3ZmM2NjE1MGE5MjRkMGNhYTRi
MGQ5OGQ4ZTZjYzYyMDhjYTM4Li44YTg2MmMyM2EwODRlMTBmZTM1Y2VhZjgyMzIyNjZmNWFhNGI4
YjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTMxODcs
MTEgKzMxODcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aXNGb3JjZWRJbnRvQXBwQm91bmRNb2Rl
VGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPgogdm9pZCBXZWJQYWdlUHJveHk6
OmRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRJbk5ldHdvcmtQcm9jZXNzKCkKIHsKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQ
cm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2Uo
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCks
IDApOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgp
LCAwKTsKICNlbmRpZgogfQogCkBAIC0zMjAwLDEzICszMTk2LDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZ
U1QpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJQYWdlOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRl
KCksIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVh
clNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAjZW5kaWYKQEAgLTk4OTks
NTggKzk4ODksMjcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN5c3RlbVByZXZpZXdBY3Rpb25Ucmln
Z2VyZWQoY29uc3QgV2ViQ29yZTo6U3lzdGVtUHJldmlld0luZm8KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBT
dHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihlbXB0eVN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
IH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vi
c2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewot
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNz
YWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJy
aWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVl
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhtX3dl
YnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1ZSksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNv
bnZlcnNpb25VUkxGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAg
ICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmli
dXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25J
RCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZVByb3h5OjptYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9y
VGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2lmIEVOQUJMRShT
UEVFQ0hfU1lOVEhFU0lTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
Y3BwCmluZGV4IDYzM2RiZjJhMTA0OTE5NTU5MjY0OTk3Yjc4MzE4N2NhNTIxZjRkOGMuLjcyZGI2
NGJhMDJmNGIxYmEwYzI0ZGRlNzkwYTYzZjM1YTBjMzc1YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTIzMiw2ICsyMzIsMTEgQEAgc3RhdGljIEhh
c2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBnbG9iYWxVUkxTY2hlbWVz
V2l0aEN1c3RvbVByb3QKICAgICByZXR1cm4gc2V0OwogfQogCitWZWN0b3I8U3RyaW5nPiBXZWJQ
cm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkKK3sKKyAg
ICByZXR1cm4gY29weVRvVmVjdG9yKGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycygpKTsKK30KKwogV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAgIDogbV9jb25maWd1cmF0
aW9uKGNvbmZpZ3VyYXRpb24uY29weSgpKQogICAgICwgbV9kZWZhdWx0UGFnZUdyb3VwKFdlYlBh
Z2VHcm91cDo6Y3JlYXRlKCkpCkBAIC0yMzksNyArMjQ0LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6Oldl
YlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9u
KQogICAgICwgbV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpBdXRvbWF0aW9uQ2xp
ZW50PigpKQogICAgICwgbV9kb3dubG9hZENsaWVudChtYWtlVW5pcXVlUmVmPEFQSTo6RG93bmxv
YWRDbGllbnQ+KCkpCiAgICAgLCBtX2hpc3RvcnlDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkxlZ2Fj
eUNvbnRleHRIaXN0b3J5Q2xpZW50PigpKQotICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJD
bGllbnQobWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKICAg
ICAsIG1fdmlzaXRlZExpbmtTdG9yZShWaXNpdGVkTGlua1N0b3JlOjpjcmVhdGUoKSkKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgLCBtX2hpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVy
KG1ha2VVbmlxdWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXI+KCp0aGlzKSkK
QEAgLTI2Nyw5ICsyNzEsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQ
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAjZW5kaWYKICAgICB9KTsK
IAotICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlICYmIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUg
PSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKTsKLQogICAgIGZv
ciAoYXV0byYgc2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5hbHdheXNSZXZhbGlkYXRlZFVSTFNj
aGVtZXMoKSkKICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzQWx3YXlzUmV2YWxpZGF0ZWQu
YWRkKHNjaGVtZSk7CiAKQEAgLTI4NSw3ICsyODYsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJv
Y2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAg
ICAgYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCAqdGhpcyk7CiAKICAgICAvLyBOT1RFOiBUaGVzZSBzdWItb2JqZWN0cyBt
dXN0IGJlIGluaXRpYWxpemVkIGFmdGVyIG1fbWVzc2FnZVJlY2VpdmVyTWFwLi4KLSAgICBhZGRT
dXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRTdXBwbGVtZW50PFdl
Ykdlb2xvY2F0aW9uTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViTm90aWZp
Y2F0aW9uTWFuYWdlclByb3h5PigpOwogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpAQCAtMzQy
LDkgKzM0Miw2IEBAIFdlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2woKQogICAgIHByb2Nl
c3NQb29sQ291bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNodXREb3duUHJvY2VzcygpOwotCiAj
aWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgaWYgKCFtX3Byb2Nlc3Nlc1VzaW5nR2FtZXBhZHMuaXNF
bXB0eSgpKQogICAgICAgICBVSUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkucHJvY2Vzc1Bv
b2xTdG9wcGVkVXNpbmdHYW1lcGFkcygqdGhpcyk7CkBAIC00MDIsMTYgKzM5OSw2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6
QXV0b21hdGlvbkNsaWVudD4mCiAgICAgICAgIG1fYXV0b21hdGlvbkNsaWVudCA9IFdURk1vdmUo
YXV0b21hdGlvbkNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQ+JiYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KQotewotI2lm
IEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCi0gICAgaWYgKCFjdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQpCi0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50ID0gbWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50ID0gV1RGTW92ZShj
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOwotI2VuZGlmCi19Ci0KIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBt
X3N0b3JhZ2VBY2Nlc3NBUElFbmFibGVkID0gZW5hYmxlZDsKQEAgLTQzMSw3ICs0MTgsNyBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50
aWZpZXIoY29uc3QgU3RyaW5nJiBjdQogCiBJUEM6OkNvbm5lY3Rpb24qIFdlYlByb2Nlc3NQb29s
OjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKQogewotICAgIHJldHVybiBtX25ldHdvcmtQ
cm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLmNvbm5lY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3Vh
Z2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCkBAIC00NDMsOCArNDMwLDcgQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVz
c2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKCkpOwogI2lm
IFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1
YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlVz
ZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSksIDAp
OwogI2VuZGlmCiB9CiAKQEAgLTQ4MiwyNjcgKzQ2OCwxMyBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpzY3JlZW5Qcm9wZXJ0aWVzU3RhdGVDaGFuZ2VkKCkKICNlbmRpZgogfQogCi1OZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURh
dGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUpCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJQ
cm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSopCiB7Ci0g
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBp
cyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9u
LW1haW4gdGhyZWFkcy4KLSAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZv
cmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCi0gICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KLSAgICBpZiAoIVJ1bkxv
b3A6OmlzTWFpbigpKSB7Ci0gICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgICAgICBlbnN1cmVOZXR3
b3JrUHJvY2VzcygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuICptX25ldHdvcmtQcm9j
ZXNzOwotICAgIH0KLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0gICAgICAgIGlmICh3
aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRk
U2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICAgICAgd2l0
aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgYXV0byBuZXR3b3Jr
UHJvY2VzcyA9IG1ha2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQcm94eT4oKnRoaXMpOwotCi0gICAg
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLQotICAgIGlmICht
X3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3RvcihtX3dlYnNpdGVEYXRhU3Rv
cmUtPnBlbmRpbmdDb29raWVzKCkpOwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPmNsZWFy
UGVuZGluZ0Nvb2tpZXMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291
cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25m
aWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCk7Ci0gICAgICAg
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllciA9IG1fd2Vic2l0ZURh
dGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRp
ZmllcigpOwotI2VuZGlmCi0gICAgfQotCi0gICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKLQotICAgIGZvciAo
YXV0byYgc2NoZW1lIDogZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJz
KCkpCi0gICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90
b2NvbHMuYXBwZW5kKHNjaGVtZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFN0
cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgp
KQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJl
Y3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJl
Y3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAg
IGlmICghY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotCi0gICAgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nl
c3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmVudEJ1bmRsZURp
cmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5
LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JUZW1wb3JhcnlGaWxlKGVtcHR5U3RyaW5nKCksIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKLSNl
bmRpZgotCi0gICAgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9IG1fY29uZmlndXJh
dGlvbi0+aHN0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuaHN0c1N0
b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQot
ICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3Rv
cihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1Nl
Y3VyZSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdD
b250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6
OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQ
b2xpY3koKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBj
b3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1Jl
Z2lzdGVyQXNMb2NhbCgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNO
b0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCku
c2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOwotCi0jaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0gICAgLy8gKioqKioqKioqCi0gICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hhbmdl
IHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNrIHdp
dGhvdXQgZmlyc3QgY29uc3VsdGluZyBhIHJldmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8vcHJv
YmxlbS8xNzQ1NDcxMj4pCi0gICAgLy8gKioqKioqKioqCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFT
dG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkSW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5pbmRleGVk
RGF0YWJhc2VEaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5
KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5j
cmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwotICAgIH0KLSNlbmRpZgotCi0jaWYg
RU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAg
ICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnkpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eSA9ICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRTZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0gICAgYXV0byBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnkg
PSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkTG9jYWxT
dG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFsb2NhbFN0b3JhZ2VE
aXJlY3RvcnkpCi0gICAgICAgIGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6ZGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbG9j
YWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZv
clJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKLQotICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0
b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxT
dHJpbmcoKTsKLSAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5
KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9
IFdURk1vdmUoY2FjaGVTdG9yYWdlRGlyZWN0b3J5KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgcmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBp
ZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5w
YXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQYXJhbWV0ZXJzLmRpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0K
LSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBmYWxzZTsKLSAgICBib29s
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBmYWxzZTsKLSAg
ICBib29sIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVlOwotICAgIGJvb2wgZW5hYmxlUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGZhbHNlOwotI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5n
TW9kZSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gV2ViQ29yZTo6VGhpcmRQYXJ0eUNv
b2tpZUJsb2NraW5nTW9kZTo6QWxsOwotICAgIFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3Jj
ZW1lbnRFbmFibGVkIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gV2ViQ29yZTo6
U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwotI2VuZGlmCi0gICAgV2ViQ29y
ZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgZmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6
QWxsQnV0Q29va2llczsKLSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBzdGFuZGFsb25l
QXBwbGljYXRpb25Eb21haW47Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
bj4gYXBwQm91bmREb21haW5zOwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIG1hbnVh
bFByZXZhbGVudFJlc291cmNlOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbV90Y2NQcmVm
ZXJlbmNlRW5hYmxlZCA9IGRvZXNBcHBIYXZlSVRQRW5hYmxlZCgpOwotICAgIGlmICh3aXRoV2Vi
c2l0ZURhdGFTdG9yZSAmJiAhd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNp
dGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNj
UHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5zZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsK
LSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSAmJiAhbV93ZWJzaXRlRGF0YVN0b3Jl
LT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwotICAgICAgICBtX3dlYnNpdGVE
YXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dERhdGFTdG9yZUV4aXN0cygpICYmICFXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3Jl
KCktPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIFdlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVkOwot
I2VuZGlmCi0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQg
PSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwot
I2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAg
ICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IHdpdGhXZWJzaXRlRGF0YVN0
b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAg
c2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAg
ICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1
Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAg
IHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5n
TW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZTsKLSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFu
ZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
YXBwQm91bmREb21haW5zOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMu
bWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhX
ZWJzaXRlRGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFn
ZVF1b3RhID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdl
UXVvdGEoKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVj
dG9yeSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9y
eSgpOwotICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAg
ICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0
b3J5OwotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtD
YWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5u
ZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQoKTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gbV93ZWJzaXRlRGF0
YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAg
aWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCku
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2Fs
aG9zdCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFy
YW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVC
bG9ja2luZ01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAg
IHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3Jj
ZW1lbnRFbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAg
ICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25E
b21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwot
ICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVz
b3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVy
T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IG1fd2Vic2l0ZURh
dGFTdG9yZS0+cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwotCi0gICAgICAgIGNv
bnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVz
b2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrQ2FjaGVE
aXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVj
dG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246
OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgICAgICBlbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotICAgICAgICBhdXRvIG5ldHdvcmtDYWNo
ZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHROZXR3b3JrQ2FjaGVEaXJlY3Rv
cnkoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hl
RGlyZWN0b3J5OwotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29y
a0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgfQotCi0jaWYgSEFW
RShDRk5FVFdPUktfQUxURVJOQVRJVkVfU0VSVklDRSkKLSAgICBpZiAoV2Vic2l0ZURhdGFTdG9y
ZTo6aHR0cDNFbmFibGVkKCkpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGly
ZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdEFsdGVybmF0aXZlU2VydmljZXNEaXJl
Y3RvcnkoKTsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3Rvcnku
aXNFbXB0eSgpKQotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuaHR0cDNFbmFibGVkID0gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLSAgICBib29sIGlzSXRw
U3RhdGVFeHBsaWNpdGx5U2V0ID0gZmFsc2U7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyB7Ci0gICAg
ICAgIFdURk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSksCi0gICAgICAgIFdU
Rk1vdmUocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSksCi0g
ICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MsCi0gICAgICAgIGlzSXRwU3RhdGVF
eHBsaWNpdGx5U2V0LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVz
dGluZ0V2ZW50LAotICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0LAotICAgICAgICBlbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlLAotI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUsCi0g
ICAgICAgIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkLAotI2VuZGlmCi0gICAgICAg
IGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlLAotICAgICAgICBzdGFuZGFsb25lQXBw
bGljYXRpb25Eb21haW4sCi0gICAgICAgIGFwcEJvdW5kRG9tYWlucywKLSAgICAgICAgbWFudWFs
UHJldmFsZW50UmVzb3VyY2UsCi0gICAgfTsKLQotICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3Bl
Y2lmaWMgcGFyYW1ldGVycwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBh
cmFtZXRlcnMpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9jZXNzLgotICAg
IG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6
ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9T
KG5ldHdvcmtQcm9jZXNzTGF0ZW5jeVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1Mo
KSksIDApOwotI2VuZGlmCi0KLSAgICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJvY2Vzc0Fzc2Vy
dGlvbigpOwotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0g
ICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAg
fQotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBuZXR3b3JrIHByb2Nlc3Mga25vd3MgYWJvdXQgYWxs
IHRoZSBzZXNzaW9ucyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSBpdCBzdGFydGVk
LgotICAgIGZvciAoYXV0byYgc2Vzc2lvbklEIDogbV9zZXNzaW9uVG9QYWdlSURzTWFwLmtleXMo
KSkgewotICAgICAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3Rv
cmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpKQot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKndlYnNpdGVEYXRhU3RvcmUp
OwotICAgIH0KLQotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdvcmtQcm9jZXNz
KTsKLSAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkK
IHsKLSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJv
Y2Vzc1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBz
dXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+
cHJvY2Vzc0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzUxLDkgKzQ4Myw2
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24p
CiAgICAgICAgIG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVh
dmUgdGhlIHByb2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0
aGUgY2xpZW50IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3
b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwog
fQogCkBAIC03NjcsMTEgKzQ5NiwxMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29y
a2VyUHJvY2Vzc0NyYXNoZWQoV2ViUHJvY2Vzc1Byb3h5JiBwcm94eSkKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlBy
b2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKIHsKICAgICBlbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwg
d2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkgPSBX
VEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
d2ViUHJvY2Vzc1Byb3h5LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdl
YlByb2Nlc3NQcm94eSA9IG1ha2VXZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RG
TW92ZShyZXBseSldIChhdXRvJiBjb25uZWN0aW9uSW5mbykgbXV0YWJsZSB7CiAgICAgICAgIGlm
IChVTkxJS0VMWSghSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9u
SW5mby5pZGVudGlmaWVyKCkpICYmIHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKICAg
ICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJnZXRO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246IEZhaWxlZCBmaXJzdCBhdHRlbXB0LCByZXRyeWluZyIp
OwogICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5
LCBXVEZNb3ZlKHJlcGx5KSk7CisgICAgICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RG
TW92ZShyZXBseSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHJl
cGx5KGNvbm5lY3Rpb25JbmZvKTsKQEAgLTgwNCwxNSArNTMzLDkgQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6Z2V0R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNz
UHJveHksIE0KICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2b2lkIFdlYlByb2Nlc3NQb29s
Ojplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29y
a1Byb2Nlc3NQcm94eSYgcHJveHksIFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21h
aW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIEFTU0VSVF9VTlVTRUQocHJveHksICZwcm94eSA9
PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKLQotICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUg
PSBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9u
SUQoc2Vzc2lvbklEKTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBp
ZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9
IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAg
ICAgICB3ZWJzaXRlRGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwotICAgIH0K
KyAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdE
YXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRhU3Rv
cmUpCisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKIAogICAgIFdlYlByb2Nlc3NQcm94eSogc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIgfTsKICAgICBpZiAoIW1fdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcykgewpAQCAtOTIyLDcgKzY0NSw3IEBAIFJlZlB0cjxXZWJQcm9j
ZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2VzcyhXZWJzaXRl
RGF0YVN0b3JlCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCiAgICAgLy8gSW4g
cGxhdGZvcm1zIHVzaW5nIEJ1YmJsZXdyYXAgZm9yIHNhbmRib3hpbmcsIHByZXdhcm1lZCBwcm9j
ZXNzIGlzIGxhdW5jaGVkIHVzaW5nIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IFdlYnNpdGVE
YXRhU3RvcmUsCiAgICAgLy8gc28gd2UgZG9uJ3QgdXNlIGl0IGluIGNhc2Ugb2YgdXNpbmcgYSBk
aWZmZXJlbnQgV2Vic2l0ZURhdGFTdG9yZS4KLSAgICBpZiAobV9zYW5kYm94RW5hYmxlZCAmJiBt
X3dlYnNpdGVEYXRhU3RvcmUgJiYgbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpICE9ICZ3ZWJzaXRl
RGF0YVN0b3JlKQorICAgIGlmIChtX3NhbmRib3hFbmFibGVkKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICNlbmRpZgogCkBAIC0xMTk4LDkgKzkyMSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQogICAg
ICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9yVGVzdGluZygpOwog
CiAgICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24odGhpcywgcHJvY2Vz
cy0+d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAg
ICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5KiBw
cm9jZXNzKQpAQCAtMTI5NSwxMCArMTAxNSw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nl
c3NQb29sOjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAg
ICAgaWYgKCFwYWdlQ29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAg
IC8vIFdlIHRyeSB0byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxv
bmcgYXMgcG9zc2libGUuCiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRv
IGNyZWF0ZSBhIHdlYiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVu
IHdlIGhhdmUgdG8gY3JlYXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkK
LSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9u
LT5zZXRXZWJzaXRlRGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAg
IHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8
V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzOwpAQCAtMTM2NSwxNSArMTA4Miw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyIHBhZ2VJCiB7CiAgICAgYXV0byByZXN1bHQgPSBtX3Nlc3Npb25Ub1BhZ2VJRHNN
YXAuYWRkKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSwgSGFzaFNldDxXZWJQYWdlUHJveHlJZGVudGlm
aWVyPigpKS5pdGVyYXRvci0+dmFsdWUuYWRkKHBhZ2VJRCk7CiAgICAgQVNTRVJUX1VOVVNFRChy
ZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0
b3JlLnNlc3Npb25JRCgpOwotICAgIGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBBU1NFUlQoIXNlc3Npb25JRC5pc0VwaGVtZXJh
bCgpIHx8IGRhdGFTdG9yZS5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNl
c3Npb25JRCA9PSBzZXNzaW9uSUQpOwotICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2Vzcykgewot
ICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFTdG9y
ZSkpOwotICAgICAgICAgICAgZGF0YVN0b3JlLmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAg
ICAgfQotICAgIH0KIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUVuZFVzaW5nV2Vic2l0
ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgV2Vic2l0ZURhdGFTdG9y
ZSYgZGF0YVN0b3JlKQpAQCAtMTQwOSwyNiArMTExNywyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQ
cm9jZXNzUG9vbDo6ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdl
UHJveAogICAgICAgICBpc0FwcEJvdW5kID0gaW5pdGlhdGluZ1BhZ2UtPmlzVG9wRnJhbWVOYXZp
Z2F0aW5nVG9BcHBCb3VuZERvbWFpbigpOwogICAgIH0KIAotICAgIGlmIChuZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsK
LSAgICAgICAgLy8gUmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBh
cyBPcmlnaW5hbCBVUkwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCi0gICAgICAgIC8vIFdlIHNl
dCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgotICAgICAgICBpZiAoaW5p
dGlhdGluZ1BhZ2UpIHsKLSAgICAgICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7
IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKLSAgICAg
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQ
YWdlVVJMKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVn
aXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsK
LSAgICAgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBI
ZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNl
dEhUVFBVc2VyQWdlbnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudCgpKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVz
KFVSTCgpKTsKLSAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2Up
OwotICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Qu
c2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAg
ICAgICB9Ci0gICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAg
ICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3du
bG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRl
ZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJl
dHVybiBkb3dubG9hZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChy
ZXF1ZXN0KTsKKyAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1
c2VkIGFzIE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBz
ZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlh
dGluZ1BhZ2UpIHsKKyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsg
fSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRh
dGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7Cisg
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5z
RXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1
cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2Vu
dCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRp
bmdQYWdlLT51c2VyQWdlbnQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdXBkYXRlZFJlcXVl
c3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoVVJMKCkpOworICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRJc1NhbWVTaXRlKGZhbHNlKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNI
VFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1
cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2Vy
QWdlbnQoKSk7CiAgICAgfQorICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkRvd25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93
bmxvYWRJRCgpLCB1cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUp
LCAwKTsKIAogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTQ0MiwxMSArMTE0Nyw3
IEBAIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChXZWJzaXRl
RGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhCiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNp
b246OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAo
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFBy
b3h5LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRi
b3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0g
ICAgfQotCisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRQcm94
eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94
RXh0ZW5zaW9uSGFuZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKQEAg
LTE1MTcsNyArMTIxOCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkK
IAogUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQog
ewotICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vz
c0lkZW50aWZpZXIoKSA6IDA7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLnByb2Nlc3NJZGVudGlmaWVyKCk7CiB9CiAKIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9v
bDo6cHJld2FybWVkUHJvY2Vzc0lkZW50aWZpZXIoKQpAQCAtMTYxNCwxMCArMTMxNSw3IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Q
cm90b2NvbEhhbmRsZXJzKGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGdsb2JhbFVSTFNj
aGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLmFkZCh1cmxTY2hlbWUpOwotICAgIGZv
ciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVBy
b3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsK
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2
aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2
MjYsMTAgKzEzMjQsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJM
U2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbgogICAgICAgICByZXR1cm47
CiAKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5yZW1v
dmUodXJsU2NoZW1lKTsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3Rl
clNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lD
dXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdp
c3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkK
QEAgLTE2NjMsMTYgKzEzNTgsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2Rl
bChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhDYWNoZU1vZGVsIGNhY2hl
TW9kZWwpCiB7CiAgICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNhcGFjaXR5KCk7CiAKLSAgICBp
ZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRl
c3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9k
ZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOwogfQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3Vi
bGUgdGltZW91dEludGVydmFsKQpAQCAtMTY4Miw3ICsxMzc1LDcgQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRl
cnZhbCkKIAogRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJv
eHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlLCBjb25zdCBGcmFtZUluZm9EYXRh
JiBmcmFtZUluZm8pCiB7Ci0gICAgcmV0dXJuIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY3JlYXRl
RG93bmxvYWRQcm94eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQ
YWdlKTsKKyAgICByZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFBy
b3h5KGRhdGFTdG9yZSwgKnRoaXMsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdl
KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChi
b29sIGJhY2tncm91bmQpCkBAIC0xNzU4LDI1ICsxNDUxLDExIEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnN0b3BNZW1vcnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQ
b29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oKQotewotICAgIEFTU0VSVChtX3Byb2Nlc3Nl
cy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCghbV9uZXR3b3JrUHJvY2Vzcyk7Ci0KLSAgICBpZiAo
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Byb2Nlc3Nl
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uID0gdHJ1ZTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYg
bWVzc2FnZSwgVSYmIHJlcGx5KQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0
d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmRTeW5jKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5
KSwgMCk7CisgICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNhblNlbmRN
ZXNzYWdlKCkpCisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRT
eW5jKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9y
V2ViU29ja2V0KGJvb2wgYWxsb3dzKQpAQCAtMTc4NiwxOSArMTQ2NSwxNiBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFs
bG93cykKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKCksIDAp
OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKCksIDApOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCiB7CiAgICAgdGVybWluYXRl
U2VydmljZVdvcmtlcnMoKTsKIAotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOwotICAgIG1f
bmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLnRlcm1pbmF0ZSgpOworCisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRl
cm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQpAQCAtMTgxMCwyMiArMTQ4NiwxNyBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZv
clRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJlcGFyZVRvU3VzcGVuZChJ
c1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJlcGFyZVRvU3VzcGVuZChJ
c1N1c3BlbnNpb25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1p
bmVudGx5Rm9yVGVzdGluZygpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVz
dGluZygpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZW5kTmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQogewotICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgp
OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRQcm9jZXNzRGlkUmVz
dW1lKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJz
KCkKQEAgLTE4NTAsMTUgKzE1MjEsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3luY0xvY2Fs
U3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmQKIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2Uo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3Jh
Z2UoKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9y
YWdlKCksIDApOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDZXJ0
aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNl
cnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxv
d1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRl
SW5mbygpLCBob3N0KSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1dG9t
YXRpb25DYXBhYmlsaXRpZXMoKSBjb25zdApAQCAtMjM3NywxMCArMjA0Nyw3IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkKICNpZiBF
TkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlk
Q29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIHRvRG9tYWluLCBPcHRpb25TZXQ8Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFu
c2Zlcjo6RmxhZz4gbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgV2ViUGFnZVByb3h5SWRlbnRpZmll
ciB3ZWJQYWdlUHJveHlJRCwgUGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKQogewotICAgIGlmICgh
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vz
cy0+ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9t
RG9tYWluLCB0b0RvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQs
IHdlYlBhZ2VJRCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGlkQ29t
bWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0
b0RvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJ
RCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0
aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IDFmNDZjZTRkNjM3ZTc0NmQ5
NGM2ZThhZTk2NTNiYWQwY2E3OTgyN2UuLmM5MTJjOTA2ODAyZjJjOTg5NGZiZWJhZTIzZWRmOWY2
Nzg2YmMzZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAt
ODEsNyArODEsNiBAQCBPQkpDX0NMQVNTIFdLUHJlZmVyZW5jZU9ic2VydmVyOwogCiBuYW1lc3Bh
Y2UgQVBJIHsKIGNsYXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQ7CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNsYXNzIEhUVFBDb29raWVTdG9y
ZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTgwLDcgKzE3OSw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5
Q29udGV4dEhpc3RvcnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0RG93bmxvYWRDbGllbnQoVW5p
cXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0QXV0b21hdGlvbkNs
aWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAgICB2b2lk
IHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJ
OjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRDdXN0b21X
ZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgY29u
c3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7IHJl
dHVybiBtX2NvbmZpZ3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRp
ZmllcigpOyB9CkBAIC0yMDksOSArMjA3LDYgQEAgcHVibGljOgogICAgIC8vIERpc2Nvbm5lY3Qg
dGhlIHByb2Nlc3MgZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNz
KFdlYlByb2Nlc3NQcm94eSopOwogCi0gICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlKiB3ZWJz
aXRlRGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9
Ci0gICAgdm9pZCBzZXRQcmltYXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYg
ZGF0YVN0b3JlKSB7IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7IH0KLQogICAgIFJl
ZjxXZWJQYWdlUHJveHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6OlBhZ2VD
b25maWd1cmF0aW9uPiYmKTsKIAogICAgIHZvaWQgcGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0
b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYnNpdGVEYXRhU3RvcmUmKTsKQEAgLTMwOSw4
ICszMDQsNiBAQCBwdWJsaWM6CiAgICAgQVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudCYg
aGlzdG9yeUNsaWVudCgpIHsgcmV0dXJuICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJDb250
ZXh0Q2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIGNv
bnN0IHsgcmV0dXJuICptX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAgICAgc3Ry
dWN0IFN0YXRpc3RpY3MgewogICAgICAgICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAgICAgICAg
dW5zaWduZWQgd2tQYWdlQ291bnQ7CkBAIC0zMTgsOSArMzExLDYgQEAgcHVibGljOgogICAgIH07
CiAgICAgc3RhdGljIFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MoKTsgICAgCiAKLSAgICB2b2lkIHVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwotICAgIGJvb2wgaXNVc2luZ1Rlc3RpbmdOZXR3b3Jr
U2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9u
OyB9Ci0KICAgICB2b2lkIHNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJv
b2wpOwogCiAgICAgdm9pZCBjbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7CkBAIC00MDAsNyArMzkw
LDYgQEAgcHVibGljOgogCiAgICAgLy8gTmV0d29yayBQcm9jZXNzIE1hbmFnZW1lbnQKICAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5JiBlbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3Jl
KiB3aXRoV2Vic2l0ZURhdGFTdG9yZSA9IG51bGxwdHIpOwotICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHkqIG5ldHdvcmtQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy5nZXQo
KTsgfQogICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkm
KTsKIAogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94
eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bkRlbGF5ZWRSZXBseSYmKTsKQEAgLTQxMCw4ICszOTksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBl
c3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1By
b2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVNlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5Jik7CiAgICAgc2l6ZV90IHNlcnZpY2VX
b3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMuY29tcHV0ZVNpemUoKTsgfQotICAgIHZvaWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JTZXJ2aWNlV29ya2VyKGJvb2wgYWxsb3dzKSB7IG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVG
b3JTZXJ2aWNlV29ya2VyID0gYWxsb3dzOyB9Ci0gICAgYm9vbCBhbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvclNlcnZpY2VXb3JrZXIoKSBjb25zdCB7IHJldHVybiBtX2FsbG93c0FueVNTTENlcnRp
ZmljYXRlRm9yU2VydmljZVdvcmtlcjsgfQogICAgIHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVz
ZXJBZ2VudChjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNl
ckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4mIHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50
aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250
cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9y
ZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0OwpAQCAtNTU3LDYgKzU0NCwxNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vz
cyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSk7CiAjZW5kaWYKIAor
ICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVy
bFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAg
ICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJp
bmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29u
dGVudENhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9y
YXJ5RGlyZWN0b3J5KCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5p
dGlhbGl6ZSgpOwogCkBAIC01NzAsOCArNTY4LDYgQEAgcHJpdmF0ZToKICAgICBXZWJQcm9jZXNz
UHJveHkmIGNyZWF0ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQ
cm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAg
ICAgdm9pZCBpbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmLCBXZWJzaXRl
RGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94
eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQogICAgIHZvaWQg
aGFuZGxlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1l
LCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZvaWQgaGFuZGxlU3luY2hyb25v
dXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNv
bnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0
YSYmKT4mJik7CiAKQEAgLTU5NSwxNCArNTkxLDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdXNl
c1NpbmdsZVdlYlByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPnVzZXNT
aW5nbGVXZWJQcm9jZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3Rh
dGljIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBw
YXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNo
ZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3Rv
cnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwot
I2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0
aW9uT2JzZXJ2ZXJzKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJz
KCk7CkBAIC02NjIsNyArNjUwLDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJ
OjpBdXRvbWF0aW9uQ2xpZW50PiBtX2F1dG9tYXRpb25DbGllbnQ7CiAgICAgVW5pcXVlUmVmPEFQ
STo6RG93bmxvYWRDbGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+IG1faGlzdG9yeUNsaWVudDsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogCiAgICAgUmVmUHRyPFdlYkF1dG9tYXRpb25TZXNzaW9u
PiBtX2F1dG9tYXRpb25TZXNzaW9uOwogCkBAIC02OTQsOCArNjgxLDYgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQgeyBmYWxzZSB9OwogICAgIGRvdWJsZSBtX21l
bW9yeVNhbXBsZXJJbnRlcnZhbCB7IDE0MDAuMCB9OwogCi0gICAgUmVmUHRyPFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3JlOwotCiAgICAgdHlwZWRlZiBIYXNoTWFw
PGNvbnN0IGNoYXIqLCBSZWZQdHI8V2ViQ29udGV4dFN1cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0
IGNoYXIqPj4gV2ViQ29udGV4dFN1cHBsZW1lbnRNYXA7CiAgICAgV2ViQ29udGV4dFN1cHBsZW1l
bnRNYXAgbV9zdXBwbGVtZW50czsKIApAQCAtNzMwLDggKzcxNSw2IEBAIHByaXZhdGU6CiAKICAg
ICBib29sIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCB7IHRydWUgfTsKIAotICAgIHN0ZDo6
dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwotCiAgICAg
SGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPERpY3Rpb25hcnlDYWxsYmFjaz4+IG1fZGljdGlvbmFy
eUNhbGxiYWNrczsKIAogI2lmIFVTRShTT1VQKQpAQCAtODUxLDE1ICs4MzQsMTUgQEAgcHJpdmF0
ZToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAm
JiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CisgICAgaWYgKE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNhblNlbmRNZXNzYWdlKCkpCisgICAgICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3Nh
Z2UpLCAwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2Fn
ZSkKIHsKICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDFkYWFjNTQwMjA1ODFm
N2FhN2Y4MTliNGI0NTAyY2U2Yzc5OGI4OTIuLjdmNGM1YzRkZGE4MmQ2YzRiNzc2NTI0MDRhODk2
NWI5M2ZjMTQ4ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVk
ZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vz
c1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJX
ZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlhbGl6ZS5oIgog
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpA
QCAtNzUsNiArNzYsMTAgQEAKICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5o
IgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJEZWZhdWx0V2ViQnJv
d3NlckNoZWNrcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgYm9v
bCBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zOwpAQCAtODMsMTMgKzg4LDIy
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxP
cmlnaW5zKCkKICAgICBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1
ZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUq
PiYgbm9uRGVmYXVsdERhdGFTdG9yZXMoKQorc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQs
IFdlYnNpdGVEYXRhU3RvcmUqPiYgYWxsRGF0YVN0b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoaXNVSVRocmVhZCgpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6
OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0K
IAorVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlOjpw
YXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpCit7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzPiBhbGxQYXJhbWV0ZXJzOworICAgIGFsbFBhcmFtZXRlcnMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShhbGxEYXRhU3RvcmVzKCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIHN0b3Jl
IDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgICAgICBhbGxQYXJhbWV0ZXJzLnVuY2hl
Y2tlZEFwcGVuZChzdG9yZS0+cGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gYWxsUGFyYW1ldGVy
czsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZU5v
blBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYnNpdGVEYXRhU3Rv
cmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0ZShJc1BlcnNpc3RlbnQ6Ok5v
KSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vzc2lvbklEKCkpKTsKQEAgLTEx
NSwxMCArMTI5LDExIEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoUmVmPFdl
YnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmIGNvbmZpZ3VyCiAjZW5kaWYKIHsKICAgICBX
VEY6OnNldFByb2Nlc3NQcml2aWxlZ2VzKGFsbFByaXZpbGVnZXMoKSk7Ci0gICAgbWF5YmVSZWdp
c3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsK
ICAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuYWRkU2Vzc2lvbigqdGhp
cyk7CiB9CiAKIFdlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKQEAgLTEyOCwx
NyArMTQzLDEyIEBAIFdlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKIAogICAg
IHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNTRVJUKG5vbkRlZmF1bHREYXRh
U3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKLSAgICAgICAgbm9uRGVmYXVsdERh
dGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Np
b25JRCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgQVNTRVJUKGFsbERhdGFTdG9yZXMoKS5nZXQo
bV9zZXNzaW9uSUQpID09IHRoaXMpOworICAgIGFsbERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNz
aW9uSUQpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnJlbW92ZVNlc3Np
b24obV9zZXNzaW9uSUQpOwogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKLSAgICAgICAgaWYgKGF1
dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVk
KCkpCi0gICAgICAgICAgICBncHVQcm9jZXNzUHJveHktPnJlbW92ZVNlc3Npb24obV9zZXNzaW9u
SUQpOworICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbklmQ3JlYXRlZCgpKQorICAgICAgICBncHVQcm9jZXNzUHJveHktPnJlbW92ZVNlc3Np
b24obV9zZXNzaW9uSUQpOwogI2VuZGlmCiB9CiAKQEAgLTE2OSwxNyArMTc5LDE1IEBAIGJvb2wg
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpCiAgICAgcmV0dXJuICEh
Z2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1h
eWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVn
aXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKIHsKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IG5v
bkRlZmF1bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKLSAgICAgICAgQVNT
RVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICB9CisgICAgYXV0byBy
ZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogfQogCi1XZWJzaXRlRGF0YVN0
b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNz
aW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQorV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0
ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQogewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCkg
OiBudWxscHRyOworICAgIHJldHVybiBhbGxEYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94
eSYgcHJvY2VzcykKQEAgLTE5NSwxMiArMjAzLDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1
bnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgbV9wcm9jZXNz
ZXMucmVtb3ZlKHByb2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9y
ZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBw
b29scyA9IHByb2Nlc3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVs
bHB0ciA6IHBvb2xzLmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZl
ZERpcmVjdG9yaWVzKQpAQCAtNDQzLDggKzQ0NSw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
ZmV0Y2hEYXRhQW5kQXBwbHkoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBP
CiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAg
c3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJv
Y2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nl
c3NUeXBlOjpMYXVuY2g6CkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMs
IE8KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQ
ZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpLT5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0aW9u
cywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVE
YXRhKSB7CisgICAgICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5mZXRj
aFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxi
YWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAg
ICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2so
V1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTcy
Nyw4ICs3MjcsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5
SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgpAQCAt
NzQwLDcgKzczOCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0g
ICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURh
dGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVn
YXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlm
aWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CiAgICAgICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAg
ICAgICAgIH0pOwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC04OTEs
MTQgKzg4OSw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRh
VHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcykpIHsKICAgICAgICAgaWYgKCFkaWROb3RpZnlO
ZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAg
ICAgICAgICAgICAgICAgICAgcHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQs
IGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJh
Y2soKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGVs
ZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTIs
OCArOTg1LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHBvb2xzKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNz
QWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlm
TGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKQEAgLTEw
MTksNyArMTAxMCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0g
ICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURh
dGFGb3JPcmlnaW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3RO
YW1lcywgSFNUU0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CisgICAgICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRh
dGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJl
Z2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAg
ICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTExODMsOCArMTE3NCw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1F
bnRyeUNvdW50LCBDb21wbGV0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vz
c1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9z
ZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRNYXhT
dGF0aXN0aWNzRW50cmllcyhtX3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVF
bnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMTkzLDggKzExODMsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRD
b3VudCwgQ29tcGxldGlvbgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9j
ZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3duVG8obV9z
ZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFBydW5l
RW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhl
cmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xMjAzLDggKzExOTIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5k
bGVyPAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25k
cywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklE
LCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRz
IHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEyMTMsMjAgKzEyMDEsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVt
VGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vj
b25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogICAgIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJv
Y2Vzcy0+ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmR1bXBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTEyMzgsMTIgKzEyMTksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUHJldmFsZW50UmVzb3Vy
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmlzUHJldmFsZW50UmVz
b3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpp
c0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjU1LDEyICsxMjMxLDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
ICAgICBwcm9jZXNzLT5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjc0
LDggKzEyNDUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNl
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVBy
b2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0UHJldmFsZW50UmVzb3VyY2Uo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyODksMTAgKzEyNTksNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVy
eVByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA0LDEyICsxMjcxLDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLmlzVmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJl
c291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xMzIzLDEwICsxMjg1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGUKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5l
dHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBuZXR3b3JrUHJvY2Vzcy0+c2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuc2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMzUsOCArMTI5NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwo
Ym9vbCB2CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNz
aW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1
YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzUwLDIyICsxMzA4LDE0IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYg
c3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5zZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwm
IHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVy
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuaXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1l
VVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBj
b25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xMzc5LDIzICsxMzI5LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3Vy
Y2VVCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRT
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBV
UkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3Vi
cmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBz
dWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJM
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVy
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJM
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBV
UkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTQwOSwxMCArMTM1MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkws
CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsUmVkaXJlY3RlZFRvIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3Qg
VVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQyNCwxMiArMTM2
Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25z
dCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ0MSwxMiArMTM3NCw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGly
ZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0VG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBj
b25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDU4LDI1ICsxMzg2LDE0IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFt
ZVVSTCwgY29uCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RG
cm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJM
IH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0
ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBjb25zdCBV
UkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKS5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2Uo
Y29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE0ODgsNDYgKzE0MDUsMjcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVh
clByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAg
ICAgcHJvY2Vzcy0+cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVz
KG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lv
bklELCBbXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBt
b2RpZmllZFNpbmNlLCBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRo
ZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KG1fc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQo
bV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTU3MCwyMiArMTQ2OCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRo
ZXJTdGF0aQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVC
bG9ja2luZ1VwZGF0ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNj
aGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS5zY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNTk0LDI0ICsxNDg0LDEzIEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNz
aW5nKENvbXBsZXRpb25IYW5kCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nl
c3NpbmcobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zY2hlZHVsZVN0
YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0Rh
dGFiYXNlSGFzQWxsVGFibGVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAg
ICBwcm9jZXNzLT5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9z
ZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjIzLDIy
ICsxNTAyLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJM
JiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRv
bWFpbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+
ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZG9tYWluSURFeGlzdHNJbkRh
dGFiYXNlKG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhj
b25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVSTCYgdG9wRnJh
bWVVcmwyLCBTZWNvbmRzIGxhc3RTZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgU2Vjb25k
cyBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgYm9vbCBp
c1ByZXZhbGVudCwgYm9vbCBpc1ZlcnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVt
b3ZlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTY1MCwxMCArMTUyMSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNG
b3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyCiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bWVyZ2VTdGF0aXN0aWNGb3JUZXN0
aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9u
LCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50
LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0
b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIg
fSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
biwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVj
b3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NjUsMTggKzE1MzMsMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwm
IHVybCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1Nj
aGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpLmluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBoYWRVc2VySW50ZXJh
Y3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGlzUHJldmFsZW50
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5z
ZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vzc2lvbklELCB2YWx1
ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTY4NCw4ICsxNTQ4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBDb21wbGUK
ICAgICB1c2VFeHBsaWNpdElUUFN0YXRlKCk7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklE
LCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVy
IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY5Niw3ICsxNTU5LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlm
aWVyIHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdlYlBhZ2UtPnByb2Nl
c3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxsU3RvcmFnZUFj
Y2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50
cmllcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAKQEAg
LTE3MDQsOCArMTU2Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25ICiB7CiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzE5LDEwICsxNTgxLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+bG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5sb2dVc2VySW50ZXJhY3Rpb24obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlcklu
dGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTczNCwxMyArMTU5Myw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3Mt
Pmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsK
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5oYXNIYWRVc2VySW50ZXJhY3Rp
b24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1Jl
bGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QgVVJM
JiB0b3BVcmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xNzUyLDEzICsxNjA1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0
aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWxhdGlvbnNoaXBP
bmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkuaXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTc3MiwxMCArMTYxOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50
ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyVXNlckludGVy
YWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJs
LCBib29sIGlzR3JhbmRmYXRoZXJlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTc4OSwxMCArMTYzMyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQs
IENvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldEdyYW5kZmF0
aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlz
R3JhbmRmYXRoZXJlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODAxLDEwICsxNjQyLDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2
YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2luZ2xldG9uKCkuc2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYg
ZnJvbVVSTCwgY29uc3QgVVJMJiB0b1VSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTgxMyw2MiArMTY1MSwzOCBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0
IFVSTCYgZgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5zZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdG9VUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0
aW9uRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3
b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5yZXNldENyb3NzU2l0ZUxvYWRzV2l0
aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVz
dGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmRlbGV0
ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5kZWxldGVD
b29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5n
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xv
Y2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JU
ZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Mt
Pmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5oYXNJc29sYXRlZFNlc3Npb24obV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGJvb2wgZW5h
YmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuc2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBA
IC0xODk5LDEwICsxNzEzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlKFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWUKICAgICAgICAgICAg
IHdlYlByb2Nlc3Muc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2luZ01vZGUs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29y
a1Byb2Nlc3MtPnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJs
b2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9k
ZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91
bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkxMCwx
MCArMTcyMSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFnID0gZW5h
YmxlZCA/IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBX
ZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hv
dWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
ZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkyMSwy
MCArMTcyOSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZQogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogICAgIGF1dG8gbW9kZSA9IGVuYWJsZWQgPyBXZWJDb3JlOjpGaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llcyA6IFdlYkNvcmU6OkZpcnN0UGFy
dHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpOb25lOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nl
c3Npb25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVt
b3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRU
b1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFRvU2FtZVNpdGVTdHJp
Y3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZiAvLyBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCkBAIC0xOTQzLDggKzE3NDUsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2Vz
KFNlY29uZHMgc2Vjb25kcywgQwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nl
c3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJl
c291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlY29uZHMpOwogICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CkBAIC0xOTU2LDIyICsxNzU3LDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRD
YWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhDb21wbGV0aW9uSGFuZGxlCiAjaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDYWNoZU1heEFn
ZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucmVz
ZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNl
bmRpZgogfQogCi1ib29sIFdlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29s
KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcHJv
Y2Vzc1Bvb2xEYXRhU3RvcmUgPSBwcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAg
ICAgIHJldHVybiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9PSB0aGlzOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQogSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3Jl
Ojpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb25zdAogewogICAgIEhhc2hTZXQ8UmVmUHRy
PFdlYlByb2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xzOwpAQCAtMTk4Niw5ICsxNzc3LDYgQEAgSGFz
aFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9v
bHMoc2l6ZV90IGxpbWl0KSBjb24KICAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewog
ICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbmUgb2YgdGhlIGxlZ2FjeSBkYXRhIHN0b3Jlcy4K
ICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKCFpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbCgq
cHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCiAgICAgICAgICAgICBw
cm9jZXNzUG9vbHMuYWRkKHByb2Nlc3NQb29sKTsKICAgICAgICAgICAgIGlmIChwcm9jZXNzUG9v
bHMuc2l6ZSgpID09IGxpbWl0KQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjEwNiwxNyAr
MTg5NCwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgCiAgICAgICAgIHJlc29sdmVEaXJlY3Rv
cmllc0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSk7CisgICAgICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSksIDApOwor
ICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAg
ICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNzYWdlczo6
V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1ZSksIG1fc2Vz
c2lvbklEKTsKLSAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29s
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSkpOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2Up
LCAwKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAg
ICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChmYWxzZSksIG1fc2Vz
c2lvbklEKTsKLSAgICB9CiAKICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkID0g
ZmFsc2U7CiAjZWxzZQpAQCAtMjEyOCw4ICsxOTE0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soRnVuY3Rpb248dm9p
ZChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAoY2FsbGJhY2spIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICAg
ICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSk7
CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50
KHRydWUpLCAwKTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayk7CkBAIC0yMTQ4LDggKzE5MzMsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGVk
LCBDb21wbGV0aQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdN
b2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKICAgICBVTlVTRURfUEFSQU0o
Y29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjE2NCwyMCArMTk0OCwxNCBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3
b3JrUHJvY2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuaXNSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAjZW5kaWYKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGJv
b2wgZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5hYmxlZCk7CiB9
CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjE5OSwyOSArMTk3
Nyw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
SW5XZWJQcm9jZXNzZXMoQ29tcGxldGlvbkhhbmRsCiB9CiAjZW5kaWYKIAotVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4gV2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMoKSBjb25zdAotewot
ICAgIHJldHVybiBjb3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7Ci19Ci0KLXZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNv
b2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZUlmKFsmY29va2llXShhdXRvJiBw
ZW5kaW5nQ29va2llKSB7Ci0gICAgICAgIHJldHVybiBwZW5kaW5nQ29va2llLmlzS2V5RXF1YWwo
Y29va2llKTsKLSAgICB9KTsKLSAgICBtX3BlbmRpbmdDb29raWVzLmFkZChjb29raWUpOwotfQot
Ci12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUoY29uc3QgV2ViQ29y
ZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmUoY29va2ll
KTsKLX0KLSAgICAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcygp
Ci17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5jbGVhcigpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCiB7CiAg
ICAgbV9xdWV1ZS0+ZGlzcGF0Y2goV1RGTW92ZShmdW5jdGlvbikpOwpAQCAtMjI0NSw4ICsyMDAw
LDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1l
dGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogCi0gICAgcGFy
YW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdDb29raWVzKCk7Ci0KICAgICBhdXRvIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPnJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUg
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhhbmRsZTsKICAgICBpZiAoIXJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtMjM0NCw3ICsyMDk3LDE0IEBA
IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMo
KQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQgPSBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhwYXJhbWV0ZXJz
KTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBo
YXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKKyNlbmRpZgogCisj
aWYgVVNFKFNPVVApCisgICAgV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRv
bigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCgpLCBwYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIHBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlw
ZSk7CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gcGFyYW1ldGVyczsKIH0KIApAQCAtMjM3NCwx
MCArMjEzNCw2IEBAIEFQSTo6SFRUUENvb2tpZVN0b3JlJiBXZWJzaXRlRGF0YVN0b3JlOjpjb29r
aWVTdG9yZSgpCiAgICAgcmV0dXJuICptX2Nvb2tpZVN0b3JlOwogfQogCi12b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLX0KLQogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgaWYgKCFpc1BlcnNpc3RlbnQoKSkgewpAQCAtMjM5OCwxMCArMjE1
NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5j
dGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRRdW90
YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTI0
MzksMzQgKzIxOTIsMjEgQEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERl
dmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6aGFzQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
aGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmhh
c0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9uKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jbGVhckFw
cEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNs
ZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEo
VVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFtZSwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
ZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwotICAgICAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQs
IG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICAgICAgfQotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5h
ZGRTZXNzaW9uKCp0aGlzKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5y
ZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBk
YXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiBQTEFURk9STShD
T0NPQSkKQEAgLTI0ODksNyArMjIyOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2Fy
ZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlCiAKICAg
ICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpLmdldCgp
LCAqYXBwQm91bmREb21haW5zKTsKIAotICAgIGZvciAoYXV0byogc3RvcmUgOiBub25EZWZhdWx0
RGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgIGZvciAoYXV0byogc3RvcmUgOiBhbGxEYXRhU3Rv
cmVzKCkudmFsdWVzKCkpCiAgICAgICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhzdG9yZSwg
KmFwcEJvdW5kRG9tYWlucyk7CiB9CiAKQEAgLTI0OTcsMTAgKzIyMzcsNyBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUChjb25zdCBIYXNoU2V0PFdlYkNv
cmU6OlJlZ2lzdHJhYgogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9hZFN0
YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldEFwcEJvdW5k
RG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5kaWYKIApAQCAtMjUwOCwxNiArMjI0NSwx
NCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdv
cmtQcm9jZXNzKGNvbnN0IFN0cmluZyYgYnVuZAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAg
ICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVu
dGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkudXBkYXRlQnVuZGxlSWRlbnRpZmllcihi
dW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5j
bGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDBhN2Y4M2QyYjdk
YzYzNTM4Yzg1Nzg4MDBlNjE3YWZmYzVkM2YxOWQuLmVlOTdmOWQ3OTcxMTg2MzBiNWQ4ZWFhMGNj
YTVlYzczY2JlODNjZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6
CiAgICAgV2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+
JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB+V2Vic2l0ZURhdGFTdG9yZSgpOwogCi0gICAgc3Rh
dGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Np
b25JRChQQUw6OlNlc3Npb25JRCk7CisgICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0
aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKIAogICAgIGJvb2wgaXNQ
ZXJzaXN0ZW50KCkgY29uc3QgeyByZXR1cm4gIW1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCk7IH0K
ICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25J
RDsgfQpAQCAtMjI2LDE1ICsyMjYsOCBAQCBwdWJsaWM6CiAKICAgICBEZXZpY2VJZEhhc2hTYWx0
U3RvcmFnZSYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSB7IHJldHVybiBtX2RldmljZUlkSGFz
aFNhbHRTdG9yYWdlLmdldCgpOyB9CiAKLSAgICBXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2xG
b3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGJvb2wgaXNBc3NvY2lhdGVkUHJvY2Vz
c1Bvb2woV2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsKLQogICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzIHBhcmFtZXRlcnMoKTsKLQotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IHBlbmRp
bmdDb29raWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNv
cmU6OkNvb2tpZSYpOwotICAgIHZvaWQgcmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3Jl
OjpDb29raWUmKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKKyAgICBzdGF0aWMg
VmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBwYXJhbWV0ZXJzRnJvbUFsbFN0b3Jl
cygpOwogCiAgICAgdm9pZCBkaXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgpPiYmKTsKIApA
QCAtMjU5LDggKzI1Miw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tXZWJBdXRoZW50aWNh
dGlvbkNvbmZpZ3VyYXRpb24oV2ViQ29yZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJh
dGlvbiYmKTsKICNlbmRpZgogCi0gICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwot
CiAgICAgY29uc3QgV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24o
KSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24uZ2V0KCk7IH0KIAogICAgIFdlYnNpdGVEYXRhU3Rv
cmVDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CkBAIC0zNDIsNyAr
MzMzLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3Qg
U3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmllZFNpbmNl
KTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtl
eXNTdG9yYWdlRGlyZWN0b3J5LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YT4mKTsKIAotICAgIHZvaWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAg
ICB2b2lkIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgc3RhdGljIE9wdGlvbmFsPEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+
PiBhcHBCb3VuZERvbWFpbnNJZkluaXRpYWxpemVkKCk7CkBAIC0zODAsOCArMzcxLDYgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCB7IHRy
dWUgfTsKICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1fcGVuZGluZ0Nv
b2tpZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3Nl
czsKIAogICAgIGJvb2wgbV9pc0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNlIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVE
YXRhU3RvcmVTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3Nv
dXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCmluZGV4IDEyZjljZDgxOWI2ZGNjYThhYzUwOTJh
MzBkZDkzYzUzYjhlZTkzNDIuLjViYTM5MDBkMmRhZmYwNTZhYmQwY2RmMDU3YWUzMjg1NGViZmVj
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAv
V2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCkBAIC0zOSw4ICszOSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyYKICAgICBhdXRvJiBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMgPSBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fcGVy
c2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZDsKIAotICAgIGlmIChhdXRvKiBwcm9jZXNz
UG9vbCA9IHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29r
aWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisgICAgV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnNpbmdsZXRvbigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklE
LCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkKGJvb2wgZW5hYmxlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9n
bGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCmluZGV4IDBhODRhNzU5MGQ5YTk4NWJmYzk5Njg0
YTQ4OTUxMzc0ZTViMjk0MjkuLjI3ZjIzZWEwNjVkYzc1Y2U0YTgyNzBjNTc2ZWEyYWE1NWFiMGRj
OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1By
b3h5R0xpYi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNz
UHJveHlHTGliLmNwcApAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6cGxh
dGZvcm1HZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbAog
ICAgICAgICBpZiAoIWRhdGFTdG9yZSkgewogICAgICAgICAgICAgLy8gUHJld2FybWVkIHByb2Nl
c3NlcyBkb24ndCBoYXZlIGEgV2Vic2l0ZURhdGFTdG9yZSB5ZXQsIHNvIHVzZSB0aGUgcHJpbWFy
eSBXZWJzaXRlRGF0YVN0b3JlIGZyb20gdGhlIFdlYlByb2Nlc3NQb29sLgogICAgICAgICAgICAg
Ly8gVGhlIHByb2Nlc3Mgd29uJ3QgYmUgdXNlZCBpZiBjdXJyZW50IFdlYnNpdGVEYXRhU3RvcmUg
aXMgZGlmZmVyZW50IHRoYW4gdGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgb25lLgotICAgICAg
ICAgICAgZGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC0+d2Vic2l0ZURhdGFTdG9yZSgpOworICAg
ICAgICAgICAgZGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LnB0cigpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGRhdGFTdG9yZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNv
dXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5hZ2VyUHJv
eHlTb3VwLmNwcAppbmRleCA5ZjdiZTNjOTQxYjZjZDBhMWI5NGNiMTM2MDk4ZjNhMDQxY2VmZjk5
Li4wODkyOGZjZDMxNmQ4OGY5ZDUxNTAwZWM2ODRhZDFiNjRhZjhhM2Y5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdlclByb3h5
U291cC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzUG9vbC5oIgogCkBAIC0zNCw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKICAgICBtX2Nvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0b3JhZ2VQ
YXRoLCBzdG9yYWdlVHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OlNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3Jh
Z2VUeXBlKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYgc3RvcmFn
ZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUmIHN0b3JhZ2VUeXBlKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9v
bFNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNv
dXAuY3BwCmluZGV4IGJmYmJmOTY2NGU0ODM1MzA5NzA5NzExZGZkNmMxMzQxNTczMmJkYWMuLjA3
OTNlZDUxMzkxNTI4ZDliNGI5ZmRiMGY0YWQzYzg5NjBmZGE1MjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKQEAgLTM3LDMw
ICszNywyNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRl
cnMmIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2Vi
Q29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0
U2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29v
a2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2ll
UGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAg
ICAgICBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdl
RW5hYmxlZCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdl
RW5hYmxlZCgpOworICAgIC8vIEZJWE1FOiBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5
IHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAvLyBGSVhNRTog
bV9pZ25vcmVUTFNFcnJvcnMgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3Jl
IG9yIHJlbW92ZWQuCisgICAgLy8gRklYTUU6IG1fbmV0d29ya1Byb3h5U2V0dGluZ3Mgc2hvdWxk
IGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgogCi0gICAgcGFyYW1ldGVycy5jb29r
aWVBY2NlcHRQb2xpY3kgPSBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5OwotICAgIHBh
cmFtZXRlcnMuaWdub3JlVExTRXJyb3JzID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAgcGFyYW1l
dGVycy5sYW5ndWFnZXMgPSB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgcGFyYW1ldGVy
cy5wcm94eVNldHRpbmdzID0gbV9uZXR3b3JrUHJveHlTZXR0aW5nczsKICAgICBwYXJhbWV0ZXJz
LnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gdHJ1ZTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAgIG1faWdu
b3JlVExTRXJyb3JzID0gaWdub3JlVExTRXJyb3JzOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0SWdub3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vycm9ycyksIDApOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhjb25zdCBXZWJDb3JlOjpTb3Vw
TmV0d29ya1Byb3h5U2V0dGluZ3MmIHNldHRpbmdzKQogewogICAgIG1fbmV0d29ya1Byb3h5U2V0
dGluZ3MgPSBzZXR0aW5nczsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQ
cm94eVNldHRpbmdzKG1fbmV0d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0
TmV0d29ya1Byb3h5U2V0dGluZ3MobV9uZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOwogfQogCiB9
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDM5
MjYyOGE0OTljZmFmMTZkMTQyMmYxNTUwZjYwY2UyYjhlZGRiZC4uNDE2ZmQzNGJmZjIwYTI1YzNh
MjI0M2M2OWI0NTM2MGM2ZmUzM2RjNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIwLTA4LTExICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIGEgTmV0d29y
a1Byb2Nlc3NQcm94eSBzaW5nbGV0b24gaW5zdGVhZCBvZiBvbmUgcGVyIFdlYlByb2Nlc3NQb29s
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM1NDcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW06CisgICAgICAg
IChydW5UZXN0KToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVExTRGVwcmVjYXRp
b24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tOgorICAgICAgICAo
LVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0
UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSk6
CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgYWxlcnRDb29raWVIVE1M
XSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0Nv
bnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1B
ZGp1c3RDb250ZXh0KToKKwogMjAyMC0wOC0wNiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVo
QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI2NTMyNS4KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERC
RmlsZU5hbWUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4
ZWREQkZpbGVOYW1lLm1tCmluZGV4IDExZjg3ZjgwMzRkMmIxYjU1ZDcyMGRlYjc2NWEzMTY4MjEy
MGQ3NzMuLmE5OGJmMzgyNWJiMWVkNmQ3NTljMDhkNDUzM2FkY2I3ZmYzOTVmZDUgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5h
bWUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVk
REJGaWxlTmFtZS5tbQpAQCAtNDksNyArNDksNyBAQCBzdGF0aWMgUmV0YWluUHRyPFdLU2NyaXB0
TWVzc2FnZT4gbGFzdFNjcmlwdE1lc3NhZ2U7CiAKIEBlbmQKIAotc3RhdGljIHZvaWQgcnVuVGVz
dCgpCitzdGF0aWMgdm9pZCBydW5UZXN0KGJvb2wgb2xkRmlsZVNob3VsZEV4aXN0ID0gdHJ1ZSkK
IHsKICAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbSW5kZXhlZERCRmlsZU5hbWVNZXNzYWdl
SGFuZGxlciBhbGxvY10gaW5pdF0pOwogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMo
W1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CkBAIC04Nyw3ICs4Nyw3IEBA
IHN0YXRpYyB2b2lkIHJ1blRlc3QoKQogICAgIE5TVVJMICpvbGRWZXJzaW9uT3JpZ2luRGlyZWN0
b3J5VVJMID0gW29sZFZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9u
ZW50OiBAImZpbGVfXzAiXTsKICAgICBOU1VSTCAqbmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVS
TCA9IFtuZXdWZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDog
QCJmaWxlX18wIl07CiAgICAgTlNVUkwgKm9sZFZlcnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9y
eVVSTCA9IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENv
bXBvbmVudDp1bnVzZWREYXRhYmFzZU5hbWVdOwotICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFu
YWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9uVW51c2VkRGF0
YWJhc2VEaXJlY3RvcnlVUkwucGF0aF0pOworICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJzaW9uVW51c2VkRGF0YWJh
c2VEaXJlY3RvcnlVUkwucGF0aF0gPT0gb2xkRmlsZVNob3VsZEV4aXN0KTsKICAgICAKICAgICAv
LyBGb3IgZGF0YWJhc2UgdGhhdCBpcyBvcGVuZWQgYWZ0ZXIgdXBncmFkZSwgaXRzIGZpbGUgc2hv
dWxkIG9ubHkgYmUgaW4gdjEuCiAgICAgTlNVUkwgKm9sZFZlcnNpb25FeGlzdGluZ0RhdGFiYXNl
RGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRp
bmdQYXRoQ29tcG9uZW50OiBleGlzdGluZ0RhdGFiYXNlTmFtZV07CkBAIC0xNTQsNyArMTU0LDcg
QEAgc3RhdGljIHZvaWQgY3JlYXRlRGlyZWN0b3JpZXMoU3RyaW5nIHRlc3ROYW1lKQogVEVTVChJ
bmRleGVkREIsIEluZGV4ZWREQkZpbGVOYW1lKQogewogICAgIGNyZWF0ZURpcmVjdG9yaWVzKCJu
b25lIik7Ci0gICAgcnVuVGVzdCgpOworICAgIHJ1blRlc3QoZmFsc2UpOwogfQogCiBURVNUKElu
ZGV4ZWREQiwgSW5kZXhlZERCRmlsZU5hbWVWMCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5t
bQppbmRleCAxN2JjN2Y1ZDc0NDg0YWI1NGQ2NzdhNDcyODkxNDI4ZWYyZmZhMmMwLi42NTYyZTJl
ZTQ0YjQxMzljMDZhYTMzYjMxMDFhNTMwZGU1ZDYyMmM1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLm1tCkBAIC0xNTU4LDEwICsxNTU4LDggQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLCBNaWdyYXRlRGF0YUZyb21NaXNzaW5nVG9wRnJhbWVVbmlxdWVSZWRpcmVjdFNhbWVTaXQK
IAogVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhO
b1Byb2Nlc3NQb29sKQogeworICAgIE5TVVJMICppdHBSb290VVJMID0gW05TVVJMIGZpbGVVUkxX
aXRoUGF0aDpbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21w
b25lbnQ6QCJDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sVGVzdCJdIGlzRGly
ZWN0b3J5OllFU107CiAgICAgYXV0byBkZWZhdWx0RmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl07Ci0gICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24g
KmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uIG5ld10gYXV0b3JlbGVhc2VdOwotICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0
ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1
cmF0aW9uXSBhdXRvcmVsZWFzZV07Ci0gICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbW2RhdGFTdG9y
ZSBfY29uZmlndXJhdGlvbl0gX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnldOwogICAg
IE5TVVJMICpmaWxlVVJMID0gW2l0cFJvb3RVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50
OkAib2JzZXJ2YXRpb25zLmRiIl07CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciByZW1vdmVJdGVt
QXRQYXRoOml0cFJvb3RVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9GQUxTRShbZGVm
YXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6aXRwUm9vdFVSTC5wYXRoXSk7CkBAIC0x
NTcyLDYgKzE1NzAsMTAgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NE
YXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sKQogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0Rmls
ZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpuZXdGaWxlVVJMLnBhdGhdKTsKICAgICBbZGVmYXVs
dEZpbGVNYW5hZ2VyIGNvcHlJdGVtQXRQYXRoOm5ld0ZpbGVVUkwucGF0aCB0b1BhdGg6ZmlsZVVS
TC5wYXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBm
aWxlRXhpc3RzQXRQYXRoOmZpbGVVUkwucGF0aF0pOworCisgICAgX1dLV2Vic2l0ZURhdGFTdG9y
ZUNvbmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGRhdGFTdG9yZUNvbmZp
Z3VyYXRpb24uX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBpdHBSb290VVJMOwor
ICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRX
aXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07CiAg
ICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKIAog
ICAgIHN0YXRpYyBib29sIGRvbmVGbGFnID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UTFNEZXByZWNhdGlvbi5tbQppbmRleCA2Nzdm
MDBhMzA1NzAzZTI0OTZhYmRlNjRjM2FmYzJjZDI3N2FkMTY3Li40YTA2YmRmYTc3YWI5OTc1Mzdk
ZTJlYzVjYmUxOTUxOGQwOTYzMzk5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvVExTRGVwcmVjYXRpb24ubW0KQEAgLTE3Niw3ICsxNzYsOCBA
QCBURVNUKFRMU1ZlcnNpb24sIE5ldHdvcmtTZXNzaW9uKQogICAgIH07CiAgICAgewogICAgICAg
ICBUQ1BTZXJ2ZXIgc2VydmVyKFRDUFNlcnZlcjo6UHJvdG9jb2w6OkhUVFBTLCBUQ1BTZXJ2ZXI6
OnJlc3BvbmRXaXRoT0ssIHRsczFfMSk7Ci0gICAgICAgIGF1dG8gd2ViVmlldyA9IG1ha2VXZWJW
aWV3V2l0aChbV0tXZWJzaXRlRGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdKTsKKyAgICAgICAg
X1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1tfV0tX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwor
ICAgICAgICBhdXRvIHdlYlZpZXcgPSBtYWtlV2ViVmlld1dpdGgoW1tbV0tXZWJzaXRlRGF0YVN0
b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dIGF1dG9yZWxl
YXNlXSk7CiAgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVz
dFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCJodHRwczovLzEyNy4wLjAuMTolZC8iLCBzZXJ2ZXIucG9ydCgpXV1dXTsKICAgICAgICAgW2Rl
bGVnYXRlIHdhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKICAgICB9CkBAIC0yMDIsNyArMjAz
LDggQEAgVEVTVChUTFNWZXJzaW9uLCBOZXR3b3JrU2Vzc2lvbikKICAgICAgICAgVENQU2VydmVy
IHNlcnZlcihUQ1BTZXJ2ZXI6OlByb3RvY29sOjpIVFRQUywgW10oU1NMICpzc2wpIHsKICAgICAg
ICAgICAgIEVYUEVDVF9GQUxTRShzc2wpOwogICAgICAgICB9LCB0bHMxXzEpOwotICAgICAgICBh
dXRvIHdlYlZpZXcgPSBtYWtlV2ViVmlld1dpdGgoW1dLV2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0
RGF0YVN0b3JlXSk7CisgICAgICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpj
b25maWd1cmF0aW9uID0gW1tbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxsb2Nd
IGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgYXV0byB3ZWJWaWV3ID0gbWFrZVdlYlZpZXdX
aXRoKFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpj
b25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV0pOwogICAgICAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiaHR0cHM6Ly8xMjcuMC4wLjE6JWQvIiwgc2VydmVyLnBv
cnQoKV1dXV07CiAgICAgICAgIFtkZWxlZ2F0ZSB3YWl0Rm9yRGlkRmFpbFByb3Zpc2lvbmFsTmF2
aWdhdGlvbl07CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KaW5kZXggYTM1ZjA1MzUwYWFiNGI0
MmYzNmM0NmFlY2RlZWVlNmNlNTQ0ZWY4Ni4uMzM3NjA5MmExOTViNTEyZGE2N2M0OTZlNDUyMTdi
OTE0ZmUyYTU3OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCkBAIC00NzksOCArNDc5LDYgQEAgc3Rh
dGljIGJvb2wgZmluaXNoZWQ7CiB9CiBAZW5kCiAKLS8vIEZJWE1FOiBvbiBpT1MsIFVJIHByb2Nl
c3Mgc2hvdWxkIGJlIHVzaW5nIHRoZSBzYW1lIGNvb2tpZSBmaWxlIGFzIHRoZSBuZXR3b3JrIHBy
b2Nlc3MgZm9yIGRlZmF1bHQgc2Vzc2lvbi4KLSNpZiBQTEFURk9STShNQUMpCiBlbnVtIGNsYXNz
IFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHsgTm8sIFllcyB9Owogdm9pZCBydW5XS0hU
VFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2Fy
bWluZyBzaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZykKIHsKQEAgLTU4OSwyMCArNTg3LDY2
IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbFdpdGhQcmV3YXJt
aW5nKQogICAgIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVu
YWJsZVByb2Nlc3NQcmV3YXJtaW5nOjpZZXMpOwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQotCiBAaW50ZXJmYWNlIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8
V0tVSURlbGVnYXRlPgorLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUw7CistIChOU1N0cmlu
ZyAqKXdhaXRGb3JNZXNzYWdlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9u
Q29va2llVUlEZWxlZ2F0ZQorQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVs
ZWdhdGUgeworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX21lc3NhZ2U7Cit9CisKIC0gKHZvaWQp
d2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8g
KilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRs
ZXIKIHsKLSAgICBFWFBFQ1RfU1RSRVEoIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIiwg
bWVzc2FnZS5VVEY4U3RyaW5nKTsKKyAgICBfbWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgZmluaXNo
ZWQgPSB0cnVlOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CisKKy0gKE5TU3RyaW5nICop
d2FpdEZvck1lc3NhZ2UKK3sKKyAgICB3aGlsZSAoIV9tZXNzYWdlKQorICAgICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOworICAgIHJldHVybiBfbWVzc2FnZS5hdXRvcmVs
ZWFzZSgpOworfQorCistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTAoreworICAgIHJldHVy
biBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgZm9y
IChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSArKykgeyBjb29raWVzW2ldID0gY29v
a2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFsZXJ0KGNvb2tpZXMuam9pbignOyAn
KSk7PC9zY3JpcHQ+IjsKK30KKwogQGVuZAogCitURVNUKFdlYktpdCwgV0tIVFRQQ29va2llU3Rv
cmVNdWx0aXBsZVZpZXdzKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcxID0gW1tUZXN0
V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MSBzeW5jaHJvbm91c2x5
TG9hZEhUTUxTdHJpbmc6QCJzdGFydCBuZXR3b3JrIHByb2Nlc3MiXTsKKworICAgIE5TSFRUUENv
b2tpZSAqc2Vzc2lvbkNvb2tpZSA9IFtOU0hUVFBDb29raWUgY29va2llV2l0aFByb3BlcnRpZXM6
QHsKKyAgICAgICAgTlNIVFRQQ29va2llUGF0aDogQCIvIiwKKyAgICAgICAgTlNIVFRQQ29va2ll
TmFtZTogQCJTZXNzaW9uQ29va2llTmFtZSIsCisgICAgICAgIE5TSFRUUENvb2tpZVZhbHVlOiBA
IkNvb2tpZVZhbHVlIiwKKyAgICAgICAgTlNIVFRQQ29va2llRG9tYWluOiBAIjEyNy4wLjAuMSIs
CisgICAgfV07CisKKyAgICBfX2Jsb2NrIGJvb2wgc2V0Q29va2llRG9uZSA9IGZhbHNlOworICAg
IFt3ZWJWaWV3MS5jb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUuaHR0cENvb2tpZVN0b3Jl
IHNldENvb2tpZTpzZXNzaW9uQ29va2llIGNvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIHNl
dENvb2tpZURvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmc2V0Q29va2llRG9uZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQ2hlY2tT
ZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2ViVmlldzEgc2V0VUlEZWxlZ2F0
ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6W2RlbGVn
YXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6
Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVz
c2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworCisgICAgVGVzdFdLV2Vi
VmlldyAqd2ViVmlldzIgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAg
W3dlYlZpZXcyIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3MiBs
b2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBV
UkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
W2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVl
Iik7Cit9CisKIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVt
ZXJhbFNlc3Npb24pCiB7CiAgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gZXBoZW1l
cmFsU3RvcmVXaXRoQ29va2llcyA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgbm9uUGVyc2lzdGVudERh
dGFTdG9yZV07CkBAIC02MjcsOSArNjcxLDggQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0
aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmZpbmlzaGVkKTsKICAgICBmaW5pc2hlZCA9IGZhbHNlOwogICAgIAotICAgIE5TU3Ry
aW5nICphbGVydENvb2tpZUhUTUwgPSBAIjxzY3JpcHQ+dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5j
b29raWUuc3BsaXQoJzsnKTsgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSAr
KykgeyBjb29raWVzW2ldID0gY29va2llc1tpXS50cmltKCk7IH0gY29va2llcy5zb3J0KCk7IGFs
ZXJ0KGNvb2tpZXMuam9pbignOyAnKSk7PC9zY3JpcHQ+IjsKLSAgICBbd2ViVmlldyBsb2FkSFRN
TFN0cmluZzphbGVydENvb2tpZUhUTUwgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0
dHA6Ly8xMjcuMC4wLjEiXV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hl
ZCk7CisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRN
TF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07Cisg
ICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29v
a2llTmFtZT1Db29raWVWYWx1ZSIpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVDb29raWVzRXF1YWwo
TlNIVFRQQ29va2llICpmaXJzdCwgTlNIVFRQQ29va2llICpzZWNvbmQpCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IGZhZmI4Y2Y2Yjk1MmUzYzA0ODQ2M2Jh
NTdmNWM0Y2Y0ODExZGZlYWQuLmQwMTgyZDhjZWIxNGYxZDQ5OTk5MmY5NTIxMmVkYjI5NzQzOTFk
NzEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xMDY2
LDggKzEwNjYsNiBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50
VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZQogCiAgICAgcmVzZXRRdW90YSgp
OwogCi0gICAgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyVGVzdGluZyhwbGF0Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7Ci0KICAgICBXS0NvbnRleHRDbGVh
ckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuY29udGV4dCgpKTsKIAogICAgIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgZmFsc2UpOwpA
QCAtMzE3NSw5ICszMTczLDggQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1DcmVhdGVPdGhlclBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnQKICAgICByZXR1cm4g
bmV3IFBsYXRmb3JtV2ViVmlldyhjb25maWd1cmF0aW9uLCBvcHRpb25zKTsKIH0KIAotV0tDb250
ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVm
IGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29udGV4dENvbmZpZ3VyYXRpb24p
CitXS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0Nv
bnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZikKIHsKLSAgICBXS0Nv
bnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShjb250ZXh0LCBkZWZhdWx0V2Vic2l0ZURh
dGFTdG9yZSgpKTsKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406435</attachid>
            <date>2020-08-11 16:57:27 -0700</date>
            <delta_ts>2020-08-11 21:54:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20200811165726.patch</filename>
            <type>text/plain</type>
            <size>232059</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUxZGU2MTI2ZjljNTI2MDQx
ZmVlMzMzMjgzNTJkY2E0ZDU1MjliMzcuLjVkMzJlMzkwYjE4NGI4ZTUxNzg5ZjdjN2E2N2U5Yjlh
ZTM1NzczMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgyIEBACisyMDIwLTA4LTExICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIGEgTmV0
d29ya1Byb2Nlc3NQcm94eSBzaW5nbGV0b24gaW5zdGVhZCBvZiBvbmUgcGVyIFdlYlByb2Nlc3NQ
b29sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM1
NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZh
dWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKToK
KyAgICAgICAgKFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChX
S0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXS0NvbnRleHRT
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbToKKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2V0Q29va2llQWNjZXB0UG9saWN5Ol0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0
ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZTo6fl9XZWJLaXRDb29raWVN
YW5hZ2VyUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKToKKyAg
ICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKToKKyAg
ICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAg
ICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9jb29raWVzKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfY29va2llKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4
dC5jcHA6CisgICAgICAgICh3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
UHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lk
ZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9O
ZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojpz
dGFydExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RvcExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Omdsb2JhbE5ldHdv
cmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YXR0ZW1wdFJlbGF1bmNoQWZ0
ZXJDcmFzaElmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OmFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KToKKyAgICAgICAg
KFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vz
c1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25z
dCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJD
b250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzYWJs
ZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25P
dmVycmlkZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9y
VGVzdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9v
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xv
YmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29ya1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJMZWdhY3lQ
cml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5z
ZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVG
b3JTZXNzaW9uSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERh
dGFBbmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURh
dGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNz
RW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50
cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5k
ZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVC
bG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3Rp
Y0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50
cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNI
YWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpp
c1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRz
V2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3Rpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9k
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1Nh
bWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2
YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9j
ZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlc2V0UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNB
cHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQ
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRp
ZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1
bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJv
Y2Vzc1Bvb2wgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwZW5kaW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdv
cmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dl
YnNpdGVEYXRhU3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2ds
aWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
cm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291
cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIw
MjAtMDgtMTEgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW01h
Y10gQWRkIEV4cGVyaW1lbnRhbCBGZWF0dXJlIHByZWZlcmVuY2UgZm9yIFNXIFZQOQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1h
bmFnZXIuY3BwCmluZGV4IGZjZTIzODk4N2E3ODUwZjE4YzlmMzA2YzUwZTk4Y2U5ODhkMTI1ZmQu
LmViNThmYzk0NWQxOTI1NTQ2MWI4NjBmNGE4YjhkYzYxMjVmNTNmODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdl
ci5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksCiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24o
KS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9wcm9jZXNz
LnN0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpLT5jb29r
aWVBY2NlcHRQb2xpY3koKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCAwMjhlMGZi
YjllMTk0OGIwZTA4OWY0YWRkM2IwYTcwNTBjNmVkMWNlLi43ZWJhNGExYjU4MmY5M2QyYmExODBk
MjFiNTUzOTllNmZmNjBkZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ1LDI5ICszNDUsMTkgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJz
LmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0g
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lv
bjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBw
YXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQg
PSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7
CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShkYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAg
IGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1l
dGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQ
YXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VE
aXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVk
RGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
KyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFTdG9yZVBh
cmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQorICAgICAg
ICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJz
LmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4
dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUoZGF0YVN0b3Jl
UGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBib29sIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSB0cnVlOwotICAgIGFkZFNl
cnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIHNl
cnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUocGFyYW1l
dGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVycy5zZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAg
YWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUoZGF0YVN0
b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25J
RCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNzaW9uID0g
bmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAg
YXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdvcmtTdG9y
YWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAgICB9CiAKICAgICBmb3IgKGF1
dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVt
ZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNDI3LDEyICs0MTcsNiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyhQcm9jZXNz
SWRlbnRpZmllciBpZGVudAogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlZENyZWRl
bnRpYWxzKCkKIHsKLSAgICBkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFn
ZSgpLmNsZWFyQ3JlZGVudGlhbHMoKTsKLSAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0
aGlzLT5uZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSkK
LSAgICAgICAgbmV0d29ya1Nlc3Npb24tPmNsZWFyQ3JlZGVudGlhbHMoKTsKLSAgICBlbHNlCi0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCiAgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9u
KFtdIChhdXRvJiBuZXR3b3JrU2Vzc2lvbikgewogICAgICAgICBpZiAoYXV0byBzdG9yYWdlU2Vz
c2lvbiA9IG5ldHdvcmtTZXNzaW9uLm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpKQogICAgICAgICAg
ICAgc3RvcmFnZVNlc3Npb24tPmNyZWRlbnRpYWxTdG9yYWdlKCkuY2xlYXJDcmVkZW50aWFscygp
OwpAQCAtNTEyLDggKzQ5Niw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24o
Y29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQs
IGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50
aWZpZXJCYXNlKQogI2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3
b3JrU3RvcmFnZVNlc3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRk
UmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyOCw3ICs1MTAsNyBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBz
ZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVu
dGlmaWVyID0gbWFrZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwg
Y3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChz
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENG
KGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBl
bHNlCisgICAgZWxzZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpjcmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZp
ZXIuZ2V0KCkpOwogCiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVz
ZUNvb2tpZUFQSSgpKSB7CkBAIC01NTEsMjEgKzUzMywxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
Ojpjb29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9s
aWN5KQogCiBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpz
dG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewot
ICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkK
LSAgICAgICAgcmV0dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9u
ZXR3b3JrU3RvcmFnZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSBjb25zdAotewotICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAg
ICAgICBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
Jik+JiBmdW5jdG9yKQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwog
ICAgIGZvciAoYXV0byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMu
dmFsdWVzKCkpCiAgICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBmMjNmZDU4MGVm
NTRjYWRmODBmNDY4MzY2NTZmYjIzZmQ0ZGRmMmZjLi4xMDExOWRmMzFmNGRlMTY5NDc4NjBiMmNh
ZThjMWI1Yzc3M2Q4ZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5oCkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JF
YWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uKiBzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29u
c3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4g
bmV3VGVzdGluZ1Nlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICB2b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29s
IHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
LCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNzEsNyArMzcwLDYg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNy
ZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZl
TmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwog
CkBAIC01NDgsNyArNTQ2LDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9u
SUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwog
ICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJs
ZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+
IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAK
aW5kZXggYWE4Y2U3NTNjNjMyMDdkMmE2MGQ1ZDNlMDE3YjJlMGViZjQ1NjI2ZC4uYTI0YzIwYjNm
ODc3ZmEzYmFhYzYyODUyMzNjODdkMTEwZTYxZmYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBJUEM6
OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CiAgICAgZW5jb2RlciA8
PCBzdG9yYWdlQWNjZXNzQVBJRW5hYmxlZDsKICNlbmRpZgotICAgIGVuY29kZXIgPDwgZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZW5jb2RlciA8PCBkYXRhU3RvcmVQYXJhbWV0ZXJz
OwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9saWN5OwogICAg
IGVuY29kZXIgPDwgaWdub3JlVExTRXJyb3JzOwpAQCAtNjksOSArNjksNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAg
IGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIGVuY29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlIDw8IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVs
YXk7Ci0jZW5kaWYKICAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZUlUUERhdGFiYXNlOwogICAg
IGVuY29kZXIgPDwgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlOwogICAgIGVuY29k
ZXIgPDwgaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7CkBAIC0xMjEsMTEgKzExOCwxMSBAQCBib29sIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNv
ZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIE9w
dGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGlm
ICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9yPFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBkZWNvZGVy
ID4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0ZXJzKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzID0gV1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJlc3VsdC5k
YXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7CiAKICNp
ZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVBY2NlcHRQ
b2xpY3kpKQpAQCAtMTQ3LDIwICsxNDQsNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2Vz
cykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlvbmFsPFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERpc2FibGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0jZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJs
ZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmgKaW5kZXggY2YxNWNhNDFiZmJlYWNkM2RlMWM2M2UzN2QzNzJkZmUyNDljODQ5
Ni4uNzNjZGYyZmM0NDRiNDVmNjRkM2MzMmM4ZWY2MzZmZmIxNWM1NTkzNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNzIsNyArNzIsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIGJvb2wgc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7
CiAjZW5kaWYKIAotICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIGRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGF0
YVN0b3JlUGFyYW1ldGVyczsKICAgICAKICNpZiBVU0UoU09VUCkKICAgICBXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSB7IFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3k6OkFsd2F5c0FjY2VwdCB9OwpAQCAtODYsMTIgKzg2LDcgQEAgc3RydWN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBWZWN0b3I8U3RyaW5nPiB1
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAg
IFN0cmluZyBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OwotICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotICAgIGJvb2wgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVy
bWluYXRpb25EZWxheSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBib29sIHNob3VsZEVuYWJsZUlU
UERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFiYXNlIHsg
dHJ1ZSB9OwogICAgIGJvb2wgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlIHsgZmFs
c2UgfTsKICAgICBTdHJpbmcgaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlIGhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0Nv
Y29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vz
c0NvY29hLm1tCmluZGV4IGFmYmQ5MzBmNGIzNWUyNDlhODhhMTA4ZjU1MTFjMDRkN2VlZDM1NTEu
LjhlNzhlNmFmZWFiN2U3MzFkNWUyMjJlYjYwZTI5YjUyZjkxZjBjMmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29j
b2EubW0KQEAgLTg1LDkgKzg1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1l
UGVybWFuZW50bHkocGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0
ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5
KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVt
cEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9D
Rk5ldHdvcmtTZXRBVFNDb250ZXh0KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkp
OwpAQCAtMTE0LDExICsxMTEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFtOU1VS
TENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBs
YXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3Jr
UHJvY2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShT
T1VSQ0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKaW5kZXggZDk5Zjlk
ZDY0YmFkNmU0MmRjYzhlM2Y5YjhmMTY5Mjk5N2Y2NzE5Mi4uNDk1MzgxMWIyMTY0ZTg5ODQ2Zjky
NzllNjIyOWQ1OTNlMjI1NmEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKQEAgLTM5LDExICszOSw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNv
bnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURl
ZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2Vy
dGlmaWNhdGVGb3JIb3N0KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBj
b25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0
Lm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW0KaW5kZXggYzI3MzZlMDI2YTU1ZDNkNDAyMGY4NGY0ZDY5M2QxNmI0NjUyZWQyMy4u
MWUxODQ4OWY5NDYyMGYwMmE3ZDllOWU4NjllYzg2NDkxYjdiYmQ0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0K
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW0KQEAgLTU1LDE1ICs1NSwxMSBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0
OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0dwogICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29r
aWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAgICBpZiAoIXNlc3Npb25J
RC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVu
dGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFw
YXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSAmJiBw
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgIT0gUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAgdWlQcm9jZXNzQ29va2llU3RvcmFn
ZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFtZXRlcnMudWlQcm9jZXNz
Q29va2llU3RvcmFnZUlkZW50aWZpZXIpOwogCiAgICAgbmV0d29ya1Byb2Nlc3MuZW5zdXJlU2Vz
c2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3Vs
ZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNlLCAnLicsIHNlc3Npb25J
RC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3NDb29raWVTdG9yYWdlKSk7CiAKLSAgICBh
dXRvKiBzZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsK
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMp
Ci0gICAgICAgIHNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAgICAgbmV0d29ya1Byb2Nl
c3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1By
b2Nlc3MsIFdURk1vdmUocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
UHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtQcm9jZXNzU291cC5jcHAKaW5kZXggNjBmYTU1NmI5ZTRmNDg3OTRkNWFhMmYwNTY5ZmJiZGVl
NjUzMjk5MC4uMDFjYmI3YmE5YmQ4YWMwZmYwYzVkZjRiMzQyMmYzZDc4NDM1NmQyZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291
cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9j
ZXNzU291cC5jcHAKQEAgLTE0NCwxMSArMTQ0LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkK
ICAgICB9KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMp
CiB7CiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRTaG91bGRJZ25vcmVUTFNFcnJvcnMoaWdu
b3JlVExTRXJyb3JzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmNwcAppbmRleCA2ZDBjMTI5YTc0MDUxMGQzODY5NzM3MDVhZDA5MmVm
MTMyY2MwNzVhLi4wNDgxMGIzZTE5YmU5NmNhZDFhZDgyYTQ0ZGNlZGIyNmVmNzgyNjFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
Y3BwCkBAIC00MCwxMyArNDAsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpl
bmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzOwogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzQ29va2llU3RvcmFn
ZUlkZW50aWZpZXI7CiAgICAgZW5jb2RlciA8PCBjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhh
bmRsZTsKLSAgICBlbmNvZGVyIDw8IHBlbmRpbmdDb29raWVzOwogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAgICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPDwg
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCkBAIC04MywxMiArNzksNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlYwogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZVBhdGhF
eHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRs
ZSk7CiAKLSAgICBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6Q29va2llPj4gcGVuZGluZ0Nvb2tp
ZXM7Ci0gICAgZGVjb2RlciA+PiBwZW5kaW5nQ29va2llczsKLSAgICBpZiAoIXBlbmRpbmdDb29r
aWVzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMucGVuZGlu
Z0Nvb2tpZXMgPSBXVEZNb3ZlKCpwZW5kaW5nQ29va2llcyk7Ci0KICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKICAgICBPcHRpb25hbDxTdHJpbmc+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eTsKICAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKQEAgLTEwMSwxNCAr
OTEsNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlYwogICAgIGlmICghaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0g
V1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlPiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAg
ICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlOwotICAgIGlmICghaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmlu
ZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgog
I2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAppbmRleCBmMjdkZjQ4OTgwOWYz
MTk2MDhiNjgwY2IyYThhMWMxNGI3MDE4NDM5Li5lMWIyMzM3MDE5OWZlMzcwMzFlOWRjNWMwNTc4
MTU1MDIxZTM0ZDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmgKQEAgLTUxLDE1ICs1MSwxMSBAQCBzdHJ1Y3QgV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMgewogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHVpUHJvY2Vzc0Nvb2tpZVN0
b3JhZ2VJZGVudGlmaWVyOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjb29raWVTdG9y
YWdlUGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5k
aW5nQ29va2llczsKICAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBT
dHJpbmcgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFi
YXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcAppbmRleCBhNmUxNTkxZTU1MDQ5ZDI5ZTc3NjE0
MTlhYTMxOGRmMDBhNDc3OThjLi5lNWYxOGVlMWJiOGM2MmEyZTNlNDkyNjc2NTNjMTA5MjA1NDhm
MTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcApAQCAtNDYsOCArNDYsNiBAQCBuYW1lc3BhY2UgQVBJIHsKIEhUVFBDb29raWVT
dG9yZTo6SFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURh
dGFTdG9yZSkKICAgICA6IG1fb3duaW5nRGF0YVN0b3JlKHdlYnNpdGVEYXRhU3RvcmUpCiB7Ci0g
ICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpKQotICAgICAgICByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpOwogfQogCiBIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUoKQpAQCAtNTUsOCAr
NTMsNiBAQCBIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUoKQogICAgIEFTU0VSVCht
X29ic2VydmVycy5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCghbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSk7CiAgICAgQVNTRVJUKCFtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLQot
ICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogdm9p
ZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJvdW5kQ29va2llcyhjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTgxLDMzICs3NywxNiBA
QCB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiBjb29raQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2ll
cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0
b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFw
b29sKSB7Ci0gICAgICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGFsbENvb2tpZXM7Ci0gICAg
ICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgICAgIGFsbENvb2tpZXMgPSBnZXRBbGxEZWZh
dWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7Ci0gICAgICAgIGFsbENvb2tpZXMuYXBw
ZW5kVmVjdG9yKG1fb3duaW5nRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLQotICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
YWxsQ29va2llc10gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tp
ZXMoYWxsQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICB9KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29s
LT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tp
ZU1hbmFnZXItPmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwb29sID0gV1RGTW92ZShwb29s
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBj
b29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigp
OworICAgIGNvb2tpZU1hbmFnZXIuZ2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5k
Q29va2llcyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9
CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkKLSAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2Vy
ID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOworICAgIGNvb2tp
ZU1hbmFnZXIuZ2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwg
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYg
Y29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhjb29raWVz
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0xMTUsODEgKzk0
LDI5IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6c2V0
Q29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGZpbHRlckFwcEJv
dW5kQ29va2llcyhjb29raWVzLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYm
IGFwcEJvdW5kQ29va2llcykgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgbmVlZHNGbHVzaCA9IGZh
bHNlOwotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29s
Rm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7Ci0gICAg
ICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vzc2lvbiBi
ZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3b3JrIFBy
b2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAgICAgICAg
ICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG5lZWRzRmx1c2ggPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzZXRDb29raWVJ
bkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+YWRkUGVuZGluZ0Nv
b2tpZShjb29raWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobmVlZHNGbHVz
aCkKLSAgICAgICAgICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tpZU1h
bmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewot
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAgIGF1
dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xl
dG9uKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNv
bnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAg
ICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5yZW1vdmVQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBb
cG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZShtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byog
cG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVy
YXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBkZWxldGVDb29raWVz
SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBhdXRvJiBjb29r
aWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwor
ICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBUaGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJl
IHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRh
U3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAo
IXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNF
cGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1
bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xpY3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwg
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFi
bGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2llTWFuYWdlci5zZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgfSk7CiB9CkBAIC0yMjcsMjEgKzE1NCw3IEBA
IHZvaWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKE9ic2VydmVyJiBvYnNlcnZl
cikKIAogICAgIG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIgPSBtYWtlVW5pcXVlPEFQSVdl
YkNvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyPigqdGhpcyk7CiAKLSAgICBhdXRvKiBwb29sID0g
bV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMo
KTsKLQotICAgIGlmICghcG9vbCkgewotICAgICAgICBBU1NFUlQoIW1fb2JzZXJ2aW5nVUlQcm9j
ZXNzQ29va2llcyk7Ci0KLSAgICAgICAgLy8gTGlzdGVuIGZvciBjb29raWUgbm90aWZpY2F0aW9u
cyBpbiB0aGUgVUlQcm9jZXNzIGluIHRoZSBtZWFudGltZS4KLSAgICAgICAgc3RhcnRPYnNlcnZp
bmdDaGFuZ2VzVG9EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoW3RoaXNdICgpIHsKLSAgICAg
ICAgICAgIGNvb2tpZXNEaWRDaGFuZ2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgbV9vYnNl
cnZpbmdVSVByb2Nlc3NDb29raWVzID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHkgPSAmV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwogICAg
IG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9
CiAKQEAgLTI3Niw0NiArMTg5LDEwIEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRGlk
Q2hhbmdlKCkKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKCkK
IHsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT51bnJlZ2lzdGVyT2JzZXJ2ZXIo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcik7Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG51bGxwdHI7Ci0KLSAg
ICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3Rv
cmFnZU9wZXJhdGlvbnMoKTsKLQotICAgIGlmICghcG9vbCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQ
cm94eSA9ICZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CiAgICAg
bV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0K
IAotdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmlj
YXRpb25zKCkKLXsKLSAgICBBU1NFUlQoIW1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRl
bnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIg
PSBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIoW3Ro
aXNdKFdlYlByb2Nlc3NQb29sJiBuZXdQcm9jZXNzUG9vbCkgewotICAgICAgICBpZiAoIW1fb3du
aW5nRGF0YVN0b3JlLT5pc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChuZXdQcm9jZXNzUG9vbCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gTm93IHRoYXQgYW4gYXNzb2NpYXRlZCBw
cm9jZXNzIHBvb2wgZXhpc3RzLCB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBVSSBwcm9jZXNzIGNvb2tp
ZSBzdG9yZQotICAgICAgICAvLyB0byBtYWtlIHN1cmUgYW55IGNoYW5nZXMgYXJlIHJlZmxlY3Rl
ZCB3aXRoaW4gdGhlIG5ldyBwcm9jZXNzIHBvb2wuCi0gICAgICAgIGZsdXNoRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKFtdIHsgfSk7Ci0gICAgICAgIG5ld1Byb2Nlc3NQb29sLmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0KLSAgICAgICAgaWYgKG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2
ZXIpIHsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBuZXdQcm9j
ZXNzUG9vbC5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAg
ICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlciht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyKTsKLSAgICAgICAgfQotICAgICAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lz
dGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBpZiAobV9wcm9jZXNz
UG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKQotICAgICAgICBXZWJQcm9jZXNzUG9vbDo6
dW5yZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihtX3Byb2Nlc3NQb29sQ3JlYXRp
b25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVu
ZXJJZGVudGlmaWVyID0gMDsKLX0KLQogI2lmICFQTEFURk9STShDT0NPQSkKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIoKTsg
fQogVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gSFRUUENvb2tpZVN0b3JlOjpnZXRBbGxEZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCkgeyByZXR1cm4geyB9OyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKaW5kZXggMjBkZWM2
NTY1ODhhMzU4YmNkMWFmNDBjZmU3ZmZhNDMyN2YyNGVjNC4uYjBiMmI4MTEzNTJlODg0YWQ2ZTI0
YjllZDEyYzdhNzFmNjE3NDUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElIVFRQQ29va2llU3RvcmUuaApAQCAtODIsOSArODIsNiBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmKTsKIAotICAg
IHZvaWQgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB2b2lk
IHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLQogICAgIHZvaWQg
Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKICAgICBzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gZ2V0QWxsRGVmYXVsdFVJ
UHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwogICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUlu
RGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKaW5kZXggOGZiOGUwOTZk
NDY2ZTIzNjFjZGI1MjAzZWZjOWM1NjhjOWU2OTUxMS4uYjZkODg2MWNmMzQwMmM4MjQxODlkMTll
M2QyNzA0NTJjNjk5YTRmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuY3BwCkBAIC00MjYsOSArNDI2LDkgQEAgdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9T
ZXJ2ZXIoV0tDb250ZXh0UmVmLCBXS1VSTFJlZikKIHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVm
IFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCitXS0Nv
b2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYpCiB7
Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1
cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkp
OwogfQogCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9y
ZShXS0NvbnRleHRSZWYpCkBAIC01NDMsOSArNTQzLDggQEAgdm9pZCBXS0NvbnRleHRTZXRKYXZh
U2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChXS0NvbnRleHRSZWYgY29udGV4dFJl
ZiwKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VD
b2xsZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpCit2b2lkIFdLQ29udGV4dFVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dCktPnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwogfQogCiB2b2lkIFdLQ29u
dGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhXS0NvbnRl
eHRSZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCkBAIC01NTMsMTMgKzU1Miw2IEBAIHZvaWQgV0tD
b250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nKFdLQ29u
dGV4dFJlZiBjb250ZXh0CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyk7CiB9CiAKLXZvaWQgV0tDb250ZXh0
U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRl
eHRSZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXIoYWxsb3dzKTsKLSNlbmRpZgotfQotCiB2b2lkIFdLQ29udGV4dENs
ZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgV2ViS2l0
Ojp0b0ltcGwoY29udGV4dCktPmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKQEAgLTY3MSw3ICs2
NjMsNiBAQCB2b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mo
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdQogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRl
eHRSZWYpLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRl
RGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYg
d2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3Rv
cmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0
b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktpdDo6dG9JbXBsKHdl
YnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dFByaXZhdGUuaAppbmRleCAzOWMwY2E3Y2M2YTZiNmI1NWM4MDNiODNjZGU1YjM4
YmZjMTljOThlLi44ODQ3NGQzMGEwZDBiYjg0YTE5YjYxMGMyYzE1YjlhYzEyYmQwOWNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBA
IC04NywxMCArODcsOSBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3Jr
UHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRl
U2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmKTsKIAogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0
U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nKFdLQ29udGV4dFJl
ZiwgYm9vbCk7Ci1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiwgYm9vbCk7CiAKIC8vIFRl
c3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYW55IHNlY29uZGFyeSBwcm9jZXNzZXMg
YXJlIHN0YXJ0ZWQuCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nl
c3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpOworV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VXNl
VGVzdGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBS
RUNBVEVEOwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHJ1bm5pbmcg
YSB0ZXN0LgogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhX
S0NvbnRleHRSZWYgY29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCmluZGV4IDY4MjBmNDkxZTk0NzU5NWUwMGQwY2JkMmQ1
ODg5NTIwNzAzYTU4MDguLjNkOTVmOWRiODFiM2I4MmYzZWYwZmY0YjllNjU0MWY3NzNhZWU2ZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQ
b29sLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQ
b29sLm1tCkBAIC0yMDEsNyArMjAxLDcgQEAgc3RhdGljIFdLUHJvY2Vzc1Bvb2wgKnNoYXJlZFBy
b2Nlc3NQb29sOwogCiAtICh2b2lkKV9zZXRDb29raWVBY2NlcHRQb2xpY3k6KE5TSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSlwb2xpY3kKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgV2ViQ29yZTo6dG9IVFRQQ29va2ll
QWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBXZWJDb3JlOjp0b0hUVFBDb29raWVBY2NlcHRQ
b2xpY3kocG9saWN5KSwgW10oKSB7IH0pOwogfQogCiAtIChpZClfb2JqZWN0Rm9yQnVuZGxlUGFy
YW1ldGVyOihOU1N0cmluZyAqKXBhcmFtZXRlcgpAQCAtNTc4LDEzICs1NzgsNiBAQCBzdGF0aWMg
TlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxT
dHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZChiYWNrZ3JvdW5kKTsKIH0KIAotLSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFsbG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRp
b25Qcm92aWRlcgogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCBkMzlkYjFkZGIwOWMwOGNjNzgwMTdk
NGUxZjQ1ZmM4ZDI1NmY1Y2RmLi44ODU0ZWY2YzMwNmZjMTBjNzk3YjgzMzk5MDJkNTU0YjQwNDJm
M2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9j
ZXNzUG9vbFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcm9jZXNzUG9vbFByaXZhdGUuaApAQCAtMTIyLDcgKzEyMiw2IEBACiAtICh2b2lkKV9wcmVj
b25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNBVEVEX1dJVEhf
UkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFjb3MoMTAuMTMu
NCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4K
LS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9P
TClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKTsKIC0g
KHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rpbmc6KHBpZF90
KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5nICo+ICopKWNv
bXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4y
KSk7CiAtIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNT
dHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3Mo
MTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25T
cGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTcz
ZWJjMGVhMDM2Zjg2YjNmZTk0NDE0OTA3MmU2YWM0ZGM3NjcuLmZiOThkMDU5MGM5YWQyODIzNWQ3
MTFiN2NhYWM5YmM1NWM5YTY0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC02NCw4ICs2NCw3IEBA
IHN0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29r
aWVNYW5hZ2VyUHJpdmF0ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkK
LSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7Cisg
ICAgICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2llT2JzZXJ2
ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEzOSwxMSArMTM4LDkgQEAgV2ViS2l0
Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlckNyZWF0ZShXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIqIGRhdGFNYW4KIHsKICAgICBXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyID0g
V0VCS0lUX0NPT0tJRV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT09LSUVfTUFO
QUdFUiwgbnVsbHB0cikpOwogICAgIG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyID0gZGF0YU1h
bmFnZXI7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpIHsKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRD
b29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdl
cl0gewotICAgICAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURd
LCAwKTsKLSAgICAgICAgfSk7Ci0gICAgfQorICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2lu
Z2xldG9uKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgW21hbmFnZXJdIHsKKyAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxz
W0NIQU5HRURdLCAwKTsKKyAgICB9KTsKICAgICByZXR1cm4gbWFuYWdlcjsKIH0KIApAQCAtMTcz
LDggKzE3MCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0
b3JhZ2UoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwKICAgICBpZiAoc2Vzc2lvbklELmlz
RXBoZW1lcmFsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bv
b2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwg
U3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
VHlwZShzdG9yYWdlKSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5z
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmls
ZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOwogfQog
CiAvKioKQEAgLTE5Miw4ICsxODgsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRf
YWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJLaQogewogICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKIAot
ICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQ
cm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2Vw
dFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
aW5nbGV0b24oKS5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Np
b25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOwogfQog
CiAvKioKQEAgLTIyNCw3ICsyMTksNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRf
YWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBHQ2FuYwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5w
cml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2lu
Z2xldG9uKCkuZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9s
aWN5IHBvbGljeSkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCB0b1dl
YktpdENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKICAgICB9KTsKIH0KQEAgLTI2OSwxMSAr
MjY0LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShXZWJLaXRDb29r
aWVNYW5hZ2VyKiBtYW5hZ2VyLCBTb3VwQ29va2llKgogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29v
a2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29r
aWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24g
ZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJv
bSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBw
cm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFu
YWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vz
c2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRh
c2spXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tp
ZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkg
fSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29s
ZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTEsNyBAQCB2
b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAogICAg
IEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5j
ZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFk
L3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRs
ZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1
c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMg
PSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+
ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVS
TChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShj
b25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZ2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUo
dGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSB7CiAgICAgICAg
IEdMaXN0KiBjb29raWVzTGlzdCA9IG51bGxwdHI7CiAgICAgICAgIGZvciAoYXV0byYgY29va2ll
IDogY29va2llcykKICAgICAgICAgICAgIGNvb2tpZXNMaXN0ID0gZ19saXN0X3ByZXBlbmQoY29v
a2llc0xpc3QsIGNvb2tpZS50b1NvdXBDb29raWUoKSk7CkBAIC0zNzgsMTEgKzM2NSw3IEBAIHZv
aWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUoV2ViS2l0Q29va2llTWFuYWdl
ciogbWFuYWdlciwgU291cENvb2tpCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAg
ICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNh
bmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJl
YWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2Fy
ZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0
IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29s
cyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2
LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKS0+ZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgp
LCBXZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAg
ICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmRlbGV0ZUNvb2tpZShtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgp
LCBUUlVFKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggZDAzNzkzOWViZGRkODUzZGI4ZGVi
M2FkNTFlOTU3ZDhhNTg5Y2ZjYi4uYTMwMDRiZjZlMDZkZDI5YzAxMzU4ZGQwZDQ3NjYwZThlMDBi
NWEwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0V2ViQ29udGV4dC5jcHAKQEAgLTQwNyw3ICs0MDcsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRX
ZWJDb250ZXh0Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAgICAgICBjb25maWd1cmF0
aW9uLnNldEhTVFNTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24od2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9oc3RzX2Nh
Y2hlX2RpcmVjdG9yeShwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpKSk7CiAKICAgICBw
cml2LT5wcm9jZXNzUG9vbCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbik7
Ci0gICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFByaW1hcnlEYXRhU3RvcmUod2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkp
OwogICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRVc2VyTWVzc2FnZUhhbmRsZXIoW3dlYkNvbnRl
eHRdKFVzZXJNZXNzYWdlJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyTWVz
c2FnZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgewogICAgICAgICAvLyBTaW5rIHRoZSBmbG9h
dGluZyByZWYuCiAgICAgICAgIEdSZWZQdHI8V2ViS2l0VXNlck1lc3NhZ2U+IHVzZXJNZXNzYWdl
ID0gd2Via2l0VXNlck1lc3NhZ2VDcmVhdGUoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAppbmRleCBlNmU0YWNjMTFhOTFh
MzcwZmI2ODhmYWI0OGQyNTIwNjk2ZDUwMjhmLi41MmViMzk5ODhhYWUwMGRlZGVlYjdiNDY0N2Y0
NDI0MjBiZDIzMTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0
aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtMTM5Myw4ICsxMzkzLDcg
QEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLAogICAgIGlmICghY29va2llT2JqZWN0LmdldEJvb2xl
YW4oImh0dHBPbmx5Il9zLCBjb29raWUuaHR0cE9ubHkpKQogICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBh
cmFtZXRlciAnaHR0cE9ubHknIHdhcyBub3QgZm91bmQuIik7CiAKLSAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKHBhZ2Ut
PndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgp
IHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tpZXMocGFn
ZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2td
KCkgewogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsKIH0KQEAgLTE0
MTAsOCArMTQwOSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tp
ZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpCiAKICAgICBTdHJpbmcgaG9z
dCA9IGFjdGl2ZVVSTC5ob3N0KCkudG9TdHJpbmcoKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFp
bkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CisgICAgV2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKS5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNp
dGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZp
eElmTmVlZGVkKGhvc3QpIH0pOwogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRT
ZXNzaW9uUGVybWlzc2lvbnMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbkRhdGE+PiYgb3V0
X3Blcm1pc3Npb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxp
YXJ5UHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9j
ZXNzUHJveHkuaAppbmRleCA0MWMwYTBmYmY1MDZlZmExNDA4YmNlZjlhZjhhOTBiODVhMWFkMDhh
Li40ZjM5OGI1MzBmNjA4NTc1Yzk2N2I4M2M3NGZhMmY0MzI4ZjZjZTNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaApAQCAtNDgsNyArNDgs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KCk7CiAKICAg
ICB2b2lkIGNvbm5lY3QoKTsKLSAgICB2b2lkIHRlcm1pbmF0ZSgpOworICAgIHZpcnR1YWwgdm9p
ZCB0ZXJtaW5hdGUoKTsKIAogICAgIHZpcnR1YWwgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVy
KCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJv
Y2Vzc1Bvb2xDb2NvYS5tbQppbmRleCA1ZDk2MGUxZjMyNmQyYjcyOTFlNzEzMDk2ZGVlZWVkOThj
YWNhMDZhLi4xMzFlZDU5NDdjMzNjNWRkNzg3YmYwZDVmZjZkNmE0ODYyNGQxNTI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0KQEAgLTEzNCw4ICsxMzQsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lm
TmVlZGVkKCkKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9u
U3RhdGUoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVu
YWJsZWQoKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0UHJvY2Vz
c1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpOwogCiAjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lv
bkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTE2Niw4ICsxNjUsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogICAgIGlmICghW1tOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktpdFN1cHByZXNz
TWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0pCiAgICAgICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhh
bmRsZXIoKTsKIAotICAgIHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtl
VW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSk7Ci0KICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgaWYgKCFfTUdD
YWNoZVZhbGlkKCkpIHsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2Jh
bF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKQEAgLTQ4MCwy
MiArNDc3LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKIAogICAgIE5TVXNlckRlZmF1bHRz
ICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAg
ICB7Ci0gICAgICAgIGJvb2wgaXNTYWZhcmkgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlC
cm93c2VyID0gZmFsc2U7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZh
cmkgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAg
aXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7
Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBw
bGljYXRpb246OmlzU2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpN
YWNBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3NlcigpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1Nh
ZmFyaSB8fCBpc01pbmlCcm93c2VyKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBV
UkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQ
cm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVS
TCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5
RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29y
a0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAg
IHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVs
dHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRz
S2V5XTsKQEAgLTUwNiwxNyArNDg3LDExIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3Jt
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAgICAg
cGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllciA9IGlkZW50aWZ5aW5n
RGF0YUZyb21Db29raWVTdG9yYWdlKFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29v
a2llU3RvcmFnZV0gX2Nvb2tpZVN0b3JhZ2VdKTsKICNlbmRpZgogCi0gICAgcGFyYW1ldGVycy5z
dG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IHN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKCk7Ci0KICAg
ICBOU051bWJlciAqZGF0YWJhc2VFbmFibGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5
OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVy
ZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQo
KV1dOwogICAgIGlmIChkYXRhYmFzZUVuYWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5z
aG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsK
LSAgICBlbHNlCi0gICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBt
X2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsK
IAogICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2Rl
ZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50
YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFi
bGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVx
dWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NX
ZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBs
YXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCmluZGV4IGM1ZGU0ZTdkMGY1OTE5NGY0M2Ew
MjNiMDg5ZTM3MmM1OGNmOGVlMDYuLmE5N2E2MmRkYzA4Y2Q5ZTNhZDgxZWJmNmNkMDA3Y2RjMWMy
YTRlOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRQcm94eS5jcHAKQEAgLTc1LDggKzc1LDcgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpjYW5j
ZWwoKQogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQ
cm94eTo6aW52YWxpZGF0ZSgpCkBAIC0xMDYsMTIgKzEwNSwxMCBAQCB2b2lkIERvd25sb2FkUHJv
eHk6OnB1Ymxpc2hQcm9ncmVzcyhjb25zdCBVUkwmIFVSTCkKICAgICBpZiAoIW1fcHJvY2Vzc1Bv
b2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1f
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOwotICAgICAgICBBU1NFUlRf
VU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7
Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwot
ICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOworICAgIGJvb2wgY3Jl
YXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJM
LmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFu
ZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVk
U2FuZGJveEV4dGVuc2lvbik7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1f
ZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShDT0NP
QSkKIApAQCAtMTQ2LDE1ICsxNDMsNyBAQCB2b2lkIERvd25sb2FkUHJveHk6OndpbGxTZW5kUmVx
dWVzdChSZXNvdXJjZVJlcXVlc3QmJiBwcm9wb3NlZFJlcXVlc3QsIGNvbnN0IFJlcwogCiAgICAg
bV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS53aWxsU2VuZFJlcXVlc3QoKnRoaXMsIFdU
Rk1vdmUocHJvcG9zZWRSZXF1ZXN0KSwgcmVkaXJlY3RSZXNwb25zZSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oUmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkgewog
ICAgICAgICBtX3JlZGlyZWN0Q2hhaW4uYXBwZW5kKG5ld1JlcXVlc3QudXJsKCkpOwotCi0gICAg
ICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNzUG9vbCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+
bV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJv
Y2Vzc1Byb3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG5ldHdvcmtQcm9jZXNz
UHJveHktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVx
dWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKKyAgICAg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxv
YWRJRCwgbmV3UmVxdWVzdCksIDApOwogICAgIH0pOwogfQogCkBAIC0xNzksMTYgKzE2OCwxMiBA
QCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lQXN5bmMoRG93bmxvYWRJRCBkb3dubAogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9u
c2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRCA9IGRvd25sb2Fk
SURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7
CisgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldp
dGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXpl
U3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbZG93bmxvYWRJRCA9IGRvd25s
b2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9u
KSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9u
OjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgICAgIGlm
ICghbV9wcm9jZXNzUG9vbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpD
b250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3Rp
bmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092
ZXJ3cml0ZTo6WWVzKSwgMCk7CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdE
b3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAg
ICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZFByb3h5TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZFByb3h5TWFwLmNwcAppbmRleCA3NmEwNzE1N2I1OTFhYWNlNTBmMTVkMTUyNWRi
Y2ZiOGM2YTRiYmM4Li45ZmRmOTdhMDMxMWE1ZDdjYjMxODY0ZTc5MDZiYWNkZjZmNjE5NjFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94
eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHlNYXAuY3BwCkBAIC0xMDksOSArMTA5LDYgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpk
b3dubG9hZEZpbmlzaGVkKERvd25sb2FkUHJveHkmIGRvd25sb2FkUHJveHkpCiAKICAgICBSRUxF
QVNFX0xPRyhMb2FkaW5nLCAiUmVtb3ZpbmcgZG93bmxvYWQgJSIgUFJJdTY0ICIgZnJvbSBVSVBy
b2Nlc3MgRG93bmxvYWRQcm94eU1hcCIsIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKIAotICAg
IC8vIFRoZSBEb3dubG9hZFByb3h5IG1heSBiZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0
byB0aGUgcHJvY2VzcyBwb29sLgotICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtl
UmVmUHRyKG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKSk7Ci0KICAgICBBU1NFUlQobV9kb3dubG9h
ZHMuY29udGFpbnMoZG93bmxvYWRJRCkpOwogCiAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
ZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2Nv
bHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDhjMjNiYmU4YzA2
YTE1OTljYjliOTE2YTBiMzJhZmIzNzc4M2YzMDUuLmMyMzhiZTA2OGRjZjkzZjE1ZmU2MjZmMTcx
OGI5MDhhNzJlZmExOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3ICs0NCwyMCBAQCBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5KCkKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRM
b2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQ
cm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9h
ZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisgICAgaWYgKGF1dG8qIGNs
aWVudCA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmxlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCgpKQorICAgICAgICBjbGllbnQtPnN0YXJ0TG9hZGluZygqdGhpcywg
Y3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9t
UHJvdG9jb2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5j
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJv
dG9jb2xJRCk7CisgICAgaWYgKGF1dG8qIGNsaWVudCA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLmxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpKQorICAgICAgICBj
bGllbnQtPnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKIH0KIAogdm9pZCBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9u
ZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisgICAgaWYgKGF1dG8qIGNsaWVudCA9IE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCgpKQorICAgICAgICBjbGllbnQtPmludmFsaWRhdGUoKnRoaXMpOwogfQogCiB2b2lkIExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2Fj
eUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRp
cmVjdFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggZDEyNTAyMGE1OTVkMjk4ODk2OTNiNDIz
MGMxMDFkODMyNDNhZTNiZS4uNjg2MDI4ODMwNmEyN2MzMzY2NjQxYjY3ZDBmMzQ1Yjc1MTVmMDlj
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjZW5kaWYKKyNpbmNsdWRlICJMZWdhY3lHbG9i
YWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29u
dGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uSW5mby5oIgpAQCAtNjAsNiArNjEsNyBAQAogI2luY2x1ZGUgIldlYnNpdGVEYXRh
U3RvcmVDbGllbnQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tB
Z2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNpZiBF
TkFCTEUoU0VDX0lURU1fU0hJTSkKQEAgLTcwLDE4ICs3MiwxMDkgQEAKICNpbmNsdWRlIDx3dGYv
c3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5j
bHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2Rl
ZmluZSBNRVNTQUdFX0NIRUNLKGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlv
biwgY29ubmVjdGlvbigpKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlBy
b2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9j
ZXNzUG9vbC5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vz
c1Bvb2wocHJvY2Vzc1Bvb2wpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNz
UHJveHk+JiBnbG9iYWxOZXR3b3JrUHJvY2VzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gbmV0d29ya1Byb2Nlc3M7
CisgICAgcmV0dXJuIG5ldHdvcmtQcm9jZXNzOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKQoreworICAgIGlmICghZ2xvYmFsTmV0d29y
a1Byb2Nlc3MoKSkgeworICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpID0gbWFrZVVuaXF1
ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigpOworICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2Vzcygp
LT5zZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgfQorICAgIHJldHVy
biAqZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojp0ZXJtaW5hdGUoKQoreworICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6dGVybWluYXRlKCk7
CisgICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6YXR0ZW1wdFJlbGF1bmNoQWZ0ZXJDcmFzaElmTmVjZXNzYXJ5KFZlY3Rv
cjxzdGQ6OnBhaXI8UmVmPFdlYlByb2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJv
eHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseT4+JiYgcGVuZGluZ1Jl
cXVlc3RzKQoreworICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNzKCkgPSBudWxscHRyOworICAgIGlm
IChwZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgYXV0byYg
bmV3TmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKKyAg
ICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBwZW5kaW5nUmVxdWVzdHMpCisgICAgICAgIG5ld05ldHdv
cmtQcm9jZXNzLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihyZXF1ZXN0LmZpcnN0LmdldCgp
LCBXVEZNb3ZlKHJlcXVlc3Quc2Vjb25kKSk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpCit7CisgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdv
cmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgor
ICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZp
b2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgorICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsK
KyAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzXSB7CisgICAgICAgICAgICBz
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgICAgIH0pOworICAgIH0K
KworICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAg
aWYgKCFwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKQorICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1l
dGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFz
U2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5z
Y2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihM
ZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFz
c2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNS
ZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2lu
Z2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7CisgICAg
cGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigp
LmNhY2hlTW9kZWwoKTsKKyAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IFdlYlByb2Nlc3NQb29sOjp1
cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKKyAgICAgICAgcGFyYW1ldGVy
cy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsK
KyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChTdHJpbmcgY29va2llU3RvcmFnZURp
cmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAg
aWYgKFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0
d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOyAhY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1w
dHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRl
RGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJD
YWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgcGFyZW50QnVu
ZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOyAh
cGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6
VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKyNlbmRpZgorICAgIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVO
ZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKKyAgICBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFt
ZXRlcnMgPSBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpOworICAg
IHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
cGFyYW1ldGVycyksIDApOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEFsd2F5c1J1
bnNBdEJhY2tncm91bmRQcmlvcml0eSgpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6
IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vz
c1Bvb2wtPmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgYW55
UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkKK3sKKyAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eSgpCisgICAgOiBB
dXhpbGlhcnlQcm9jZXNzUHJveHkoYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5k
UHJpb3JpdHkoKSkKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQog
ICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKICNlbmRpZgotICAgICwg
bV90aHJvdHRsZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tncm91bmRBc3Nl
cnRpb24oKSkKKyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBhbnlQcm9jZXNzUG9vbFNob3VsZFRh
a2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAsIG1f
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50PigpKQorI2VuZGlmCiB7CiAgICAgY29ubmVjdCgpOwogfQpAQCAtMTA0
LDE2ICsxOTcsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMo
UHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogewogICAgIGxhdW5jaE9wdGlv
bnMucHJvY2Vzc1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwog
ICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25z
KTsKLQotICAgIGlmIChwcm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxk
TWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKLSAgICAg
ICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0g
dHJ1ZTsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShQTEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRp
b25zLnByb2Nlc3NQYXRoID0gbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAg
ICBsYXVuY2hPcHRpb25zLnVzZXJJZCA9IG1fcHJvY2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYK
IH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTY2LDEyICsyNDksMTIgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkK
ICAgICB9CiB9CiAKLURvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURv
d25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBX
ZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
LCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94
eSogb3JpZ2luYXRpbmdQYWdlKQogewogICAgIGlmICghbV9kb3dubG9hZFByb3h5TWFwKQogICAg
ICAgICBtX2Rvd25sb2FkUHJveHlNYXAgPSBtYWtlVW5pcXVlPERvd25sb2FkUHJveHlNYXA+KCp0
aGlzKTsKIAotICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJv
eHkoZGF0YVN0b3JlLCBtX3Byb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywg
b3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVE
b3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJh
bWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9u
PiBmZXRjaE9wdGlvbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTIzNyw4ICszMjAsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKQogewogICAgIGNsZWFyQ2FsbGJhY2tTdGF0
ZXMoKTsKIAotICAgIC8vIFRlbGwgdGhlIG5ldHdvcmsgcHJvY2VzcyBtYW5hZ2VyIHRvIGZvcmdl
dCBhYm91dCB0aGlzIG5ldHdvcmsgcHJvY2VzcyBwcm94eS4gVGhpcyB3aWxsIGNhdXNlIHVzIHRv
IGJlIGRlbGV0ZWQuCi0gICAgbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRo
aXMpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
KnRoaXMpOworCisgICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSA9IG51bGxwdHI7CiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0YXRlcygpCkBAIC0yNTgsOSAr
MzQzLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGUKICAgICBpZiAoZGlzcGF0Y2hNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9wcm9j
ZXNzUG9vbC5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKTsKIH0KIApAQCAtMjc0LDggKzM1Niw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgSVBDCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0
aW9uJikKIHsKLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3Byb2Nl
c3NQb29sKTsKLQogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxv
YWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RP
Q09MX01BTkFHRVIpCkBAIC0zMzQsMTEgKzQxNCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRvcE9yaWdpbiB8fCAhbV9wcm9j
ZXNzUG9vbC5pc1NlcnZpY2VXb3JrZXJQYWdlSUQocGFnZUlEKSkgewotICAgICAgICBwcm9jZXNz
QXV0aGVudGljYXRpb25DaGFsbGVuZ2Uoc2Vzc2lvbklELCBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBXZWJQYWdlUHJveHk6
OmZvck1vc3RWaXNpYmxlV2ViUGFnZUlmQW55KHNlc3Npb25JRCwgKnRvcE9yaWdpbiwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwgYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UgPSBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgbmVnb3RpYXRlZExl
Z2FjeVRMU10oYXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0zOTUsMTEgKzQ3MCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIsIElQ
Qzo6Q29uCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wucHJv
Y2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKQotICAgICAgICBzZXRQcm9jZXNzU3VwcHJlc3Npb25F
bmFibGVkKHRydWUpOwotI2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBpZiAoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uID0gdGhpcy0+Y29ubmVjdGlvbigpLT54
cGNDb25uZWN0aW9uKCkpCkBAIC0xMjA2LDcgKzEyNzYsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQg
c2VzcwogfQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRl
cmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7
Ci0gICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihXVEZNb3Zl
KGRvbWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6
OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2V0RG9tYWluc1dpdGhV
c2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4geyBkb21h
aW5zIH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAK
QEAgLTEyNzEsMTQgKzEzNDIsMTQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRTeW5j
QWxsQ29va2llcygpCiAgICAgfQogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNl
c3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYgc3RvcmUpCit2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgc3RvcmUpCiB7CiAgICAgaWYgKGNh
blNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpB
ZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRv
IHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkg
fSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAo
IXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBn
cmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgog
ICAgIH0KIH0KQEAgLTEyOTEsMTYgKzEzNjIsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiBXZWJzaXRlRGF0YVN0
b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJz
aXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAg
ICAgICBpZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSA9PSBzZXNzaW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhp
c3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0
dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Np
b25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3Jh
Z2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzNDcsNyArMTQwOSwx
MCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4s
IFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxl
RG9tYWluKSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgLy8g
RklYTUU6IFRoaXMgaXNuJ3QgcXVpdGUgY29ycmVjdC4KKyAgICBhdXRvIGFnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cisg
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9v
bHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgUmVnaXN0cmFibGVEb21haW4ge3JlZ2lzdHJhYmxl
RG9tYWlufSwgc2Vzc2lvbklELCBbYWdncmVnYXRvciA9IGFnZ3JlZ2F0b3IuY29weVJlZigpXSgp
IHsgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2VyQ29udGV4dENvbm5l
Y3Rpb25Ob0xvbmdlck5lZWRlZChXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBpZGVudGlmaWVy
KQpAQCAtMTUxMCwxNiArMTU3NSwzNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnByZWNv
bm5lY3RUbyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlkZQogICAgIHNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lvbklELCB3ZWJQ
YWdlUHJveHlJRCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAorc3RhdGljIGJv
b2wgYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sK
KyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3VuZFdlYlByb2Nl
c3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9u
KCkKIHsKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkp
IHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsK
ICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3VuZEFjdGl2aXR5
KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZy
b21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtp
bmcgZm9yIGZvcmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKSwgMCk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJvY2Vzc1Bvb2wo
KS5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xI
YXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0
bGVyOjppc1ZhbGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2Vz
KSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIo
KS5iYWNrZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQgdmlldyhzKSJf
cyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0Rp
ZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IGE0MDk0MDQxNjUw
ODVhMjhmNjI4MDU4MmYxZjQwNTI0Yjc5NWQ5NDIuLjM4OTNmN2NjYWQ2ZmUxMTBlY2M3NzliNzJj
MzM5YmI0YjFiNjg1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC01Miw2ICs1MiwxMCBAQCBuYW1lc3BhY2Ug
SVBDIHsKIGNsYXNzIEZvcm1EYXRhUmVmZXJlbmNlOwogfQogCituYW1lc3BhY2UgQVBJIHsKK2Ns
YXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKK30KKwogbmFtZXNwYWNlIFBBTCB7CiBj
bGFzcyBTZXNzaW9uSUQ7CiB9CkBAIC03NCw3ICs3OCw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
Y2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7CiBjbGFzcyBXZWJQ
YWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6
IGJvb2w7CkBAIC0xMDIsMTIgKzEwNSwxNSBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRG9tYWluSW5O
ZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAgICAgdXNp
bmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAKLSAgICBleHBs
aWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJik7CisgICAgc3RhdGljIE5l
dHdvcmtQcm9jZXNzUHJveHkmIHNpbmdsZXRvbigpOworICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9j
ZXNzUHJveHkoKTsKICAgICB+TmV0d29ya1Byb2Nlc3NQcm94eSgpOwogCisgICAgdm9pZCB0ZXJt
aW5hdGUoKSBmaW5hbDsKKwogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdl
YlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIAotICAgIERvd25sb2FkUHJveHkmIGNyZWF0
ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5n
UGFnZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0
YVN0b3JlJiwgV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOwog
CiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRl
RGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1l
IG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcik7CkBAIC0yMDUsMTMgKzIxMSwxMSBAQCBwdWJsaWM6CiAgICAgUHJvY2Vzc1Rocm90dGxl
ciYgdGhyb3R0bGVyKCkgZmluYWwgeyByZXR1cm4gbV90aHJvdHRsZXI7IH0KICAgICB2b2lkIHVw
ZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCgpIHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KLQogI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHko
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICNlbmRpZgogCi0gICAgdm9pZCBhZGRT
ZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsKKyAgICB2b2lkIGFkZFNlc3Npb24oV2Vi
c2l0ZURhdGFTdG9yZSYpOwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCk7
CiAgICAgCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkBAIC0yMjcsNiArMjMxLDEyIEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wo
Y29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9t
UHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9U
T0NPTF9NQU5BR0VSKQorICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KiBsZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSB7IHJldHVybiBtX2N1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5nZXQoKTsgfQorI2VuZGlmCisKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNz
Q3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQgcmVzb3VyY2VMb2FkRGlkU2Vu
ZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVzb3VyY2VMb2FkSW5mbyYmLCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8SVBDOjpGb3JtRGF0YVJlZmVyZW5jZT4m
Jik7CkBAIC0yNDUsNiArMjU1LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVu
dGlmaWVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKIHByaXZhdGU6CisgICAgdm9p
ZCBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgc3RhdGljIHZvaWQg
YXR0ZW1wdFJlbGF1bmNoQWZ0ZXJDcmFzaElmTmVjZXNzYXJ5KFZlY3RvcjxzdGQ6OnBhaXI8UmVm
PFdlYlByb2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseT4+JiYpOworCiAgICAgLy8gQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5CiAgICAgQVNDSUlMaXRlcmFsIHByb2Nlc3NOYW1lKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gIk5ldHdvcmtpbmciX3M7IH0KIApAQCAtMjUyLDcgKzI2NSw2IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBwcm9jZXNzV2lsbFNodXREb3duKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FsbGJh
Y2tTdGF0ZXMoKTsKIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CkBAIC0zMDgsOCAr
MzIwLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vzc0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eT4mJik7
CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9jZXNzUG9vbDsKLQogICAgIEhhc2hNYXA8Q2Fs
bGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+PiBtX3BlbmRpbmdG
ZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFDYWxsYmFja3M7
CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+PiBtX3Bl
bmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnNDYWxsYmFja3M7CkBAIC0zNDcsNiArMzU3
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9u
ZXR3b3JrUHJvY2VzczsKICAgICB9OwogI2VuZGlmCisKKyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RP
TV9QUk9UT0NPTF9NQU5BR0VSKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CisjZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQppbmRleCBi
OGRhZWRmN2JlYmExY2Q4MWY2ZTUyNDQ5NjAzMTBmMTMzMTBjMTFlLi40OTllNjgxOGE0MjNlNWIx
YWU4MjBmNjFlMDk2MjNhMDVhZjhkYjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQpAQCAtNTEs
OCArNTEsNyBAQCBib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6OlhQQ0V2ZW50SGFuZGxlcjo6aGFu
ZGxlWFBDRXZlbnQoeHBjX29iamVjdF90IGV2ZW50KSBjbwogICAgIGlmIChtZXNzYWdlTmFtZS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtZXNzYWdlTmFtZSA9
PSBMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNlc0Rh
dGFiYXNlWFBDRW5kcG9pbnRNZXNzYWdlTmFtZSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
cHJvY2Vzc1Bvb2woKS5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyhl
dmVudCk7CisgICAgLy8gRklYTUU6IE5vdCBzdXJlIHdoYXQgZXF1aXZhbGVudCBpcyBoZXJlLgog
CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmNwcAppbmRleCA0MDE4NjBkMjBjMjc4NzZlYzQwODI3NTRjNWYw
YjJkNmIzNzVhZjM2Li5jYjdhZDc4MDVlMjRhMmNmMDU3NjFhN2Q4MjgyYTJjNjE1MjcyYWZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQ
SVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJPcHRpb25hbENhbGxi
YWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzksMjAgKzQwLDE1IEBACiBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jb25zdCBjaGFy
KiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkKK1dlYkNvb2tpZU1hbmFn
ZXJQcm94eSYgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKQogewotICAgIHJldHVy
biAiV2ViQ29va2llTWFuYWdlclByb3h5IjsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2Vi
Q29va2llTWFuYWdlclByb3h5PiBtYW5hZ2VyOworICAgIHJldHVybiBtYW5hZ2VyOwogfQogCi1S
ZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZShX
ZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNv
b2tpZU1hbmFnZXJQcm94eSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2ll
TWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLSAgICA6
IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRleHRTdXBw
bGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwog
fQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHkoKQpAQCAt
NjUsNTkgKzYxLDI1IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2xp
ZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2UqIGNsCiAgICAgbV9jbGllbnQuaW5p
dGlhbGl6ZShjbGllbnQpOwogfQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3Rv
cjxPYnNlcnZlcio+IG9ic2VydmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9j
b29raWVPYnNlcnZlcnMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6
IG9ic2VydmVyU2V0KQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0g
ICAgfQotCi0gICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2Jz
ZXJ2ZXItPm1hbmFnZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVy
cy5pc0VtcHR5KCkpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0Rp
ZENsb3NlKFdlYlByb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5Ojpwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAg
QVBJOjpPYmplY3Q6OnJlZigpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVy
ZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19
Ci0KIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0
cmluZz4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0
d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3
b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OkdldEhvc3RuYW1lc1dpdGhDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBob3N0bmFtZXMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxl
dGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENv
b2tpZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpk
ZWxldGVDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUmIGNvb2tp
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAg
YXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBbY2Fs
bGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbildKCkgbXV0YWJsZSB7CiAg
ICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTEyNSw0MiArODcsNDIgQEAg
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IENvb2tpZSYKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
bGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2Fs
bFRpbWUgdGltZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQ
cm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1By
b2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRD
b29raWUoc2Vzc2lvbklELCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNz
ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Mu
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVz
KHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFsbENv
b2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAg
ICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpHZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
bikpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7
CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxsYmFja0Z1
bmN0aW9uKSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQ
b29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Np
b25JRCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9u
SUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9v
bCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25J
RCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCks
IDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llT2JzZXJ2ZXJD
YWxsYmFjayhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4m
JiBjYWxsYmFjaykKQEAgLTIxMSwyMSArMTczLDEzIEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5Ojpjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIAogdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNz
aW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBp
ZiAoIXByb2Nlc3NQb29sKCktPmlzVXNpbmdUZXN0aW5nTmV0d29ya1Nlc3Npb24oKSkKLSAgICAg
ICAgcGVyc2lzdEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNlbmRpZgotI2lmIFVT
RShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNz
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIH0K
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBv
bGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29y
a1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3Jr
UHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6Okdl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgK
aW5kZXggMGJkZmMwZDRlNDdjNDM2ZjU4NWNmMjljMDlkNTFhMjliYzgxMWE5ZC4uZTczOGI4NTgw
MjE3MDlhODg4YmMwMzgyOWI0OWRlMWMwZmM5ZWRjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKQEAgLTU2LDExICs1Niw5IEBAIHR5cGVk
ZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxiYWNrOwogdHlwZWRlZiBH
ZW5lcmljQ2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tp
ZUFjY2VwdFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNsYXNzIFdlYkNv
b2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5
cGU6OkNvb2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVi
bGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHBy
aXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBzdXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBXZWJDb29raWVNYW5h
Z2VyUHJveHkmIHNpbmdsZXRvbigpOwogICAgIHZpcnR1YWwgfldlYkNvb2tpZU1hbmFnZXJQcm94
eSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNs
aWVudEJhc2UqKTsKQEAgLTEwNCwxNyArMTAyLDExIEBAIHB1YmxpYzoKICAgICB1c2luZyBBUEk6
Ok9iamVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KFdl
YlByb2Nlc3NQb29sKik7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5KCk7CisgICAgZnJpZW5k
IE5ldmVyRGVzdHJveWVkPFdlYkNvb2tpZU1hbmFnZXJQcm94eT47CiAKICAgICB2b2lkIGNvb2tp
ZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gV2ViQ29udGV4dFN1cHBsZW1l
bnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBw
cm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9j
ZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZvaWQgcmVm
V2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmV2ViQ29udGV4
dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCiAg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29v
a2llTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGEwNmI3N2I0NzNlYzYwMmJkN2M4
YzE0OTVjZDBhMjI4NmU4Y2E1M2IuLjcyNGFlZDMwMDQyNGMxOTM2NzYxM2Q0MmU2NTk3YjEwNjkz
OGZiMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29r
aWVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KQEAgLTIwLDYgKzIwLDYgQEAKICMgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotbWVzc2FnZXMgLT4gV2ViQ29va2llTWFuYWdl
clByb3h5IHsKK21lc3NhZ2VzIC0+IFdlYkNvb2tpZU1hbmFnZXJQcm94eSBOb3RSZWZDb3VudGVk
IHsKICAgICBDb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGExMjNmYjI4NTU5ODIx
NTMzMGI1MDkyOTY1ZWQxMGJiYWVlYzY5YjkuLjUzYTBiMDE1NDc5ZmZkMDkwNTIzMmE4NmUzODY3
MDgzMmJlMmEyMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApA
QCAtMzE4NSwxMSArMzE4NSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBC
b3VuZE1vZGVUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+CiB2b2lkIFdlYlBh
Z2VQcm94eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3Mo
KQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkK
LSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCku
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5k
TWVzc2FnZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRs
ZW1lbnQoKSwgMCk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0
bGVtZW50KCksIDApOwogI2VuZGlmCiB9CiAKQEAgLTMxOTgsMTMgKzMxOTQsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6Y2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShN
QUNDQVRBTFlTVCkKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBzZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50
T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCks
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgpA
QCAtOTkwOCw1OCArOTg5OCwyNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJldmlld0Fj
dGlvblRyaWdnZXJlZChjb25zdCBXZWJDb3JlOjpTeXN0ZW1QcmV2aWV3SW5mbwogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRp
b24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9u
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2Fn
ZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dl
YnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgIH0gZWxzZQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhi
b29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2Fu
U2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0
aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJp
YnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVz
dGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGlu
ZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3Nh
Z2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4
cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1h
cmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYg
RU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5jcHAKaW5kZXggNmQ2YjM0ZDdhZmRmNGNlNjQwNTljMDZmZDFjODhkNTBhYzY4NmM3
Ni4uNzJkYjY0YmEwMmY0YjFiYTBjMjRkZGU3OTBhNjNmMzVhMGMzNzVhZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMjMyLDYgKzIzMiwxMSBAQCBz
dGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIGdsb2JhbFVS
TFNjaGVtZXNXaXRoQ3VzdG9tUHJvdAogICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxTdHJp
bmc+IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMo
KQoreworICAgIHJldHVybiBjb3B5VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Q
cm90b2NvbEhhbmRsZXJzKCkpOworfQorCiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wo
QVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2Nv
bmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdlR3Jv
dXAoV2ViUGFnZUdyb3VwOjpjcmVhdGUoKSkKQEAgLTIzOSw3ICsyNDQsNiBAQCBXZWJQcm9jZXNz
UG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZp
Z3VyYXRpb24pCiAgICAgLCBtX2F1dG9tYXRpb25DbGllbnQobWFrZVVuaXF1ZTxBUEk6OkF1dG9t
YXRpb25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2FkQ2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJ
OjpEb3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlzdG9yeUNsaWVudChtYWtlVW5pcXVlPEFQ
STo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkpCi0gICAgLCBtX2N1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
PigpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgp
KQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2Fn
ZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlcj4o
KnRoaXMpKQpAQCAtMjY3LDkgKzI3MSw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9v
bChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICNlbmRpZgog
ICAgIH0pOwogCi0gICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUgJiYgV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIG1fd2Vic2l0ZURh
dGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpOwot
CiAgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBtX2NvbmZpZ3VyYXRpb24tPmFsd2F5c1JldmFsaWRh
dGVkVVJMU2NoZW1lcygpKQogICAgICAgICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNBbHdheXNSZXZh
bGlkYXRlZC5hZGQoc2NoZW1lKTsKIApAQCAtMjg1LDcgKzI4Niw2IEBAIFdlYlByb2Nlc3NQb29s
OjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJh
dGlvbikKICAgICBhZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIAogICAgIC8vIE5PVEU6IFRoZXNlIHN1Yi1v
YmplY3RzIG11c3QgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuLgot
ICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBs
ZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxX
ZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04p
CkBAIC0zNDIsOSArMzQyLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6On5XZWJQcm9jZXNzUG9vbCgpCiAg
ICAgcHJvY2Vzc1Bvb2xDb3VudGVyLmRlY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2h1dERvd25Qcm9jZXNz
KCk7Ci0KICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICBpZiAoIW1fcHJvY2Vzc2VzVXNpbmdHYW1l
cGFkcy5pc0VtcHR5KCkpCiAgICAgICAgIFVJR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5w
cm9jZXNzUG9vbFN0b3BwZWRVc2luZ0dhbWVwYWRzKCp0aGlzKTsKQEAgLTQwMiwxNiArMzk5LDYg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYKICAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0g
V1RGTW92ZShhdXRvbWF0aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQp
Ci17Ci0jaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKLSAgICBpZiAo
IWN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQgPSBtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
PigpOwotICAgIGVsc2UKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBX
VEZNb3ZlKGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQog
ewogICAgIG1fc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQgPSBlbmFibGVkOwpAQCAtNDMxLDcgKzQx
OCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1CiAKIElQQzo6Q29ubmVjdGlvbiogV2ViUHJv
Y2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCiB7Ci0gICAgcmV0dXJuIG1f
bmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkuY29ubmVjdGlvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4dCkKQEAgLTQ0Myw4ICs0MzAsNyBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQoKQogewogICAgIHNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQo
KSk7CiAjaWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVy
cmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdl
cygpKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtNDgyLDI3MSArNDY4LDEzIEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNjcmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2VuZGlmCiB9CiAKLU5l
dHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhX
ZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKK05ldHdvcmtQcm9jZXNzUHJv
eHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3Jl
KikKIHsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQ
SSBvbiBub24tbWFpbiB0aHJlYWRzLgotICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNl
IHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlm
ICghUnVuTG9vcDo6aXNNYWluKCkpIHsKLSAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVu
c3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0
d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAg
ICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAg
ICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRv
IG5ldHdvcmtQcm9jZXNzID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7
Ci0KLSAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0g
ICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0
ZURhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9y
ZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsK
LSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRh
cnlJZGVudGlmaWVyKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9k
ZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0g
ICAgZm9yIChhdXRvJiBzY2hlbWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMoKSkKLSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1
c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29v
a2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5p
c0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5
KCk7Ci0gICAgaWYgKCFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0g
V2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50
QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNl
bmRpZgotI2VuZGlmCi0KLSAgICBwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gbV9j
b25maWd1cmF0aW9uLT5oc3RzU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyYW1ldGVy
cy5oc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotCi0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29w
eVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdp
c3RlckFzU2VjdXJlKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5
cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxT
ZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRT
ZWN1cml0eVBvbGljeSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNM
b2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2No
ZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lz
dGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7Ci0KLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLSAgICAvLyAqKioqKioqKioKLSAgICAvLyBJTVBPUlRBTlQ6IERvIG5v
dCBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGluZGV4ZWQgZGF0YWJhc2VzIG9u
IGRpc2sgd2l0aG91dCBmaXJzdCBjb25zdWx0aW5nIGEgcmV2aWV3ZXIgZnJvbSBBcHBsZSAoPHJk
YXI6Ly9wcm9ibGVtLzE3NDU0NzEyPikKLSAgICAvLyAqKioqKioqKioKLSAgICBpZiAobV93ZWJz
aXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2
ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygp
LmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHko
KSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgbmV0d29ya1By
b2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgfQotI2VuZGlm
Ci0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9y
ZSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5ID0gIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGxvY2FsU3RvcmFnZURp
cmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2
ZWRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWxvY2Fs
U3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNp
dGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNhY2hlU3RvcmFnZURpcmVjdG9yeSgp
IDogbnVsbFN0cmluZygpOwotICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHko
KSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5ID0gV1RGTW92ZShjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOwotICAgIH0KLQotICAgIFN0
cmluZyByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCktPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5LCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKLQotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IGZhbHNlOwot
ICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IGZh
bHNlOwotICAgIGJvb2wgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IHRydWU7Ci0gICAgYm9vbCBl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gZmFsc2U7Ci0jaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBXZWJDb3JlOjpUaGly
ZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGw7Ci0gICAgV2ViQ29yZTo6U2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEVuYWJsZWQgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBX
ZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87Ci0gICAgV2ViQ29y
ZTo6Q05BTUVDbG9ha2luZ01pdGlnYXRpb25FbmFibGVkIGNuYW1lQ2xvYWtpbmdNaXRpZ2F0aW9u
RW5hYmxlZCA9IFdlYkNvcmU6OkNOQU1FQ2xvYWtpbmdNaXRpZ2F0aW9uRW5hYmxlZDo6Tm87Ci0j
ZW5kaWYKLSAgICBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSBmaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzOwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICBIYXNoU2V0PFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiBhcHBCb3VuZERvbWFpbnM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4gbWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0KLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBtX3RjY1ByZWZlcmVuY2VFbmFibGVkID0gZG9lc0FwcEhhdmVJVFBFbmFibGVkKCk7
Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlICYmICF3aXRoV2Vic2l0ZURhdGFTdG9yZS0+
aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgd2l0aFdlYnNpdGVE
YXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlICYmICFt
X3dlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0g
ICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlIGlmIChXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkgJiYgIVdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmUoKS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsK
LSAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5zZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJl
ZmVyZW5jZUVuYWJsZWQ7Ci0jZW5kaWYKLQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkg
ewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09V
UkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0xvZ1Rlc3RpbmdFdmVudCA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVz
dGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0g
d2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVM
b2NhbGhvc3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdN
b2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzLmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQotICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBh
cnR5Q29va2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0gICAgICAg
ICAgICBjbmFtZUNsb2FraW5nTWl0aWdhdGlvbkVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuY25hbWVDbG9ha2luZ01pdGln
YXRpb25FbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAg
ICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25E
b21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwot
ICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVz
b3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5w
ZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAg
Ci0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRl
RGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAo
IW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0
d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVE
YXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0
aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNs
dWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotICAg
ICAgICAgICAgY25hbWVDbG9ha2luZ01pdGlnYXRpb25FbmFibGVkID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmNuYW1lQ2xvYWtpbmdN
aXRpZ2F0aW9uRW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAg
ICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0
aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWlu
czsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVu
dFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUt
PnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLQotICAgICAg
ICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUt
PnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0Nh
Y2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3Jr
Q2FjaGVEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGly
ZWN0b3J5KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtD
YWNoZURpcmVjdG9yeTsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5l
dHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lm
IEhBVkUoQ0ZORVRXT1JLX0FMVEVSTkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRh
U3RvcmU6Omh0dHAzRW5hYmxlZCgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2Vydmlj
ZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2Vz
RGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0
b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmh0dHAzRW5hYmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBp
c0l0cFN0YXRlRXhwbGljaXRseVNldCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewot
ICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAg
ICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0
YXRlRXhwbGljaXRseVNldCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xv
Z1Rlc3RpbmdFdmVudCwKLSAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
LAotICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCwKLSAgICAgICAgY25h
bWVDbG9ha2luZ01pdGlnYXRpb25FbmFibGVkLAotI2VuZGlmCi0gICAgICAgIGZpcnN0UGFydHlX
ZWJzaXRlRGF0YVJlbW92YWxNb2RlLAotICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21h
aW4sCi0gICAgICAgIGFwcEJvdW5kRG9tYWlucywKLSAgICAgICAgbWFudWFsUHJldmFsZW50UmVz
b3VyY2UsCi0gICAgfTsKLQotICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1l
dGVycwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwot
Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdvcmtQcm9j
ZXNzTGF0ZW5jeVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDApOwotI2Vu
ZGlmCi0KLSAgICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwotCi0g
ICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5h
ZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgIHdpdGhX
ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgfQotCi0gICAgLy8g
TWFrZSBzdXJlIHRoZSBuZXR3b3JrIHByb2Nlc3Mga25vd3MgYWJvdXQgYWxsIHRoZSBzZXNzaW9u
cyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSBpdCBzdGFydGVkLgotICAgIGZvciAo
YXV0byYgc2Vzc2lvbklEIDogbV9zZXNzaW9uVG9QYWdlSURzTWFwLmtleXMoKSkgewotICAgICAg
ICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5n
Tm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpKQotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKndlYnNpdGVEYXRhU3RvcmUpOwotICAgIH0KLQot
ICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdvcmtQcm9jZXNzKTsKLSAgICByZXR1
cm4gKm1fbmV0d29ya1Byb2Nlc3M7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNo
ZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkKIHsKLSAgICBBU1NF
UlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJvY2Vzc1Byb3h5ID09
IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDog
bV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+cHJvY2Vzc0RpZENs
b3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzU1LDkgKzQ4Myw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBu
ZXR3b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24pCiAgICAgICAgIG1f
YXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVhdmUgdGhlIHByb2Nl
c3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0aGUgY2xpZW50IGNv
dWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9
IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCkBAIC03NzEs
MTEgKzQ5NiwxMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc0Ny
YXNoZWQoV2ViUHJvY2Vzc1Byb3h5JiBwcm94eSkKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwg
TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpE
ZWxheWVkUmVwbHkmJiByZXBseSkKIHsKICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAg
IG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbih3ZWJQcm9jZXNz
UHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgd2ViUHJvY2Vzc1By
b3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkgPSBXVEZNb3ZlKHJlcGx5
KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1By
b3h5LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94
eSA9IG1ha2VXZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSld
IChhdXRvJiBjb25uZWN0aW9uSW5mbykgbXV0YWJsZSB7CiAgICAgICAgIGlmIChVTkxJS0VMWSgh
SVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlm
aWVyKCkpICYmIHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKICAgICAgICAgICAgIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJnZXROZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb246IEZhaWxlZCBmaXJzdCBhdHRlbXB0LCByZXRyeWluZyIpOwogICAgICAgICAg
ICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJl
cGx5KSk7CisgICAgICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5nZXRO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHJlcGx5KGNvbm5lY3Rp
b25JbmZvKTsKQEAgLTgwOCwxNSArNTMzLDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0R1BV
UHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE0KICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hX
b3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94
eSYgcHJveHksIFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIEFTU0VSVF9VTlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQ
cm9jZXNzLmdldCgpKTsKLQotICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0
YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklE
KTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBpZiAoIW1fd2Vic2l0
ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgICAgICB3ZWJzaXRl
RGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwotICAgIH0KKyAgICBhdXRvKiB3
ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JT
ZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpCisgICAgICAg
IHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKS5wdHIoKTsKIAogICAgIFdlYlByb2Nlc3NQcm94eSogc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eSB7IG51bGxwdHIgfTsKICAgICBpZiAoIW1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcykgewpAQCAtOTI2LDcgKzY0NSw3IEBAIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdl
YlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlCiAj
aWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCiAgICAgLy8gSW4gcGxhdGZvcm1zIHVz
aW5nIEJ1YmJsZXdyYXAgZm9yIHNhbmRib3hpbmcsIHByZXdhcm1lZCBwcm9jZXNzIGlzIGxhdW5j
aGVkIHVzaW5nIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUsCiAg
ICAgLy8gc28gd2UgZG9uJ3QgdXNlIGl0IGluIGNhc2Ugb2YgdXNpbmcgYSBkaWZmZXJlbnQgV2Vi
c2l0ZURhdGFTdG9yZS4KLSAgICBpZiAobV9zYW5kYm94RW5hYmxlZCAmJiBtX3dlYnNpdGVEYXRh
U3RvcmUgJiYgbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpICE9ICZ3ZWJzaXRlRGF0YVN0b3JlKQor
ICAgIGlmIChtX3NhbmRib3hFbmFibGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRp
ZgogCkBAIC0xMjAyLDkgKzkyMSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRG
aW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQogICAgICAgICBwcm9jZXNz
LT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9yVGVzdGluZygpOwogCiAgICAgbV9jb25u
ZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24odGhpcywgcHJvY2Vzcy0+d2ViQ29ubmVj
dGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIG1fd2Vic2l0
ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQpAQCAt
MTI5OSwxMCArMTAxNSw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVh
dGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAgICAgaWYgKCFwYWdl
Q29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAgIC8vIFdlIHRyeSB0
byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxvbmcgYXMgcG9zc2li
bGUuCiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIHdl
YiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVuIHdlIGhhdmUgdG8g
Y3JlYXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAg
IG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRl
RGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAgIHBhZ2VDb25maWd1
cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8V2ViUHJvY2Vzc1By
b3h5PiBwcm9jZXNzOwpAQCAtMTM2OSwxNSArMTA4Miw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBh
Z2VJCiB7CiAgICAgYXV0byByZXN1bHQgPSBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAuYWRkKGRhdGFT
dG9yZS5zZXNzaW9uSUQoKSwgSGFzaFNldDxXZWJQYWdlUHJveHlJZGVudGlmaWVyPigpKS5pdGVy
YXRvci0+dmFsdWUuYWRkKHBhZ2VJRCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3Vs
dC5pc05ld0VudHJ5KTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25J
RCgpOwotICAgIGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSkgewotICAgICAgICBBU1NFUlQoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IGRhdGFT
dG9yZS5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCA9PSBz
ZXNzaW9uSUQpOwotICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFTdG9yZSkpOwotICAgICAg
ICAgICAgZGF0YVN0b3JlLmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgIH0K
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZShX
ZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
KQpAQCAtMTQxMywyNiArMTExNywyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6
ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAogICAgICAg
ICBpc0FwcEJvdW5kID0gaW5pdGlhdGluZ1BhZ2UtPmlzVG9wRnJhbWVOYXZpZ2F0aW5nVG9BcHBC
b3VuZERvbWFpbigpOwogICAgIH0KIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgLy8g
UmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBV
Ukwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCi0gICAgICAgIC8vIFdlIHNldCB0aGUgdmFsdWUg
dG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgotICAgICAgICBpZiAoaW5pdGlhdGluZ1BhZ2Up
IHsKLSAgICAgICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGlu
aXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKLSAgICAgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKLSAg
ICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21h
aW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgICAg
IGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpV
c2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdl
bnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKLSAg
ICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOwotICAgICAgICAg
ICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6
OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJB
Z2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAgICAgICB9Ci0gICAg
ICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAgIG5ldHdvcmtQ
cm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qo
c2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlz
QXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9h
ZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKKyAg
ICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdp
bmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBzZXQgdGhlIHZhbHVl
IHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsK
KyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGlu
Z1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRhdGVkUmVxdWVzdC5z
ZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7CisgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlh
dGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVz
dC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAg
ICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2Vy
QWdlbnQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQ
YXJ0eUZvckNvb2tpZXMoVVJMKCkpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVT
aXRlKGZhbHNlKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmll
bGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAg
ICAgfQorICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkRvd25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1
cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKIAogICAg
IHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTQ0NiwxMSArMTE0Nyw3IEBAIERvd25sb2Fk
UHJveHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBk
YXRhU3RvcmUsIFdlYlBhCiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAobmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2Fk
SUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25I
YW5kbGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0gICAgfQotCisgICAg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElE
KCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKQEAgLTE1MjEsNyArMTIx
OCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkKIAogUHJvY2Vzc0lE
IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQogewotICAgIHJldHVy
biBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIo
KSA6IDA7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnByb2Nl
c3NJZGVudGlmaWVyKCk7CiB9CiAKIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVk
UHJvY2Vzc0lkZW50aWZpZXIoKQpAQCAtMTYxOCwxMCArMTMxNSw3IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRs
ZXJzKGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3Vz
dG9tUHJvdG9jb2xIYW5kbGVycygpLmFkZCh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNj
aGVtZSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnJlZ2lz
dGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJv
dG9jb2xIYW5kbGVycyhjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MzAsMTAgKzEzMjQs
NyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZp
bmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbgogICAgICAgICByZXR1cm47CiAKICAgICBnbG9i
YWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5yZW1vdmUodXJsU2NoZW1l
KTsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxl
Z2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpLnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2Nv
bCh1cmxTY2hlbWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVt
ZUFzQ2FjaGVQYXJ0aXRpb25lZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2NjcsMTYg
KzEzNTgsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVs
IGNhY2hlTW9kZWwpCiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nl
c3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVN
b2RlbChjYWNoZU1vZGVsKSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hl
TW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAg
ICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNhcGFjaXR5KCk7CiAKLSAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVN
b2RlbCksIHsgfSwgeyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5z
ZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91
c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOwogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dElu
dGVydmFsKQpAQCAtMTY4Niw3ICsxMzc1LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVm
YXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKIAogRG93
bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURh
dGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBh
Z2VQcm94eSogb3JpZ2luYXRpbmdQYWdlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8p
CiB7Ci0gICAgcmV0dXJuIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94
eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBy
ZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9y
ZSwgKnRoaXMsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91
bmQpCkBAIC0xNzYyLDI1ICsxNDUxLDExIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1v
cnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjp1c2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24oKQotewotICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkp
OwotICAgIEFTU0VSVCghbV9uZXR3b3JrUHJvY2Vzcyk7Ci0KLSAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9u
ID0gdHJ1ZTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYm
IHJlcGx5KQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3Mt
PmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0
ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7CisgICAg
aWYgKE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNhblNlbmRNZXNzYWdlKCkpCisg
ICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRTeW5jKHN0ZDo6Zm9y
d2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJv
b2wgYWxsb3dzKQpAQCAtMTc5MCwxOSArMTQ2NSwxNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0gICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKCksIDApOworICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKCksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
Ojp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCiB7CiAgICAgdGVybWluYXRlU2VydmljZVdvcmtl
cnMoKTsKIAotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOwotICAgIG1fbmV0d29ya1Byb2Nl
c3MgPSBudWxscHRyOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnRlcm1p
bmF0ZSgpOworCisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkubmV0d29ya1By
b2Nlc3NDcmFzaGVkKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdl
YkNvbnRlbnRQcm9jZXNzZXMoKQpAQCAtMTgxNCwyMiArMTQ4NiwxNyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICgh
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0K
LSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25J
bW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25J
bW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVz
dGluZygpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Rm9yVGVzdGluZygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOworICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKQEAgLTE4NTQs
MTUgKzE1MjEsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3luY0xvY2FsU3RvcmFnZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmQKIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoKSwgMCk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKCksIDApOwog
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFsbG93
U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDZXJ0aWZpY2F0ZUluZm8q
IGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5j
ZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRU
UFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0
KSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1dG9tYXRpb25DYXBhYmls
aXRpZXMoKSBjb25zdApAQCAtMjM4MSwxMCArMjA0Nyw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NT
aXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRv
RG9tYWluLCBPcHRpb25TZXQ8Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4g
bmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdlUHJv
eHlJRCwgUGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKQogewotICAgIGlmICghbV9uZXR3b3JrUHJv
Y2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlkQ29tbWl0
Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0b0Rv
bWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGlkQ29tbWl0Q3Jvc3NTaXRl
TG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0b0RvbWFpbiwgbmF2
aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IDFmNDZjZTRkNjM3ZTc0NmQ5NGM2ZThhZTk2NTNi
YWQwY2E3OTgyN2UuLmM5MTJjOTA2ODAyZjJjOTg5NGZiZWJhZTIzZWRmOWY2Nzg2YmMzZmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtODEsNyArODEsNiBA
QCBPQkpDX0NMQVNTIFdLUHJlZmVyZW5jZU9ic2VydmVyOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNs
YXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7
CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNsYXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIElu
amVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTgwLDcgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3Rv
cnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6
RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2Vy
dmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBj
dXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZp
Z3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBA
IC0yMDksOSArMjA3LDYgQEAgcHVibGljOgogICAgIC8vIERpc2Nvbm5lY3QgdGhlIHByb2Nlc3Mg
ZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQ
cm94eSopOwogCi0gICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRlRGF0YVN0b3Jl
KCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9Ci0gICAgdm9pZCBz
ZXRQcmltYXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7
IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7IH0KLQogICAgIFJlZjxXZWJQYWdlUHJv
eHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9u
PiYmKTsKIAogICAgIHZvaWQgcGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQ
cm94eUlkZW50aWZpZXIsIFdlYnNpdGVEYXRhU3RvcmUmKTsKQEAgLTMwOSw4ICszMDQsNiBAQCBw
dWJsaWM6CiAgICAgQVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudCYgaGlzdG9yeUNsaWVu
dCgpIHsgcmV0dXJuICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJDb250ZXh0Q2xpZW50JiBj
bGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIGNvbnN0IHsgcmV0dXJu
ICptX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAgICAgc3RydWN0IFN0YXRpc3Rp
Y3MgewogICAgICAgICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAgICAgICAgdW5zaWduZWQgd2tQ
YWdlQ291bnQ7CkBAIC0zMTgsOSArMzExLDYgQEAgcHVibGljOgogICAgIH07CiAgICAgc3RhdGlj
IFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MoKTsgICAgCiAKLSAgICB2b2lkIHVzZVRlc3RpbmdOZXR3
b3JrU2Vzc2lvbigpOwotICAgIGJvb2wgaXNVc2luZ1Rlc3RpbmdOZXR3b3JrU2Vzc2lvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uOyB9Ci0KICAgICB2
b2lkIHNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wpOwogCiAgICAg
dm9pZCBjbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7CkBAIC00MDAsNyArMzkwLDYgQEAgcHVibGlj
OgogCiAgICAgLy8gTmV0d29yayBQcm9jZXNzIE1hbmFnZW1lbnQKICAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBlbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0
ZURhdGFTdG9yZSA9IG51bGxwdHIpOwotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQ
cm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKTsgfQogICAgIHZv
aWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAogICAgIHZv
aWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBs
eSYmKTsKQEAgLTQxMCw4ICszOTksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBlc3RhYmxpc2hXb3Jr
ZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoV2ViUHJvY2Vzc1Byb3h5Jik7CiAgICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVz
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNp
emUoKTsgfQotICAgIHZvaWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGJvb2wgYWxsb3dzKSB7IG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyID0gYWxsb3dzOyB9Ci0gICAgYm9vbCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZp
Y2VXb3JrZXIoKSBjb25zdCB7IHJldHVybiBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlcjsgfQogICAgIHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25z
dCBTdHJpbmcmIHVzZXJBZ2VudCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250
cm9sbGVySWRlbnRpZmllcj4mIHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2
aWNlV29ya2VycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JT
ZXJ2aWNlV29ya2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2
aXR5Rm9yVGVzdGluZygpIGNvbnN0OwpAQCAtNTU3LDYgKzU0NCwxNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0
cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSk7CiAjZW5kaWYKIAorICAgIHN0YXRpYyB2
b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRo
Q3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAg
ICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3Ry
aW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2lu
Z0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0Rp
cmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5
KCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwog
CkBAIC01NzAsOCArNTY4LDYgQEAgcHJpdmF0ZToKICAgICBXZWJQcm9jZXNzUHJveHkmIGNyZWF0
ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3
YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAgICAgdm9pZCBpbml0
aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0b3JlKiwg
V2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJt
ZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQogICAgIHZvaWQgaGFuZGxlTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2Vy
RGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZvaWQgaGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRh
JiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJik7CiAK
QEAgLTU5NSwxNCArNTkxLDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdXNlc1NpbmdsZVdlYlBy
b2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVXZWJQcm9j
ZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIFN0cmluZyBj
b29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVE
aXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3Rvcnko
KTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBz
dGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwotI2VuZGlmCi0KICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJz
KCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBAIC02NjIs
NyArNjUwLDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9u
Q2xpZW50PiBtX2F1dG9tYXRpb25DbGllbnQ7CiAgICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRD
bGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5
Q29udGV4dEhpc3RvcnlDbGllbnQ+IG1faGlzdG9yeUNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50OwogCiAgICAgUmVmUHRyPFdlYkF1dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRp
b25TZXNzaW9uOwogCkBAIC02OTQsOCArNjgxLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbWVt
b3J5U2FtcGxlckVuYWJsZWQgeyBmYWxzZSB9OwogICAgIGRvdWJsZSBtX21lbW9yeVNhbXBsZXJJ
bnRlcnZhbCB7IDE0MDAuMCB9OwogCi0gICAgUmVmUHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZT4gbV93ZWJzaXRlRGF0YVN0b3JlOwotCiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIq
LCBSZWZQdHI8V2ViQ29udGV4dFN1cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gV2Vi
Q29udGV4dFN1cHBsZW1lbnRNYXA7CiAgICAgV2ViQ29udGV4dFN1cHBsZW1lbnRNYXAgbV9zdXBw
bGVtZW50czsKIApAQCAtNzMwLDggKzcxNSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fcHJv
Y2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCB7IHRydWUgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwotCiAgICAgSGFzaE1hcDx1aW50
NjRfdCwgUmVmUHRyPERpY3Rpb25hcnlDYWxsYmFjaz4+IG1fZGljdGlvbmFyeUNhbGxiYWNrczsK
IAogI2lmIFVTRShTT1VQKQpAQCAtODUxLDE1ICs4MzQsMTUgQEAgcHJpdmF0ZToKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyhUJiYgbWVzc2FnZSkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQ
cm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CisgICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLmNhblNlbmRNZXNzYWdlKCkpCisgICAgICAgIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpLnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSkKIHsKICAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpm
b3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDQ4ODg3MjNlMGJkYTU3ODM4YzI4ODc5ZGNj
ZjI3ZTFlM2I0MTRmMjIuLjg4ZmViNTE2ZTBiYzI4OTQ2MTk0YmJiN2E5NmE3NzNmMGEyNDQyMWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3Jh
bmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgog
I2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5h
Z2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpAQCAtNzUsNiArNzYs
MTAgQEAKICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oIgogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5o
IgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgYm9vbCBhbGxvd3NXZWJz
aXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zOwpAQCAtODMsMTMgKzg4LDIyIEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zKCkKICAg
ICBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAotc3Rh
dGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVs
dERhdGFTdG9yZXMoKQorc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRh
U3RvcmUqPiYgYWxsRGF0YVN0b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRocmVh
ZCgpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwg
V2Vic2l0ZURhdGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAorVmVjdG9yPFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzRnJv
bUFsbFN0b3JlcygpCit7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBh
bGxQYXJhbWV0ZXJzOworICAgIGFsbFBhcmFtZXRlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShh
bGxEYXRhU3RvcmVzKCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0
b3JlcygpLnZhbHVlcygpKQorICAgICAgICBhbGxQYXJhbWV0ZXJzLnVuY2hlY2tlZEFwcGVuZChz
dG9yZS0+cGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gYWxsUGFyYW1ldGVyczsKK30KKwogUmVm
PFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZU5vblBlcnNpc3RlbnQo
KQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0ZShJc1BlcnNpc3RlbnQ6Ok5vKSwgUEFMOjpTZXNz
aW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vzc2lvbklEKCkpKTsKQEAgLTExNSwxMCArMTI5LDEx
IEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3Rv
cmVDb25maWd1cmF0aW9uPiYmIGNvbmZpZ3VyCiAjZW5kaWYKIHsKICAgICBXVEY6OnNldFByb2Nl
c3NQcml2aWxlZ2VzKGFsbFByaXZpbGVnZXMoKSk7Ci0gICAgbWF5YmVSZWdpc3RlcldpdGhTZXNz
aW9uSURNYXAoKTsKKyAgICByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKICAgICBwbGF0Zm9y
bUluaXRpYWxpemUoKTsKIAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuYWRkU2Vzc2lvbigqdGhpcyk7CiB9CiAKIFdl
YnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKQEAgLTEyOCwxNyArMTQzLDEyIEBA
IFdlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKIAogICAgIHBsYXRmb3JtRGVz
dHJveSgpOwogCi0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNTRVJUKG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0
KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKLSAgICAgICAgbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5y
ZW1vdmUobV9zZXNzaW9uSUQpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgQVNTRVJUKGFsbERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQp
ID09IHRoaXMpOworICAgIGFsbERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOworICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnJlbW92ZVNlc3Npb24obV9zZXNzaW9u
SUQpOwogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKLSAgICAgICAgaWYgKGF1dG8qIGdwdVByb2Nl
c3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCi0gICAgICAg
ICAgICBncHVQcm9jZXNzUHJveHktPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOworICAgIGlm
IChhdXRvKiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3Jl
YXRlZCgpKQorICAgICAgICBncHVQcm9jZXNzUHJveHktPnJlbW92ZVNlc3Npb24obV9zZXNzaW9u
SUQpOwogI2VuZGlmCiB9CiAKQEAgLTE2OSwxNyArMTc5LDE1IEBAIGJvb2wgV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpCiAgICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVs
dERhdGFTdG9yZSgpOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJX
aXRoU2Vzc2lvbklETWFwKCkKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vz
c2lvbklETWFwKCkKIHsKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IG5vbkRlZmF1bHREYXRh
U3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChy
ZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICB9CisgICAgYXV0byByZXN1bHQgPSBhbGxE
YXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJl
c3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogfQogCi1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRl
RGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKQorV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6
ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
ewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCkgOiBudWxscHRyOwor
ICAgIHJldHVybiBhbGxEYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykK
QEAgLTE5NSwxMiArMjAzLDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJv
Y2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgbV9wcm9jZXNzZXMucmVtb3ZlKHBy
b2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bv
b2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBwb29scyA9IHByb2Nl
c3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6IHBvb2xz
LmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVEaXJl
Y3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZlZERpcmVjdG9yaWVz
KQpAQCAtNDQzLDggKzQ0NSw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5k
QXBwbHkoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBPCiAgICAgICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3
b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5
cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVu
Y2g6CkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFB
bmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJh
Y2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5mZXRjaFdl
YnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNr
QWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CisgICAg
ICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5mZXRjaFdlYnNpdGVEYXRh
KG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRv
ciwgcHJvY2Vzc1Bvb2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJz
aXRlRGF0YSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTcyNyw4ICs3MjcsNiBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBl
KSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoK
LSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgpAQCAtNzQwLDcgKzczOCw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9u
SUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vz
c1Bvb2xdIHsKKyAgICAgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmRl
bGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtj
YWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwog
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC04OTEsMTQgKzg4OSw5IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcykpIHsKICAgICAgICAgaWYgKCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vz
c1RvRGVsZXRlV2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAg
ICAgICAgcHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywg
bW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRlV2Vic2l0ZURh
dGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGlu
Z0NhbGxiYWNrKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTIsOCArOTg1LDYgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHBvb2xzKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkg
ewogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKQEAgLTEwMTksNyArMTAxMCw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5z
KG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNUU0Nh
Y2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHBy
b2Nlc3NQb29sXSB7CisgICAgICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3Jp
Z2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9t
YWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAg
ICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIH0KQEAgLTExODMsOCArMTE3NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBD
b21wbGV0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1h
eGltdW1FbnRyeUNvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRNYXhTdGF0aXN0aWNzRW50
cmllcyhtX3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRv
KHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xMTkzLDggKzExODMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxl
dGlvbgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBy
dW5lVGFyZ2V0Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFBydW5lRW50cmllc0Rvd25U
byhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vj
b25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xMjAzLDggKzExOTIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5k
ZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPAogCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpLnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTMsMjAg
KzEyMDEsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1U
aW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1f
c2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogICAgIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZHVtcFJl
c291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vz
c2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEy
MzgsMTIgKzEyMTksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3Vy
Y2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVy
ZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVu
dCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjU1LDEyICsxMjMxLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNz
LT5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjc0LDggKzEyNDUsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTEyODksMTAgKzEyNTksNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVudCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA0LDEyICsxMjcxLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vz
cy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLmlzVmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xMzIzLDEwICsxMjg1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGUKICAgICAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0VmVy
eVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1v
dmFsKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTEzMzUsOCArMTI5NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hv
dWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2CiAgICAg
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1v
dmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBj
b25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xMzUwLDIyICsxMzA4LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkws
IGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1YkZyYW1lVVJM
LCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRv
cEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xMzc5LDIzICsxMzI5LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVCiAKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
cEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291
cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRl
cihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVS
TCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVybFJlZGly
ZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTQwOSwxMCArMTM1MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsCiAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGly
ZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3Rl
ZFRvIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNv
dXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQyNCwxMiArMTM2Miw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3Qg
VVJMJiBzdWJyZXNvdXJjZVVSCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZy
YW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ0MSwxMiArMTM3NCw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9w
RnJhbWVVUkwsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVy
bFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNDU4LDI1ICsxMzg2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJl
Y3RpbmdUbyhjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBjb25zdCBVUkwmIHVybFJlZGly
ZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9j
ZXNzLT5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25I
YW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5pc1Jl
Z2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0
ODgsNDYgKzE0MDUsMjcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJl
c291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNz
LT5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuY2xlYXJQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkucmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c3VibWl0VGVsZW1ldHJ5KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0p
OwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zdWJtaXRUZWxl
bWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNpbmNl
LCBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lv
bklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQs
IG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFTdW1tYXJ5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTU3MCwyMiArMTQ2OCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRoZXJTdGF0aQogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lv
bklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0
ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5z
Y2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGlj
c0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNTk0LDI0ICsxNDg0LDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKENvbXBsZXRp
b25IYW5kCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNz
aW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zY2hlZHVsZVN0YXRpc3RpY3NBbmRE
YXRhUmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxs
VGFibGVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5z
dGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjIzLDIyICsxNTAyLDE0IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNlY29u
ZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZG9tYWluSURFeGlz
dHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1fc2Vz
c2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVy
bCwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwyLCBTZWNv
bmRzIGxhc3RTZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgU2Vjb25kcyBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgYm9vbCBpc1ByZXZhbGVudCwg
Ym9vbCBpc1ZlcnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY1MCwxMCArMTUy
MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgcHJvY2Vzcy0+bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2
YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLm1l
cmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4s
IGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZh
dGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaGFk
VXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE2NjUsMTggKzE1MzMsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBo
YWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5pbnNl
cnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLmluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2No
ZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGlzUHJldmFsZW50LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChtX3Nl
c3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QoYm9v
bCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTY4NCw4ICsxNTQ4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5pbmdS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBDb21wbGUKICAgICB1c2VFeHBs
aWNpdElUUFN0YXRlKCk7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldElz
UnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRB
bGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTY5Niw3ICsxNTU5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpn
ZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdlYlBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNz
UG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMo
bV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Np
b25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAKQEAgLTE3MDQsOCArMTU2
Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bihTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25ICiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFRpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVyYWN0
aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xNzE5LDEwICsxNTgxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjps
b2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQK
ICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bG9n
VXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTczNCwxMyArMTU5Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFz
SGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJ
bnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9u
bHlJbkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QgVVJMJiB0b3BVcmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzUy
LDEzICsxNjA1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJ
bkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFz
ZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuaXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc3MiwxMCAr
MTYxOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3Jh
bmRmYXRoZXJlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTc4OSwxMCArMTYzMyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRm
YXRoZXJlZChjb25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFu
ZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldEdyYW5kZmF0aGVyZWQobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJl
ZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODAxLDEwICsxNjQyLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0
ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZnJvbVVSTCwgY29u
c3QgVVJMJiB0b1VSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTgxMyw2MiArMTY1MSwzOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENy
b3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgogICAg
IAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0
Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRDcm9zc1Np
dGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9VUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
ZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5yZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0
aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyhjb25zdCBV
UkwmIHVybCwgYm9vbCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZUNvb2tpZXNGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBp
bmNsdWRlSHR0cE9ubHlDb29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5kZWxldGVDb29raWVzRm9yVGVz
dGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5j
bHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBj
b25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xvY2FsU3RvcmFnZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5nKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0lzb2xhdGVk
U2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5oYXNJc29sYXRlZFNlc3Npb24obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRT
aG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0xODk5LDEwICsx
NzEzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlKFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWUKICAgICAgICAgICAgIHdlYlByb2Nlc3Mu
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2luZ01vZGUsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
dFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25J
RCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkxMCwxMCArMTcyMSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVu
YmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFnID0gZW5hYmxlZCA/IFdlYkNv
cmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJDb3JlOjpTYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRW5ibGVTYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGlu
ZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkyMSwyMCArMTcyOSwxNCBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBh
cnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIGF1dG8gbW9kZSA9IGVuYWJsZWQgPyBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llcyA6IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlOjpOb25lOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9k
ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkuc2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVT
aXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUb1NhbWVTaXRlU3Ry
aWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9y
VGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3Rp
bmcoY29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBjb25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTY5LDggKzE3NzEs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50
UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291
cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlY29uZHMpOwogICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CkBAIC0xOTgyLDIyICsxNzgzLDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhDb21wbGV0aW9uSGFu
ZGxlCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRD
YWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkucmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25J
RCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKICNlbmRpZgogfQogCi1ib29sIFdlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFBy
b2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkgY29uc3QKLXsKLSAgICBpZiAo
YXV0byogcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPSBwcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3Jl
KCkpCi0gICAgICAgIHJldHVybiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9PSB0aGlzOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQogSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRl
RGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb25zdAogewogICAgIEhhc2hT
ZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xzOwpAQCAtMjAxMiw5ICsxODAz
LDYgQEAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpw
cm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb24KICAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1w
dHkoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbmUgb2YgdGhlIGxlZ2FjeSBkYXRh
IHN0b3Jlcy4KICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29s
OjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKCFpc0Fzc29jaWF0ZWRQcm9j
ZXNzUG9vbCgqcHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCiAgICAg
ICAgICAgICBwcm9jZXNzUG9vbHMuYWRkKHByb2Nlc3NQb29sKTsKICAgICAgICAgICAgIGlmIChw
cm9jZXNzUG9vbHMuc2l6ZSgpID09IGxpbWl0KQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjEzMiwxNyArMTkyMCwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgCiAgICAgICAgIHJlc29s
dmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29s
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSk7CisgICAgICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1
ZSksIDApOworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
CiAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihN
ZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1
ZSksIG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHBy
b2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSkp
OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25J
RCwgZmFsc2UpLCAwKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCiAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChmYWxz
ZSksIG1fc2Vzc2lvbklEKTsKLSAgICB9CiAKICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkID0gZmFsc2U7CiAjZWxzZQpAQCAtMjE1NCw4ICsxOTQwLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQp
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soRnVu
Y3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAoY2FsbGJh
Y2spIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQot
ICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVu
dCh0cnVlKSk7CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVz
dGluZ0V2ZW50KHRydWUpLCAwKTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0aXN0aWNzVGVzdGlu
Z0NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CkBAIC0yMTc0LDggKzE5NTksNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9v
bCBlbmFibGVkLCBDb21wbGV0aQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKICAgICBVTlVT
RURfUEFSQU0oY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjE5MCwyMCArMTk3NCwxNCBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1f
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuaXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAjZW5kaWYKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxz
ZSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVi
dWdNb2RlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5h
YmxlZCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjIy
NSwyOSArMjAwMyw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzSW5XZWJQcm9jZXNzZXMoQ29tcGxldGlvbkhhbmRsCiB9CiAjZW5kaWYKIAotVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4gV2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMoKSBj
b25zdAotewotICAgIHJldHVybiBjb3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7Ci19Ci0K
LXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpD
b29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZUlmKFsmY29va2ll
XShhdXRvJiBwZW5kaW5nQ29va2llKSB7Ci0gICAgICAgIHJldHVybiBwZW5kaW5nQ29va2llLmlz
S2V5RXF1YWwoY29va2llKTsKLSAgICB9KTsKLSAgICBtX3BlbmRpbmdDb29raWVzLmFkZChjb29r
aWUpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUoY29u
c3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1v
dmUoY29va2llKTsKLX0KLSAgICAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5n
Q29va2llcygpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5jbGVhcigpOwotfQotCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rp
b24pCiB7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goV1RGTW92ZShmdW5jdGlvbikpOwpAQCAtMjI3
MSw4ICsyMDI2LDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9y
ZTo6cGFyYW1ldGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwog
Ci0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdDb29raWVzKCk7Ci0KICAg
ICBhdXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24t
PnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhhbmRsZTsKICAgICBpZiAo
IXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtMjM3MSw3ICsy
MTI0LDE0IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBh
cmFtZXRlcnMoKQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQgPSBtX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhw
YXJhbWV0ZXJzKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1p
c3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKKyNl
bmRpZgogCisjaWYgVVNFKFNPVVApCisgICAgV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6
OnNpbmdsZXRvbigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCgpLCBwYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBh
dGgsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlVHlwZSk7CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gcGFyYW1ldGVyczsKIH0KIApA
QCAtMjQwMSwxMCArMjE2MSw2IEBAIEFQSTo6SFRUUENvb2tpZVN0b3JlJiBXZWJzaXRlRGF0YVN0
b3JlOjpjb29raWVTdG9yZSgpCiAgICAgcmV0dXJuICptX2Nvb2tpZVN0b3JlOwogfQogCi12b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLX0KLQogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQo
VmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFpc1BlcnNpc3RlbnQoKSkgewpAQCAtMjQy
NSwxMCArMjE4MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0
YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
cmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucmVzZXRRdW90YShtX3Nlc3Np
b25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NP
QSkKQEAgLTI0NjYsMzQgKzIyMTksMjEgQEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+aGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLmhhc0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNz
aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNz
LT5jbGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vi
c2l0ZURhdGEoVVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFtZSwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9z
ZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKS5hZGRTZXNzaW9uKCp0aGlzKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKS5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBu
ZXdOYW1lLCBkYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiBQ
TEFURk9STShDT0NPQSkKQEAgLTI1MTYsNyArMjI1Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFu
ZGxlCiAKICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoZ2xvYmFsRGVmYXVsdERhdGFTdG9y
ZSgpLmdldCgpLCAqYXBwQm91bmREb21haW5zKTsKIAotICAgIGZvciAoYXV0byogc3RvcmUgOiBu
b25EZWZhdWx0RGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgIGZvciAoYXV0byogc3RvcmUgOiBh
bGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCiAgICAgICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlu
cyhzdG9yZSwgKmFwcEJvdW5kRG9tYWlucyk7CiB9CiAKQEAgLTI1MjQsMTAgKzIyNjQsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUChjb25zdCBIYXNo
U2V0PFdlYkNvcmU6OlJlZ2lzdHJhYgogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291
cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNl
dEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRv
bWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5kaWYKIApAQCAtMjUzNSwx
NiArMjI3MiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZp
ZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmluZyYgYnVuZAogewogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVC
dW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkudXBkYXRlQnVuZGxlSWRl
bnRpZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1By
b2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5jbGVhckJ1bmRsZUlkZW50aWZp
ZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDRl
YzEzZTE2ZmU0ODJkMjZhMmVhZmEzMTIzZTMyMzNhNzM3Y2IxMmIuLjY1NDExMmM0MjdiNGZhNWVl
ODY0NGE2NzI2MmM2MGI2OTYwZDhmMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTEwOCw3ICsxMDgsNyBA
QCBwdWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZp
Z3VyYXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB+V2Vic2l0ZURhdGFTdG9yZSgpOwog
Ci0gICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9y
ZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CisgICAgc3RhdGljIFdlYnNpdGVEYXRhU3Rv
cmUqIGV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKIAogICAg
IGJvb2wgaXNQZXJzaXN0ZW50KCkgY29uc3QgeyByZXR1cm4gIW1fc2Vzc2lvbklELmlzRXBoZW1l
cmFsKCk7IH0KICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBt
X3Nlc3Npb25JRDsgfQpAQCAtMjI4LDE1ICsyMjgsOCBAQCBwdWJsaWM6CiAKICAgICBEZXZpY2VJ
ZEhhc2hTYWx0U3RvcmFnZSYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSB7IHJldHVybiBtX2Rl
dmljZUlkSGFzaFNhbHRTdG9yYWdlLmdldCgpOyB9CiAKLSAgICBXZWJQcm9jZXNzUG9vbCogcHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGJvb2wgaXNBc3NvY2lh
dGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsKLQogICAgIFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzIHBhcmFtZXRlcnMoKTsKLQotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29r
aWU+IHBlbmRpbmdDb29raWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRQZW5kaW5nQ29va2llKGNv
bnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgcmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25z
dCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKKyAg
ICBzdGF0aWMgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBwYXJhbWV0ZXJzRnJv
bUFsbFN0b3JlcygpOwogCiAgICAgdm9pZCBkaXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgp
PiYmKTsKIApAQCAtMjYxLDggKzI1NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tXZWJB
dXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24oV2ViQ29yZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9u
Q29uZmlndXJhdGlvbiYmKTsKICNlbmRpZgogCi0gICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJv
Y2VzcygpOwotCiAgICAgY29uc3QgV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24mIGNvbmZp
Z3VyYXRpb24oKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24uZ2V0KCk7IH0KIAogICAgIFdlYnNp
dGVEYXRhU3RvcmVDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CkBA
IC0zNDQsNyArMzM1LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtl
eXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2Rp
ZmllZFNpbmNlKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5n
JiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YT4mKTsKIAotICAgIHZvaWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURN
YXAoKTsKKyAgICB2b2lkIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgc3RhdGljIE9wdGlvbmFsPEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4+PiBhcHBCb3VuZERvbWFpbnNJZkluaXRpYWxpemVkKCk7CkBAIC0zODIsOCArMzcz
LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5h
YmxlZCB7IHRydWUgfTsKICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1f
cGVuZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBt
X3Byb2Nlc3NlczsKIAogICAgIGJvb2wgbV9pc0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNl
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3Vw
L1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCmluZGV4IDEyZjljZDgxOWI2ZGNj
YThhYzUwOTJhMzBkZDkzYzUzYjhlZTkzNDIuLjViYTM5MDBkMmRhZmYwNTZhYmQwY2RmMDU3YWUz
Mjg1NGViZmVjZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCkBAIC0zOSw4
ICszOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1l
dGVycyhXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYKICAgICBhdXRvJiBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxl
ZCA9IG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZDsKIAotICAgIGlmIChhdXRv
KiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkK
LSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5Pigp
LT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisgICAgV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1f
c2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3Jh
Z2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VU
eXBlKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlh
bFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCmluZGV4IDBhODRhNzU5MGQ5YTk4
NWJmYzk5Njg0YTQ4OTUxMzc0ZTViMjk0MjkuLjI3ZjIzZWEwNjVkYzc1Y2U0YTgyNzBjNTc2ZWEy
YWE1NWFiMGRjOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2Vi
UHJvY2Vzc1Byb3h5R0xpYi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9X
ZWJQcm9jZXNzUHJveHlHTGliLmNwcApAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdlYlByb2Nlc3NQ
cm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0
aW9ucyYgbAogICAgICAgICBpZiAoIWRhdGFTdG9yZSkgewogICAgICAgICAgICAgLy8gUHJld2Fy
bWVkIHByb2Nlc3NlcyBkb24ndCBoYXZlIGEgV2Vic2l0ZURhdGFTdG9yZSB5ZXQsIHNvIHVzZSB0
aGUgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlIGZyb20gdGhlIFdlYlByb2Nlc3NQb29sLgogICAg
ICAgICAgICAgLy8gVGhlIHByb2Nlc3Mgd29uJ3QgYmUgdXNlZCBpZiBjdXJyZW50IFdlYnNpdGVE
YXRhU3RvcmUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgb25l
LgotICAgICAgICAgICAgZGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC0+d2Vic2l0ZURhdGFTdG9y
ZSgpOworICAgICAgICAgICAgZGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLnB0cigpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGRhdGFTdG9yZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVN
YW5hZ2VyUHJveHlTb3VwLmNwcAppbmRleCA5ZjdiZTNjOTQxYjZjZDBhMWI5NGNiMTM2MDk4ZjNh
MDQxY2VmZjk5Li4wODkyOGZjZDMxNmQ4OGY5ZDUxNTAwZWM2ODRhZDFiNjRhZjhhM2Y5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94
eVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFu
YWdlclByb3h5U291cC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQ
cm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNp
bmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogCkBAIC0zNCw3ICszNSw3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0
aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKICAgICBt
X2Nvb2tpZVBlcnNpc3RlbnRTdG9yYWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWly
KHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJz
aXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tp
ZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBh
dGgsIHN0b3JhZ2VUeXBlKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmlu
ZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUmIHN0b3JhZ2VU
eXBlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQ
cm9jZXNzUG9vbFNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9j
ZXNzUG9vbFNvdXAuY3BwCmluZGV4IGJmYmJmOTY2NGU0ODM1MzA5NzA5NzExZGZkNmMxMzQxNTcz
MmJkYWMuLjA3OTNlZDUxMzkxNTI4ZDliNGI5ZmRiMGY0YWQzYzg5NjBmZGE1MjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAK
QEAgLTM3LDMwICszNywyNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAgTmV0d29ya1Nlc3Npb25DcmVhdGlv
blBhcmFtZXRlcnMmIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgIHN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFn
ZShkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklELCBkZWZhdWx0U2Vzc2lvblBhcmFt
ZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRl
cnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0
b3JlKQotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRp
YWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyc2lzdGVudENyZWRlbnRp
YWxTdG9yYWdlRW5hYmxlZCgpOworICAgIC8vIEZJWE1FOiBtX2luaXRpYWxIVFRQQ29va2llQWNj
ZXB0UG9saWN5IHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAv
LyBGSVhNRTogbV9pZ25vcmVUTFNFcnJvcnMgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRl
RGF0YVN0b3JlIG9yIHJlbW92ZWQuCisgICAgLy8gRklYTUU6IG1fbmV0d29ya1Byb3h5U2V0dGlu
Z3Mgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgogCi0gICAgcGFyYW1l
dGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5
OwotICAgIHBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3JzID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAg
ICAgcGFyYW1ldGVycy5sYW5ndWFnZXMgPSB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAg
cGFyYW1ldGVycy5wcm94eVNldHRpbmdzID0gbV9uZXR3b3JrUHJveHlTZXR0aW5nczsKICAgICBw
YXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gdHJ1ZTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogewog
ICAgIG1faWdub3JlVExTRXJyb3JzID0gaWdub3JlVExTRXJyb3JzOwotICAgIGlmIChuZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vycm9ycyksIDApOwogfQog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhjb25zdCBXZWJD
b3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmIHNldHRpbmdzKQogewogICAgIG1fbmV0d29y
a1Byb3h5U2V0dGluZ3MgPSBzZXR0aW5nczsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAg
ICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dE5ldHdvcmtQcm94eVNldHRpbmdzKG1fbmV0d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9uZXR3b3JrUHJveHlTZXR0aW5ncyksIDAp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggOWRlMWE1ZjEzMzUyYWQ0MDIyNjIyNjBmYTViMjc3YTQ1OTg5MDUyMi4uZjI5MDZiYTRh
MGZiMDRjMDY4MjhlMGQzZmY0OTlkYzQxNTgzNDVkOSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIwLTA4LTExICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNl
IGEgTmV0d29ya1Byb2Nlc3NQcm94eSBzaW5nbGV0b24gaW5zdGVhZCBvZiBvbmUgcGVyIFdlYlBy
b2Nlc3NQb29sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDM1NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW06
CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbToKKyAgICAg
ICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVExT
RGVwcmVjYXRpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tOgor
ICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNj
cmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5k
bGVyOl0pOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdhaXRGb3JN
ZXNzYWdlXSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgYWxlcnRD
b29raWVIVE1MXSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0
U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
cGxhdGZvcm1BZGp1c3RDb250ZXh0KToKKwogMjAyMC0wOC0xMSAgS2VpdGggUm9sbGluICA8a3Jv
bGxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIGZpbHRlci1idWlsZC13ZWJraXQgZm9y
IHVua25vd24vdW5oYW5kbGVkIG1lc3NhZ2VzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQppbmRleCAxMWY4
N2Y4MDM0ZDJiMWI1NWQ3MjBkZWI3NjVhMzE2ODIxMjBkNzczLi5hOThiZjM4MjViYjFlZDZkNzU5
YzA4ZDQ1MzNhZGNiN2ZmMzk1ZmQ1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0KQEAgLTQ5LDcgKzQ5
LDcgQEAgc3RhdGljIFJldGFpblB0cjxXS1NjcmlwdE1lc3NhZ2U+IGxhc3RTY3JpcHRNZXNzYWdl
OwogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoKQorc3RhdGljIHZvaWQgcnVuVGVzdChi
b29sIG9sZEZpbGVTaG91bGRFeGlzdCA9IHRydWUpCiB7CiAgICAgYXV0byBoYW5kbGVyID0gYWRv
cHROUyhbW0luZGV4ZWREQkZpbGVOYW1lTWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKICAg
ICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBh
bGxvY10gaW5pdF0pOwpAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KCkKICAg
ICBOU1VSTCAqb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uRGlyZWN0
b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogQCJmaWxlX18wIl07CiAgICAgTlNV
UkwgKm5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbbmV3VmVyc2lvbkRpcmVjdG9yeVVS
TCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwogICAgIE5TVVJMICpv
bGRWZXJzaW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbk9yaWdpbkRp
cmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6dW51c2VkRGF0YWJhc2VOYW1l
XTsKLSAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVF
eGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMLnBhdGhdKTsK
KyAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlz
dHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMLnBhdGhdID09IG9s
ZEZpbGVTaG91bGRFeGlzdCk7CiAgICAgCiAgICAgLy8gRm9yIGRhdGFiYXNlIHRoYXQgaXMgb3Bl
bmVkIGFmdGVyIHVwZ3JhZGUsIGl0cyBmaWxlIHNob3VsZCBvbmx5IGJlIGluIHYxLgogICAgIE5T
VVJMICpvbGRWZXJzaW9uRXhpc3RpbmdEYXRhYmFzZURpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9u
T3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogZXhpc3RpbmdE
YXRhYmFzZU5hbWVdOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZURpcmVj
dG9yaWVzKFN0cmluZyB0ZXN0TmFtZSkKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJGaWxlTmFt
ZSkKIHsKICAgICBjcmVhdGVEaXJlY3Rvcmllcygibm9uZSIpOwotICAgIHJ1blRlc3QoKTsKKyAg
ICBydW5UZXN0KGZhbHNlKTsKIH0KIAogVEVTVChJbmRleGVkREIsIEluZGV4ZWREQkZpbGVOYW1l
VjApCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KaW5kZXggMTdiYzdmNWQ3NDQ4NGFiNTRk
Njc3YTQ3Mjg5MTQyOGVmMmZmYTJjMC4uNjU2MmUyZWU0NGI0MTM5YzA2YWEzM2IzMTAxYTUzMGRl
NWQ2MjJjNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQpAQCAtMTU1OCwxMCArMTU1
OCw4IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTWlncmF0ZURhdGFGcm9tTWlzc2lu
Z1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RTYW1lU2l0CiAKIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlz
dGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKIHsKKyAgICBOU1VS
TCAqaXRwUm9vdFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0
b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ2FuQWNjZXNzRGF0YVN1bW1h
cnlXaXRoTm9Qcm9jZXNzUG9vbFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNdOwogICAgIGF1dG8gZGVm
YXVsdEZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgIF9X
S1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0g
W1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKLSAg
ICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0
aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwotICAg
IE5TVVJMICppdHBSb290VVJMID0gW1tkYXRhU3RvcmUgX2NvbmZpZ3VyYXRpb25dIF9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5XTsKICAgICBOU1VSTCAqZmlsZVVSTCA9IFtpdHBSb290
VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIm9ic2VydmF0aW9ucy5kYiJdOwogICAg
IFtkZWZhdWx0RmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDppdHBSb290VVJMLnBhdGggZXJy
b3I6bmlsXTsKICAgICBFWFBFQ1RfRkFMU0UoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3Rz
QXRQYXRoOml0cFJvb3RVUkwucGF0aF0pOwpAQCAtMTU3Miw2ICsxNTcwLDEwIEBAIFRFU1QoUmVz
b3VyY2VMb2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9v
bCkKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6
bmV3RmlsZVVSTC5wYXRoXSk7CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5SXRlbUF0UGF0
aDpuZXdGaWxlVVJMLnBhdGggdG9QYXRoOmZpbGVVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVY
UEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpmaWxlVVJMLnBh
dGhdKTsKKworICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVD
b25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1
dG9yZWxlYXNlXTsKKyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLl9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5ID0gaXRwUm9vdFVSTDsKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tX
S1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3Jl
Q29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkOllFU107CiAKICAgICBzdGF0aWMgYm9vbCBkb25lRmxhZyA9
IGZhbHNlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9UTFNEZXByZWNhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvVExTRGVwcmVjYXRpb24ubW0KaW5kZXggNjc3ZjAwYTMwNTcwM2UyNDk2YWJkZTY0YzNhZmMy
Y2QyNzdhZDE2Ny4uNGEwNmJkZmE3N2FiOTk3NTM3ZGUyZWM1Y2JlMTk1MThkMDk2MzM5OSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UTFNEZXByZWNh
dGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RMU0Rl
cHJlY2F0aW9uLm1tCkBAIC0xNzYsNyArMTc2LDggQEAgVEVTVChUTFNWZXJzaW9uLCBOZXR3b3Jr
U2Vzc2lvbikKICAgICB9OwogICAgIHsKICAgICAgICAgVENQU2VydmVyIHNlcnZlcihUQ1BTZXJ2
ZXI6OlByb3RvY29sOjpIVFRQUywgVENQU2VydmVyOjpyZXNwb25kV2l0aE9LLCB0bHMxXzEpOwot
ICAgICAgICBhdXRvIHdlYlZpZXcgPSBtYWtlV2ViVmlld1dpdGgoW1dLV2Vic2l0ZURhdGFTdG9y
ZSBkZWZhdWx0RGF0YVN0b3JlXSk7CisgICAgICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1
cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1tbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRp
b24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgYXV0byB3ZWJWaWV3ID0gbWFr
ZVdlYlZpZXdXaXRoKFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV0pOwogICAgICAgICBbd2ViVmlldyBs
b2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiaHR0cHM6Ly8xMjcuMC4wLjE6JWQvIiwg
c2VydmVyLnBvcnQoKV1dXV07CiAgICAgICAgIFtkZWxlZ2F0ZSB3YWl0Rm9yRGlkRmluaXNoTmF2
aWdhdGlvbl07CiAgICAgfQpAQCAtMjAyLDcgKzIwMyw4IEBAIFRFU1QoVExTVmVyc2lvbiwgTmV0
d29ya1Nlc3Npb24pCiAgICAgICAgIFRDUFNlcnZlciBzZXJ2ZXIoVENQU2VydmVyOjpQcm90b2Nv
bDo6SFRUUFMsIFtdKFNTTCAqc3NsKSB7CiAgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc3NsKTsK
ICAgICAgICAgfSwgdGxzMV8xKTsKLSAgICAgICAgYXV0byB3ZWJWaWV3ID0gbWFrZVdlYlZpZXdX
aXRoKFtXS1dlYnNpdGVEYXRhU3RvcmUgZGVmYXVsdERhdGFTdG9yZV0pOworICAgICAgICBfV0tX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbW19XS1dlYnNp
dGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAg
ICAgIGF1dG8gd2ViVmlldyA9IG1ha2VXZWJWaWV3V2l0aChbW1tXS1dlYnNpdGVEYXRhU3RvcmUg
YWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2Vd
KTsKICAgICAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0
aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImh0
dHBzOi8vMTI3LjAuMC4xOiVkLyIsIHNlcnZlci5wb3J0KCldXV1dOwogICAgICAgICBbZGVsZWdh
dGUgd2FpdEZvckRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb25dOwogICAgIH0KZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3Rv
cmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tp
ZVN0b3JlLm1tCmluZGV4IGEzNWYwNTM1MGFhYjRiNDJmMzZjNDZhZWNkZWVlZTZjZTU0NGVmODYu
LjMzNzYwOTJhMTk1YjUxMmRhNjdjNDk2ZTQ1MjE3YjkxNGZlMmE1NzkgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVT
dG9yZS5tbQpAQCAtNDc5LDggKzQ3OSw2IEBAIHN0YXRpYyBib29sIGZpbmlzaGVkOwogfQogQGVu
ZAogCi0vLyBGSVhNRTogb24gaU9TLCBVSSBwcm9jZXNzIHNob3VsZCBiZSB1c2luZyB0aGUgc2Ft
ZSBjb29raWUgZmlsZSBhcyB0aGUgbmV0d29yayBwcm9jZXNzIGZvciBkZWZhdWx0IHNlc3Npb24u
Ci0jaWYgUExBVEZPUk0oTUFDKQogZW51bSBjbGFzcyBTaG91bGRFbmFibGVQcm9jZXNzUHJld2Fy
bWluZyB7IE5vLCBZZXMgfTsKIHZvaWQgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vz
c1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRW5hYmxlUHJvY2Vzc1By
ZXdhcm1pbmcpCiB7CkBAIC01ODksMjAgKzU4Nyw2NiBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3Jl
LCBXaXRob3V0UHJvY2Vzc1Bvb2xXaXRoUHJld2FybWluZykKICAgICBydW5XS0hUVFBDb29raWVT
dG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZzo6WWVz
KTsKIH0KIAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQogQGludGVyZmFjZSBDaGVja1Nlc3Np
b25Db29raWVVSURlbGVnYXRlIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0ZT4KKy0gKE5TU3RyaW5n
ICopYWxlcnRDb29raWVIVE1MOworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZTsKIEBlbmQK
IAotQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUKK0BpbXBsZW1l
bnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHsKKyAgICBSZXRhaW5QdHI8TlNT
dHJpbmc+IF9tZXNzYWdlOworfQorCiAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZp
ZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
IGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgRVhQRUNUX1NUUkVRKCJT
ZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIsIG1lc3NhZ2UuVVRGOFN0cmluZyk7CisgICAg
X21lc3NhZ2UgPSBtZXNzYWdlOwogICAgIGZpbmlzaGVkID0gdHJ1ZTsKICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOwogfQorCistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlCit7CisgICAgd2hp
bGUgKCFfbWVzc2FnZSkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3Ao
KTsKKyAgICByZXR1cm4gX21lc3NhZ2UuYXV0b3JlbGVhc2UoKTsKK30KKworLSAoTlNTdHJpbmcg
KilhbGVydENvb2tpZUhUTUwKK3sKKyAgICByZXR1cm4gQCI8c2NyaXB0PnZhciBjb29raWVzID0g
ZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5s
ZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMu
c29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Cit9CisKIEBlbmQK
IAorVEVTVChXZWJLaXQsIFdLSFRUUENvb2tpZVN0b3JlTXVsdGlwbGVWaWV3cykKK3sKKyAgICBU
ZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MSA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNl
XTsKKyAgICBbd2ViVmlldzEgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAic3RhcnQgbmV0
d29yayBwcm9jZXNzIl07CisKKyAgICBOU0hUVFBDb29raWUgKnNlc3Npb25Db29raWUgPSBbTlNI
VFRQQ29va2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOkB7CisgICAgICAgIE5TSFRUUENvb2tpZVBh
dGg6IEAiLyIsCisgICAgICAgIE5TSFRUUENvb2tpZU5hbWU6IEAiU2Vzc2lvbkNvb2tpZU5hbWUi
LAorICAgICAgICBOU0hUVFBDb29raWVWYWx1ZTogQCJDb29raWVWYWx1ZSIsCisgICAgICAgIE5T
SFRUUENvb2tpZURvbWFpbjogQCIxMjcuMC4wLjEiLAorICAgIH1dOworCisgICAgX19ibG9jayBi
b29sIHNldENvb2tpZURvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldzEuY29uZmlndXJhdGlvbi53
ZWJzaXRlRGF0YVN0b3JlLmh0dHBDb29raWVTdG9yZSBzZXRDb29raWU6c2Vzc2lvbkNvb2tpZSBj
b21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBzZXRDb29raWVEb25lID0gdHJ1ZTsKKyAgICB9
XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnNldENvb2tpZURvbmUpOworCisgICAg
YXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgbmV3
XSk7CisgICAgW3dlYlZpZXcxIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAg
W3dlYlZpZXcxIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VV
Ukw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVD
VF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9
Q29va2llVmFsdWUiKTsKKworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcyID0gW1tUZXN0V0tX
ZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MiBzZXRVSURlbGVnYXRlOmRl
bGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFs
ZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcu
MC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0s
ICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworfQorCiBURVNUKFdLSFRUUENvb2tp
ZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogewogICAgIFJldGFp
blB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IGVwaGVtZXJhbFN0b3JlV2l0aENvb2tpZXMgPSBbV0tX
ZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOwpAQCAtNjI3LDkgKzY3MSw4
IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNl
c3Npb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CiAgICAgZmlu
aXNoZWQgPSBmYWxzZTsKICAgICAKLSAgICBOU1N0cmluZyAqYWxlcnRDb29raWVIVE1MID0gQCI8
c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0
IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNb
aV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwv
c2NyaXB0PiI7Ci0gICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6YWxlcnRDb29raWVIVE1MIGJh
c2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOwotICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOworICAgIFt3ZWJWaWV3IGxvYWRIVE1M
U3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhT
dHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdh
dGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKIH0K
IAogc3RhdGljIGJvb2wgYXJlQ29va2llc0VxdWFsKE5TSFRUUENvb2tpZSAqZmlyc3QsIE5TSFRU
UENvb2tpZSAqc2Vjb25kKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cAppbmRleCBhNDNmYTgxMzRhN2FiNzZjM2EzYjdmODIwOGRjOTI2NjcyNzQ3NDYxLi5hMDYzMDM0
NWY1OGU1MDZmMGE0MTNkYzExZmU4M2ViNTY0ZmIyNGFjIDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMTA2Niw4ICsxMDY2LDYgQEAgYm9vbCBUZXN0Q29u
dHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYg
b3B0aW9ucywgUmUKIAogICAgIHJlc2V0UXVvdGEoKTsKIAotICAgIFdLQ29udGV4dFNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0
KCksIHRydWUpOwotCiAgICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRl
c3RpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CiAKICAgICBXS0Nv
bnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5jb250ZXh0KCksIGZhbHNlKTsKQEAgLTMxNzUsOSArMzE3Myw4IEBAIFBsYXRm
b3JtV2ViVmlldyogVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ3JlYXRlT3RoZXJQYWdlKFBsYXRm
b3JtV2ViVmlldyogcGFyZW50CiAgICAgcmV0dXJuIG5ldyBQbGF0Zm9ybVdlYlZpZXcoY29uZmln
dXJhdGlvbiwgb3B0aW9ucyk7CiB9CiAKLVdLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1
cmF0aW9uUmVmIGNvbnRleHRDb25maWd1cmF0aW9uKQorV0tDb250ZXh0UmVmIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLQ29udGV4
dENvbmZpZ3VyYXRpb25SZWYpCiB7Ci0gICAgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRh
U3RvcmUoY29udGV4dCwgZGVmYXVsdFdlYnNpdGVEYXRhU3RvcmUoKSk7CiAgICAgcmV0dXJuIGNv
bnRleHQ7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406446</attachid>
            <date>2020-08-11 21:54:34 -0700</date>
            <delta_ts>2020-08-11 23:19:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20200811215433.patch</filename>
            <type>text/plain</type>
            <size>232074</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUxZGU2MTI2ZjljNTI2MDQx
ZmVlMzMzMjgzNTJkY2E0ZDU1MjliMzcuLjVkMzJlMzkwYjE4NGI4ZTUxNzg5ZjdjN2E2N2U5Yjlh
ZTM1NzczMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgyIEBACisyMDIwLTA4LTExICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIGEgTmV0
d29ya1Byb2Nlc3NQcm94eSBzaW5nbGV0b24gaW5zdGVhZCBvZiBvbmUgcGVyIFdlYlByb2Nlc3NQ
b29sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM1
NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZh
dWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKToK
KyAgICAgICAgKFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChX
S0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXS0NvbnRleHRT
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbToKKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2V0Q29va2llQWNjZXB0UG9saWN5Ol0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0
ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZTo6fl9XZWJLaXRDb29raWVN
YW5hZ2VyUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKToKKyAg
ICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKToKKyAg
ICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAg
ICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9jb29raWVzKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfY29va2llKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4
dC5jcHA6CisgICAgICAgICh3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
UHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lk
ZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9O
ZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojpz
dGFydExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RvcExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Omdsb2JhbE5ldHdv
cmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YXR0ZW1wdFJlbGF1bmNoQWZ0
ZXJDcmFzaElmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OmFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KToKKyAgICAgICAg
KFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vz
c1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25z
dCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJD
b250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzYWJs
ZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25P
dmVycmlkZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9y
VGVzdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9v
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xv
YmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29ya1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJMZWdhY3lQ
cml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5z
ZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVG
b3JTZXNzaW9uSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERh
dGFBbmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURh
dGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNz
RW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50
cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5k
ZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVC
bG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3Rp
Y0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50
cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNI
YWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpp
c1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRz
V2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3Rpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9k
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1Nh
bWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2
YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9j
ZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlc2V0UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNB
cHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQ
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRp
ZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1
bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJv
Y2Vzc1Bvb2wgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwZW5kaW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdv
cmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dl
YnNpdGVEYXRhU3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2ds
aWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
cm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291
cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIw
MjAtMDgtMTEgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW01h
Y10gQWRkIEV4cGVyaW1lbnRhbCBGZWF0dXJlIHByZWZlcmVuY2UgZm9yIFNXIFZQOQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1h
bmFnZXIuY3BwCmluZGV4IGZjZTIzODk4N2E3ODUwZjE4YzlmMzA2YzUwZTk4Y2U5ODhkMTI1ZmQu
LmViNThmYzk0NWQxOTI1NTQ2MWI4NjBmNGE4YjhkYzYxMjVmNTNmODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdl
ci5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksCiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24o
KS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9wcm9jZXNz
LnN0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpLT5jb29r
aWVBY2NlcHRQb2xpY3koKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCAwMjhlMGZi
YjllMTk0OGIwZTA4OWY0YWRkM2IwYTcwNTBjNmVkMWNlLi43ZWJhNGExYjU4MmY5M2QyYmExODBk
MjFiNTUzOTllNmZmNjBkZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ1LDI5ICszNDUsMTkgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJz
LmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0g
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lv
bjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBw
YXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQg
PSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7
CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShkYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAg
IGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1l
dGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQ
YXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VE
aXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVk
RGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
KyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFTdG9yZVBh
cmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQorICAgICAg
ICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJz
LmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4
dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUoZGF0YVN0b3Jl
UGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBib29sIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSB0cnVlOwotICAgIGFkZFNl
cnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIHNl
cnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUocGFyYW1l
dGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVycy5zZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAg
YWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUoZGF0YVN0
b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25J
RCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNzaW9uID0g
bmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAg
YXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdvcmtTdG9y
YWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAgICB9CiAKICAgICBmb3IgKGF1
dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVt
ZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNDI3LDEyICs0MTcsNiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyhQcm9jZXNz
SWRlbnRpZmllciBpZGVudAogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlZENyZWRl
bnRpYWxzKCkKIHsKLSAgICBkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFn
ZSgpLmNsZWFyQ3JlZGVudGlhbHMoKTsKLSAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0
aGlzLT5uZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSkK
LSAgICAgICAgbmV0d29ya1Nlc3Npb24tPmNsZWFyQ3JlZGVudGlhbHMoKTsKLSAgICBlbHNlCi0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCiAgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9u
KFtdIChhdXRvJiBuZXR3b3JrU2Vzc2lvbikgewogICAgICAgICBpZiAoYXV0byBzdG9yYWdlU2Vz
c2lvbiA9IG5ldHdvcmtTZXNzaW9uLm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpKQogICAgICAgICAg
ICAgc3RvcmFnZVNlc3Npb24tPmNyZWRlbnRpYWxTdG9yYWdlKCkuY2xlYXJDcmVkZW50aWFscygp
OwpAQCAtNTEyLDggKzQ5Niw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24o
Y29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQs
IGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50
aWZpZXJCYXNlKQogI2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3
b3JrU3RvcmFnZVNlc3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRk
UmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyOCw3ICs1MTAsNyBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBz
ZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVu
dGlmaWVyID0gbWFrZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwg
Y3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChz
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENG
KGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBl
bHNlCisgICAgZWxzZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpjcmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZp
ZXIuZ2V0KCkpOwogCiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVz
ZUNvb2tpZUFQSSgpKSB7CkBAIC01NTEsMjEgKzUzMywxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
Ojpjb29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9s
aWN5KQogCiBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpz
dG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewot
ICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkK
LSAgICAgICAgcmV0dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9u
ZXR3b3JrU3RvcmFnZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSBjb25zdAotewotICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAg
ICAgICBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
Jik+JiBmdW5jdG9yKQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwog
ICAgIGZvciAoYXV0byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMu
dmFsdWVzKCkpCiAgICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBmMjNmZDU4MGVm
NTRjYWRmODBmNDY4MzY2NTZmYjIzZmQ0ZGRmMmZjLi4xMDExOWRmMzFmNGRlMTY5NDc4NjBiMmNh
ZThjMWI1Yzc3M2Q4ZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5oCkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JF
YWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uKiBzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29u
c3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4g
bmV3VGVzdGluZ1Nlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICB2b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29s
IHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
LCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNzEsNyArMzcwLDYg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNy
ZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZl
TmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwog
CkBAIC01NDgsNyArNTQ2LDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9u
SUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwog
ICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJs
ZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+
IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAK
aW5kZXggYWE4Y2U3NTNjNjMyMDdkMmE2MGQ1ZDNlMDE3YjJlMGViZjQ1NjI2ZC4uYTI0YzIwYjNm
ODc3ZmEzYmFhYzYyODUyMzNjODdkMTEwZTYxZmYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBJUEM6
OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CiAgICAgZW5jb2RlciA8
PCBzdG9yYWdlQWNjZXNzQVBJRW5hYmxlZDsKICNlbmRpZgotICAgIGVuY29kZXIgPDwgZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZW5jb2RlciA8PCBkYXRhU3RvcmVQYXJhbWV0ZXJz
OwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9saWN5OwogICAg
IGVuY29kZXIgPDwgaWdub3JlVExTRXJyb3JzOwpAQCAtNjksOSArNjksNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAg
IGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIGVuY29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlIDw8IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVs
YXk7Ci0jZW5kaWYKICAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZUlUUERhdGFiYXNlOwogICAg
IGVuY29kZXIgPDwgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlOwogICAgIGVuY29k
ZXIgPDwgaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7CkBAIC0xMjEsMTEgKzExOCwxMSBAQCBib29sIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNv
ZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIE9w
dGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGlm
ICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9yPFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBkZWNvZGVy
ID4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0ZXJzKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzID0gV1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJlc3VsdC5k
YXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7CiAKICNp
ZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVBY2NlcHRQ
b2xpY3kpKQpAQCAtMTQ3LDIwICsxNDQsNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2Vz
cykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlvbmFsPFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERpc2FibGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0jZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJs
ZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmgKaW5kZXggY2YxNWNhNDFiZmJlYWNkM2RlMWM2M2UzN2QzNzJkZmUyNDljODQ5
Ni4uNzNjZGYyZmM0NDRiNDVmNjRkM2MzMmM4ZWY2MzZmZmIxNWM1NTkzNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNzIsNyArNzIsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIGJvb2wgc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7
CiAjZW5kaWYKIAotICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIGRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGF0
YVN0b3JlUGFyYW1ldGVyczsKICAgICAKICNpZiBVU0UoU09VUCkKICAgICBXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSB7IFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3k6OkFsd2F5c0FjY2VwdCB9OwpAQCAtODYsMTIgKzg2LDcgQEAgc3RydWN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBWZWN0b3I8U3RyaW5nPiB1
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAg
IFN0cmluZyBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OwotICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotICAgIGJvb2wgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVy
bWluYXRpb25EZWxheSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBib29sIHNob3VsZEVuYWJsZUlU
UERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFiYXNlIHsg
dHJ1ZSB9OwogICAgIGJvb2wgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlIHsgZmFs
c2UgfTsKICAgICBTdHJpbmcgaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlIGhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0Nv
Y29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vz
c0NvY29hLm1tCmluZGV4IGFmYmQ5MzBmNGIzNWUyNDlhODhhMTA4ZjU1MTFjMDRkN2VlZDM1NTEu
LjhlNzhlNmFmZWFiN2U3MzFkNWUyMjJlYjYwZTI5YjUyZjkxZjBjMmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29j
b2EubW0KQEAgLTg1LDkgKzg1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1l
UGVybWFuZW50bHkocGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0
ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5
KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVt
cEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9D
Rk5ldHdvcmtTZXRBVFNDb250ZXh0KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkp
OwpAQCAtMTE0LDExICsxMTEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFtOU1VS
TENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBs
YXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3Jr
UHJvY2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShT
T1VSQ0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKaW5kZXggZDk5Zjlk
ZDY0YmFkNmU0MmRjYzhlM2Y5YjhmMTY5Mjk5N2Y2NzE5Mi4uNDk1MzgxMWIyMTY0ZTg5ODQ2Zjky
NzllNjIyOWQ1OTNlMjI1NmEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKQEAgLTM5LDExICszOSw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNv
bnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURl
ZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2Vy
dGlmaWNhdGVGb3JIb3N0KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBj
b25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0
Lm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW0KaW5kZXggYzI3MzZlMDI2YTU1ZDNkNDAyMGY4NGY0ZDY5M2QxNmI0NjUyZWQyMy4u
MWUxODQ4OWY5NDYyMGYwMmE3ZDllOWU4NjllYzg2NDkxYjdiYmQ0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0K
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW0KQEAgLTU1LDE1ICs1NSwxMSBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0
OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0dwogICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29r
aWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAgICBpZiAoIXNlc3Npb25J
RC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVu
dGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFw
YXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSAmJiBw
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgIT0gUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAgdWlQcm9jZXNzQ29va2llU3RvcmFn
ZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFtZXRlcnMudWlQcm9jZXNz
Q29va2llU3RvcmFnZUlkZW50aWZpZXIpOwogCiAgICAgbmV0d29ya1Byb2Nlc3MuZW5zdXJlU2Vz
c2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3Vs
ZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNlLCAnLicsIHNlc3Npb25J
RC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3NDb29raWVTdG9yYWdlKSk7CiAKLSAgICBh
dXRvKiBzZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsK
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMp
Ci0gICAgICAgIHNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAgICAgbmV0d29ya1Byb2Nl
c3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1By
b2Nlc3MsIFdURk1vdmUocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
UHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtQcm9jZXNzU291cC5jcHAKaW5kZXggNjBmYTU1NmI5ZTRmNDg3OTRkNWFhMmYwNTY5ZmJiZGVl
NjUzMjk5MC4uMDFjYmI3YmE5YmQ4YWMwZmYwYzVkZjRiMzQyMmYzZDc4NDM1NmQyZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291
cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9j
ZXNzU291cC5jcHAKQEAgLTE0NCwxMSArMTQ0LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkK
ICAgICB9KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMp
CiB7CiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRTaG91bGRJZ25vcmVUTFNFcnJvcnMoaWdu
b3JlVExTRXJyb3JzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmNwcAppbmRleCA2ZDBjMTI5YTc0MDUxMGQzODY5NzM3MDVhZDA5MmVm
MTMyY2MwNzVhLi4wNDgxMGIzZTE5YmU5NmNhZDFhZDgyYTQ0ZGNlZGIyNmVmNzgyNjFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
Y3BwCkBAIC00MCwxMyArNDAsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpl
bmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzOwogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzQ29va2llU3RvcmFn
ZUlkZW50aWZpZXI7CiAgICAgZW5jb2RlciA8PCBjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhh
bmRsZTsKLSAgICBlbmNvZGVyIDw8IHBlbmRpbmdDb29raWVzOwogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAgICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPDwg
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCkBAIC04MywxMiArNzksNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlYwogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZVBhdGhF
eHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRs
ZSk7CiAKLSAgICBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6Q29va2llPj4gcGVuZGluZ0Nvb2tp
ZXM7Ci0gICAgZGVjb2RlciA+PiBwZW5kaW5nQ29va2llczsKLSAgICBpZiAoIXBlbmRpbmdDb29r
aWVzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMucGVuZGlu
Z0Nvb2tpZXMgPSBXVEZNb3ZlKCpwZW5kaW5nQ29va2llcyk7Ci0KICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKICAgICBPcHRpb25hbDxTdHJpbmc+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eTsKICAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKQEAgLTEwMSwxNCAr
OTEsNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlYwogICAgIGlmICghaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0g
V1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlPiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAg
ICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlOwotICAgIGlmICghaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmlu
ZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgog
I2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAppbmRleCBmMjdkZjQ4OTgwOWYz
MTk2MDhiNjgwY2IyYThhMWMxNGI3MDE4NDM5Li5lMWIyMzM3MDE5OWZlMzcwMzFlOWRjNWMwNTc4
MTU1MDIxZTM0ZDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmgKQEAgLTUxLDE1ICs1MSwxMSBAQCBzdHJ1Y3QgV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMgewogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHVpUHJvY2Vzc0Nvb2tpZVN0
b3JhZ2VJZGVudGlmaWVyOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjb29raWVTdG9y
YWdlUGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5k
aW5nQ29va2llczsKICAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBT
dHJpbmcgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFi
YXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcAppbmRleCBhNmUxNTkxZTU1MDQ5ZDI5ZTc3NjE0
MTlhYTMxOGRmMDBhNDc3OThjLi5lNWYxOGVlMWJiOGM2MmEyZTNlNDkyNjc2NTNjMTA5MjA1NDhm
MTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcApAQCAtNDYsOCArNDYsNiBAQCBuYW1lc3BhY2UgQVBJIHsKIEhUVFBDb29raWVT
dG9yZTo6SFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURh
dGFTdG9yZSkKICAgICA6IG1fb3duaW5nRGF0YVN0b3JlKHdlYnNpdGVEYXRhU3RvcmUpCiB7Ci0g
ICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpKQotICAgICAgICByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpOwogfQogCiBIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUoKQpAQCAtNTUsOCAr
NTMsNiBAQCBIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUoKQogICAgIEFTU0VSVCht
X29ic2VydmVycy5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCghbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSk7CiAgICAgQVNTRVJUKCFtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLQot
ICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogdm9p
ZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJvdW5kQ29va2llcyhjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTgxLDMzICs3NywxNiBA
QCB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiBjb29raQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2ll
cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0
b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFw
b29sKSB7Ci0gICAgICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGFsbENvb2tpZXM7Ci0gICAg
ICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgICAgIGFsbENvb2tpZXMgPSBnZXRBbGxEZWZh
dWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7Ci0gICAgICAgIGFsbENvb2tpZXMuYXBw
ZW5kVmVjdG9yKG1fb3duaW5nRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLQotICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
YWxsQ29va2llc10gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tp
ZXMoYWxsQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICB9KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29s
LT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tp
ZU1hbmFnZXItPmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwb29sID0gV1RGTW92ZShwb29s
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBj
b29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigp
OworICAgIGNvb2tpZU1hbmFnZXIuZ2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5k
Q29va2llcyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9
CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkKLSAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2Vy
ID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOworICAgIGNvb2tp
ZU1hbmFnZXIuZ2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwg
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYg
Y29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhjb29raWVz
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0xMTUsODEgKzk0
LDI5IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6c2V0
Q29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGZpbHRlckFwcEJv
dW5kQ29va2llcyhjb29raWVzLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYm
IGFwcEJvdW5kQ29va2llcykgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgbmVlZHNGbHVzaCA9IGZh
bHNlOwotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29s
Rm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7Ci0gICAg
ICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vzc2lvbiBi
ZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3b3JrIFBy
b2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAgICAgICAg
ICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG5lZWRzRmx1c2ggPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzZXRDb29raWVJ
bkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+YWRkUGVuZGluZ0Nv
b2tpZShjb29raWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobmVlZHNGbHVz
aCkKLSAgICAgICAgICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tpZU1h
bmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewot
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAgIGF1
dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xl
dG9uKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNv
bnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAg
ICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5yZW1vdmVQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBb
cG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZShtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byog
cG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVy
YXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBkZWxldGVDb29raWVz
SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBhdXRvJiBjb29r
aWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwor
ICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBUaGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJl
IHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRh
U3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAo
IXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNF
cGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1
bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xpY3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwg
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFi
bGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2llTWFuYWdlci5zZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgfSk7CiB9CkBAIC0yMjcsMjEgKzE1NCw3IEBA
IHZvaWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKE9ic2VydmVyJiBvYnNlcnZl
cikKIAogICAgIG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIgPSBtYWtlVW5pcXVlPEFQSVdl
YkNvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyPigqdGhpcyk7CiAKLSAgICBhdXRvKiBwb29sID0g
bV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMo
KTsKLQotICAgIGlmICghcG9vbCkgewotICAgICAgICBBU1NFUlQoIW1fb2JzZXJ2aW5nVUlQcm9j
ZXNzQ29va2llcyk7Ci0KLSAgICAgICAgLy8gTGlzdGVuIGZvciBjb29raWUgbm90aWZpY2F0aW9u
cyBpbiB0aGUgVUlQcm9jZXNzIGluIHRoZSBtZWFudGltZS4KLSAgICAgICAgc3RhcnRPYnNlcnZp
bmdDaGFuZ2VzVG9EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoW3RoaXNdICgpIHsKLSAgICAg
ICAgICAgIGNvb2tpZXNEaWRDaGFuZ2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgbV9vYnNl
cnZpbmdVSVByb2Nlc3NDb29raWVzID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHkgPSAmV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwogICAg
IG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9
CiAKQEAgLTI3Niw0NiArMTg5LDEwIEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRGlk
Q2hhbmdlKCkKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKCkK
IHsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT51bnJlZ2lzdGVyT2JzZXJ2ZXIo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcik7Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG51bGxwdHI7Ci0KLSAg
ICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3Rv
cmFnZU9wZXJhdGlvbnMoKTsKLQotICAgIGlmICghcG9vbCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQ
cm94eSA9ICZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CiAgICAg
bV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0K
IAotdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmlj
YXRpb25zKCkKLXsKLSAgICBBU1NFUlQoIW1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRl
bnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIg
PSBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIoW3Ro
aXNdKFdlYlByb2Nlc3NQb29sJiBuZXdQcm9jZXNzUG9vbCkgewotICAgICAgICBpZiAoIW1fb3du
aW5nRGF0YVN0b3JlLT5pc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChuZXdQcm9jZXNzUG9vbCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gTm93IHRoYXQgYW4gYXNzb2NpYXRlZCBw
cm9jZXNzIHBvb2wgZXhpc3RzLCB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBVSSBwcm9jZXNzIGNvb2tp
ZSBzdG9yZQotICAgICAgICAvLyB0byBtYWtlIHN1cmUgYW55IGNoYW5nZXMgYXJlIHJlZmxlY3Rl
ZCB3aXRoaW4gdGhlIG5ldyBwcm9jZXNzIHBvb2wuCi0gICAgICAgIGZsdXNoRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKFtdIHsgfSk7Ci0gICAgICAgIG5ld1Byb2Nlc3NQb29sLmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0KLSAgICAgICAgaWYgKG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2
ZXIpIHsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBuZXdQcm9j
ZXNzUG9vbC5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAg
ICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlciht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyKTsKLSAgICAgICAgfQotICAgICAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lz
dGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBpZiAobV9wcm9jZXNz
UG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKQotICAgICAgICBXZWJQcm9jZXNzUG9vbDo6
dW5yZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihtX3Byb2Nlc3NQb29sQ3JlYXRp
b25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVu
ZXJJZGVudGlmaWVyID0gMDsKLX0KLQogI2lmICFQTEFURk9STShDT0NPQSkKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIoKTsg
fQogVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gSFRUUENvb2tpZVN0b3JlOjpnZXRBbGxEZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCkgeyByZXR1cm4geyB9OyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKaW5kZXggMjBkZWM2
NTY1ODhhMzU4YmNkMWFmNDBjZmU3ZmZhNDMyN2YyNGVjNC4uYjBiMmI4MTEzNTJlODg0YWQ2ZTI0
YjllZDEyYzdhNzFmNjE3NDUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElIVFRQQ29va2llU3RvcmUuaApAQCAtODIsOSArODIsNiBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmKTsKIAotICAg
IHZvaWQgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB2b2lk
IHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLQogICAgIHZvaWQg
Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKICAgICBzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gZ2V0QWxsRGVmYXVsdFVJ
UHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwogICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUlu
RGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKaW5kZXggOGZiOGUwOTZk
NDY2ZTIzNjFjZGI1MjAzZWZjOWM1NjhjOWU2OTUxMS4uYjZkODg2MWNmMzQwMmM4MjQxODlkMTll
M2QyNzA0NTJjNjk5YTRmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuY3BwCkBAIC00MjYsOSArNDI2LDkgQEAgdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9T
ZXJ2ZXIoV0tDb250ZXh0UmVmLCBXS1VSTFJlZikKIHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVm
IFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCitXS0Nv
b2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYpCiB7
Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1
cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkp
OwogfQogCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9y
ZShXS0NvbnRleHRSZWYpCkBAIC01NDMsOSArNTQzLDggQEAgdm9pZCBXS0NvbnRleHRTZXRKYXZh
U2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChXS0NvbnRleHRSZWYgY29udGV4dFJl
ZiwKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VD
b2xsZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpCit2b2lkIFdLQ29udGV4dFVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dCktPnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwogfQogCiB2b2lkIFdLQ29u
dGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhXS0NvbnRl
eHRSZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCkBAIC01NTMsMTMgKzU1Miw2IEBAIHZvaWQgV0tD
b250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nKFdLQ29u
dGV4dFJlZiBjb250ZXh0CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyk7CiB9CiAKLXZvaWQgV0tDb250ZXh0
U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRl
eHRSZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXIoYWxsb3dzKTsKLSNlbmRpZgotfQotCiB2b2lkIFdLQ29udGV4dENs
ZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgV2ViS2l0
Ojp0b0ltcGwoY29udGV4dCktPmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKQEAgLTY3MSw3ICs2
NjMsNiBAQCB2b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mo
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdQogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRl
eHRSZWYpLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRl
RGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYg
d2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3Rv
cmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0
b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktpdDo6dG9JbXBsKHdl
YnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dFByaXZhdGUuaAppbmRleCAzOWMwY2E3Y2M2YTZiNmI1NWM4MDNiODNjZGU1YjM4
YmZjMTljOThlLi44ODQ3NGQzMGEwZDBiYjg0YTE5YjYxMGMyYzE1YjlhYzEyYmQwOWNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBA
IC04NywxMCArODcsOSBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3Jr
UHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRl
U2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmKTsKIAogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0
U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nKFdLQ29udGV4dFJl
ZiwgYm9vbCk7Ci1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiwgYm9vbCk7CiAKIC8vIFRl
c3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYW55IHNlY29uZGFyeSBwcm9jZXNzZXMg
YXJlIHN0YXJ0ZWQuCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nl
c3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpOworV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VXNl
VGVzdGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBS
RUNBVEVEOwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHJ1bm5pbmcg
YSB0ZXN0LgogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhX
S0NvbnRleHRSZWYgY29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCmluZGV4IDY4MjBmNDkxZTk0NzU5NWUwMGQwY2JkMmQ1
ODg5NTIwNzAzYTU4MDguLjNkOTVmOWRiODFiM2I4MmYzZWYwZmY0YjllNjU0MWY3NzNhZWU2ZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQ
b29sLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQ
b29sLm1tCkBAIC0yMDEsNyArMjAxLDcgQEAgc3RhdGljIFdLUHJvY2Vzc1Bvb2wgKnNoYXJlZFBy
b2Nlc3NQb29sOwogCiAtICh2b2lkKV9zZXRDb29raWVBY2NlcHRQb2xpY3k6KE5TSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSlwb2xpY3kKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgV2ViQ29yZTo6dG9IVFRQQ29va2ll
QWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBXZWJDb3JlOjp0b0hUVFBDb29raWVBY2NlcHRQ
b2xpY3kocG9saWN5KSwgW10oKSB7IH0pOwogfQogCiAtIChpZClfb2JqZWN0Rm9yQnVuZGxlUGFy
YW1ldGVyOihOU1N0cmluZyAqKXBhcmFtZXRlcgpAQCAtNTc4LDEzICs1NzgsNiBAQCBzdGF0aWMg
TlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxT
dHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZChiYWNrZ3JvdW5kKTsKIH0KIAotLSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFsbG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRp
b25Qcm92aWRlcgogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCBkMzlkYjFkZGIwOWMwOGNjNzgwMTdk
NGUxZjQ1ZmM4ZDI1NmY1Y2RmLi44ODU0ZWY2YzMwNmZjMTBjNzk3YjgzMzk5MDJkNTU0YjQwNDJm
M2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9j
ZXNzUG9vbFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcm9jZXNzUG9vbFByaXZhdGUuaApAQCAtMTIyLDcgKzEyMiw2IEBACiAtICh2b2lkKV9wcmVj
b25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNBVEVEX1dJVEhf
UkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFjb3MoMTAuMTMu
NCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4K
LS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9P
TClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKTsKIC0g
KHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rpbmc6KHBpZF90
KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5nICo+ICopKWNv
bXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4y
KSk7CiAtIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNT
dHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3Mo
MTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25T
cGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTcz
ZWJjMGVhMDM2Zjg2YjNmZTk0NDE0OTA3MmU2YWM0ZGM3NjcuLmZiOThkMDU5MGM5YWQyODIzNWQ3
MTFiN2NhYWM5YmM1NWM5YTY0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC02NCw4ICs2NCw3IEBA
IHN0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29r
aWVNYW5hZ2VyUHJpdmF0ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkK
LSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7Cisg
ICAgICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2llT2JzZXJ2
ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEzOSwxMSArMTM4LDkgQEAgV2ViS2l0
Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlckNyZWF0ZShXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIqIGRhdGFNYW4KIHsKICAgICBXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyID0g
V0VCS0lUX0NPT0tJRV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT09LSUVfTUFO
QUdFUiwgbnVsbHB0cikpOwogICAgIG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyID0gZGF0YU1h
bmFnZXI7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpIHsKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRD
b29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdl
cl0gewotICAgICAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURd
LCAwKTsKLSAgICAgICAgfSk7Ci0gICAgfQorICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2lu
Z2xldG9uKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgW21hbmFnZXJdIHsKKyAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxz
W0NIQU5HRURdLCAwKTsKKyAgICB9KTsKICAgICByZXR1cm4gbWFuYWdlcjsKIH0KIApAQCAtMTcz
LDggKzE3MCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0
b3JhZ2UoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwKICAgICBpZiAoc2Vzc2lvbklELmlz
RXBoZW1lcmFsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bv
b2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwg
U3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
VHlwZShzdG9yYWdlKSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5z
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmls
ZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOwogfQog
CiAvKioKQEAgLTE5Miw4ICsxODgsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRf
YWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJLaQogewogICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKIAot
ICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQ
cm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2Vw
dFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
aW5nbGV0b24oKS5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Np
b25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOwogfQog
CiAvKioKQEAgLTIyNCw3ICsyMTksNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRf
YWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBHQ2FuYwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5w
cml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2lu
Z2xldG9uKCkuZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9s
aWN5IHBvbGljeSkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCB0b1dl
YktpdENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKICAgICB9KTsKIH0KQEAgLTI2OSwxMSAr
MjY0LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShXZWJLaXRDb29r
aWVNYW5hZ2VyKiBtYW5hZ2VyLCBTb3VwQ29va2llKgogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29v
a2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29r
aWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24g
ZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJv
bSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBw
cm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFu
YWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vz
c2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRh
c2spXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tp
ZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkg
fSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29s
ZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTEsNyBAQCB2
b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAogICAg
IEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5j
ZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFk
L3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRs
ZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1
c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMg
PSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+
ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVS
TChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShj
b25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZ2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUo
dGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSB7CiAgICAgICAg
IEdMaXN0KiBjb29raWVzTGlzdCA9IG51bGxwdHI7CiAgICAgICAgIGZvciAoYXV0byYgY29va2ll
IDogY29va2llcykKICAgICAgICAgICAgIGNvb2tpZXNMaXN0ID0gZ19saXN0X3ByZXBlbmQoY29v
a2llc0xpc3QsIGNvb2tpZS50b1NvdXBDb29raWUoKSk7CkBAIC0zNzgsMTEgKzM2NSw3IEBAIHZv
aWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUoV2ViS2l0Q29va2llTWFuYWdl
ciogbWFuYWdlciwgU291cENvb2tpCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAg
ICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNh
bmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJl
YWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2Fy
ZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0
IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29s
cyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2
LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKS0+ZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgp
LCBXZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAg
ICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmRlbGV0ZUNvb2tpZShtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgp
LCBUUlVFKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggZDAzNzkzOWViZGRkODUzZGI4ZGVi
M2FkNTFlOTU3ZDhhNTg5Y2ZjYi4uYTMwMDRiZjZlMDZkZDI5YzAxMzU4ZGQwZDQ3NjYwZThlMDBi
NWEwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0V2ViQ29udGV4dC5jcHAKQEAgLTQwNyw3ICs0MDcsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRX
ZWJDb250ZXh0Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAgICAgICBjb25maWd1cmF0
aW9uLnNldEhTVFNTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24od2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9oc3RzX2Nh
Y2hlX2RpcmVjdG9yeShwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpKSk7CiAKICAgICBw
cml2LT5wcm9jZXNzUG9vbCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbik7
Ci0gICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFByaW1hcnlEYXRhU3RvcmUod2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkp
OwogICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRVc2VyTWVzc2FnZUhhbmRsZXIoW3dlYkNvbnRl
eHRdKFVzZXJNZXNzYWdlJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyTWVz
c2FnZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgewogICAgICAgICAvLyBTaW5rIHRoZSBmbG9h
dGluZyByZWYuCiAgICAgICAgIEdSZWZQdHI8V2ViS2l0VXNlck1lc3NhZ2U+IHVzZXJNZXNzYWdl
ID0gd2Via2l0VXNlck1lc3NhZ2VDcmVhdGUoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAppbmRleCBlNmU0YWNjMTFhOTFh
MzcwZmI2ODhmYWI0OGQyNTIwNjk2ZDUwMjhmLi41MmViMzk5ODhhYWUwMGRlZGVlYjdiNDY0N2Y0
NDI0MjBiZDIzMTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0
aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtMTM5Myw4ICsxMzkzLDcg
QEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLAogICAgIGlmICghY29va2llT2JqZWN0LmdldEJvb2xl
YW4oImh0dHBPbmx5Il9zLCBjb29raWUuaHR0cE9ubHkpKQogICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBh
cmFtZXRlciAnaHR0cE9ubHknIHdhcyBub3QgZm91bmQuIik7CiAKLSAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKHBhZ2Ut
PndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgp
IHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tpZXMocGFn
ZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2td
KCkgewogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsKIH0KQEAgLTE0
MTAsOCArMTQwOSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tp
ZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpCiAKICAgICBTdHJpbmcgaG9z
dCA9IGFjdGl2ZVVSTC5ob3N0KCkudG9TdHJpbmcoKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFp
bkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CisgICAgV2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKS5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNp
dGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZp
eElmTmVlZGVkKGhvc3QpIH0pOwogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRT
ZXNzaW9uUGVybWlzc2lvbnMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbkRhdGE+PiYgb3V0
X3Blcm1pc3Npb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxp
YXJ5UHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9j
ZXNzUHJveHkuaAppbmRleCA0MWMwYTBmYmY1MDZlZmExNDA4YmNlZjlhZjhhOTBiODVhMWFkMDhh
Li40ZjM5OGI1MzBmNjA4NTc1Yzk2N2I4M2M3NGZhMmY0MzI4ZjZjZTNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaApAQCAtNDgsNyArNDgs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KCk7CiAKICAg
ICB2b2lkIGNvbm5lY3QoKTsKLSAgICB2b2lkIHRlcm1pbmF0ZSgpOworICAgIHZpcnR1YWwgdm9p
ZCB0ZXJtaW5hdGUoKTsKIAogICAgIHZpcnR1YWwgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVy
KCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJv
Y2Vzc1Bvb2xDb2NvYS5tbQppbmRleCA1ZDk2MGUxZjMyNmQyYjcyOTFlNzEzMDk2ZGVlZWVkOThj
YWNhMDZhLi4xMzFlZDU5NDdjMzNjNWRkNzg3YmYwZDVmZjZkNmE0ODYyNGQxNTI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0KQEAgLTEzNCw4ICsxMzQsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lm
TmVlZGVkKCkKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9u
U3RhdGUoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVu
YWJsZWQoKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0UHJvY2Vz
c1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpOwogCiAjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lv
bkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTE2Niw4ICsxNjUsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogICAgIGlmICghW1tOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktpdFN1cHByZXNz
TWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0pCiAgICAgICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhh
bmRsZXIoKTsKIAotICAgIHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtl
VW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSk7Ci0KICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgaWYgKCFfTUdD
YWNoZVZhbGlkKCkpIHsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2Jh
bF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKQEAgLTQ4MCwy
MiArNDc3LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKIAogICAgIE5TVXNlckRlZmF1bHRz
ICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAg
ICB7Ci0gICAgICAgIGJvb2wgaXNTYWZhcmkgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlC
cm93c2VyID0gZmFsc2U7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZh
cmkgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAg
aXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7
Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBw
bGljYXRpb246OmlzU2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpN
YWNBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3NlcigpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1Nh
ZmFyaSB8fCBpc01pbmlCcm93c2VyKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBV
UkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQ
cm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVS
TCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5
RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29y
a0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAg
IHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVs
dHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRz
S2V5XTsKQEAgLTUwNiwxNyArNDg3LDExIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3Jt
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAgICAg
cGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllciA9IGlkZW50aWZ5aW5n
RGF0YUZyb21Db29raWVTdG9yYWdlKFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29v
a2llU3RvcmFnZV0gX2Nvb2tpZVN0b3JhZ2VdKTsKICNlbmRpZgogCi0gICAgcGFyYW1ldGVycy5z
dG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IHN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKCk7Ci0KICAg
ICBOU051bWJlciAqZGF0YWJhc2VFbmFibGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5
OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVy
ZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQo
KV1dOwogICAgIGlmIChkYXRhYmFzZUVuYWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5z
aG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsK
LSAgICBlbHNlCi0gICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBt
X2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsK
IAogICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2Rl
ZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50
YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFi
bGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVx
dWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NX
ZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBs
YXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCmluZGV4IGM1ZGU0ZTdkMGY1OTE5NGY0M2Ew
MjNiMDg5ZTM3MmM1OGNmOGVlMDYuLmE5N2E2MmRkYzA4Y2Q5ZTNhZDgxZWJmNmNkMDA3Y2RjMWMy
YTRlOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRQcm94eS5jcHAKQEAgLTc1LDggKzc1LDcgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpjYW5j
ZWwoKQogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQ
cm94eTo6aW52YWxpZGF0ZSgpCkBAIC0xMDYsMTIgKzEwNSwxMCBAQCB2b2lkIERvd25sb2FkUHJv
eHk6OnB1Ymxpc2hQcm9ncmVzcyhjb25zdCBVUkwmIFVSTCkKICAgICBpZiAoIW1fcHJvY2Vzc1Bv
b2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1f
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOwotICAgICAgICBBU1NFUlRf
VU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7
Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwot
ICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOworICAgIGJvb2wgY3Jl
YXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJM
LmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFu
ZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVk
U2FuZGJveEV4dGVuc2lvbik7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1f
ZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShDT0NP
QSkKIApAQCAtMTQ2LDE1ICsxNDMsNyBAQCB2b2lkIERvd25sb2FkUHJveHk6OndpbGxTZW5kUmVx
dWVzdChSZXNvdXJjZVJlcXVlc3QmJiBwcm9wb3NlZFJlcXVlc3QsIGNvbnN0IFJlcwogCiAgICAg
bV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS53aWxsU2VuZFJlcXVlc3QoKnRoaXMsIFdU
Rk1vdmUocHJvcG9zZWRSZXF1ZXN0KSwgcmVkaXJlY3RSZXNwb25zZSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oUmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkgewog
ICAgICAgICBtX3JlZGlyZWN0Q2hhaW4uYXBwZW5kKG5ld1JlcXVlc3QudXJsKCkpOwotCi0gICAg
ICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNzUG9vbCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+
bV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJv
Y2Vzc1Byb3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG5ldHdvcmtQcm9jZXNz
UHJveHktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVx
dWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKKyAgICAg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxv
YWRJRCwgbmV3UmVxdWVzdCksIDApOwogICAgIH0pOwogfQogCkBAIC0xNzksMTYgKzE2OCwxMiBA
QCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lQXN5bmMoRG93bmxvYWRJRCBkb3dubAogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9u
c2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRCA9IGRvd25sb2Fk
SURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7
CisgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldp
dGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXpl
U3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbZG93bmxvYWRJRCA9IGRvd25s
b2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9u
KSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9u
OjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgICAgIGlm
ICghbV9wcm9jZXNzUG9vbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpD
b250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3Rp
bmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092
ZXJ3cml0ZTo6WWVzKSwgMCk7CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdE
b3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAg
ICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZFByb3h5TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZFByb3h5TWFwLmNwcAppbmRleCA3NmEwNzE1N2I1OTFhYWNlNTBmMTVkMTUyNWRi
Y2ZiOGM2YTRiYmM4Li45ZmRmOTdhMDMxMWE1ZDdjYjMxODY0ZTc5MDZiYWNkZjZmNjE5NjFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94
eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHlNYXAuY3BwCkBAIC0xMDksOSArMTA5LDYgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpk
b3dubG9hZEZpbmlzaGVkKERvd25sb2FkUHJveHkmIGRvd25sb2FkUHJveHkpCiAKICAgICBSRUxF
QVNFX0xPRyhMb2FkaW5nLCAiUmVtb3ZpbmcgZG93bmxvYWQgJSIgUFJJdTY0ICIgZnJvbSBVSVBy
b2Nlc3MgRG93bmxvYWRQcm94eU1hcCIsIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKIAotICAg
IC8vIFRoZSBEb3dubG9hZFByb3h5IG1heSBiZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0
byB0aGUgcHJvY2VzcyBwb29sLgotICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtl
UmVmUHRyKG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKSk7Ci0KICAgICBBU1NFUlQobV9kb3dubG9h
ZHMuY29udGFpbnMoZG93bmxvYWRJRCkpOwogCiAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
ZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2Nv
bHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDhjMjNiYmU4YzA2
YTE1OTljYjliOTE2YTBiMzJhZmIzNzc4M2YzMDUuLmMyMzhiZTA2OGRjZjkzZjE1ZmU2MjZmMTcx
OGI5MDhhNzJlZmExOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3ICs0NCwyMCBAQCBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5KCkKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRM
b2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQ
cm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9h
ZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisgICAgaWYgKGF1dG8qIGNs
aWVudCA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmxlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCgpKQorICAgICAgICBjbGllbnQtPnN0YXJ0TG9hZGluZygqdGhpcywg
Y3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9t
UHJvdG9jb2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5j
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJv
dG9jb2xJRCk7CisgICAgaWYgKGF1dG8qIGNsaWVudCA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLmxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpKQorICAgICAgICBj
bGllbnQtPnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKIH0KIAogdm9pZCBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9u
ZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisgICAgaWYgKGF1dG8qIGNsaWVudCA9IE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCgpKQorICAgICAgICBjbGllbnQtPmludmFsaWRhdGUoKnRoaXMpOwogfQogCiB2b2lkIExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2Fj
eUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRp
cmVjdFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggZDEyNTAyMGE1OTVkMjk4ODk2OTNiNDIz
MGMxMDFkODMyNDNhZTNiZS4uNjg2MDI4ODMwNmEyN2MzMzY2NjQxYjY3ZDBmMzQ1Yjc1MTVmMDlj
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjZW5kaWYKKyNpbmNsdWRlICJMZWdhY3lHbG9i
YWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29u
dGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uSW5mby5oIgpAQCAtNjAsNiArNjEsNyBAQAogI2luY2x1ZGUgIldlYnNpdGVEYXRh
U3RvcmVDbGllbnQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tB
Z2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNpZiBF
TkFCTEUoU0VDX0lURU1fU0hJTSkKQEAgLTcwLDE4ICs3MiwxMDkgQEAKICNpbmNsdWRlIDx3dGYv
c3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5j
bHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2Rl
ZmluZSBNRVNTQUdFX0NIRUNLKGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlv
biwgY29ubmVjdGlvbigpKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlBy
b2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9j
ZXNzUG9vbC5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vz
c1Bvb2wocHJvY2Vzc1Bvb2wpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNz
UHJveHk+JiBnbG9iYWxOZXR3b3JrUHJvY2VzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gbmV0d29ya1Byb2Nlc3M7
CisgICAgcmV0dXJuIG5ldHdvcmtQcm9jZXNzOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKQoreworICAgIGlmICghZ2xvYmFsTmV0d29y
a1Byb2Nlc3MoKSkgeworICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpID0gbWFrZVVuaXF1
ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigpOworICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2Vzcygp
LT5zZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgfQorICAgIHJldHVy
biAqZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojp0ZXJtaW5hdGUoKQoreworICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6dGVybWluYXRlKCk7
CisgICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6YXR0ZW1wdFJlbGF1bmNoQWZ0ZXJDcmFzaElmTmVjZXNzYXJ5KFZlY3Rv
cjxzdGQ6OnBhaXI8UmVmPFdlYlByb2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJv
eHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseT4+JiYgcGVuZGluZ1Jl
cXVlc3RzKQoreworICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNzKCkgPSBudWxscHRyOworICAgIGlm
IChwZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgYXV0byYg
bmV3TmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKKyAg
ICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBwZW5kaW5nUmVxdWVzdHMpCisgICAgICAgIG5ld05ldHdv
cmtQcm9jZXNzLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihyZXF1ZXN0LmZpcnN0LmdldCgp
LCBXVEZNb3ZlKHJlcXVlc3Quc2Vjb25kKSk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpCit7CisgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdv
cmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgor
ICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZp
b2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgorICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsK
KyAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzXSB7CisgICAgICAgICAgICBz
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgICAgIH0pOworICAgIH0K
KworICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAg
aWYgKCFwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKQorICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1l
dGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFz
U2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5z
Y2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihM
ZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFz
c2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNS
ZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2lu
Z2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7CisgICAg
cGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigp
LmNhY2hlTW9kZWwoKTsKKyAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IFdlYlByb2Nlc3NQb29sOjp1
cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKKyAgICAgICAgcGFyYW1ldGVy
cy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsK
KyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChTdHJpbmcgY29va2llU3RvcmFnZURp
cmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAg
aWYgKFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0
d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOyAhY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1w
dHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRl
RGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJD
YWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgcGFyZW50QnVu
ZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOyAh
cGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6
VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKyNlbmRpZgorICAgIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVO
ZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKKyAgICBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFt
ZXRlcnMgPSBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpOworICAg
IHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
cGFyYW1ldGVycyksIDApOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEFsd2F5c1J1
bnNBdEJhY2tncm91bmRQcmlvcml0eSgpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6
IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vz
c1Bvb2wtPmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgYW55
UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkKK3sKKyAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eSgpCisgICAgOiBB
dXhpbGlhcnlQcm9jZXNzUHJveHkoYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5k
UHJpb3JpdHkoKSkKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQog
ICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKICNlbmRpZgotICAgICwg
bV90aHJvdHRsZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tncm91bmRBc3Nl
cnRpb24oKSkKKyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBhbnlQcm9jZXNzUG9vbFNob3VsZFRh
a2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAsIG1f
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50PigpKQorI2VuZGlmCiB7CiAgICAgY29ubmVjdCgpOwogfQpAQCAtMTA0
LDE2ICsxOTcsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMo
UHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogewogICAgIGxhdW5jaE9wdGlv
bnMucHJvY2Vzc1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwog
ICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25z
KTsKLQotICAgIGlmIChwcm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxk
TWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKLSAgICAg
ICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0g
dHJ1ZTsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShQTEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRp
b25zLnByb2Nlc3NQYXRoID0gbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAg
ICBsYXVuY2hPcHRpb25zLnVzZXJJZCA9IG1fcHJvY2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYK
IH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTY2LDEyICsyNDksMTIgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkK
ICAgICB9CiB9CiAKLURvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURv
d25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBX
ZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
LCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94
eSogb3JpZ2luYXRpbmdQYWdlKQogewogICAgIGlmICghbV9kb3dubG9hZFByb3h5TWFwKQogICAg
ICAgICBtX2Rvd25sb2FkUHJveHlNYXAgPSBtYWtlVW5pcXVlPERvd25sb2FkUHJveHlNYXA+KCp0
aGlzKTsKIAotICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJv
eHkoZGF0YVN0b3JlLCBtX3Byb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywg
b3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVE
b3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJh
bWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9u
PiBmZXRjaE9wdGlvbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTIzNyw4ICszMjAsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKQogewogICAgIGNsZWFyQ2FsbGJhY2tTdGF0
ZXMoKTsKIAotICAgIC8vIFRlbGwgdGhlIG5ldHdvcmsgcHJvY2VzcyBtYW5hZ2VyIHRvIGZvcmdl
dCBhYm91dCB0aGlzIG5ldHdvcmsgcHJvY2VzcyBwcm94eS4gVGhpcyB3aWxsIGNhdXNlIHVzIHRv
IGJlIGRlbGV0ZWQuCi0gICAgbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRo
aXMpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
KnRoaXMpOworCisgICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSA9IG51bGxwdHI7CiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0YXRlcygpCkBAIC0yNTgsOSAr
MzQzLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGUKICAgICBpZiAoZGlzcGF0Y2hNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9wcm9j
ZXNzUG9vbC5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKTsKIH0KIApAQCAtMjc0LDggKzM1Niw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgSVBDCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0
aW9uJikKIHsKLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3Byb2Nl
c3NQb29sKTsKLQogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxv
YWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RP
Q09MX01BTkFHRVIpCkBAIC0zMzQsMTEgKzQxNCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRvcE9yaWdpbiB8fCAhbV9wcm9j
ZXNzUG9vbC5pc1NlcnZpY2VXb3JrZXJQYWdlSUQocGFnZUlEKSkgewotICAgICAgICBwcm9jZXNz
QXV0aGVudGljYXRpb25DaGFsbGVuZ2Uoc2Vzc2lvbklELCBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBXZWJQYWdlUHJveHk6
OmZvck1vc3RWaXNpYmxlV2ViUGFnZUlmQW55KHNlc3Npb25JRCwgKnRvcE9yaWdpbiwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwgYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UgPSBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgbmVnb3RpYXRlZExl
Z2FjeVRMU10oYXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0zOTUsMTEgKzQ3MCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIsIElQ
Qzo6Q29uCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wucHJv
Y2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKQotICAgICAgICBzZXRQcm9jZXNzU3VwcHJlc3Npb25F
bmFibGVkKHRydWUpOwotI2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBpZiAoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uID0gdGhpcy0+Y29ubmVjdGlvbigpLT54
cGNDb25uZWN0aW9uKCkpCkBAIC0xMjA2LDcgKzEyNzYsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQg
c2VzcwogfQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRl
cmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7
Ci0gICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihXVEZNb3Zl
KGRvbWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6
OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2V0RG9tYWluc1dpdGhV
c2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4geyBkb21h
aW5zIH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAK
QEAgLTEyNzEsMTQgKzEzNDIsMTQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRTeW5j
QWxsQ29va2llcygpCiAgICAgfQogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNl
c3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYgc3RvcmUpCit2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgc3RvcmUpCiB7CiAgICAgaWYgKGNh
blNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpB
ZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRv
IHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkg
fSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAo
IXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBn
cmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgog
ICAgIH0KIH0KQEAgLTEyOTEsMTYgKzEzNjIsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiBXZWJzaXRlRGF0YVN0
b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJz
aXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAg
ICAgICBpZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSA9PSBzZXNzaW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhp
c3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0
dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Np
b25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3Jh
Z2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzNDcsNyArMTQwOSwx
MCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4s
IFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxl
RG9tYWluKSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgLy8g
RklYTUU6IFRoaXMgaXNuJ3QgcXVpdGUgY29ycmVjdC4KKyAgICBhdXRvIGFnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cisg
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9v
bHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgUmVnaXN0cmFibGVEb21haW4ge3JlZ2lzdHJhYmxl
RG9tYWlufSwgc2Vzc2lvbklELCBbYWdncmVnYXRvciA9IGFnZ3JlZ2F0b3IuY29weVJlZigpXSgp
IHsgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2VyQ29udGV4dENvbm5l
Y3Rpb25Ob0xvbmdlck5lZWRlZChXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBpZGVudGlmaWVy
KQpAQCAtMTUxMCwxNiArMTU3NSwzNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnByZWNv
bm5lY3RUbyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlkZQogICAgIHNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lvbklELCB3ZWJQ
YWdlUHJveHlJRCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAorc3RhdGljIGJv
b2wgYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sK
KyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3VuZFdlYlByb2Nl
c3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9u
KCkKIHsKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkp
IHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsK
ICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3VuZEFjdGl2aXR5
KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZy
b21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtp
bmcgZm9yIGZvcmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKSwgMCk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJvY2Vzc1Bvb2wo
KS5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xI
YXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0
bGVyOjppc1ZhbGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2Vz
KSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIo
KS5iYWNrZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQgdmlldyhzKSJf
cyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0Rp
ZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IGE0MDk0MDQxNjUw
ODVhMjhmNjI4MDU4MmYxZjQwNTI0Yjc5NWQ5NDIuLjM4OTNmN2NjYWQ2ZmUxMTBlY2M3NzliNzJj
MzM5YmI0YjFiNjg1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC01Miw2ICs1MiwxMCBAQCBuYW1lc3BhY2Ug
SVBDIHsKIGNsYXNzIEZvcm1EYXRhUmVmZXJlbmNlOwogfQogCituYW1lc3BhY2UgQVBJIHsKK2Ns
YXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKK30KKwogbmFtZXNwYWNlIFBBTCB7CiBj
bGFzcyBTZXNzaW9uSUQ7CiB9CkBAIC03NCw3ICs3OCw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
Y2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7CiBjbGFzcyBXZWJQ
YWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6
IGJvb2w7CkBAIC0xMDIsMTIgKzEwNSwxNSBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRG9tYWluSW5O
ZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAgICAgdXNp
bmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAKLSAgICBleHBs
aWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJik7CisgICAgc3RhdGljIE5l
dHdvcmtQcm9jZXNzUHJveHkmIHNpbmdsZXRvbigpOworICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9j
ZXNzUHJveHkoKTsKICAgICB+TmV0d29ya1Byb2Nlc3NQcm94eSgpOwogCisgICAgdm9pZCB0ZXJt
aW5hdGUoKSBmaW5hbDsKKwogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdl
YlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIAotICAgIERvd25sb2FkUHJveHkmIGNyZWF0
ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5n
UGFnZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0
YVN0b3JlJiwgV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOwog
CiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRl
RGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1l
IG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcik7CkBAIC0yMDUsMTMgKzIxMSwxMSBAQCBwdWJsaWM6CiAgICAgUHJvY2Vzc1Rocm90dGxl
ciYgdGhyb3R0bGVyKCkgZmluYWwgeyByZXR1cm4gbV90aHJvdHRsZXI7IH0KICAgICB2b2lkIHVw
ZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCgpIHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KLQogI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHko
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICNlbmRpZgogCi0gICAgdm9pZCBhZGRT
ZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsKKyAgICB2b2lkIGFkZFNlc3Npb24oV2Vi
c2l0ZURhdGFTdG9yZSYpOwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCk7
CiAgICAgCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkBAIC0yMjcsNiArMjMxLDEyIEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wo
Y29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9t
UHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9U
T0NPTF9NQU5BR0VSKQorICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KiBsZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSB7IHJldHVybiBtX2N1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5nZXQoKTsgfQorI2VuZGlmCisKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNz
Q3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQgcmVzb3VyY2VMb2FkRGlkU2Vu
ZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVzb3VyY2VMb2FkSW5mbyYmLCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8SVBDOjpGb3JtRGF0YVJlZmVyZW5jZT4m
Jik7CkBAIC0yNDUsNiArMjU1LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVu
dGlmaWVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKIHByaXZhdGU6CisgICAgdm9p
ZCBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgc3RhdGljIHZvaWQg
YXR0ZW1wdFJlbGF1bmNoQWZ0ZXJDcmFzaElmTmVjZXNzYXJ5KFZlY3RvcjxzdGQ6OnBhaXI8UmVm
PFdlYlByb2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseT4+JiYpOworCiAgICAgLy8gQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5CiAgICAgQVNDSUlMaXRlcmFsIHByb2Nlc3NOYW1lKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gIk5ldHdvcmtpbmciX3M7IH0KIApAQCAtMjUyLDcgKzI2NSw2IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBwcm9jZXNzV2lsbFNodXREb3duKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FsbGJh
Y2tTdGF0ZXMoKTsKIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CkBAIC0zMDgsOCAr
MzIwLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vzc0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eT4mJik7
CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9jZXNzUG9vbDsKLQogICAgIEhhc2hNYXA8Q2Fs
bGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+PiBtX3BlbmRpbmdG
ZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFDYWxsYmFja3M7
CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+PiBtX3Bl
bmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnNDYWxsYmFja3M7CkBAIC0zNDcsNiArMzU3
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9u
ZXR3b3JrUHJvY2VzczsKICAgICB9OwogI2VuZGlmCisKKyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RP
TV9QUk9UT0NPTF9NQU5BR0VSKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CisjZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQppbmRleCBi
OGRhZWRmN2JlYmExY2Q4MWY2ZTUyNDQ5NjAzMTBmMTMzMTBjMTFlLi40OTllNjgxOGE0MjNlNWIx
YWU4MjBmNjFlMDk2MjNhMDVhZjhkYjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQpAQCAtNTEs
OCArNTEsNyBAQCBib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6OlhQQ0V2ZW50SGFuZGxlcjo6aGFu
ZGxlWFBDRXZlbnQoeHBjX29iamVjdF90IGV2ZW50KSBjbwogICAgIGlmIChtZXNzYWdlTmFtZS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtZXNzYWdlTmFtZSA9
PSBMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNlc0Rh
dGFiYXNlWFBDRW5kcG9pbnRNZXNzYWdlTmFtZSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
cHJvY2Vzc1Bvb2woKS5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyhl
dmVudCk7CisgICAgLy8gRklYTUU6IE5vdCBzdXJlIHdoYXQgZXF1aXZhbGVudCBpcyBoZXJlLgog
CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmNwcAppbmRleCA0MDE4NjBkMjBjMjc4NzZlYzQwODI3NTRjNWYw
YjJkNmIzNzVhZjM2Li5jYjdhZDc4MDVlMjRhMmNmMDU3NjFhN2Q4MjgyYTJjNjE1MjcyYWZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQ
SVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJPcHRpb25hbENhbGxi
YWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzksMjAgKzQwLDE1IEBACiBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jb25zdCBjaGFy
KiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkKK1dlYkNvb2tpZU1hbmFn
ZXJQcm94eSYgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKQogewotICAgIHJldHVy
biAiV2ViQ29va2llTWFuYWdlclByb3h5IjsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2Vi
Q29va2llTWFuYWdlclByb3h5PiBtYW5hZ2VyOworICAgIHJldHVybiBtYW5hZ2VyOwogfQogCi1S
ZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZShX
ZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNv
b2tpZU1hbmFnZXJQcm94eSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2ll
TWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLSAgICA6
IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRleHRTdXBw
bGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwog
fQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHkoKQpAQCAt
NjUsNTkgKzYxLDI1IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2xp
ZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2UqIGNsCiAgICAgbV9jbGllbnQuaW5p
dGlhbGl6ZShjbGllbnQpOwogfQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3Rv
cjxPYnNlcnZlcio+IG9ic2VydmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9j
b29raWVPYnNlcnZlcnMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6
IG9ic2VydmVyU2V0KQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0g
ICAgfQotCi0gICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2Jz
ZXJ2ZXItPm1hbmFnZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVy
cy5pc0VtcHR5KCkpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0Rp
ZENsb3NlKFdlYlByb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5Ojpwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAg
QVBJOjpPYmplY3Q6OnJlZigpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVy
ZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19
Ci0KIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0
cmluZz4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0
d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3
b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OkdldEhvc3RuYW1lc1dpdGhDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBob3N0bmFtZXMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxl
dGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENv
b2tpZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpk
ZWxldGVDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUmIGNvb2tp
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAg
YXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBbY2Fs
bGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbildKCkgbXV0YWJsZSB7CiAg
ICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTEyNSw0MiArODcsNDIgQEAg
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IENvb2tpZSYKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
bGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2Fs
bFRpbWUgdGltZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQ
cm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1By
b2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRD
b29raWUoc2Vzc2lvbklELCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNz
ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Mu
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVz
KHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFsbENv
b2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAg
ICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpHZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
bikpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7
CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxsYmFja0Z1
bmN0aW9uKSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQ
b29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Np
b25JRCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9u
SUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9v
bCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25J
RCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCks
IDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llT2JzZXJ2ZXJD
YWxsYmFjayhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4m
JiBjYWxsYmFjaykKQEAgLTIxMSwyMSArMTczLDEzIEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5Ojpjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIAogdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNz
aW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBp
ZiAoIXByb2Nlc3NQb29sKCktPmlzVXNpbmdUZXN0aW5nTmV0d29ya1Nlc3Npb24oKSkKLSAgICAg
ICAgcGVyc2lzdEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNlbmRpZgotI2lmIFVT
RShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNz
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIH0K
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBv
bGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29y
a1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3Jr
UHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6Okdl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgK
aW5kZXggMGJkZmMwZDRlNDdjNDM2ZjU4NWNmMjljMDlkNTFhMjliYzgxMWE5ZC4uZTczOGI4NTgw
MjE3MDlhODg4YmMwMzgyOWI0OWRlMWMwZmM5ZWRjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKQEAgLTU2LDExICs1Niw5IEBAIHR5cGVk
ZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxiYWNrOwogdHlwZWRlZiBH
ZW5lcmljQ2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tp
ZUFjY2VwdFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNsYXNzIFdlYkNv
b2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5
cGU6OkNvb2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVi
bGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHBy
aXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBzdXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBXZWJDb29raWVNYW5h
Z2VyUHJveHkmIHNpbmdsZXRvbigpOwogICAgIHZpcnR1YWwgfldlYkNvb2tpZU1hbmFnZXJQcm94
eSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNs
aWVudEJhc2UqKTsKQEAgLTEwNCwxNyArMTAyLDExIEBAIHB1YmxpYzoKICAgICB1c2luZyBBUEk6
Ok9iamVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KFdl
YlByb2Nlc3NQb29sKik7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5KCk7CisgICAgZnJpZW5k
IE5ldmVyRGVzdHJveWVkPFdlYkNvb2tpZU1hbmFnZXJQcm94eT47CiAKICAgICB2b2lkIGNvb2tp
ZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gV2ViQ29udGV4dFN1cHBsZW1l
bnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBw
cm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9j
ZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZvaWQgcmVm
V2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmV2ViQ29udGV4
dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCiAg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29v
a2llTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGEwNmI3N2I0NzNlYzYwMmJkN2M4
YzE0OTVjZDBhMjI4NmU4Y2E1M2IuLjcyNGFlZDMwMDQyNGMxOTM2NzYxM2Q0MmU2NTk3YjEwNjkz
OGZiMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29r
aWVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KQEAgLTIwLDYgKzIwLDYgQEAKICMgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotbWVzc2FnZXMgLT4gV2ViQ29va2llTWFuYWdl
clByb3h5IHsKK21lc3NhZ2VzIC0+IFdlYkNvb2tpZU1hbmFnZXJQcm94eSBOb3RSZWZDb3VudGVk
IHsKICAgICBDb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGExMjNmYjI4NTU5ODIx
NTMzMGI1MDkyOTY1ZWQxMGJiYWVlYzY5YjkuLjUzYTBiMDE1NDc5ZmZkMDkwNTIzMmE4NmUzODY3
MDgzMmJlMmEyMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApA
QCAtMzE4NSwxMSArMzE4NSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBC
b3VuZE1vZGVUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+CiB2b2lkIFdlYlBh
Z2VQcm94eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3Mo
KQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkK
LSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCku
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5k
TWVzc2FnZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRs
ZW1lbnQoKSwgMCk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0
bGVtZW50KCksIDApOwogI2VuZGlmCiB9CiAKQEAgLTMxOTgsMTMgKzMxOTQsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6Y2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShN
QUNDQVRBTFlTVCkKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBzZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50
T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCks
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgpA
QCAtOTkwOCw1OCArOTg5OCwyNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJldmlld0Fj
dGlvblRyaWdnZXJlZChjb25zdCBXZWJDb3JlOjpTeXN0ZW1QcmV2aWV3SW5mbwogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRp
b24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9u
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2Fn
ZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dl
YnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgIH0gZWxzZQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhi
b29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2Fu
U2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0
aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJp
YnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVz
dGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGlu
ZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3Nh
Z2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4
cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1h
cmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYg
RU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5jcHAKaW5kZXggNmQ2YjM0ZDdhZmRmNGNlNjQwNTljMDZmZDFjODhkNTBhYzY4NmM3
Ni4uNzJkYjY0YmEwMmY0YjFiYTBjMjRkZGU3OTBhNjNmMzVhMGMzNzVhZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMjMyLDYgKzIzMiwxMSBAQCBz
dGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIGdsb2JhbFVS
TFNjaGVtZXNXaXRoQ3VzdG9tUHJvdAogICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxTdHJp
bmc+IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMo
KQoreworICAgIHJldHVybiBjb3B5VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Q
cm90b2NvbEhhbmRsZXJzKCkpOworfQorCiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wo
QVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2Nv
bmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdlR3Jv
dXAoV2ViUGFnZUdyb3VwOjpjcmVhdGUoKSkKQEAgLTIzOSw3ICsyNDQsNiBAQCBXZWJQcm9jZXNz
UG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZp
Z3VyYXRpb24pCiAgICAgLCBtX2F1dG9tYXRpb25DbGllbnQobWFrZVVuaXF1ZTxBUEk6OkF1dG9t
YXRpb25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2FkQ2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJ
OjpEb3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlzdG9yeUNsaWVudChtYWtlVW5pcXVlPEFQ
STo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkpCi0gICAgLCBtX2N1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
PigpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgp
KQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2Fn
ZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlcj4o
KnRoaXMpKQpAQCAtMjY3LDkgKzI3MSw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9v
bChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICNlbmRpZgog
ICAgIH0pOwogCi0gICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUgJiYgV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIG1fd2Vic2l0ZURh
dGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpOwot
CiAgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBtX2NvbmZpZ3VyYXRpb24tPmFsd2F5c1JldmFsaWRh
dGVkVVJMU2NoZW1lcygpKQogICAgICAgICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNBbHdheXNSZXZh
bGlkYXRlZC5hZGQoc2NoZW1lKTsKIApAQCAtMjg1LDcgKzI4Niw2IEBAIFdlYlByb2Nlc3NQb29s
OjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJh
dGlvbikKICAgICBhZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIAogICAgIC8vIE5PVEU6IFRoZXNlIHN1Yi1v
YmplY3RzIG11c3QgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuLgot
ICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBs
ZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxX
ZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04p
CkBAIC0zNDIsOSArMzQyLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6On5XZWJQcm9jZXNzUG9vbCgpCiAg
ICAgcHJvY2Vzc1Bvb2xDb3VudGVyLmRlY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2h1dERvd25Qcm9jZXNz
KCk7Ci0KICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICBpZiAoIW1fcHJvY2Vzc2VzVXNpbmdHYW1l
cGFkcy5pc0VtcHR5KCkpCiAgICAgICAgIFVJR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5w
cm9jZXNzUG9vbFN0b3BwZWRVc2luZ0dhbWVwYWRzKCp0aGlzKTsKQEAgLTQwMiwxNiArMzk5LDYg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYKICAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0g
V1RGTW92ZShhdXRvbWF0aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQp
Ci17Ci0jaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKLSAgICBpZiAo
IWN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQgPSBtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
PigpOwotICAgIGVsc2UKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBX
VEZNb3ZlKGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQog
ewogICAgIG1fc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQgPSBlbmFibGVkOwpAQCAtNDMxLDcgKzQx
OCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1CiAKIElQQzo6Q29ubmVjdGlvbiogV2ViUHJv
Y2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCiB7Ci0gICAgcmV0dXJuIG1f
bmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkuY29ubmVjdGlvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4dCkKQEAgLTQ0Myw4ICs0MzAsNyBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQoKQogewogICAgIHNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQo
KSk7CiAjaWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVy
cmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdl
cygpKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtNDgyLDI3MSArNDY4LDEzIEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNjcmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2VuZGlmCiB9CiAKLU5l
dHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhX
ZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKK05ldHdvcmtQcm9jZXNzUHJv
eHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3Jl
KikKIHsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQ
SSBvbiBub24tbWFpbiB0aHJlYWRzLgotICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNl
IHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlm
ICghUnVuTG9vcDo6aXNNYWluKCkpIHsKLSAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVu
c3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0
d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAg
ICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAg
ICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRv
IG5ldHdvcmtQcm9jZXNzID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7
Ci0KLSAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0g
ICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0
ZURhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9y
ZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsK
LSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRh
cnlJZGVudGlmaWVyKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9k
ZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0g
ICAgZm9yIChhdXRvJiBzY2hlbWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMoKSkKLSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1
c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29v
a2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5p
c0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5
KCk7Ci0gICAgaWYgKCFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0g
V2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50
QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNl
bmRpZgotI2VuZGlmCi0KLSAgICBwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gbV9j
b25maWd1cmF0aW9uLT5oc3RzU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyYW1ldGVy
cy5oc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotCi0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29w
eVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdp
c3RlckFzU2VjdXJlKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5
cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxT
ZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRT
ZWN1cml0eVBvbGljeSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNM
b2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2No
ZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lz
dGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7Ci0KLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLSAgICAvLyAqKioqKioqKioKLSAgICAvLyBJTVBPUlRBTlQ6IERvIG5v
dCBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGluZGV4ZWQgZGF0YWJhc2VzIG9u
IGRpc2sgd2l0aG91dCBmaXJzdCBjb25zdWx0aW5nIGEgcmV2aWV3ZXIgZnJvbSBBcHBsZSAoPHJk
YXI6Ly9wcm9ibGVtLzE3NDU0NzEyPikKLSAgICAvLyAqKioqKioqKioKLSAgICBpZiAobV93ZWJz
aXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2
ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygp
LmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHko
KSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgbmV0d29ya1By
b2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgfQotI2VuZGlm
Ci0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9y
ZSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5ID0gIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGxvY2FsU3RvcmFnZURp
cmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2
ZWRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWxvY2Fs
U3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNp
dGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNhY2hlU3RvcmFnZURpcmVjdG9yeSgp
IDogbnVsbFN0cmluZygpOwotICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHko
KSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5ID0gV1RGTW92ZShjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOwotICAgIH0KLQotICAgIFN0
cmluZyByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCktPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5LCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKLQotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IGZhbHNlOwot
ICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IGZh
bHNlOwotICAgIGJvb2wgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IHRydWU7Ci0gICAgYm9vbCBl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gZmFsc2U7Ci0jaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBXZWJDb3JlOjpUaGly
ZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGw7Ci0gICAgV2ViQ29yZTo6U2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEVuYWJsZWQgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBX
ZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87Ci0gICAgV2ViQ29y
ZTo6Q05BTUVDbG9ha2luZ01pdGlnYXRpb25FbmFibGVkIGNuYW1lQ2xvYWtpbmdNaXRpZ2F0aW9u
RW5hYmxlZCA9IFdlYkNvcmU6OkNOQU1FQ2xvYWtpbmdNaXRpZ2F0aW9uRW5hYmxlZDo6Tm87Ci0j
ZW5kaWYKLSAgICBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSBmaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzOwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICBIYXNoU2V0PFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiBhcHBCb3VuZERvbWFpbnM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4gbWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0KLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBtX3RjY1ByZWZlcmVuY2VFbmFibGVkID0gZG9lc0FwcEhhdmVJVFBFbmFibGVkKCk7
Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlICYmICF3aXRoV2Vic2l0ZURhdGFTdG9yZS0+
aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgd2l0aFdlYnNpdGVE
YXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlICYmICFt
X3dlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0g
ICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlIGlmIChXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkgJiYgIVdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmUoKS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsK
LSAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5zZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJl
ZmVyZW5jZUVuYWJsZWQ7Ci0jZW5kaWYKLQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkg
ewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09V
UkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0xvZ1Rlc3RpbmdFdmVudCA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVz
dGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0g
d2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVM
b2NhbGhvc3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdN
b2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzLmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQotICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBh
cnR5Q29va2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0gICAgICAg
ICAgICBjbmFtZUNsb2FraW5nTWl0aWdhdGlvbkVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuY25hbWVDbG9ha2luZ01pdGln
YXRpb25FbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAg
ICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25E
b21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwot
ICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVz
b3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5w
ZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAg
Ci0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRl
RGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAo
IW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0
d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVE
YXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0
aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNs
dWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotICAg
ICAgICAgICAgY25hbWVDbG9ha2luZ01pdGlnYXRpb25FbmFibGVkID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmNuYW1lQ2xvYWtpbmdN
aXRpZ2F0aW9uRW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAg
ICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0
aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWlu
czsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVu
dFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUt
PnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLQotICAgICAg
ICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUt
PnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0Nh
Y2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3Jr
Q2FjaGVEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGly
ZWN0b3J5KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtD
YWNoZURpcmVjdG9yeTsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5l
dHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lm
IEhBVkUoQ0ZORVRXT1JLX0FMVEVSTkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRh
U3RvcmU6Omh0dHAzRW5hYmxlZCgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2Vydmlj
ZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2Vz
RGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0
b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmh0dHAzRW5hYmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBp
c0l0cFN0YXRlRXhwbGljaXRseVNldCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewot
ICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAg
ICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0
YXRlRXhwbGljaXRseVNldCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xv
Z1Rlc3RpbmdFdmVudCwKLSAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
LAotICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCwKLSAgICAgICAgY25h
bWVDbG9ha2luZ01pdGlnYXRpb25FbmFibGVkLAotI2VuZGlmCi0gICAgICAgIGZpcnN0UGFydHlX
ZWJzaXRlRGF0YVJlbW92YWxNb2RlLAotICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21h
aW4sCi0gICAgICAgIGFwcEJvdW5kRG9tYWlucywKLSAgICAgICAgbWFudWFsUHJldmFsZW50UmVz
b3VyY2UsCi0gICAgfTsKLQotICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1l
dGVycwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwot
Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdvcmtQcm9j
ZXNzTGF0ZW5jeVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDApOwotI2Vu
ZGlmCi0KLSAgICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwotCi0g
ICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5h
ZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgIHdpdGhX
ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgfQotCi0gICAgLy8g
TWFrZSBzdXJlIHRoZSBuZXR3b3JrIHByb2Nlc3Mga25vd3MgYWJvdXQgYWxsIHRoZSBzZXNzaW9u
cyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSBpdCBzdGFydGVkLgotICAgIGZvciAo
YXV0byYgc2Vzc2lvbklEIDogbV9zZXNzaW9uVG9QYWdlSURzTWFwLmtleXMoKSkgewotICAgICAg
ICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5n
Tm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpKQotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKndlYnNpdGVEYXRhU3RvcmUpOwotICAgIH0KLQot
ICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdvcmtQcm9jZXNzKTsKLSAgICByZXR1
cm4gKm1fbmV0d29ya1Byb2Nlc3M7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNo
ZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkKIHsKLSAgICBBU1NF
UlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJvY2Vzc1Byb3h5ID09
IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDog
bV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+cHJvY2Vzc0RpZENs
b3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzU1LDkgKzQ4Myw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBu
ZXR3b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24pCiAgICAgICAgIG1f
YXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVhdmUgdGhlIHByb2Nl
c3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0aGUgY2xpZW50IGNv
dWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9
IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCkBAIC03NzEs
MTEgKzQ5NiwxMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc0Ny
YXNoZWQoV2ViUHJvY2Vzc1Byb3h5JiBwcm94eSkKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwg
TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpE
ZWxheWVkUmVwbHkmJiByZXBseSkKIHsKICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAg
IG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbih3ZWJQcm9jZXNz
UHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgd2ViUHJvY2Vzc1By
b3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkgPSBXVEZNb3ZlKHJlcGx5
KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1By
b3h5LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94
eSA9IG1ha2VXZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSld
IChhdXRvJiBjb25uZWN0aW9uSW5mbykgbXV0YWJsZSB7CiAgICAgICAgIGlmIChVTkxJS0VMWSgh
SVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlm
aWVyKCkpICYmIHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKICAgICAgICAgICAgIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJnZXROZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb246IEZhaWxlZCBmaXJzdCBhdHRlbXB0LCByZXRyeWluZyIpOwogICAgICAgICAg
ICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJl
cGx5KSk7CisgICAgICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5nZXRO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHJlcGx5KGNvbm5lY3Rp
b25JbmZvKTsKQEAgLTgwOCwxNSArNTMzLDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0R1BV
UHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE0KICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hX
b3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94
eSYgcHJveHksIFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIEFTU0VSVF9VTlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQ
cm9jZXNzLmdldCgpKTsKLQotICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0
YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklE
KTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBpZiAoIW1fd2Vic2l0
ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgICAgICB3ZWJzaXRl
RGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwotICAgIH0KKyAgICBhdXRvKiB3
ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JT
ZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpCisgICAgICAg
IHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKS5wdHIoKTsKIAogICAgIFdlYlByb2Nlc3NQcm94eSogc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eSB7IG51bGxwdHIgfTsKICAgICBpZiAoIW1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcykgewpAQCAtOTI2LDcgKzY0NSw3IEBAIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdl
YlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlCiAj
aWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCiAgICAgLy8gSW4gcGxhdGZvcm1zIHVz
aW5nIEJ1YmJsZXdyYXAgZm9yIHNhbmRib3hpbmcsIHByZXdhcm1lZCBwcm9jZXNzIGlzIGxhdW5j
aGVkIHVzaW5nIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUsCiAg
ICAgLy8gc28gd2UgZG9uJ3QgdXNlIGl0IGluIGNhc2Ugb2YgdXNpbmcgYSBkaWZmZXJlbnQgV2Vi
c2l0ZURhdGFTdG9yZS4KLSAgICBpZiAobV9zYW5kYm94RW5hYmxlZCAmJiBtX3dlYnNpdGVEYXRh
U3RvcmUgJiYgbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpICE9ICZ3ZWJzaXRlRGF0YVN0b3JlKQor
ICAgIGlmIChtX3NhbmRib3hFbmFibGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRp
ZgogCkBAIC0xMjAyLDkgKzkyMSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRG
aW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQogICAgICAgICBwcm9jZXNz
LT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9yVGVzdGluZygpOwogCiAgICAgbV9jb25u
ZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24odGhpcywgcHJvY2Vzcy0+d2ViQ29ubmVj
dGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIG1fd2Vic2l0
ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQpAQCAt
MTI5OSwxMCArMTAxNSw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVh
dGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAgICAgaWYgKCFwYWdl
Q29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAgIC8vIFdlIHRyeSB0
byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxvbmcgYXMgcG9zc2li
bGUuCiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIHdl
YiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVuIHdlIGhhdmUgdG8g
Y3JlYXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAg
IG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRl
RGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAgIHBhZ2VDb25maWd1
cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8V2ViUHJvY2Vzc1By
b3h5PiBwcm9jZXNzOwpAQCAtMTM2OSwxNSArMTA4Miw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBh
Z2VJCiB7CiAgICAgYXV0byByZXN1bHQgPSBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAuYWRkKGRhdGFT
dG9yZS5zZXNzaW9uSUQoKSwgSGFzaFNldDxXZWJQYWdlUHJveHlJZGVudGlmaWVyPigpKS5pdGVy
YXRvci0+dmFsdWUuYWRkKHBhZ2VJRCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3Vs
dC5pc05ld0VudHJ5KTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25J
RCgpOwotICAgIGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSkgewotICAgICAgICBBU1NFUlQoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IGRhdGFT
dG9yZS5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCA9PSBz
ZXNzaW9uSUQpOwotICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFTdG9yZSkpOwotICAgICAg
ICAgICAgZGF0YVN0b3JlLmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgIH0K
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZShX
ZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
KQpAQCAtMTQxMywyNiArMTExNywyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6
ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAogICAgICAg
ICBpc0FwcEJvdW5kID0gaW5pdGlhdGluZ1BhZ2UtPmlzVG9wRnJhbWVOYXZpZ2F0aW5nVG9BcHBC
b3VuZERvbWFpbigpOwogICAgIH0KIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgLy8g
UmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBV
Ukwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCi0gICAgICAgIC8vIFdlIHNldCB0aGUgdmFsdWUg
dG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgotICAgICAgICBpZiAoaW5pdGlhdGluZ1BhZ2Up
IHsKLSAgICAgICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGlu
aXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKLSAgICAgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKLSAg
ICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21h
aW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgICAg
IGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpV
c2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdl
bnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKLSAg
ICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOwotICAgICAgICAg
ICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6
OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJB
Z2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAgICAgICB9Ci0gICAg
ICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAgIG5ldHdvcmtQ
cm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qo
c2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlz
QXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9h
ZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKKyAg
ICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdp
bmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBzZXQgdGhlIHZhbHVl
IHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsK
KyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGlu
Z1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRhdGVkUmVxdWVzdC5z
ZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7CisgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlh
dGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVz
dC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAg
ICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2Vy
QWdlbnQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQ
YXJ0eUZvckNvb2tpZXMoVVJMKCkpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVT
aXRlKGZhbHNlKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmll
bGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAg
ICAgfQorICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkRvd25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1
cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKIAogICAg
IHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTQ0NiwxMSArMTE0Nyw3IEBAIERvd25sb2Fk
UHJveHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBk
YXRhU3RvcmUsIFdlYlBhCiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAobmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2Fk
SUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25I
YW5kbGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0gICAgfQotCisgICAg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElE
KCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKQEAgLTE1MjEsNyArMTIx
OCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkKIAogUHJvY2Vzc0lE
IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQogewotICAgIHJldHVy
biBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIo
KSA6IDA7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnByb2Nl
c3NJZGVudGlmaWVyKCk7CiB9CiAKIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVk
UHJvY2Vzc0lkZW50aWZpZXIoKQpAQCAtMTYxOCwxMCArMTMxNSw3IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRs
ZXJzKGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3Vz
dG9tUHJvdG9jb2xIYW5kbGVycygpLmFkZCh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNj
aGVtZSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnJlZ2lz
dGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJv
dG9jb2xIYW5kbGVycyhjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MzAsMTAgKzEzMjQs
NyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZp
bmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbgogICAgICAgICByZXR1cm47CiAKICAgICBnbG9i
YWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5yZW1vdmUodXJsU2NoZW1l
KTsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxl
Z2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpLnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2Nv
bCh1cmxTY2hlbWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVt
ZUFzQ2FjaGVQYXJ0aXRpb25lZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2NjcsMTYg
KzEzNTgsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVs
IGNhY2hlTW9kZWwpCiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nl
c3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVN
b2RlbChjYWNoZU1vZGVsKSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hl
TW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAg
ICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNhcGFjaXR5KCk7CiAKLSAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVN
b2RlbCksIHsgfSwgeyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5z
ZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91
c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOwogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dElu
dGVydmFsKQpAQCAtMTY4Niw3ICsxMzc1LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVm
YXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKIAogRG93
bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURh
dGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBh
Z2VQcm94eSogb3JpZ2luYXRpbmdQYWdlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8p
CiB7Ci0gICAgcmV0dXJuIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94
eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBy
ZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9y
ZSwgKnRoaXMsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91
bmQpCkBAIC0xNzYyLDI1ICsxNDUxLDExIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1v
cnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjp1c2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24oKQotewotICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkp
OwotICAgIEFTU0VSVCghbV9uZXR3b3JrUHJvY2Vzcyk7Ci0KLSAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9u
ID0gdHJ1ZTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYm
IHJlcGx5KQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3Mt
PmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0
ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7CisgICAg
aWYgKE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNhblNlbmRNZXNzYWdlKCkpCisg
ICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRTeW5jKHN0ZDo6Zm9y
d2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJv
b2wgYWxsb3dzKQpAQCAtMTc5MCwxOSArMTQ2NSwxNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0gICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKCksIDApOworICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKCksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
Ojp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCiB7CiAgICAgdGVybWluYXRlU2VydmljZVdvcmtl
cnMoKTsKIAotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOwotICAgIG1fbmV0d29ya1Byb2Nl
c3MgPSBudWxscHRyOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnRlcm1p
bmF0ZSgpOworCisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkubmV0d29ya1By
b2Nlc3NDcmFzaGVkKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdl
YkNvbnRlbnRQcm9jZXNzZXMoKQpAQCAtMTgxNCwyMiArMTQ4NiwxNyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICgh
bV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0K
LSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25J
bW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNpb25J
bW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVz
dGluZygpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOworICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Rm9yVGVzdGluZygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0
d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOworICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKQEAgLTE4NTQs
MTUgKzE1MjEsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3luY0xvY2FsU3RvcmFnZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmQKIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoKSwgMCk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKCksIDApOwog
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFsbG93
U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDZXJ0aWZpY2F0ZUluZm8q
IGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgZW5zdXJlTmV0d29ya1By
b2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5j
ZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1NwZWNpZmljSFRU
UFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5mbygpLCBob3N0
KSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1dG9tYXRpb25DYXBhYmls
aXRpZXMoKSBjb25zdApAQCAtMjM4MSwxMCArMjA0Nyw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkQ29tbWl0Q3Jvc3NT
aXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRv
RG9tYWluLCBPcHRpb25TZXQ8Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFUcmFuc2Zlcjo6RmxhZz4g
bmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdlUHJv
eHlJRCwgUGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKQogewotICAgIGlmICghbV9uZXR3b3JrUHJv
Y2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+ZGlkQ29tbWl0
Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0b0Rv
bWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGlkQ29tbWl0Q3Jvc3NTaXRl
TG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWluLCB0b0RvbWFpbiwgbmF2
aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBhZ2VJRCk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IDFmNDZjZTRkNjM3ZTc0NmQ5NGM2ZThhZTk2NTNi
YWQwY2E3OTgyN2UuLmM5MTJjOTA2ODAyZjJjOTg5NGZiZWJhZTIzZWRmOWY2Nzg2YmMzZmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtODEsNyArODEsNiBA
QCBPQkpDX0NMQVNTIFdLUHJlZmVyZW5jZU9ic2VydmVyOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNs
YXNzIEF1dG9tYXRpb25DbGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7
CiBjbGFzcyBEb3dubG9hZENsaWVudDsKIGNsYXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIElu
amVjdGVkQnVuZGxlQ2xpZW50OwpAQCAtMTgwLDcgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3Rv
cnlDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6
RG93bmxvYWRDbGllbnQ+JiYpOwogICAgIHZvaWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQ+JiYpOwogCiAgICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2Vy
dmljZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBj
dXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZp
Z3VyYXRpb24tPmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBA
IC0yMDksOSArMjA3LDYgQEAgcHVibGljOgogICAgIC8vIERpc2Nvbm5lY3QgdGhlIHByb2Nlc3Mg
ZnJvbSB0aGUgY29udGV4dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQ
cm94eSopOwogCi0gICAgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRlRGF0YVN0b3Jl
KCkgY29uc3QgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9Ci0gICAgdm9pZCBz
ZXRQcmltYXJ5RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7
IG1fd2Vic2l0ZURhdGFTdG9yZSA9ICZkYXRhU3RvcmU7IH0KLQogICAgIFJlZjxXZWJQYWdlUHJv
eHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9u
PiYmKTsKIAogICAgIHZvaWQgcGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQ
cm94eUlkZW50aWZpZXIsIFdlYnNpdGVEYXRhU3RvcmUmKTsKQEAgLTMwOSw4ICszMDQsNiBAQCBw
dWJsaWM6CiAgICAgQVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudCYgaGlzdG9yeUNsaWVu
dCgpIHsgcmV0dXJuICptX2hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJDb250ZXh0Q2xpZW50JiBj
bGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQmIGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIGNvbnN0IHsgcmV0dXJu
ICptX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsgfQotCiAgICAgc3RydWN0IFN0YXRpc3Rp
Y3MgewogICAgICAgICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAgICAgICAgdW5zaWduZWQgd2tQ
YWdlQ291bnQ7CkBAIC0zMTgsOSArMzExLDYgQEAgcHVibGljOgogICAgIH07CiAgICAgc3RhdGlj
IFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MoKTsgICAgCiAKLSAgICB2b2lkIHVzZVRlc3RpbmdOZXR3
b3JrU2Vzc2lvbigpOwotICAgIGJvb2wgaXNVc2luZ1Rlc3RpbmdOZXR3b3JrU2Vzc2lvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uOyB9Ci0KICAgICB2
b2lkIHNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wpOwogCiAgICAg
dm9pZCBjbGVhckNhY2hlZENyZWRlbnRpYWxzKCk7CkBAIC00MDAsNyArMzkwLDYgQEAgcHVibGlj
OgogCiAgICAgLy8gTmV0d29yayBQcm9jZXNzIE1hbmFnZW1lbnQKICAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBlbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0
ZURhdGFTdG9yZSA9IG51bGxwdHIpOwotICAgIE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQ
cm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKTsgfQogICAgIHZv
aWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmKTsKIAogICAgIHZv
aWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBs
eSYmKTsKQEAgLTQxMCw4ICszOTksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBlc3RhYmxpc2hXb3Jr
ZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMoV2ViUHJvY2Vzc1Byb3h5Jik7CiAgICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVz
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNp
emUoKTsgfQotICAgIHZvaWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyKGJvb2wgYWxsb3dzKSB7IG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29y
a2VyID0gYWxsb3dzOyB9Ci0gICAgYm9vbCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZp
Y2VXb3JrZXIoKSBjb25zdCB7IHJldHVybiBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlcjsgfQogICAgIHZvaWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25z
dCBTdHJpbmcmIHVzZXJBZ2VudCk7CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250
cm9sbGVySWRlbnRpZmllcj4mIHVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2
aWNlV29ya2VycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JT
ZXJ2aWNlV29ya2VyOyB9CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2
aXR5Rm9yVGVzdGluZygpIGNvbnN0OwpAQCAtNTU3LDYgKzU0NCwxNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0
cjx4cGNfb2JqZWN0X3Q+IGVuZHBvaW50TWVzc2FnZSk7CiAjZW5kaWYKIAorICAgIHN0YXRpYyB2
b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJik7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRo
Q3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAg
ICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3Ry
aW5nIHBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2lu
Z0NhY2hlc0RpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0Rp
cmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5
KCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwog
CkBAIC01NzAsOCArNTY4LDYgQEAgcHJpdmF0ZToKICAgICBXZWJQcm9jZXNzUHJveHkmIGNyZWF0
ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3
YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAgICAgdm9pZCBpbml0
aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0b3JlKiwg
V2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJt
ZWQ6Ok5vKTsKIAotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLQogICAgIHZvaWQgaGFuZGxlTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2Vy
RGF0YSYgbWVzc2FnZUJvZHkpOwogICAgIHZvaWQgaGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRh
JiBtZXNzYWdlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJik7CiAK
QEAgLTU5NSwxNCArNTkxLDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdXNlc1NpbmdsZVdlYlBy
b2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVXZWJQcm9j
ZXNzKCk7IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIFN0cmluZyBj
b29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVE
aXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3Rvcnko
KTsKLSAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBz
dGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwotI2VuZGlmCi0KICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJz
KCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBAIC02NjIs
NyArNjUwLDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9u
Q2xpZW50PiBtX2F1dG9tYXRpb25DbGllbnQ7CiAgICAgVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRD
bGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5
Q29udGV4dEhpc3RvcnlDbGllbnQ+IG1faGlzdG9yeUNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50OwogCiAgICAgUmVmUHRyPFdlYkF1dG9tYXRpb25TZXNzaW9uPiBtX2F1dG9tYXRp
b25TZXNzaW9uOwogCkBAIC02OTQsOCArNjgxLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbWVt
b3J5U2FtcGxlckVuYWJsZWQgeyBmYWxzZSB9OwogICAgIGRvdWJsZSBtX21lbW9yeVNhbXBsZXJJ
bnRlcnZhbCB7IDE0MDAuMCB9OwogCi0gICAgUmVmUHRyPFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZT4gbV93ZWJzaXRlRGF0YVN0b3JlOwotCiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIq
LCBSZWZQdHI8V2ViQ29udGV4dFN1cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gV2Vi
Q29udGV4dFN1cHBsZW1lbnRNYXA7CiAgICAgV2ViQ29udGV4dFN1cHBsZW1lbnRNYXAgbV9zdXBw
bGVtZW50czsKIApAQCAtNzMwLDggKzcxNSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fcHJv
Y2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCB7IHRydWUgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrUHJvY2Vzc1Byb3h5PiBtX25ldHdvcmtQcm9jZXNzOwotCiAgICAgSGFzaE1hcDx1aW50
NjRfdCwgUmVmUHRyPERpY3Rpb25hcnlDYWxsYmFjaz4+IG1fZGljdGlvbmFyeUNhbGxiYWNrczsK
IAogI2lmIFVTRShTT1VQKQpAQCAtODUxLDE1ICs4MzQsMTUgQEAgcHJpdmF0ZToKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vz
cyhUJiYgbWVzc2FnZSkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQ
cm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5k
KHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CisgICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLmNhblNlbmRNZXNzYWdlKCkpCisgICAgICAgIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpLnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSkKIHsKICAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpm
b3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDQ4ODg3MjNlMGJkYTU3ODM4YzI4ODc5ZGNj
ZjI3ZTFlM2I0MTRmMjIuLmFhOTE0Mzc0YzkyZjY3ZjE3MWFmZmM2OGFlYzMzOTYxNjk0Nzc2NGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3Jh
bmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgog
I2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5h
Z2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpAQCAtNzUsNiArNzYs
MTAgQEAKICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oIgogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5o
IgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgYm9vbCBhbGxvd3NXZWJz
aXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zOwpAQCAtODMsMTMgKzg4LDIyIEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6YWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zKCkKICAg
ICBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAotc3Rh
dGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVs
dERhdGFTdG9yZXMoKQorc3RhdGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRh
U3RvcmUqPiYgYWxsRGF0YVN0b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRocmVh
ZCgpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwg
V2Vic2l0ZURhdGFTdG9yZSo+PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAorVmVjdG9yPFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzRnJv
bUFsbFN0b3JlcygpCit7CisgICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBh
bGxQYXJhbWV0ZXJzOworICAgIGFsbFBhcmFtZXRlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShh
bGxEYXRhU3RvcmVzKCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0
b3JlcygpLnZhbHVlcygpKQorICAgICAgICBhbGxQYXJhbWV0ZXJzLnVuY2hlY2tlZEFwcGVuZChz
dG9yZS0+cGFyYW1ldGVycygpKTsKKyAgICByZXR1cm4gYWxsUGFyYW1ldGVyczsKK30KKwogUmVm
PFdlYnNpdGVEYXRhU3RvcmU+IFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZU5vblBlcnNpc3RlbnQo
KQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0ZShJc1BlcnNpc3RlbnQ6Ok5vKSwgUEFMOjpTZXNz
aW9uSUQ6OmdlbmVyYXRlRXBoZW1lcmFsU2Vzc2lvbklEKCkpKTsKQEAgLTExNSwxMCArMTI5LDEx
IEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3Rv
cmVDb25maWd1cmF0aW9uPiYmIGNvbmZpZ3VyCiAjZW5kaWYKIHsKICAgICBXVEY6OnNldFByb2Nl
c3NQcml2aWxlZ2VzKGFsbFByaXZpbGVnZXMoKSk7Ci0gICAgbWF5YmVSZWdpc3RlcldpdGhTZXNz
aW9uSURNYXAoKTsKKyAgICByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKICAgICBwbGF0Zm9y
bUluaXRpYWxpemUoKTsKIAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuYWRkU2Vzc2lvbigqdGhpcyk7CiB9CiAKIFdl
YnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKQEAgLTEyOCwxNyArMTQzLDEyIEBA
IFdlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKCkKIAogICAgIHBsYXRmb3JtRGVz
dHJveSgpOwogCi0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNTRVJUKG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0
KG1fc2Vzc2lvbklEKSA9PSB0aGlzKTsKLSAgICAgICAgbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5y
ZW1vdmUobV9zZXNzaW9uSUQpOwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgQVNTRVJUKGFsbERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQp
ID09IHRoaXMpOworICAgIGFsbERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOworICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnJlbW92ZVNlc3Npb24obV9zZXNzaW9u
SUQpOwogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKLSAgICAgICAgaWYgKGF1dG8qIGdwdVByb2Nl
c3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCi0gICAgICAg
ICAgICBncHVQcm9jZXNzUHJveHktPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOworICAgIGlm
IChhdXRvKiBncHVQcm9jZXNzUHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3Jl
YXRlZCgpKQorICAgICAgICBncHVQcm9jZXNzUHJveHktPnJlbW92ZVNlc3Npb24obV9zZXNzaW9u
SUQpOwogI2VuZGlmCiB9CiAKQEAgLTE2OSwxNyArMTc5LDE1IEBAIGJvb2wgV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpCiAgICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVs
dERhdGFTdG9yZSgpOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJX
aXRoU2Vzc2lvbklETWFwKCkKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vz
c2lvbklETWFwKCkKIHsKLSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IG5vbkRlZmF1bHREYXRh
U3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChy
ZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICB9CisgICAgYXV0byByZXN1bHQgPSBhbGxE
YXRhU3RvcmVzKCkuYWRkKG1fc2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJl
c3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogfQogCi1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRl
RGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKQorV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6
ZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
ewotICAgIHJldHVybiBzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSA/IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCkgOiBudWxscHRyOwor
ICAgIHJldHVybiBhbGxEYXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykK
QEAgLTE5NSwxMiArMjAzLDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJv
Y2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgbV9wcm9jZXNzZXMucmVtb3ZlKHBy
b2Nlc3MpOwogfQogCi1XZWJQcm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bv
b2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBwb29scyA9IHByb2Nl
c3NQb29scygxKTsKLSAgICByZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6IHBvb2xz
LmJlZ2luKCktPmdldCgpOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVEaXJl
Y3Rvcmllc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZlZERpcmVjdG9yaWVz
KQpAQCAtNDQzLDggKzQ0NSw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5k
QXBwbHkoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBPCiAgICAgICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3
b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5
cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVu
Y2g6CkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFB
bmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJh
Y2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5mZXRjaFdl
YnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNr
QWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CisgICAg
ICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5mZXRjaFdlYnNpdGVEYXRh
KG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRv
ciwgcHJvY2Vzc1Bvb2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJz
aXRlRGF0YSkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTcyNyw4ICs3MjcsNiBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gZGF0YVR5cGVzLCBXYWxsVGltZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBl
KSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoK
LSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgpAQCAtNzQwLDcgKzczOCw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9u
SUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vz
c1Bvb2xdIHsKKyAgICAgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmRl
bGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtj
YWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwog
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC04OTEsMTQgKzg4OSw5IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiBkYXRhVHlwZXMsIFdhbGxUaW1lCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcykpIHsKICAgICAgICAgaWYgKCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vz
c1RvRGVsZXRlV2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAg
ICAgICAgcHJvY2Vzcy0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywg
bW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRlV2Vic2l0ZURh
dGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGlu
Z0NhbGxiYWNrKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTIsOCArOTg1LDYgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHBvb2xzKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkg
ewogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKQEAgLTEwMTksNyArMTAxMCw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5z
KG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNUU0Nh
Y2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHBy
b2Nlc3NQb29sXSB7CisgICAgICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3Jp
Z2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9t
YWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAg
ICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIH0KQEAgLTExODMsOCArMTE3NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBD
b21wbGV0CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1h
eGltdW1FbnRyeUNvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRNYXhTdGF0aXN0aWNzRW50
cmllcyhtX3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRv
KHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xMTkzLDggKzExODMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxl
dGlvbgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBy
dW5lVGFyZ2V0Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFBydW5lRW50cmllc0Rvd25U
byhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vj
b25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xMjAzLDggKzExOTIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5k
ZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPAogCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpLnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuc2V0R3JhbmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTMsMjAg
KzEyMDEsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1U
aW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1f
c2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogICAgIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZHVtcFJl
c291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vz
c2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEy
MzgsMTIgKzEyMTksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3Vy
Y2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVy
ZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVu
dCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjU1LDEyICsxMjMxLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNz
LT5pc0dyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LmlzR3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjc0LDggKzEyNDUsNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTEyODksMTAgKzEyNTksNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBD
b21wbGV0aQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVudCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzA0LDEyICsxMjcxLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vz
cy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLmlzVmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xMzIzLDEwICsxMjg1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGUKICAgICAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+c2V0VmVyeVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0VmVy
eVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1v
dmFsKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTEzMzUsOCArMTI5NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hv
dWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2CiAgICAg
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpLnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1v
dmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBj
b25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCkBAIC0xMzUwLDIyICsxMzA4LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkws
IGNvCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHRvcEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1YkZyYW1lVVJM
LCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRv
cEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xMzc5LDIzICsxMzI5LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVCiAKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
cEZyYW1lVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291
cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRl
cihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVS
TCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVybFJlZGly
ZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTQwOSwxMCArMTM1MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsCiAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGly
ZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3Rl
ZFRvIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNv
dXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQyNCwxMiArMTM2Miw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3Qg
VVJMJiBzdWJyZXNvdXJjZVVSCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAg
fQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZy
YW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ0MSwxMiArMTM3NCw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9w
RnJhbWVVUkwsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVy
bFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xNDU4LDI1ICsxMzg2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJl
Y3RpbmdUbyhjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBjb25zdCBVUkwmIHVybFJlZGly
ZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9j
ZXNzLT5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25I
YW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5pc1Jl
Z2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0
ODgsNDYgKzE0MDUsMjcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJl
c291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNz
LT5jbGVhclByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuY2xlYXJQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2ws
IGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkucmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklE
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c3VibWl0VGVsZW1ldHJ5KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+c3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0p
OwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zdWJtaXRUZWxl
bWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNpbmNl
LCBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lv
bklELCBtb2RpZmllZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQs
IG1vZGlmaWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFTdW1tYXJ5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTU3MCwyMiArMTQ2OCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRoZXJTdGF0aQogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnQobV9zZXNzaW9uSUQsIHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lv
bklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0
ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29va2ll
QmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5z
Y2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGlj
c0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNTk0LDI0ICsxNDg0LDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKENvbXBsZXRp
b25IYW5kCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNz
aW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zY2hlZHVsZVN0YXRpc3RpY3NBbmRE
YXRhUmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxs
VGFibGVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5z
dGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS5zdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjIzLDIyICsxNTAyLDE0IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNlY29u
ZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcHJvY2Vzcy0+c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmwgfSwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZG9tYWluSURFeGlz
dHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1fc2Vz
c2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVy
bCwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwyLCBTZWNv
bmRzIGxhc3RTZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgU2Vjb25kcyBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgYm9vbCBpc1ByZXZhbGVudCwg
Ym9vbCBpc1ZlcnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY1MCwxMCArMTUy
MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHRvcEZyCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgcHJvY2Vzcy0+bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2
YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLm1l
cmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4s
IGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZh
dGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaGFk
VXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwsIGJvb2wgaXNQcmV2YWxlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE2NjUsMTggKzE1MzMsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBo
YWQKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5pbnNl
cnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLmluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2No
ZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGlzUHJldmFsZW50LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQot
ICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChtX3Nl
c3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QoYm9v
bCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTY4NCw4ICsxNTQ4LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5pbmdS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBDb21wbGUKICAgICB1c2VFeHBs
aWNpdElUUFN0YXRlKCk7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldElz
UnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRB
bGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTY5Niw3ICsxNTU5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpn
ZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdlYlBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNz
UG9vbCgpLmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMo
bV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Np
b25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAKQEAgLTE3MDQsOCArMTU2
Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bihTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25ICiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFRpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVyYWN0
aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xNzE5LDEwICsxNTgxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjps
b2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQK
ICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bG9n
VXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNv
bnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTczNCwxMyArMTU5Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFz
SGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJ
bnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9u
bHlJbkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QgVVJMJiB0b3BVcmwsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzUy
LDEzICsxNjA1LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJ
bkRhdGFiYXNlT25jZShjb25zdCBVUkwmIHN1YlVybCwgY29uc3QKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFz
ZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuaXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc3MiwxMCAr
MTYxOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3Jh
bmRmYXRoZXJlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTc4OSwxMCArMTYzMyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRm
YXRoZXJlZChjb25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFu
ZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldEdyYW5kZmF0aGVyZWQobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJl
ZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xODAxLDEwICsxNjQyLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0
ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZnJvbVVSTCwgY29u
c3QgVVJMJiB0b1VSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTgxMyw2MiArMTY1MSwzOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENy
b3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgogICAg
IAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0
Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvVVJMIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRDcm9zc1Np
dGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9VUkwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGlu
ZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nl
c3MtPnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5yZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0
aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyhjb25zdCBV
UkwmIHVybCwgYm9vbCBpbmNsdWRlSHR0cE9ubHlDb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZUNvb2tpZXNGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBp
bmNsdWRlSHR0cE9ubHlDb29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5kZWxldGVDb29raWVzRm9yVGVz
dGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5j
bHVkZUh0dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBj
b25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xvY2FsU3RvcmFnZSht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5nKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0lzb2xhdGVk
U2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5oYXNJc29sYXRlZFNlc3Npb24obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRT
aG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
c2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0xODk5LDEwICsx
NzEzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlKFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWUKICAgICAgICAgICAgIHdlYlByb2Nlc3Mu
c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShibG9ja2luZ01vZGUsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
dFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25J
RCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkxMCwxMCArMTcyMSw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVu
YmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlCiAgICAgYXV0byBmbGFnID0gZW5hYmxlZCA/IFdlYkNv
cmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJDb3JlOjpTYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRW5ibGVTYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGlu
ZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTkyMSwyMCArMTcyOSwxNCBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBh
cnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIGF1dG8gbW9kZSA9IGVuYWJsZWQgPyBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llcyA6IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlOjpOb25lOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEZp
cnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9k
ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkuc2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JU
ZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVT
aXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUb1NhbWVTaXRlU3Ry
aWN0Q29va2llc0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9y
VGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3Rp
bmcoY29uc3QgVVJMJiBmaXJzdFBhcnR5VVJMLCBjb25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTY5LDggKzE3NzEs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50
UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291
cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlY29uZHMpOwogICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CkBAIC0xOTgyLDIyICsxNzgzLDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhDb21wbGV0aW9uSGFu
ZGxlCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRD
YWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkucmVzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25J
RCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKICNlbmRpZgogfQogCi1ib29sIFdlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFBy
b2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkgY29uc3QKLXsKLSAgICBpZiAo
YXV0byogcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPSBwcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3Jl
KCkpCi0gICAgICAgIHJldHVybiBwcm9jZXNzUG9vbERhdGFTdG9yZSA9PSB0aGlzOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQogSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRl
RGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb25zdAogewogICAgIEhhc2hT
ZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gcHJvY2Vzc1Bvb2xzOwpAQCAtMjAxMiw5ICsxODAz
LDYgQEAgSGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpw
cm9jZXNzUG9vbHMoc2l6ZV90IGxpbWl0KSBjb24KICAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1w
dHkoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbmUgb2YgdGhlIGxlZ2FjeSBkYXRh
IHN0b3Jlcy4KICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29s
OjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKCFpc0Fzc29jaWF0ZWRQcm9j
ZXNzUG9vbCgqcHJvY2Vzc1Bvb2wpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCiAgICAg
ICAgICAgICBwcm9jZXNzUG9vbHMuYWRkKHByb2Nlc3NQb29sKTsKICAgICAgICAgICAgIGlmIChw
cm9jZXNzUG9vbHMuc2l6ZSgpID09IGxpbWl0KQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjEzMiwxNyArMTkyMCwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICAgICAgCiAgICAgICAgIHJlc29s
dmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29s
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSk7CisgICAgICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1
ZSksIDApOworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
CiAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihN
ZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1
ZSksIG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHBy
b2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSkp
OworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25J
RCwgZmFsc2UpLCAwKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCiAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChmYWxz
ZSksIG1fc2Vzc2lvbklEKTsKLSAgICB9CiAKICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkID0gZmFsc2U7CiAjZWxzZQpAQCAtMjE1NCw4ICsxOTQwLDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQp
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soRnVu
Y3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAoY2FsbGJh
Y2spIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQot
ICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVu
dCh0cnVlKSk7CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVz
dGluZ0V2ZW50KHRydWUpLCAwKTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0aXN0aWNzVGVzdGlu
Z0NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CkBAIC0yMTc0LDggKzE5NTksNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9v
bCBlbmFibGVkLCBDb21wbGV0aQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBw
cm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKICAgICBVTlVT
RURfUEFSQU0oY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMjE5MCwyMCArMTk3NCwxNSBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1f
c2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS5pc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRs
ZXIoZmFsc2UpOworI2VuZGlmCiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlj
a0F0dHJpYnV0aW9uRGVidWdNb2RlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsK
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRBZENsaWNrQXR0cmlidXRp
b25EZWJ1Z01vZGUoZW5hYmxlZCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQpAQCAtMjIyNSwyOSArMjAwNCw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xl
YXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzSW5XZWJQcm9jZXNzZXMoQ29tcGxldGlvbkhhbmRsCiB9
CiAjZW5kaWYKIAotVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gV2Vic2l0ZURhdGFTdG9yZTo6cGVu
ZGluZ0Nvb2tpZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb3B5VG9WZWN0b3IobV9wZW5kaW5n
Q29va2llcyk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZShj
b25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJl
bW92ZUlmKFsmY29va2llXShhdXRvJiBwZW5kaW5nQ29va2llKSB7Ci0gICAgICAgIHJldHVybiBw
ZW5kaW5nQ29va2llLmlzS2V5RXF1YWwoY29va2llKTsKLSAgICB9KTsKLSAgICBtX3BlbmRpbmdD
b29raWVzLmFkZChjb29raWUpOwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBl
bmRpbmdDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5k
aW5nQ29va2llcy5yZW1vdmUoY29va2llKTsKLX0KLSAgICAKLXZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6Y2xlYXJQZW5kaW5nQ29va2llcygpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5jbGVhcigp
OwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2
b2lkKCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goV1RGTW92ZShmdW5j
dGlvbikpOwpAQCAtMjI3MSw4ICsyMDI3LDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMg
V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJ
Zk5lY2Vzc2FyeSgpOwogCi0gICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdD
b29raWVzKCk7Ci0KICAgICBhdXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBt
X2NvbmZpZ3VyYXRpb24tPnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhh
bmRsZTsKICAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgp
KQpAQCAtMjM3MSw3ICsyMTI1LDE0IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNp
dGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQgPSBtX3Jl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1TZXROZXR3
b3JrUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNp
dGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Bl
cm1pc3Npb24oKTsKKyNlbmRpZgogCisjaWYgVVNFKFNPVVApCisgICAgV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNl
c3Npb25JRCgpLCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJz
aXN0ZW50U3RvcmFnZVBhdGgsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gcGFy
YW1ldGVyczsKIH0KIApAQCAtMjQwMSwxMCArMjE2Miw2IEBAIEFQSTo6SFRUUENvb2tpZVN0b3Jl
JiBXZWJzaXRlRGF0YVN0b3JlOjpjb29raWVTdG9yZSgpCiAgICAgcmV0dXJuICptX2Nvb2tpZVN0
b3JlOwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KCkKLXsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxz
KEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2lu
RGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFpc1BlcnNpc3Rl
bnQoKSkgewpAQCAtMjQyNSwxMCArMjE4Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0
TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgcHJvY2Vzcy0+cmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucmVz
ZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lm
ICFQTEFURk9STShDT0NPQSkKQEAgLTI0NjYsMzQgKzIyMjAsMjEgQEAgV1RGOjpTdHJpbmcgV2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgp
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLmhhc0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNs
ZWFyQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IG5ldHdvcmtQcm9jZXNzLT5jbGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
bmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoVVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFtZSwgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNl
c3Npb24oKnRoaXMpOwotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9yaWdpbklu
V2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5hZGRTZXNzaW9uKCp0aGlzKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lv
bklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTI1MTYsNyArMjI1Nyw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXpl
ZChDb21wbGV0aW9uSGFuZGxlCiAKICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoZ2xvYmFs
RGVmYXVsdERhdGFTdG9yZSgpLmdldCgpLCAqYXBwQm91bmREb21haW5zKTsKIAotICAgIGZvciAo
YXV0byogc3RvcmUgOiBub25EZWZhdWx0RGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgIGZvciAo
YXV0byogc3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFsdWVzKCkpCiAgICAgICAgIHByb3BhZ2F0
ZUFwcEJvdW5kRG9tYWlucyhzdG9yZSwgKmFwcEJvdW5kRG9tYWlucyk7CiB9CiAKQEAgLTI1MjQs
MTAgKzIyNjUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0Zv
cklUUChjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYgogewogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEFwcEJvdW5k
RG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3Mo
bV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5k
aWYKIApAQCAtMjUzNSwxNiArMjI3MywxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVwZGF0
ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmluZyYgYnVuZAogewog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS51cGRhdGVCdW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
dXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRp
ZmllckluTmV0d29ya1Byb2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5jbGVh
ckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oCmluZGV4IDRlYzEzZTE2ZmU0ODJkMjZhMmVhZmEzMTIzZTMyMzNhNzM3Y2IxMmIuLjY1
NDExMmM0MjdiNGZhNWVlODY0NGE2NzI2MmM2MGI2OTYwZDhmMzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAg
LTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0
ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB+V2Vic2l0
ZURhdGFTdG9yZSgpOwogCi0gICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nTm9u
RGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CisgICAgc3RhdGlj
IFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vz
c2lvbklEKTsKIAogICAgIGJvb2wgaXNQZXJzaXN0ZW50KCkgY29uc3QgeyByZXR1cm4gIW1fc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCk7IH0KICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBj
b25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQpAQCAtMjI4LDE1ICsyMjgsOCBAQCBwdWJsaWM6
CiAKICAgICBEZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2Uo
KSB7IHJldHVybiBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlLmdldCgpOyB9CiAKLSAgICBXZWJQ
cm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAg
IGJvb2wgaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsKLQog
ICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHBhcmFtZXRlcnMoKTsKLQotICAgIFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+IHBlbmRpbmdDb29raWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRQ
ZW5kaW5nQ29va2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgcmVtb3ZlUGVu
ZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIGNsZWFyUGVuZGlu
Z0Nvb2tpZXMoKTsKKyAgICBzdGF0aWMgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
PiBwYXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpOwogCiAgICAgdm9pZCBkaXNwYXRjaE9uUXVldWUo
RnVuY3Rpb248dm9pZCgpPiYmKTsKIApAQCAtMjYxLDggKzI1NCw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldE1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24oV2ViQ29yZTo6TW9ja1dl
YkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbiYmKTsKICNlbmRpZgogCi0gICAgdm9pZCBkaWRD
cmVhdGVOZXR3b3JrUHJvY2VzcygpOwotCiAgICAgY29uc3QgV2Vic2l0ZURhdGFTdG9yZUNvbmZp
Z3VyYXRpb24mIGNvbmZpZ3VyYXRpb24oKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24uZ2V0KCk7
IH0KIAogICAgIFdlYnNpdGVEYXRhU3RvcmVDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xp
ZW50LmdldCgpOyB9CkBAIC0zNDQsNyArMzM1LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5
LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtl
eXMoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBjb25zdCBIYXNoU2V0
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKIAotICAgIHZvaWQgbWF5YmVSZWdpc3Rl
cldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICB2b2lkIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgp
OwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgc3RhdGljIE9wdGlvbmFsPEhhc2hTZXQ8V2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4+PiBhcHBCb3VuZERvbWFpbnNJZkluaXRpYWxpemVkKCk7
CkBAIC0zODIsOCArMzczLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGVyc2lzdGVudENyZWRl
bnRpYWxTdG9yYWdlRW5hYmxlZCB7IHRydWUgfTsKICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJD
b3JlOjpDb29raWU+IG1fcGVuZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2Vi
UHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3NlczsKIAogICAgIGJvb2wgbV9pc0l0cFN0YXRlRXhwbGlj
aXRseVNldCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCmluZGV4
IDEyZjljZDgxOWI2ZGNjYThhYzUwOTJhMzBkZDkzYzUzYjhlZTkzNDIuLjViYTM5MDBkMmRhZmYw
NTZhYmQwY2RmMDU3YWUzMjg1NGViZmVjZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNv
dXAuY3BwCkBAIC0zOSw4ICszOSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1T
ZXROZXR3b3JrUGFyYW1ldGVycyhXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYKICAgICBhdXRv
JiBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVyczsKICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRp
YWxTdG9yYWdlRW5hYmxlZCA9IG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZDsK
IAotICAgIGlmIChhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFn
ZU9wZXJhdGlvbnMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwg
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisgICAg
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldENvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2ll
UGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVy
c2lzdGVudFN0b3JhZ2VUeXBlKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJz
aXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCmluZGV4
IDBhODRhNzU5MGQ5YTk4NWJmYzk5Njg0YTQ4OTUxMzc0ZTViMjk0MjkuLjI3ZjIzZWEwNjVkYzc1
Y2U0YTgyNzBjNTc2ZWEyYWE1NWFiMGRjOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcApAQCAtNDQsNyArNDQsNyBAQCB2
b2lkIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVu
Y2hlcjo6TGF1bmNoT3B0aW9ucyYgbAogICAgICAgICBpZiAoIWRhdGFTdG9yZSkgewogICAgICAg
ICAgICAgLy8gUHJld2FybWVkIHByb2Nlc3NlcyBkb24ndCBoYXZlIGEgV2Vic2l0ZURhdGFTdG9y
ZSB5ZXQsIHNvIHVzZSB0aGUgcHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlIGZyb20gdGhlIFdlYlBy
b2Nlc3NQb29sLgogICAgICAgICAgICAgLy8gVGhlIHByb2Nlc3Mgd29uJ3QgYmUgdXNlZCBpZiBj
dXJyZW50IFdlYnNpdGVEYXRhU3RvcmUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIFdlYlByb2Nlc3NQ
b29sIHByaW1hcnkgb25lLgotICAgICAgICAgICAgZGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC0+
d2Vic2l0ZURhdGFTdG9yZSgpOworICAgICAgICAgICAgZGF0YVN0b3JlID0gV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwogICAgICAgICB9CiAKICAgICAgICAgQVNT
RVJUKGRhdGFTdG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3Vw
L1dlYkNvb2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
c291cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcAppbmRleCA5ZjdiZTNjOTQxYjZjZDBh
MWI5NGNiMTM2MDk4ZjNhMDQxY2VmZjk5Li4wODkyOGZjZDMxNmQ4OGY5ZDUxNTAwZWM2ODRhZDFi
NjRhZjhhM2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNv
b2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3Nv
dXAvV2ViQ29va2llTWFuYWdlclByb3h5U291cC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKIAorI2lu
Y2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2Vy
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogCkBAIC0zNCw3ICszNSw3
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3Ry
aW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdl
VHlwZSkKIHsKICAgICBtX2Nvb2tpZVBlcnNpc3RlbnRTdG9yYWdlTWFwLnNldChzZXNzaW9uSUQs
IHN0ZDo6bWFrZV9wYWlyKHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOwotICAgIHByb2Nlc3NQ
b29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9y
YWdlVHlwZSkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVz
c2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Np
b25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5OjpnZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIFN0cmluZyYgc3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFn
ZVR5cGUmIHN0b3JhZ2VUeXBlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCmluZGV4IGJmYmJmOTY2NGU0ODM1MzA5NzA5
NzExZGZkNmMxMzQxNTczMmJkYWMuLjA3OTNlZDUxMzkxNTI4ZDliNGI5ZmRiMGY0YWQzYzg5NjBm
ZGE1MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vz
c1Bvb2xTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nl
c3NQb29sU291cC5jcHAKQEAgLTM3LDMwICszNywyNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAgTmV0d29y
a1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycyA9IHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzOwotICAgIHN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQ
ZXJzaXN0ZW50U3RvcmFnZShkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklELCBkZWZh
dWx0U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBkZWZhdWx0
U2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKLSAgICBpZiAo
bV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMucGVy
c2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVy
c2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpOworICAgIC8vIEZJWE1FOiBtX2luaXRp
YWxIVFRQQ29va2llQWNjZXB0UG9saWN5IHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURh
dGFTdG9yZS4KKyAgICAvLyBGSVhNRTogbV9pZ25vcmVUTFNFcnJvcnMgc2hvdWxkIGJlIG1vdmVk
IHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlIG9yIHJlbW92ZWQuCisgICAgLy8gRklYTUU6IG1fbmV0
d29ya1Byb3h5U2V0dGluZ3Mgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3Jl
LgogCi0gICAgcGFyYW1ldGVycy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2luaXRpYWxIVFRQQ29v
a2llQWNjZXB0UG9saWN5OwotICAgIHBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3JzID0gbV9pZ25v
cmVUTFNFcnJvcnM7CiAgICAgcGFyYW1ldGVycy5sYW5ndWFnZXMgPSB1c2VyUHJlZmVycmVkTGFu
Z3VhZ2VzKCk7Ci0gICAgcGFyYW1ldGVycy5wcm94eVNldHRpbmdzID0gbV9uZXR3b3JrUHJveHlT
ZXR0aW5nczsKICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gdHJ1ZTsK
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3Jl
VExTRXJyb3JzKQogewogICAgIG1faWdub3JlVExTRXJyb3JzID0gaWdub3JlVExTRXJyb3JzOwot
ICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1faWdub3JlVExT
RXJyb3JzKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vy
cm9ycyksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0
aW5ncyhjb25zdCBXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmIHNldHRpbmdzKQog
ewogICAgIG1fbmV0d29ya1Byb3h5U2V0dGluZ3MgPSBzZXR0aW5nczsKLSAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fbmV0d29ya1Byb3h5U2V0dGlu
Z3MpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9uZXR3b3JrUHJv
eHlTZXR0aW5ncyksIDApOwogfQogCiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggOWRlMWE1ZjEzMzUyYWQ0MDIyNjIyNjBmYTViMjc3YTQ1OTg5
MDUyMi4uZjI5MDZiYTRhMGZiMDRjMDY4MjhlMGQzZmY0OTlkYzQxNTgzNDVkOSAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBA
CisyMDIwLTA4LTExICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgVXNlIGEgTmV0d29ya1Byb2Nlc3NQcm94eSBzaW5nbGV0b24gaW5zdGVhZCBv
ZiBvbmUgcGVyIFdlYlByb2Nlc3NQb29sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM1NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhl
ZERCRmlsZU5hbWUubW06CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlz
dGljcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvVExTRGVwcmVjYXRpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
RVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENv
b2tpZVN0b3JlLm1tOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdl
YlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1l
OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURl
bGVnYXRlIHdhaXRGb3JNZXNzYWdlXSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJ
RGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KToKKwogMjAyMC0wOC0xMSAgS2Vp
dGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIGZpbHRlci1i
dWlsZC13ZWJraXQgZm9yIHVua25vd24vdW5oYW5kbGVkIG1lc3NhZ2VzCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFt
ZS5tbQppbmRleCAxMWY4N2Y4MDM0ZDJiMWI1NWQ3MjBkZWI3NjVhMzE2ODIxMjBkNzczLi5hOThi
ZjM4MjViYjFlZDZkNzU5YzA4ZDQ1MzNhZGNiN2ZmMzk1ZmQ1IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUu
bW0KQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIFJldGFpblB0cjxXS1NjcmlwdE1lc3NhZ2U+IGxh
c3RTY3JpcHRNZXNzYWdlOwogCiBAZW5kCiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoKQorc3RhdGlj
IHZvaWQgcnVuVGVzdChib29sIG9sZEZpbGVTaG91bGRFeGlzdCA9IHRydWUpCiB7CiAgICAgYXV0
byBoYW5kbGVyID0gYWRvcHROUyhbW0luZGV4ZWREQkZpbGVOYW1lTWVzc2FnZUhhbmRsZXIgYWxs
b2NdIGluaXRdKTsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3
Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwpAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgdm9p
ZCBydW5UZXN0KCkKICAgICBOU1VSTCAqb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCA9IFtv
bGRWZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogQCJmaWxl
X18wIl07CiAgICAgTlNVUkwgKm5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbbmV3VmVy
c2lvbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJd
OwogICAgIE5TVVJMICpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xk
VmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6dW51
c2VkRGF0YWJhc2VOYW1lXTsKLSAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0
b3J5VVJMLnBhdGhdKTsKKyAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1h
bmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5
VVJMLnBhdGhdID09IG9sZEZpbGVTaG91bGRFeGlzdCk7CiAgICAgCiAgICAgLy8gRm9yIGRhdGFi
YXNlIHRoYXQgaXMgb3BlbmVkIGFmdGVyIHVwZ3JhZGUsIGl0cyBmaWxlIHNob3VsZCBvbmx5IGJl
IGluIHYxLgogICAgIE5TVVJMICpvbGRWZXJzaW9uRXhpc3RpbmdEYXRhYmFzZURpcmVjdG9yeVVS
TCA9IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDogZXhpc3RpbmdEYXRhYmFzZU5hbWVdOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRpYyB2
b2lkIGNyZWF0ZURpcmVjdG9yaWVzKFN0cmluZyB0ZXN0TmFtZSkKIFRFU1QoSW5kZXhlZERCLCBJ
bmRleGVkREJGaWxlTmFtZSkKIHsKICAgICBjcmVhdGVEaXJlY3Rvcmllcygibm9uZSIpOwotICAg
IHJ1blRlc3QoKTsKKyAgICBydW5UZXN0KGZhbHNlKTsKIH0KIAogVEVTVChJbmRleGVkREIsIElu
ZGV4ZWREQkZpbGVOYW1lVjApCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KaW5kZXggMTdi
YzdmNWQ3NDQ4NGFiNTRkNjc3YTQ3Mjg5MTQyOGVmMmZmYTJjMC4uNjU2MmUyZWU0NGI0MTM5YzA2
YWEzM2IzMTAxYTUzMGRlNWQ2MjJjNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQpA
QCAtMTU1OCwxMCArMTU1OCw4IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgTWlncmF0
ZURhdGFGcm9tTWlzc2luZ1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RTYW1lU2l0CiAKIFRFU1QoUmVz
b3VyY2VMb2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9v
bCkKIHsKKyAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05T
VGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ2Fu
QWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNd
OwogICAgIGF1dG8gZGVmYXVsdEZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1h
bmFnZXJdOwotICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVD
b25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1
dG9yZWxlYXNlXTsKLSAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUg
YWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0
b3JlbGVhc2VdOwotICAgIE5TVVJMICppdHBSb290VVJMID0gW1tkYXRhU3RvcmUgX2NvbmZpZ3Vy
YXRpb25dIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5XTsKICAgICBOU1VSTCAqZmls
ZVVSTCA9IFtpdHBSb290VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIm9ic2VydmF0
aW9ucy5kYiJdOwogICAgIFtkZWZhdWx0RmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0UGF0aDppdHBS
b290VVJMLnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfRkFMU0UoW2RlZmF1bHRGaWxlTWFu
YWdlciBmaWxlRXhpc3RzQXRQYXRoOml0cFJvb3RVUkwucGF0aF0pOwpAQCAtMTU3Miw2ICsxNTcw
LDEwIEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1hcnlX
aXRoTm9Qcm9jZXNzUG9vbCkKICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZp
bGVFeGlzdHNBdFBhdGg6bmV3RmlsZVVSTC5wYXRoXSk7CiAgICAgW2RlZmF1bHRGaWxlTWFuYWdl
ciBjb3B5SXRlbUF0UGF0aDpuZXdGaWxlVVJMLnBhdGggdG9QYXRoOmZpbGVVUkwucGF0aCBlcnJv
cjpuaWxdOwogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0
UGF0aDpmaWxlVVJMLnBhdGhdKTsKKworICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLl9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gaXRwUm9vdFVSTDsKKyAgICBhdXRvICpk
YXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3Vy
YXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwogICAgIFtkYXRhU3Rv
cmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOllFU107CiAKICAgICBzdGF0aWMg
Ym9vbCBkb25lRmxhZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9UTFNEZXByZWNhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvVExTRGVwcmVjYXRpb24ubW0KaW5kZXggNjc3ZjAwYTMwNTcwM2Uy
NDk2YWJkZTY0YzNhZmMyY2QyNzdhZDE2Ny4uNGEwNmJkZmE3N2FiOTk3NTM3ZGUyZWM1Y2JlMTk1
MThkMDk2MzM5OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9UTFNEZXByZWNhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tCkBAIC0xNzYsNyArMTc2LDggQEAgVEVTVChUTFNW
ZXJzaW9uLCBOZXR3b3JrU2Vzc2lvbikKICAgICB9OwogICAgIHsKICAgICAgICAgVENQU2VydmVy
IHNlcnZlcihUQ1BTZXJ2ZXI6OlByb3RvY29sOjpIVFRQUywgVENQU2VydmVyOjpyZXNwb25kV2l0
aE9LLCB0bHMxXzEpOwotICAgICAgICBhdXRvIHdlYlZpZXcgPSBtYWtlV2ViVmlld1dpdGgoW1dL
V2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3JlXSk7CisgICAgICAgIF9XS1dlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1tbX1dLV2Vic2l0ZURhdGFT
dG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgYXV0
byB3ZWJWaWV3ID0gbWFrZVdlYlZpZXdXaXRoKFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10g
X2luaXRXaXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV0pOwogICAg
ICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltO
U1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiaHR0cHM6Ly8x
MjcuMC4wLjE6JWQvIiwgc2VydmVyLnBvcnQoKV1dXV07CiAgICAgICAgIFtkZWxlZ2F0ZSB3YWl0
Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAgICAgfQpAQCAtMjAyLDcgKzIwMyw4IEBAIFRFU1Qo
VExTVmVyc2lvbiwgTmV0d29ya1Nlc3Npb24pCiAgICAgICAgIFRDUFNlcnZlciBzZXJ2ZXIoVENQ
U2VydmVyOjpQcm90b2NvbDo6SFRUUFMsIFtdKFNTTCAqc3NsKSB7CiAgICAgICAgICAgICBFWFBF
Q1RfRkFMU0Uoc3NsKTsKICAgICAgICAgfSwgdGxzMV8xKTsKLSAgICAgICAgYXV0byB3ZWJWaWV3
ID0gbWFrZVdlYlZpZXdXaXRoKFtXS1dlYnNpdGVEYXRhU3RvcmUgZGVmYXVsdERhdGFTdG9yZV0p
OworICAgICAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlv
biA9IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRv
cmVsZWFzZV07CisgICAgICAgIGF1dG8gd2ViVmlldyA9IG1ha2VXZWJWaWV3V2l0aChbW1tXS1dl
YnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlv
bl0gYXV0b3JlbGVhc2VdKTsKICAgICAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVx
dWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAImh0dHBzOi8vMTI3LjAuMC4xOiVkLyIsIHNlcnZlci5wb3J0KCldXV1dOwog
ICAgICAgICBbZGVsZWdhdGUgd2FpdEZvckRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb25dOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V0tIVFRQQ29va2llU3RvcmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCmluZGV4IGEzNWYwNTM1MGFhYjRiNDJmMzZjNDZhZWNk
ZWVlZTZjZTU0NGVmODYuLjMzNzYwOTJhMTk1YjUxMmRhNjdjNDk2ZTQ1MjE3YjkxNGZlMmE1Nzkg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQ
Q29va2llU3RvcmUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS0hUVFBDb29raWVTdG9yZS5tbQpAQCAtNDc5LDggKzQ3OSw2IEBAIHN0YXRpYyBib29sIGZp
bmlzaGVkOwogfQogQGVuZAogCi0vLyBGSVhNRTogb24gaU9TLCBVSSBwcm9jZXNzIHNob3VsZCBi
ZSB1c2luZyB0aGUgc2FtZSBjb29raWUgZmlsZSBhcyB0aGUgbmV0d29yayBwcm9jZXNzIGZvciBk
ZWZhdWx0IHNlc3Npb24uCi0jaWYgUExBVEZPUk0oTUFDKQogZW51bSBjbGFzcyBTaG91bGRFbmFi
bGVQcm9jZXNzUHJld2FybWluZyB7IE5vLCBZZXMgfTsKIHZvaWQgcnVuV0tIVFRQQ29va2llU3Rv
cmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxk
RW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcpCiB7CkBAIC01ODksMjAgKzU4Nyw2NiBAQCBURVNUKFdL
SFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xXaXRoUHJld2FybWluZykKICAgICBy
dW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9jZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNz
UHJld2FybWluZzo6WWVzKTsKIH0KIAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQogQGludGVy
ZmFjZSBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0
ZT4KKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MOworLSAoTlNTdHJpbmcgKil3YWl0Rm9y
TWVzc2FnZTsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVs
ZWdhdGUKK0BpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHsKKyAg
ICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9tZXNzYWdlOworfQorCiAtICh2b2lkKXdlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNT
dHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAg
RVhQRUNUX1NUUkVRKCJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIsIG1lc3NhZ2UuVVRG
OFN0cmluZyk7CisgICAgX21lc3NhZ2UgPSBtZXNzYWdlOwogICAgIGZpbmlzaGVkID0gdHJ1ZTsK
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQorCistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNz
YWdlCit7CisgICAgd2hpbGUgKCFfbWVzc2FnZSkKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6c3BpblJ1bkxvb3AoKTsKKyAgICByZXR1cm4gX21lc3NhZ2UuYXV0b3JlbGVhc2UoKTsKK30K
KworLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhUTUwKK3sKKyAgICByZXR1cm4gQCI8c2NyaXB0
PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAw
OyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJp
bSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0
PiI7Cit9CisKIEBlbmQKIAorVEVTVChXZWJLaXQsIFdLSFRUUENvb2tpZVN0b3JlTXVsdGlwbGVW
aWV3cykKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MSA9IFtbVGVzdFdLV2ViVmlldyBu
ZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzEgc3luY2hyb25vdXNseUxvYWRIVE1MU3Ry
aW5nOkAic3RhcnQgbmV0d29yayBwcm9jZXNzIl07CisKKyAgICBOU0hUVFBDb29raWUgKnNlc3Np
b25Db29raWUgPSBbTlNIVFRQQ29va2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOkB7CisgICAgICAg
IE5TSFRUUENvb2tpZVBhdGg6IEAiLyIsCisgICAgICAgIE5TSFRUUENvb2tpZU5hbWU6IEAiU2Vz
c2lvbkNvb2tpZU5hbWUiLAorICAgICAgICBOU0hUVFBDb29raWVWYWx1ZTogQCJDb29raWVWYWx1
ZSIsCisgICAgICAgIE5TSFRUUENvb2tpZURvbWFpbjogQCIxMjcuMC4wLjEiLAorICAgIH1dOwor
CisgICAgX19ibG9jayBib29sIHNldENvb2tpZURvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldzEu
Y29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlLmh0dHBDb29raWVTdG9yZSBzZXRDb29raWU6
c2Vzc2lvbkNvb2tpZSBjb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBzZXRDb29raWVEb25l
ID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnNldENvb2tp
ZURvbmUpOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW0NoZWNrU2Vzc2lvbkNvb2tp
ZVVJRGVsZWdhdGUgbmV3XSk7CisgICAgW3dlYlZpZXcxIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUu
Z2V0KCldOworCisgICAgW3dlYlZpZXcxIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENv
b2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4x
Il1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vz
c2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKKworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZp
ZXcyID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MiBz
ZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldzIgbG9hZEhUTUxTdHJp
bmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0gYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAgRVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3
YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2llTmFtZT1Db29raWVWYWx1ZSIpOworfQorCiBU
RVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9u
KQogewogICAgIFJldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmU+IGVwaGVtZXJhbFN0b3JlV2l0
aENvb2tpZXMgPSBbV0tXZWJzaXRlRGF0YVN0b3JlIG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOwpA
QCAtNjI3LDkgKzY3MSw4IEBAIFRFU1QoV0tIVFRQQ29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNz
UG9vbEVwaGVtZXJhbFNlc3Npb24pCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5p
c2hlZCk7CiAgICAgZmluaXNoZWQgPSBmYWxzZTsKICAgICAKLSAgICBOU1N0cmluZyAqYWxlcnRD
b29raWVIVE1MID0gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0
KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsgY29va2ll
c1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChjb29raWVz
LmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Ci0gICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6YWxl
cnRDb29raWVIVE1MIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAu
MC4xIl1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOworICAgIFt3
ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9X
S19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29v
a2llVmFsdWUiKTsKIH0KIAogc3RhdGljIGJvb2wgYXJlQ29va2llc0VxdWFsKE5TSFRUUENvb2tp
ZSAqZmlyc3QsIE5TSFRUUENvb2tpZSAqc2Vjb25kKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcAppbmRleCBhNDNmYTgxMzRhN2FiNzZjM2EzYjdmODIwOGRjOTI2Njcy
NzQ3NDYxLi5hMDYzMDM0NWY1OGU1MDZmMGE0MTNkYzExZmU4M2ViNTY0ZmIyNGFjIDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMTA2Niw4ICsxMDY2LDYg
QEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25z
dCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAogICAgIHJlc2V0UXVvdGEoKTsKIAotICAgIFdL
Q29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3Rpbmco
cGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAgICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9k
aWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQo
KSk7CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGZhbHNlKTsKQEAgLTMxNzUsOSAr
MzE3Myw4IEBAIFBsYXRmb3JtV2ViVmlldyogVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ3JlYXRl
T3RoZXJQYWdlKFBsYXRmb3JtV2ViVmlldyogcGFyZW50CiAgICAgcmV0dXJuIG5ldyBQbGF0Zm9y
bVdlYlZpZXcoY29uZmlndXJhdGlvbiwgb3B0aW9ucyk7CiB9CiAKLVdLQ29udGV4dFJlZiBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBX
S0NvbnRleHRDb25maWd1cmF0aW9uUmVmIGNvbnRleHRDb25maWd1cmF0aW9uKQorV0tDb250ZXh0
UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmIGNv
bnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYpCiB7Ci0gICAgV0tDb250ZXh0U2V0UHJp
bWFyeVdlYnNpdGVEYXRhU3RvcmUoY29udGV4dCwgZGVmYXVsdFdlYnNpdGVEYXRhU3RvcmUoKSk7
CiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406447</attachid>
            <date>2020-08-11 23:19:10 -0700</date>
            <delta_ts>2020-08-13 14:41:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20200811231909.patch</filename>
            <type>text/plain</type>
            <size>232009</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUxZGU2MTI2ZjljNTI2MDQx
ZmVlMzMzMjgzNTJkY2E0ZDU1MjliMzcuLjVkMzJlMzkwYjE4NGI4ZTUxNzg5ZjdjN2E2N2U5Yjlh
ZTM1NzczMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgyIEBACisyMDIwLTA4LTExICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIGEgTmV0
d29ya1Byb2Nlc3NQcm94eSBzaW5nbGV0b24gaW5zdGVhZCBvZiBvbmUgcGVyIFdlYlByb2Nlc3NQ
b29sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM1
NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZh
dWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKToK
KyAgICAgICAgKFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChX
S0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXS0NvbnRleHRT
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbToKKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2V0Q29va2llQWNjZXB0UG9saWN5Ol0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0
ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZTo6fl9XZWJLaXRDb29raWVN
YW5hZ2VyUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKToKKyAg
ICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKToKKyAg
ICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAg
ICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9jb29raWVzKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfY29va2llKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4
dC5jcHA6CisgICAgICAgICh3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
UHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lk
ZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9O
ZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojpz
dGFydExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RvcExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Omdsb2JhbE5ldHdv
cmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YXR0ZW1wdFJlbGF1bmNoQWZ0
ZXJDcmFzaElmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OmFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KToKKyAgICAgICAg
KFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vz
c1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25z
dCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJD
b250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzYWJs
ZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25P
dmVycmlkZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9y
VGVzdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9v
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xv
YmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29ya1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJMZWdhY3lQ
cml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5z
ZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVG
b3JTZXNzaW9uSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERh
dGFBbmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURh
dGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNz
RW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50
cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5k
ZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVC
bG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3Rp
Y0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50
cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNI
YWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpp
c1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRz
V2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3Rpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9k
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1Nh
bWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2
YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9j
ZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlc2V0UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNB
cHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQ
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRp
ZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1
bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJv
Y2Vzc1Bvb2wgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwZW5kaW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdv
cmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dl
YnNpdGVEYXRhU3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2ds
aWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
cm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291
cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIw
MjAtMDgtMTEgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW01h
Y10gQWRkIEV4cGVyaW1lbnRhbCBGZWF0dXJlIHByZWZlcmVuY2UgZm9yIFNXIFZQOQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1h
bmFnZXIuY3BwCmluZGV4IGZjZTIzODk4N2E3ODUwZjE4YzlmMzA2YzUwZTk4Y2U5ODhkMTI1ZmQu
LmViNThmYzk0NWQxOTI1NTQ2MWI4NjBmNGE4YjhkYzYxMjVmNTNmODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdl
ci5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksCiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24o
KS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9wcm9jZXNz
LnN0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpLT5jb29r
aWVBY2NlcHRQb2xpY3koKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCAwMjhlMGZi
YjllMTk0OGIwZTA4OWY0YWRkM2IwYTcwNTBjNmVkMWNlLi43ZWJhNGExYjU4MmY5M2QyYmExODBk
MjFiNTUzOTllNmZmNjBkZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ1LDI5ICszNDUsMTkgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJz
LmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0g
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lv
bjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBw
YXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQg
PSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7
CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShkYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAg
IGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1l
dGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQ
YXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VE
aXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVk
RGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
KyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFTdG9yZVBh
cmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQorICAgICAg
ICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJz
LmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4
dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUoZGF0YVN0b3Jl
UGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBib29sIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSB0cnVlOwotICAgIGFkZFNl
cnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIHNl
cnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUocGFyYW1l
dGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVycy5zZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAg
YWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUoZGF0YVN0
b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25J
RCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNzaW9uID0g
bmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAg
YXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdvcmtTdG9y
YWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAgICB9CiAKICAgICBmb3IgKGF1
dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVt
ZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNDI3LDEyICs0MTcsNiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyhQcm9jZXNz
SWRlbnRpZmllciBpZGVudAogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlZENyZWRl
bnRpYWxzKCkKIHsKLSAgICBkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFn
ZSgpLmNsZWFyQ3JlZGVudGlhbHMoKTsKLSAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0
aGlzLT5uZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSkK
LSAgICAgICAgbmV0d29ya1Nlc3Npb24tPmNsZWFyQ3JlZGVudGlhbHMoKTsKLSAgICBlbHNlCi0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCiAgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9u
KFtdIChhdXRvJiBuZXR3b3JrU2Vzc2lvbikgewogICAgICAgICBpZiAoYXV0byBzdG9yYWdlU2Vz
c2lvbiA9IG5ldHdvcmtTZXNzaW9uLm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpKQogICAgICAgICAg
ICAgc3RvcmFnZVNlc3Npb24tPmNyZWRlbnRpYWxTdG9yYWdlKCkuY2xlYXJDcmVkZW50aWFscygp
OwpAQCAtNTEyLDggKzQ5Niw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24o
Y29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQs
IGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50
aWZpZXJCYXNlKQogI2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3
b3JrU3RvcmFnZVNlc3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRk
UmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyOCw3ICs1MTAsNyBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBz
ZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVu
dGlmaWVyID0gbWFrZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwg
Y3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChz
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENG
KGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBl
bHNlCisgICAgZWxzZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpjcmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZp
ZXIuZ2V0KCkpOwogCiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVz
ZUNvb2tpZUFQSSgpKSB7CkBAIC01NTEsMjEgKzUzMywxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
Ojpjb29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9s
aWN5KQogCiBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpz
dG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewot
ICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkK
LSAgICAgICAgcmV0dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9u
ZXR3b3JrU3RvcmFnZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSBjb25zdAotewotICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAg
ICAgICBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
Jik+JiBmdW5jdG9yKQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwog
ICAgIGZvciAoYXV0byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMu
dmFsdWVzKCkpCiAgICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBmMjNmZDU4MGVm
NTRjYWRmODBmNDY4MzY2NTZmYjIzZmQ0ZGRmMmZjLi4xMDExOWRmMzFmNGRlMTY5NDc4NjBiMmNh
ZThjMWI1Yzc3M2Q4ZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5oCkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JF
YWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uKiBzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29u
c3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4g
bmV3VGVzdGluZ1Nlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICB2b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29s
IHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
LCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNzEsNyArMzcwLDYg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNy
ZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZl
TmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwog
CkBAIC01NDgsNyArNTQ2LDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9u
SUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwog
ICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJs
ZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+
IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAK
aW5kZXggYWE4Y2U3NTNjNjMyMDdkMmE2MGQ1ZDNlMDE3YjJlMGViZjQ1NjI2ZC4uYTI0YzIwYjNm
ODc3ZmEzYmFhYzYyODUyMzNjODdkMTEwZTYxZmYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBJUEM6
OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CiAgICAgZW5jb2RlciA8
PCBzdG9yYWdlQWNjZXNzQVBJRW5hYmxlZDsKICNlbmRpZgotICAgIGVuY29kZXIgPDwgZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZW5jb2RlciA8PCBkYXRhU3RvcmVQYXJhbWV0ZXJz
OwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9saWN5OwogICAg
IGVuY29kZXIgPDwgaWdub3JlVExTRXJyb3JzOwpAQCAtNjksOSArNjksNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAg
IGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIGVuY29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlIDw8IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVs
YXk7Ci0jZW5kaWYKICAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZUlUUERhdGFiYXNlOwogICAg
IGVuY29kZXIgPDwgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlOwogICAgIGVuY29k
ZXIgPDwgaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7CkBAIC0xMjEsMTEgKzExOCwxMSBAQCBib29sIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNv
ZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIE9w
dGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGlm
ICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9yPFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBkZWNvZGVy
ID4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0ZXJzKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzID0gV1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJlc3VsdC5k
YXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7CiAKICNp
ZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVBY2NlcHRQ
b2xpY3kpKQpAQCAtMTQ3LDIwICsxNDQsNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2Vz
cykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlvbmFsPFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERpc2FibGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0jZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJs
ZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmgKaW5kZXggY2YxNWNhNDFiZmJlYWNkM2RlMWM2M2UzN2QzNzJkZmUyNDljODQ5
Ni4uNzNjZGYyZmM0NDRiNDVmNjRkM2MzMmM4ZWY2MzZmZmIxNWM1NTkzNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNzIsNyArNzIsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIGJvb2wgc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7
CiAjZW5kaWYKIAotICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIGRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGF0
YVN0b3JlUGFyYW1ldGVyczsKICAgICAKICNpZiBVU0UoU09VUCkKICAgICBXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSB7IFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3k6OkFsd2F5c0FjY2VwdCB9OwpAQCAtODYsMTIgKzg2LDcgQEAgc3RydWN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBWZWN0b3I8U3RyaW5nPiB1
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAg
IFN0cmluZyBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OwotICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotICAgIGJvb2wgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVy
bWluYXRpb25EZWxheSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBib29sIHNob3VsZEVuYWJsZUlU
UERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFiYXNlIHsg
dHJ1ZSB9OwogICAgIGJvb2wgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlIHsgZmFs
c2UgfTsKICAgICBTdHJpbmcgaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlIGhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0Nv
Y29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vz
c0NvY29hLm1tCmluZGV4IGFmYmQ5MzBmNGIzNWUyNDlhODhhMTA4ZjU1MTFjMDRkN2VlZDM1NTEu
LjhlNzhlNmFmZWFiN2U3MzFkNWUyMjJlYjYwZTI5YjUyZjkxZjBjMmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29j
b2EubW0KQEAgLTg1LDkgKzg1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1l
UGVybWFuZW50bHkocGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0
ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5
KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVt
cEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9D
Rk5ldHdvcmtTZXRBVFNDb250ZXh0KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkp
OwpAQCAtMTE0LDExICsxMTEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFtOU1VS
TENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBs
YXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3Jr
UHJvY2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShT
T1VSQ0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKaW5kZXggZDk5Zjlk
ZDY0YmFkNmU0MmRjYzhlM2Y5YjhmMTY5Mjk5N2Y2NzE5Mi4uNDk1MzgxMWIyMTY0ZTg5ODQ2Zjky
NzllNjIyOWQ1OTNlMjI1NmEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKQEAgLTM5LDExICszOSw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNv
bnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURl
ZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2Vy
dGlmaWNhdGVGb3JIb3N0KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBj
b25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0
Lm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW0KaW5kZXggYzI3MzZlMDI2YTU1ZDNkNDAyMGY4NGY0ZDY5M2QxNmI0NjUyZWQyMy4u
MWUxODQ4OWY5NDYyMGYwMmE3ZDllOWU4NjllYzg2NDkxYjdiYmQ0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0K
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW0KQEAgLTU1LDE1ICs1NSwxMSBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0
OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0dwogICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29r
aWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAgICBpZiAoIXNlc3Npb25J
RC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVu
dGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFw
YXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSAmJiBw
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgIT0gUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAgdWlQcm9jZXNzQ29va2llU3RvcmFn
ZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFtZXRlcnMudWlQcm9jZXNz
Q29va2llU3RvcmFnZUlkZW50aWZpZXIpOwogCiAgICAgbmV0d29ya1Byb2Nlc3MuZW5zdXJlU2Vz
c2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3Vs
ZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNlLCAnLicsIHNlc3Npb25J
RC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3NDb29raWVTdG9yYWdlKSk7CiAKLSAgICBh
dXRvKiBzZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsK
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMp
Ci0gICAgICAgIHNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAgICAgbmV0d29ya1Byb2Nl
c3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1By
b2Nlc3MsIFdURk1vdmUocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
UHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtQcm9jZXNzU291cC5jcHAKaW5kZXggNjBmYTU1NmI5ZTRmNDg3OTRkNWFhMmYwNTY5ZmJiZGVl
NjUzMjk5MC4uMDFjYmI3YmE5YmQ4YWMwZmYwYzVkZjRiMzQyMmYzZDc4NDM1NmQyZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291
cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9j
ZXNzU291cC5jcHAKQEAgLTE0NCwxMSArMTQ0LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkK
ICAgICB9KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMp
CiB7CiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRTaG91bGRJZ25vcmVUTFNFcnJvcnMoaWdu
b3JlVExTRXJyb3JzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmNwcAppbmRleCA2ZDBjMTI5YTc0MDUxMGQzODY5NzM3MDVhZDA5MmVm
MTMyY2MwNzVhLi4wNDgxMGIzZTE5YmU5NmNhZDFhZDgyYTQ0ZGNlZGIyNmVmNzgyNjFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
Y3BwCkBAIC00MCwxMyArNDAsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpl
bmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzOwogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzQ29va2llU3RvcmFn
ZUlkZW50aWZpZXI7CiAgICAgZW5jb2RlciA8PCBjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhh
bmRsZTsKLSAgICBlbmNvZGVyIDw8IHBlbmRpbmdDb29raWVzOwogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAgICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPDwg
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCkBAIC04MywxMiArNzksNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlYwogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZVBhdGhF
eHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRs
ZSk7CiAKLSAgICBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6Q29va2llPj4gcGVuZGluZ0Nvb2tp
ZXM7Ci0gICAgZGVjb2RlciA+PiBwZW5kaW5nQ29va2llczsKLSAgICBpZiAoIXBlbmRpbmdDb29r
aWVzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMucGVuZGlu
Z0Nvb2tpZXMgPSBXVEZNb3ZlKCpwZW5kaW5nQ29va2llcyk7Ci0KICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKICAgICBPcHRpb25hbDxTdHJpbmc+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eTsKICAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKQEAgLTEwMSwxNCAr
OTEsNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlYwogICAgIGlmICghaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0g
V1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlPiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAg
ICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlOwotICAgIGlmICghaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmlu
ZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgog
I2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAppbmRleCBmMjdkZjQ4OTgwOWYz
MTk2MDhiNjgwY2IyYThhMWMxNGI3MDE4NDM5Li5lMWIyMzM3MDE5OWZlMzcwMzFlOWRjNWMwNTc4
MTU1MDIxZTM0ZDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmgKQEAgLTUxLDE1ICs1MSwxMSBAQCBzdHJ1Y3QgV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMgewogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHVpUHJvY2Vzc0Nvb2tpZVN0
b3JhZ2VJZGVudGlmaWVyOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjb29raWVTdG9y
YWdlUGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5k
aW5nQ29va2llczsKICAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBT
dHJpbmcgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFi
YXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcAppbmRleCBhNmUxNTkxZTU1MDQ5ZDI5ZTc3NjE0
MTlhYTMxOGRmMDBhNDc3OThjLi5lNWYxOGVlMWJiOGM2MmEyZTNlNDkyNjc2NTNjMTA5MjA1NDhm
MTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcApAQCAtNDYsOCArNDYsNiBAQCBuYW1lc3BhY2UgQVBJIHsKIEhUVFBDb29raWVT
dG9yZTo6SFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURh
dGFTdG9yZSkKICAgICA6IG1fb3duaW5nRGF0YVN0b3JlKHdlYnNpdGVEYXRhU3RvcmUpCiB7Ci0g
ICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpKQotICAgICAgICByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpOwogfQogCiBIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUoKQpAQCAtNTUsOCAr
NTMsNiBAQCBIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUoKQogICAgIEFTU0VSVCht
X29ic2VydmVycy5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCghbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSk7CiAgICAgQVNTRVJUKCFtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLQot
ICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogdm9p
ZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJvdW5kQ29va2llcyhjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTgxLDMzICs3NywxNiBA
QCB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiBjb29raQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2ll
cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0
b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFw
b29sKSB7Ci0gICAgICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGFsbENvb2tpZXM7Ci0gICAg
ICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgICAgIGFsbENvb2tpZXMgPSBnZXRBbGxEZWZh
dWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7Ci0gICAgICAgIGFsbENvb2tpZXMuYXBw
ZW5kVmVjdG9yKG1fb3duaW5nRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLQotICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
YWxsQ29va2llc10gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tp
ZXMoYWxsQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICB9KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29s
LT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tp
ZU1hbmFnZXItPmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwb29sID0gV1RGTW92ZShwb29s
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBj
b29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigp
OworICAgIGNvb2tpZU1hbmFnZXIuZ2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5k
Q29va2llcyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9
CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkKLSAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2Vy
ID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOworICAgIGNvb2tp
ZU1hbmFnZXIuZ2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwg
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYg
Y29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhjb29raWVz
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0xMTUsODEgKzk0
LDI5IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6c2V0
Q29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGZpbHRlckFwcEJv
dW5kQ29va2llcyhjb29raWVzLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYm
IGFwcEJvdW5kQ29va2llcykgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgbmVlZHNGbHVzaCA9IGZh
bHNlOwotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29s
Rm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7Ci0gICAg
ICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vzc2lvbiBi
ZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3b3JrIFBy
b2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAgICAgICAg
ICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG5lZWRzRmx1c2ggPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzZXRDb29raWVJ
bkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+YWRkUGVuZGluZ0Nv
b2tpZShjb29raWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobmVlZHNGbHVz
aCkKLSAgICAgICAgICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tpZU1h
bmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewot
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAgIGF1
dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xl
dG9uKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNv
bnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAg
ICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5yZW1vdmVQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBb
cG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZShtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byog
cG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVy
YXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBkZWxldGVDb29raWVz
SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBhdXRvJiBjb29r
aWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwor
ICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBUaGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJl
IHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRh
U3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAo
IXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNF
cGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1
bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xpY3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwg
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFi
bGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2llTWFuYWdlci5zZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgfSk7CiB9CkBAIC0yMjcsMjEgKzE1NCw3IEBA
IHZvaWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKE9ic2VydmVyJiBvYnNlcnZl
cikKIAogICAgIG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIgPSBtYWtlVW5pcXVlPEFQSVdl
YkNvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyPigqdGhpcyk7CiAKLSAgICBhdXRvKiBwb29sID0g
bV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMo
KTsKLQotICAgIGlmICghcG9vbCkgewotICAgICAgICBBU1NFUlQoIW1fb2JzZXJ2aW5nVUlQcm9j
ZXNzQ29va2llcyk7Ci0KLSAgICAgICAgLy8gTGlzdGVuIGZvciBjb29raWUgbm90aWZpY2F0aW9u
cyBpbiB0aGUgVUlQcm9jZXNzIGluIHRoZSBtZWFudGltZS4KLSAgICAgICAgc3RhcnRPYnNlcnZp
bmdDaGFuZ2VzVG9EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoW3RoaXNdICgpIHsKLSAgICAg
ICAgICAgIGNvb2tpZXNEaWRDaGFuZ2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgbV9vYnNl
cnZpbmdVSVByb2Nlc3NDb29raWVzID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHkgPSAmV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwogICAg
IG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9
CiAKQEAgLTI3Niw0NiArMTg5LDEwIEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRGlk
Q2hhbmdlKCkKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKCkK
IHsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT51bnJlZ2lzdGVyT2JzZXJ2ZXIo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcik7Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG51bGxwdHI7Ci0KLSAg
ICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3Rv
cmFnZU9wZXJhdGlvbnMoKTsKLQotICAgIGlmICghcG9vbCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQ
cm94eSA9ICZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CiAgICAg
bV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0K
IAotdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmlj
YXRpb25zKCkKLXsKLSAgICBBU1NFUlQoIW1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRl
bnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIg
PSBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIoW3Ro
aXNdKFdlYlByb2Nlc3NQb29sJiBuZXdQcm9jZXNzUG9vbCkgewotICAgICAgICBpZiAoIW1fb3du
aW5nRGF0YVN0b3JlLT5pc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChuZXdQcm9jZXNzUG9vbCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gTm93IHRoYXQgYW4gYXNzb2NpYXRlZCBw
cm9jZXNzIHBvb2wgZXhpc3RzLCB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBVSSBwcm9jZXNzIGNvb2tp
ZSBzdG9yZQotICAgICAgICAvLyB0byBtYWtlIHN1cmUgYW55IGNoYW5nZXMgYXJlIHJlZmxlY3Rl
ZCB3aXRoaW4gdGhlIG5ldyBwcm9jZXNzIHBvb2wuCi0gICAgICAgIGZsdXNoRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKFtdIHsgfSk7Ci0gICAgICAgIG5ld1Byb2Nlc3NQb29sLmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0KLSAgICAgICAgaWYgKG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2
ZXIpIHsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBuZXdQcm9j
ZXNzUG9vbC5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAg
ICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlciht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyKTsKLSAgICAgICAgfQotICAgICAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lz
dGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBpZiAobV9wcm9jZXNz
UG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKQotICAgICAgICBXZWJQcm9jZXNzUG9vbDo6
dW5yZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihtX3Byb2Nlc3NQb29sQ3JlYXRp
b25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVu
ZXJJZGVudGlmaWVyID0gMDsKLX0KLQogI2lmICFQTEFURk9STShDT0NPQSkKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIoKTsg
fQogVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gSFRUUENvb2tpZVN0b3JlOjpnZXRBbGxEZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCkgeyByZXR1cm4geyB9OyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKaW5kZXggMjBkZWM2
NTY1ODhhMzU4YmNkMWFmNDBjZmU3ZmZhNDMyN2YyNGVjNC4uYjBiMmI4MTEzNTJlODg0YWQ2ZTI0
YjllZDEyYzdhNzFmNjE3NDUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElIVFRQQ29va2llU3RvcmUuaApAQCAtODIsOSArODIsNiBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmKTsKIAotICAg
IHZvaWQgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB2b2lk
IHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLQogICAgIHZvaWQg
Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKICAgICBzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gZ2V0QWxsRGVmYXVsdFVJ
UHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwogICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUlu
RGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKaW5kZXggOGZiOGUwOTZk
NDY2ZTIzNjFjZGI1MjAzZWZjOWM1NjhjOWU2OTUxMS4uYjZkODg2MWNmMzQwMmM4MjQxODlkMTll
M2QyNzA0NTJjNjk5YTRmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuY3BwCkBAIC00MjYsOSArNDI2LDkgQEAgdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9T
ZXJ2ZXIoV0tDb250ZXh0UmVmLCBXS1VSTFJlZikKIHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVm
IFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCitXS0Nv
b2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYpCiB7
Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1
cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkp
OwogfQogCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9y
ZShXS0NvbnRleHRSZWYpCkBAIC01NDMsOSArNTQzLDggQEAgdm9pZCBXS0NvbnRleHRTZXRKYXZh
U2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChXS0NvbnRleHRSZWYgY29udGV4dFJl
ZiwKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VD
b2xsZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpCit2b2lkIFdLQ29udGV4dFVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dCktPnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwogfQogCiB2b2lkIFdLQ29u
dGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhXS0NvbnRl
eHRSZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCkBAIC01NTMsMTMgKzU1Miw2IEBAIHZvaWQgV0tD
b250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nKFdLQ29u
dGV4dFJlZiBjb250ZXh0CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyk7CiB9CiAKLXZvaWQgV0tDb250ZXh0
U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRl
eHRSZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXIoYWxsb3dzKTsKLSNlbmRpZgotfQotCiB2b2lkIFdLQ29udGV4dENs
ZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgV2ViS2l0
Ojp0b0ltcGwoY29udGV4dCktPmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKQEAgLTY3MSw3ICs2
NjMsNiBAQCB2b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mo
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdQogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRl
eHRSZWYpLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MpOwogfQogCi12b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRl
RGF0YVN0b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYg
d2Vic2l0ZURhdGFTdG9yZSkKK3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3Rv
cmUoV0tDb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0
b0ltcGwoY29udGV4dFJlZiktPnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktpdDo6dG9JbXBsKHdl
YnNpdGVEYXRhU3RvcmUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dFByaXZhdGUuaAppbmRleCAzOWMwY2E3Y2M2YTZiNmI1NWM4MDNiODNjZGU1YjM4
YmZjMTljOThlLi44ODQ3NGQzMGEwZDBiYjg0YTE5YjYxMGMyYzE1YjlhYzEyYmQwOWNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBA
IC04NywxMCArODcsOSBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3Jr
UHJvY2VzcyhXS0NvbnRleHRSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRl
U2VydmljZVdvcmtlcnMoV0tDb250ZXh0UmVmKTsKIAogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0
U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nKFdLQ29udGV4dFJl
ZiwgYm9vbCk7Ci1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKFdLQ29udGV4dFJlZiwgYm9vbCk7CiAKIC8vIFRl
c3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYW55IHNlY29uZGFyeSBwcm9jZXNzZXMg
YXJlIHN0YXJ0ZWQuCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nl
c3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpOworV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VXNl
VGVzdGluZ05ldHdvcmtTZXNzaW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBS
RUNBVEVEOwogCiAvLyBUZXN0IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHJ1bm5pbmcg
YSB0ZXN0LgogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhX
S0NvbnRleHRSZWYgY29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCmluZGV4IDY4MjBmNDkxZTk0NzU5NWUwMGQwY2JkMmQ1
ODg5NTIwNzAzYTU4MDguLjNkOTVmOWRiODFiM2I4MmYzZWYwZmY0YjllNjU0MWY3NzNhZWU2ZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQ
b29sLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQ
b29sLm1tCkBAIC0yMDEsNyArMjAxLDcgQEAgc3RhdGljIFdLUHJvY2Vzc1Bvb2wgKnNoYXJlZFBy
b2Nlc3NQb29sOwogCiAtICh2b2lkKV9zZXRDb29raWVBY2NlcHRQb2xpY3k6KE5TSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSlwb2xpY3kKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgV2ViQ29yZTo6dG9IVFRQQ29va2ll
QWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBXZWJDb3JlOjp0b0hUVFBDb29raWVBY2NlcHRQ
b2xpY3kocG9saWN5KSwgW10oKSB7IH0pOwogfQogCiAtIChpZClfb2JqZWN0Rm9yQnVuZGxlUGFy
YW1ldGVyOihOU1N0cmluZyAqKXBhcmFtZXRlcgpAQCAtNTc4LDEzICs1NzgsNiBAQCBzdGF0aWMg
TlNEaWN0aW9uYXJ5ICpwb2xpY2llc0hhc2hNYXBUb0RpY3Rpb25hcnkoY29uc3QgSGFzaE1hcDxT
dHJpbmcsIEhhc2hNYXA8UwogICAgIF9wcm9jZXNzUG9vbC0+c3ludGhlc2l6ZUFwcElzQmFja2dy
b3VuZChiYWNrZ3JvdW5kKTsKIH0KIAotLSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNh
dGVGb3JTZXJ2aWNlV29ya2VyOihCT09MKWFsbG93cwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBfcHJvY2Vzc1Bvb2wtPnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlcihhbGxvd3MpOwotI2VuZGlmCi19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogLSAoaWQgPF9XS0dlb2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXI+KV9jb3JlTG9jYXRp
b25Qcm92aWRlcgogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCBkMzlkYjFkZGIwOWMwOGNjNzgwMTdk
NGUxZjQ1ZmM4ZDI1NmY1Y2RmLi44ODU0ZWY2YzMwNmZjMTBjNzk3YjgzMzk5MDJkNTU0YjQwNDJm
M2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9j
ZXNzUG9vbFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcm9jZXNzUG9vbFByaXZhdGUuaApAQCAtMTIyLDcgKzEyMiw2IEBACiAtICh2b2lkKV9wcmVj
b25uZWN0VG9TZXJ2ZXI6KE5TVVJMICopc2VydmVyVVJMIFdLX0FQSV9ERVBSRUNBVEVEX1dJVEhf
UkVQTEFDRU1FTlQoIldLV2ViVmlldy5fcHJlY29ubmVjdFRvU2VydmVyIiwgbWFjb3MoMTAuMTMu
NCwgV0tfTUFDX1RCQSksIGlvcygxMS4zLCBXS19JT1NfVEJBKSk7CiAKIC8vIFRlc3Qgb25seS4K
LS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9P
TClhbGxvd3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKTsKIC0g
KHZvaWQpX2dldEFjdGl2ZVBhZ2VzT3JpZ2luc0luV2ViUHJvY2Vzc0ZvclRlc3Rpbmc6KHBpZF90
KXBpZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PE5TU3RyaW5nICo+ICopKWNv
bXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4y
KSk7CiAtIChCT09MKV9uZXR3b3JrUHJvY2Vzc0hhc0VudGl0bGVtZW50Rm9yVGVzdGluZzooTlNT
dHJpbmcgKillbnRpdGxlbWVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3Mo
MTIuMikpOwogLSAodm9pZClfY2xlYXJQZXJtYW5lbnRDcmVkZW50aWFsc0ZvclByb3RlY3Rpb25T
cGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2UgKilwcm90ZWN0aW9uU3BhY2UgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDFlZTcz
ZWJjMGVhMDM2Zjg2YjNmZTk0NDE0OTA3MmU2YWM0ZGM3NjcuLmZiOThkMDU5MGM5YWQyODIzNWQ3
MTFiN2NhYWM5YmM1NWM5YTY0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwCkBAIC02NCw4ICs2NCw3IEBA
IHN0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUgewogCiAgICAgfl9XZWJLaXRDb29r
aWVNYW5hZ2VyUHJpdmF0ZSgpCiAgICAgewotICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKGRhdGFNYW5hZ2VyKSkK
LSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4oKS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7Cisg
ICAgICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2llT2JzZXJ2
ZXJDYWxsYmFjayhzZXNzaW9uSUQoKSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuYWdlcjsKQEAgLTEzOSwxMSArMTM4LDkgQEAgV2ViS2l0
Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlckNyZWF0ZShXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIqIGRhdGFNYW4KIHsKICAgICBXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyID0g
V0VCS0lUX0NPT0tJRV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9DT09LSUVfTUFO
QUdFUiwgbnVsbHB0cikpOwogICAgIG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyID0gZGF0YU1h
bmFnZXI7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpIHsKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRD
b29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCBbbWFuYWdl
cl0gewotICAgICAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURd
LCAwKTsKLSAgICAgICAgfSk7Ci0gICAgfQorICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2lu
Z2xldG9uKCkuc2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgW21hbmFnZXJdIHsKKyAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxz
W0NIQU5HRURdLCAwKTsKKyAgICB9KTsKICAgICByZXR1cm4gbWFuYWdlcjsKIH0KIApAQCAtMTcz
LDggKzE3MCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0
b3JhZ2UoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwKICAgICBpZiAoc2Vzc2lvbklELmlz
RXBoZW1lcmFsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bv
b2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJp
di0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwg
U3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdl
VHlwZShzdG9yYWdlKSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5z
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmls
ZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOwogfQog
CiAvKioKQEAgLTE5Miw4ICsxODgsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRf
YWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBXZWJLaQogewogICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKIAot
ICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQ
cm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHRvSFRUUENvb2tpZUFjY2Vw
dFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5Ojpz
aW5nbGV0b24oKS5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Np
b25JRCgpLCB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOwogfQog
CiAvKioKQEAgLTIyNCw3ICsyMTksNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRf
YWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBHQ2FuYwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5w
cml2LT5zZXNzaW9uSUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2lu
Z2xldG9uKCkuZ2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9s
aWN5IHBvbGljeSkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2ludCh0YXNrLmdldCgpLCB0b1dl
YktpdENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKICAgICB9KTsKIH0KQEAgLTI2OSwxMSAr
MjY0LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfYWRkX2Nvb2tpZShXZWJLaXRDb29r
aWVNYW5hZ2VyKiBtYW5hZ2VyLCBTb3VwQ29va2llKgogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29v
a2llKTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyht
YW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29r
aWVzIGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24g
ZGlzayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJv
bSwgc28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBw
cm9jZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFu
YWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vz
c2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkgfSwgW3Rhc2sgPSBXVEZNb3ZlKHRh
c2spXSgpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tp
ZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIHsgV2ViQ29yZTo6Q29va2llKGNvb2tpZSkg
fSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29s
ZWFuKHRhc2suZ2V0KCksIFRSVUUpOwogICAgIH0pOwogfQpAQCAtMzIwLDExICszMTEsNyBAQCB2
b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfY29va2llcyhXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBjb25zdCBnY2hhcgogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAogICAg
IEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5j
ZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVzIGFyZSByZWFk
L3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlzayByZWdhcmRs
ZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwgc28ganVzdCB1
c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9jZXNzUG9vbHMg
PSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+
ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCktPmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFVS
TChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShj
b25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgeworICAgIFdlYkNvb2tpZU1h
bmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZ2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9u
SUQoKSwgVVJMKFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUo
dGFzayldKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSB7CiAgICAgICAg
IEdMaXN0KiBjb29raWVzTGlzdCA9IG51bGxwdHI7CiAgICAgICAgIGZvciAoYXV0byYgY29va2ll
IDogY29va2llcykKICAgICAgICAgICAgIGNvb2tpZXNMaXN0ID0gZ19saXN0X3ByZXBlbmQoY29v
a2llc0xpc3QsIGNvb2tpZS50b1NvdXBDb29raWUoKSk7CkBAIC0zNzgsMTEgKzM2NSw3IEBAIHZv
aWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWUoV2ViS2l0Q29va2llTWFuYWdl
ciogbWFuYWdlciwgU291cENvb2tpCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29raWUpOwogCiAg
ICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNh
bmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJl
YWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2Fy
ZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0
IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29s
cyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2
LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKS0+ZGVsZXRlQ29va2llKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgp
LCBXZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIHsKKyAg
ICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmRlbGV0ZUNvb2tpZShtYW5hZ2Vy
LT5wcml2LT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5fYm9vbGVhbih0YXNrLmdldCgp
LCBUUlVFKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggZDAzNzkzOWViZGRkODUzZGI4ZGVi
M2FkNTFlOTU3ZDhhNTg5Y2ZjYi4uYTMwMDRiZjZlMDZkZDI5YzAxMzU4ZGQwZDQ3NjYwZThlMDBi
NWEwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2Vi
S2l0V2ViQ29udGV4dC5jcHAKQEAgLTQwNyw3ICs0MDcsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRX
ZWJDb250ZXh0Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAgICAgICBjb25maWd1cmF0
aW9uLnNldEhTVFNTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24od2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9oc3RzX2Nh
Y2hlX2RpcmVjdG9yeShwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpKSk7CiAKICAgICBw
cml2LT5wcm9jZXNzUG9vbCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbik7
Ci0gICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFByaW1hcnlEYXRhU3RvcmUod2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkp
OwogICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRVc2VyTWVzc2FnZUhhbmRsZXIoW3dlYkNvbnRl
eHRdKFVzZXJNZXNzYWdlJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyTWVz
c2FnZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgewogICAgICAgICAvLyBTaW5rIHRoZSBmbG9h
dGluZyByZWYuCiAgICAgICAgIEdSZWZQdHI8V2ViS2l0VXNlck1lc3NhZ2U+IHVzZXJNZXNzYWdl
ID0gd2Via2l0VXNlck1lc3NhZ2VDcmVhdGUoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAppbmRleCBlNmU0YWNjMTFhOTFh
MzcwZmI2ODhmYWI0OGQyNTIwNjk2ZDUwMjhmLi41MmViMzk5ODhhYWUwMGRlZGVlYjdiNDY0N2Y0
NDI0MjBiZDIzMTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0
aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtMTM5Myw4ICsxMzkzLDcg
QEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLAogICAgIGlmICghY29va2llT2JqZWN0LmdldEJvb2xl
YW4oImh0dHBPbmx5Il9zLCBjb29raWUuaHR0cE9ubHkpKQogICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBh
cmFtZXRlciAnaHR0cE9ubHknIHdhcyBub3QgZm91bmQuIik7CiAKLSAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKHBhZ2Ut
PndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgp
IHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tpZXMocGFn
ZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2td
KCkgewogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsKIH0KQEAgLTE0
MTAsOCArMTQwOSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tp
ZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpCiAKICAgICBTdHJpbmcgaG9z
dCA9IGFjdGl2ZVVSTC5ob3N0KCkudG9TdHJpbmcoKTsKIAotICAgIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFp
bkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CisgICAgV2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKS5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNp
dGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZp
eElmTmVlZGVkKGhvc3QpIH0pOwogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRT
ZXNzaW9uUGVybWlzc2lvbnMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbkRhdGE+PiYgb3V0
X3Blcm1pc3Npb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxp
YXJ5UHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9j
ZXNzUHJveHkuaAppbmRleCA0MWMwYTBmYmY1MDZlZmExNDA4YmNlZjlhZjhhOTBiODVhMWFkMDhh
Li40ZjM5OGI1MzBmNjA4NTc1Yzk2N2I4M2M3NGZhMmY0MzI4ZjZjZTNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlhcnlQcm9jZXNzUHJveHkuaApAQCAtNDgsNyArNDgs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+QXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KCk7CiAKICAg
ICB2b2lkIGNvbm5lY3QoKTsKLSAgICB2b2lkIHRlcm1pbmF0ZSgpOworICAgIHZpcnR1YWwgdm9p
ZCB0ZXJtaW5hdGUoKTsKIAogICAgIHZpcnR1YWwgUHJvY2Vzc1Rocm90dGxlciYgdGhyb3R0bGVy
KCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJv
Y2Vzc1Bvb2xDb2NvYS5tbQppbmRleCA1ZDk2MGUxZjMyNmQyYjcyOTFlNzEzMDk2ZGVlZWVkOThj
YWNhMDZhLi4xMzFlZDU5NDdjMzNjNWRkNzg3YmYwZDVmZjZkNmE0ODYyNGQxNTI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0KQEAgLTEzNCw4ICsxMzQsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lm
TmVlZGVkKCkKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9u
U3RhdGUoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVu
YWJsZWQoKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0UHJvY2Vz
c1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpOwogCiAjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lv
bkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKQEAgLTE2Niw4ICsxNjUsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogICAgIGlmICghW1tOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktpdFN1cHByZXNz
TWVtb3J5UHJlc3N1cmVIYW5kbGVyIl0pCiAgICAgICAgIGluc3RhbGxNZW1vcnlQcmVzc3VyZUhh
bmRsZXIoKTsKIAotICAgIHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtl
VW5pcXVlPExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4oKSk7Ci0KICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSAmJiAhUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgaWYgKCFfTUdD
YWNoZVZhbGlkKCkpIHsKICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X2dsb2Jh
bF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKQEAgLTQ4MCwy
MiArNDc3LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKIAogICAgIE5TVXNlckRlZmF1bHRz
ICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107CiAKLSAg
ICB7Ci0gICAgICAgIGJvb2wgaXNTYWZhcmkgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc01pbmlC
cm93c2VyID0gZmFsc2U7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaXNTYWZh
cmkgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKTsKLSAgICAgICAg
aXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7
Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGlzU2FmYXJpID0gV2ViQ29yZTo6TWFjQXBw
bGljYXRpb246OmlzU2FmYXJpKCk7Ci0gICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpN
YWNBcHBsaWNhdGlvbjo6aXNNaW5pQnJvd3NlcigpOwotI2VuZGlmCi0gICAgICAgIGlmIChpc1Nh
ZmFyaSB8fCBpc01pbmlCcm93c2VyKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwUHJveHkgPSBV
UkwoVVJMKCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBQ
cm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5odHRwc1Byb3h5ID0gVVJMKFVS
TCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdlYktpdDJIVFRQU1Byb3h5
RGVmYXVsdHNLZXldKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHBhcmFtZXRlcnMubmV0d29y
a0FUU0NvbnRleHQgPSBhZG9wdENGKF9DRk5ldHdvcmtDb3B5QVRTQ29udGV4dCgpKTsKIAogICAg
IHBhcmFtZXRlcnMuc2hvdWxkU3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgPSBbZGVmYXVs
dHMgYm9vbEZvcktleTpXZWJLaXRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlckRlZmF1bHRz
S2V5XTsKQEAgLTUwNiwxNyArNDg3LDExIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3Jt
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAgICAg
cGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllciA9IGlkZW50aWZ5aW5n
RGF0YUZyb21Db29raWVTdG9yYWdlKFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29v
a2llU3RvcmFnZV0gX2Nvb2tpZVN0b3JhZ2VdKTsKICNlbmRpZgogCi0gICAgcGFyYW1ldGVycy5z
dG9yYWdlQWNjZXNzQVBJRW5hYmxlZCA9IHN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKCk7Ci0KICAg
ICBOU051bWJlciAqZGF0YWJhc2VFbmFibGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5
OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVy
ZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQo
KV1dOwogICAgIGlmIChkYXRhYmFzZUVuYWJsZWRWYWx1ZSkKICAgICAgICAgcGFyYW1ldGVycy5z
aG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsK
LSAgICBlbHNlCi0gICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBt
X2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsK
IAogICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2Rl
ZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50
YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFi
bGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwotCi0gICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVx
dWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NX
ZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBs
YXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCmluZGV4IGM1ZGU0ZTdkMGY1OTE5NGY0M2Ew
MjNiMDg5ZTM3MmM1OGNmOGVlMDYuLmE5N2E2MmRkYzA4Y2Q5ZTNhZDgxZWJmNmNkMDA3Y2RjMWMy
YTRlOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRQcm94eS5jcHAKQEAgLTc1LDggKzc1LDcgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpjYW5j
ZWwoKQogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQ
cm94eTo6aW52YWxpZGF0ZSgpCkBAIC0xMDYsMTIgKzEwNSwxMCBAQCB2b2lkIERvd25sb2FkUHJv
eHk6OnB1Ymxpc2hQcm9ncmVzcyhjb25zdCBVUkwmIFVSTCkKICAgICBpZiAoIW1fcHJvY2Vzc1Bv
b2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1f
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYm9vbCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiA9
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwuZmlsZVN5c3RlbVBhdGgoKSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5kbGUpOwotICAgICAgICBBU1NFUlRf
VU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVkU2FuZGJveEV4dGVuc2lvbik7
Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9kb3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwot
ICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOworICAgIGJvb2wgY3Jl
YXRlZFNhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJM
LmZpbGVTeXN0ZW1QYXRoKCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFu
ZGxlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uLCBjcmVhdGVk
U2FuZGJveEV4dGVuc2lvbik7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1f
ZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUpLCAwKTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShDT0NP
QSkKIApAQCAtMTQ2LDE1ICsxNDMsNyBAQCB2b2lkIERvd25sb2FkUHJveHk6OndpbGxTZW5kUmVx
dWVzdChSZXNvdXJjZVJlcXVlc3QmJiBwcm9wb3NlZFJlcXVlc3QsIGNvbnN0IFJlcwogCiAgICAg
bV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS53aWxsU2VuZFJlcXVlc3QoKnRoaXMsIFdU
Rk1vdmUocHJvcG9zZWRSZXF1ZXN0KSwgcmVkaXJlY3RSZXNwb25zZSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oUmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkgewog
ICAgICAgICBtX3JlZGlyZWN0Q2hhaW4uYXBwZW5kKG5ld1JlcXVlc3QudXJsKCkpOwotCi0gICAg
ICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9wcm9jZXNzUG9vbCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBhdXRvKiBuZXR3b3JrUHJvY2Vzc1Byb3h5ID0gcHJvdGVjdGVkVGhpcy0+
bV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJv
Y2Vzc1Byb3h5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG5ldHdvcmtQcm9jZXNz
UHJveHktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVx
dWVzdChwcm90ZWN0ZWRUaGlzLT5tX2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKKyAgICAg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxv
YWRJRCwgbmV3UmVxdWVzdCksIDApOwogICAgIH0pOwogfQogCkBAIC0xNzksMTYgKzE2OCwxMiBA
QCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lQXN5bmMoRG93bmxvYWRJRCBkb3dubAogICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9u
c2VCYXNlOjpzYW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZG93bmxvYWRJRCA9IGRvd25sb2Fk
SURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7
CisgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldp
dGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNhbml0aXpl
U3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbZG93bmxvYWRJRCA9IGRvd25s
b2FkSURdIChBbGxvd092ZXJ3cml0ZSBhbGxvd092ZXJ3cml0ZSwgU3RyaW5nIGRlc3RpbmF0aW9u
KSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlOwogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9u
OjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0gICAgICAgIGlm
ICghbV9wcm9jZXNzUG9vbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpD
b250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3Rp
bmF0aW9uLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092
ZXJ3cml0ZTo6WWVzKSwgMCk7CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZURlY2lkZVBlbmRpbmdE
b3dubG9hZERlc3RpbmF0aW9uKGRvd25sb2FkSUQsIGRlc3RpbmF0aW9uLCBzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSA9PSBBbGxvd092ZXJ3cml0ZTo6WWVzKSwgMCk7CiAg
ICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZFByb3h5TWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZFByb3h5TWFwLmNwcAppbmRleCA3NmEwNzE1N2I1OTFhYWNlNTBmMTVkMTUyNWRi
Y2ZiOGM2YTRiYmM4Li45ZmRmOTdhMDMxMWE1ZDdjYjMxODY0ZTc5MDZiYWNkZjZmNjE5NjFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94
eU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHlNYXAuY3BwCkBAIC0xMDksOSArMTA5LDYgQEAgdm9pZCBEb3dubG9hZFByb3h5TWFwOjpk
b3dubG9hZEZpbmlzaGVkKERvd25sb2FkUHJveHkmIGRvd25sb2FkUHJveHkpCiAKICAgICBSRUxF
QVNFX0xPRyhMb2FkaW5nLCAiUmVtb3ZpbmcgZG93bmxvYWQgJSIgUFJJdTY0ICIgZnJvbSBVSVBy
b2Nlc3MgRG93bmxvYWRQcm94eU1hcCIsIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKIAotICAg
IC8vIFRoZSBEb3dubG9hZFByb3h5IG1heSBiZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0
byB0aGUgcHJvY2VzcyBwb29sLgotICAgIGF1dG8gcHJvdGVjdGVkUHJvY2Vzc1Bvb2wgPSBtYWtl
UmVmUHRyKG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKSk7Ci0KICAgICBBU1NFUlQobV9kb3dubG9h
ZHMuY29udGFpbnMoZG93bmxvYWRJRCkpOwogCiAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OkRvd25sb2FkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
ZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2Nv
bHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDhjMjNiYmU4YzA2
YTE1OTljYjliOTE2YTBiMzJhZmIzNzc4M2YzMDUuLmMyMzhiZTA2OGRjZjkzZjE1ZmU2MjZmMTcx
OGI5MDhhNzJlZmExOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKQEAgLTQ0LDE3ICs0NCwyMCBAQCBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6fkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5KCkKIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6c3RhcnRM
b2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQ
cm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0YXJ0TG9h
ZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CisgICAgaWYgKGF1dG8qIGNs
aWVudCA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmxlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudCgpKQorICAgICAgICBjbGllbnQtPnN0YXJ0TG9hZGluZygqdGhpcywg
Y3VzdG9tUHJvdG9jb2xJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHk6OnN0b3BMb2FkaW5nKExlZ2FjeUN1c3RvbVByb3RvY29sSUQgY3VzdG9t
UHJvdG9jb2xJRCkKIHsKLSAgICBtX25ldHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5j
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJv
dG9jb2xJRCk7CisgICAgaWYgKGF1dG8qIGNsaWVudCA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLmxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpKQorICAgICAgICBj
bGllbnQtPnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElEKTsKIH0KIAogdm9pZCBM
ZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9u
ZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KCkuaW52YWxpZGF0ZSgqdGhpcyk7CisgICAgaWYgKGF1dG8qIGNsaWVudCA9IE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dCgpKQorICAgICAgICBjbGllbnQtPmludmFsaWRhdGUoKnRoaXMpOwogfQogCiB2b2lkIExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KExlZ2Fj
eUN1c3RvbVByb3RvY29sSUQgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRp
cmVjdFJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggZDEyNTAyMGE1OTVkMjk4ODk2OTNiNDIz
MGMxMDFkODMyNDNhZTNiZS4uNjg2MDI4ODMwNmEyN2MzMzY2NjQxYjY3ZDBmMzQ1Yjc1MTVmMDlj
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjZW5kaWYKKyNpbmNsdWRlICJMZWdhY3lHbG9i
YWxTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29u
dGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uSW5mby5oIgpAQCAtNjAsNiArNjEsNyBAQAogI2luY2x1ZGUgIldlYnNpdGVEYXRh
U3RvcmVDbGllbnQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tB
Z2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKICNpZiBF
TkFCTEUoU0VDX0lURU1fU0hJTSkKQEAgLTcwLDE4ICs3MiwxMDkgQEAKICNpbmNsdWRlIDx3dGYv
c3BpL2Rhcndpbi9YUENTUEkuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5j
bHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmgiCisjZW5kaWYKKwogI2Rl
ZmluZSBNRVNTQUdFX0NIRUNLKGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlv
biwgY29ubmVjdGlvbigpKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCi1OZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlBy
b2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLSAgICA6IEF1eGlsaWFyeVByb2Nlc3NQcm94eShwcm9j
ZXNzUG9vbC5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKLSAgICAsIG1fcHJvY2Vz
c1Bvb2wocHJvY2Vzc1Bvb2wpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNz
UHJveHk+JiBnbG9iYWxOZXR3b3JrUHJvY2VzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5Pj4gbmV0d29ya1Byb2Nlc3M7
CisgICAgcmV0dXJuIG5ldHdvcmtQcm9jZXNzOworfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKQoreworICAgIGlmICghZ2xvYmFsTmV0d29y
a1Byb2Nlc3MoKSkgeworICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpID0gbWFrZVVuaXF1
ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigpOworICAgICAgICBnbG9iYWxOZXR3b3JrUHJvY2Vzcygp
LT5zZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgfQorICAgIHJldHVy
biAqZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
Ojp0ZXJtaW5hdGUoKQoreworICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6dGVybWluYXRlKCk7
CisgICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6YXR0ZW1wdFJlbGF1bmNoQWZ0ZXJDcmFzaElmTmVjZXNzYXJ5KFZlY3Rv
cjxzdGQ6OnBhaXI8UmVmPFdlYlByb2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJv
eHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseT4+JiYgcGVuZGluZ1Jl
cXVlc3RzKQoreworICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNzKCkgPSBudWxscHRyOworICAgIGlm
IChwZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgYXV0byYg
bmV3TmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKKyAg
ICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBwZW5kaW5nUmVxdWVzdHMpCisgICAgICAgIG5ld05ldHdv
cmtQcm9jZXNzLmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihyZXF1ZXN0LmZpcnN0LmdldCgp
LCBXVEZNb3ZlKHJlcXVlc3Quc2Vjb25kKSk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpCit7CisgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdv
cmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgor
ICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZp
b2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgorICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsK
KyAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFt0aGlzXSB7CisgICAgICAgICAgICBz
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgICAgIH0pOworICAgIH0K
KworICAgIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAg
aWYgKCFwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKQorICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1l
dGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFz
U2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5z
Y2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihM
ZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFz
c2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNS
ZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2lu
Z2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7CisgICAg
cGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigp
LmNhY2hlTW9kZWwoKTsKKyAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IFdlYlByb2Nlc3NQb29sOjp1
cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKKyAgICAgICAgcGFyYW1ldGVy
cy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsK
KyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChTdHJpbmcgY29va2llU3RvcmFnZURp
cmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFjb29r
aWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAg
aWYgKFN0cmluZyBjb250YWluZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0
d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOyAhY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1w
dHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRl
RGlyZWN0b3J5KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJD
YWNoZXNEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGlmIChTdHJpbmcgcGFyZW50QnVu
ZGxlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOyAh
cGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6
VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKyNlbmRpZgorICAgIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVO
ZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKTsKKyAgICBwYXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFt
ZXRlcnMgPSBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpOworICAg
IHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
cGFyYW1ldGVycyksIDApOworfQorCitzdGF0aWMgYm9vbCBhbnlQcm9jZXNzUG9vbEFsd2F5c1J1
bnNBdEJhY2tncm91bmRQcmlvcml0eSgpCit7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6
IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAocHJvY2Vz
c1Bvb2wtPmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgYW55
UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkKK3sKKyAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94eSgpCisgICAgOiBB
dXhpbGlhcnlQcm9jZXNzUHJveHkoYW55UHJvY2Vzc1Bvb2xBbHdheXNSdW5zQXRCYWNrZ3JvdW5k
UHJpb3JpdHkoKSkKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQog
ICAgICwgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSgqdGhpcykKICNlbmRpZgotICAgICwg
bV90aHJvdHRsZXIoKnRoaXMsIHByb2Nlc3NQb29sLnNob3VsZFRha2VVSUJhY2tncm91bmRBc3Nl
cnRpb24oKSkKKyAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBhbnlQcm9jZXNzUG9vbFNob3VsZFRh
a2VVSUJhY2tncm91bmRBc3NlcnRpb24oKSkKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAsIG1f
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VVbmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50PigpKQorI2VuZGlmCiB7CiAgICAgY29ubmVjdCgpOwogfQpAQCAtMTA0
LDE2ICsxOTcsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMo
UHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogewogICAgIGxhdW5jaE9wdGlv
bnMucHJvY2Vzc1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwog
ICAgIEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25z
KTsKLQotICAgIGlmIChwcm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NM
YXVuY2hGYWlsRm9yVGVzdGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxk
TWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKLSAgICAg
ICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0g
dHJ1ZTsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShQTEFZU1RBVElPTikKLSAgICBsYXVuY2hPcHRp
b25zLnByb2Nlc3NQYXRoID0gbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc1BhdGgoKTsKLSAg
ICBsYXVuY2hPcHRpb25zLnVzZXJJZCA9IG1fcHJvY2Vzc1Bvb2wudXNlcklkKCk7Ci0jZW5kaWYK
IH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTY2LDEyICsyNDksMTIgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJvb2wgYmFja2dyb3VuZCkK
ICAgICB9CiB9CiAKLURvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZURv
d25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBX
ZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkKK0Rvd25sb2FkUHJveHkmIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
LCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94
eSogb3JpZ2luYXRpbmdQYWdlKQogewogICAgIGlmICghbV9kb3dubG9hZFByb3h5TWFwKQogICAg
ICAgICBtX2Rvd25sb2FkUHJveHlNYXAgPSBtYWtlVW5pcXVlPERvd25sb2FkUHJveHlNYXA+KCp0
aGlzKTsKIAotICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJv
eHkoZGF0YVN0b3JlLCBtX3Byb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywg
b3JpZ2luYXRpbmdQYWdlKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVE
b3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcHJvY2Vzc1Bvb2wsIHJlc291cmNlUmVxdWVzdCwgZnJh
bWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9u
PiBmZXRjaE9wdGlvbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQgKFdlYnNpdGVEYXRhKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTIzNyw4ICszMjAsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKQogewogICAgIGNsZWFyQ2FsbGJhY2tTdGF0
ZXMoKTsKIAotICAgIC8vIFRlbGwgdGhlIG5ldHdvcmsgcHJvY2VzcyBtYW5hZ2VyIHRvIGZvcmdl
dCBhYm91dCB0aGlzIG5ldHdvcmsgcHJvY2VzcyBwcm94eS4gVGhpcyB3aWxsIGNhdXNlIHVzIHRv
IGJlIGRlbGV0ZWQuCi0gICAgbV9wcm9jZXNzUG9vbC5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKnRo
aXMpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
KnRoaXMpOworCisgICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSA9IG51bGxwdHI7CiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y2xlYXJDYWxsYmFja1N0YXRlcygpCkBAIC0yNTgsOSAr
MzQzLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGUKICAgICBpZiAoZGlzcGF0Y2hNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9wcm9j
ZXNzUG9vbC5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKTsKIH0KIApAQCAtMjc0LDggKzM1Niw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgSVBDCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0
aW9uJikKIHsKLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29sID0gbWFrZVJlZihtX3Byb2Nl
c3NQb29sKTsKLQogICAgIGlmIChtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxv
YWRQcm94eU1hcC0+aW52YWxpZGF0ZSgpOwogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RP
Q09MX01BTkFHRVIpCkBAIC0zMzQsMTEgKzQxNCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXRvcE9yaWdpbiB8fCAhbV9wcm9j
ZXNzUG9vbC5pc1NlcnZpY2VXb3JrZXJQYWdlSUQocGFnZUlEKSkgewotICAgICAgICBwcm9jZXNz
QXV0aGVudGljYXRpb25DaGFsbGVuZ2Uoc2Vzc2lvbklELCBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBXZWJQYWdlUHJveHk6
OmZvck1vc3RWaXNpYmxlV2ViUGFnZUlmQW55KHNlc3Npb25JRCwgKnRvcE9yaWdpbiwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwgYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UgPSBXVEZNb3ZlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgbmVnb3RpYXRlZExl
Z2FjeVRMU10oYXV0byogcGFnZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0zOTUsMTEgKzQ3MCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIsIElQ
Qzo6Q29uCiAgICAgICAgIG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wucHJv
Y2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKQotICAgICAgICBzZXRQcm9jZXNzU3VwcHJlc3Npb25F
bmFibGVkKHRydWUpOwotI2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBpZiAoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uID0gdGhpcy0+Y29ubmVjdGlvbigpLT54
cGNDb25uZWN0aW9uKCkpCkBAIC0xMjA2LDcgKzEyNzYsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNldFRoaXJkUGFydHlDTkFNRURvbWFpbkZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQg
c2VzcwogfQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXREb21haW5zV2l0aFVzZXJJbnRl
cmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCiB7
Ci0gICAgcHJvY2Vzc1Bvb2woKS5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihXVEZNb3Zl
KGRvbWFpbnMpKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6
OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2V0RG9tYWluc1dpdGhV
c2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4geyBkb21h
aW5zIH0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAK
QEAgLTEyNzEsMTQgKzEzNDIsMTQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRTeW5j
QWxsQ29va2llcygpCiAgICAgfQogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmFkZFNl
c3Npb24oUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYgc3RvcmUpCit2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmFkZFNlc3Npb24oV2Vic2l0ZURhdGFTdG9yZSYgc3RvcmUpCiB7CiAgICAgaWYgKGNh
blNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpB
ZGRXZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUtPnBhcmFtZXRlcnMoKSB9LCAwKTsKLSAgICBhdXRv
IHNlc3Npb25JRCA9IHN0b3JlLT5zZXNzaW9uSUQoKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS5wYXJhbWV0ZXJzKCkg
fSwgMCk7CisgICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS5zZXNzaW9uSUQoKTsKICAgICBpZiAo
IXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS0+cmVzb2x2ZWRJbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBn
cmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKICNlbmRpZgog
ICAgIH0KIH0KQEAgLTEyOTEsMTYgKzEzNjIsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiBXZWJzaXRlRGF0YVN0
b3JlKiBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp3ZWJzaXRlRGF0YVN0b3JlRnJvbVNlc3Npb25JRChQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgaWYgKHNlc3Npb25JRCA9PSBQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIGlmICghV2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB3ZWJz
aXRlRGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAg
ICAgICBpZiAod2Vic2l0ZURhdGFTdG9yZSAmJiB3ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSA9PSBzZXNzaW9uSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmU7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLnB0cigpOwotICAgIH0KLSAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhp
c3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCk7CisgICAgcmV0
dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Np
b25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmV0cmlldmVDYWNoZVN0b3Jh
Z2VQYXJhbWV0ZXJzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTEzNDcsNyArMTQwOSwx
MCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eShXZWJVc2VyQ29udGVudAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rp
b25Ub05ldHdvcmtQcm9jZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4s
IFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxl
RG9tYWluKSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgLy8g
RklYTUU6IFRoaXMgaXNuJ3QgcXVpdGUgY29ycmVjdC4KKyAgICBhdXRvIGFnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cisg
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9v
bHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0
aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgUmVnaXN0cmFibGVEb21haW4ge3JlZ2lzdHJhYmxl
RG9tYWlufSwgc2Vzc2lvbklELCBbYWdncmVnYXRvciA9IGFnZ3JlZ2F0b3IuY29weVJlZigpXSgp
IHsgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2VyQ29udGV4dENvbm5l
Y3Rpb25Ob0xvbmdlck5lZWRlZChXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBpZGVudGlmaWVy
KQpAQCAtMTUxMCwxNiArMTU3NSwzNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnByZWNv
bm5lY3RUbyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlkZQogICAgIHNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lvbklELCB3ZWJQ
YWdlUHJveHlJRCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3JlZGVudGlhbHNQ
b2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAorc3RhdGljIGJv
b2wgYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAgICBmb3Ig
KGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sK
KyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQ
b29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3VuZFdlYlByb2Nl
c3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9u
KCkKIHsKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkp
IHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsK
ICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3VuZEFjdGl2aXR5
KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZy
b21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtp
bmcgZm9yIGZvcmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKSwgMCk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJvY2Vzc1Bvb2wo
KS5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xI
YXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0
bGVyOjppc1ZhbGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2Vz
KSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIo
KS5iYWNrZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQgdmlldyhzKSJf
cyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0Rp
ZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IGE0MDk0MDQxNjUw
ODVhMjhmNjI4MDU4MmYxZjQwNTI0Yjc5NWQ5NDIuLjM4OTNmN2NjYWQ2ZmUxMTBlY2M3NzliNzJj
MzM5YmI0YjFiNjg1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC01Miw2ICs1MiwxMCBAQCBuYW1lc3BhY2Ug
SVBDIHsKIGNsYXNzIEZvcm1EYXRhUmVmZXJlbmNlOwogfQogCituYW1lc3BhY2UgQVBJIHsKK2Ns
YXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKK30KKwogbmFtZXNwYWNlIFBBTCB7CiBj
bGFzcyBTZXNzaW9uSUQ7CiB9CkBAIC03NCw3ICs3OCw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
Y2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7CiBjbGFzcyBXZWJQ
YWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcyA6
IGJvb2w7CkBAIC0xMDIsMTIgKzEwNSwxNSBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRG9tYWluSW5O
ZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAgICAgdXNp
bmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAKLSAgICBleHBs
aWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJik7CisgICAgc3RhdGljIE5l
dHdvcmtQcm9jZXNzUHJveHkmIHNpbmdsZXRvbigpOworICAgIGV4cGxpY2l0IE5ldHdvcmtQcm9j
ZXNzUHJveHkoKTsKICAgICB+TmV0d29ya1Byb2Nlc3NQcm94eSgpOwogCisgICAgdm9pZCB0ZXJt
aW5hdGUoKSBmaW5hbDsKKwogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKFdl
YlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIAotICAgIERvd25sb2FkUHJveHkmIGNyZWF0
ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5n
UGFnZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0
YVN0b3JlJiwgV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpOwog
CiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRl
RGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1l
IG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcik7CkBAIC0yMDUsMTMgKzIxMSwxMSBAQCBwdWJsaWM6CiAgICAgUHJvY2Vzc1Rocm90dGxl
ciYgdGhyb3R0bGVyKCkgZmluYWwgeyByZXR1cm4gbV90aHJvdHRsZXI7IH0KICAgICB2b2lkIHVw
ZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCgpIHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KLQogI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHko
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICNlbmRpZgogCi0gICAgdm9pZCBhZGRT
ZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsKKyAgICB2b2lkIGFkZFNlc3Npb24oV2Vi
c2l0ZURhdGFTdG9yZSYpOwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCk7
CiAgICAgCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkBAIC0yMjcsNiArMjMxLDEyIEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wo
Y29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9t
UHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9U
T0NPTF9NQU5BR0VSKQorICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KiBsZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSB7IHJldHVybiBtX2N1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5nZXQoKTsgfQorI2VuZGlmCisKKyAgICB2b2lkIG5ldHdvcmtQcm9jZXNz
Q3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQgcmVzb3VyY2VMb2FkRGlkU2Vu
ZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVzb3VyY2VMb2FkSW5mbyYmLCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8SVBDOjpGb3JtRGF0YVJlZmVyZW5jZT4m
Jik7CkBAIC0yNDUsNiArMjU1LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVu
dGlmaWVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKIHByaXZhdGU6CisgICAgdm9p
ZCBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgc3RhdGljIHZvaWQg
YXR0ZW1wdFJlbGF1bmNoQWZ0ZXJDcmFzaElmTmVjZXNzYXJ5KFZlY3RvcjxzdGQ6OnBhaXI8UmVm
PFdlYlByb2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseT4+JiYpOworCiAgICAgLy8gQXV4aWxpYXJ5UHJv
Y2Vzc1Byb3h5CiAgICAgQVNDSUlMaXRlcmFsIHByb2Nlc3NOYW1lKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gIk5ldHdvcmtpbmciX3M7IH0KIApAQCAtMjUyLDcgKzI2NSw2IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBwcm9jZXNzV2lsbFNodXREb3duKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICB2b2lkIGNsZWFyQ2FsbGJh
Y2tTdGF0ZXMoKTsKIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CkBAIC0zMDgsOCAr
MzIwLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vzc0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eT4mJik7
CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9jZXNzUG9vbDsKLQogICAgIEhhc2hNYXA8Q2Fs
bGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+PiBtX3BlbmRpbmdG
ZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFDYWxsYmFja3M7
CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+PiBtX3Bl
bmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnNDYWxsYmFja3M7CkBAIC0zNDcsNiArMzU3
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9u
ZXR3b3JrUHJvY2VzczsKICAgICB9OwogI2VuZGlmCisKKyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RP
TV9QUk9UT0NPTF9NQU5BR0VSKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CisjZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQppbmRleCBi
OGRhZWRmN2JlYmExY2Q4MWY2ZTUyNDQ5NjAzMTBmMTMzMTBjMTFlLi40OTllNjgxOGE0MjNlNWIx
YWU4MjBmNjFlMDk2MjNhMDVhZjhkYjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQpAQCAtNTEs
OCArNTEsNyBAQCBib29sIE5ldHdvcmtQcm9jZXNzUHJveHk6OlhQQ0V2ZW50SGFuZGxlcjo6aGFu
ZGxlWFBDRXZlbnQoeHBjX29iamVjdF90IGV2ZW50KSBjbwogICAgIGlmIChtZXNzYWdlTmFtZS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtZXNzYWdlTmFtZSA9
PSBMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDQ29uc3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNlc0Rh
dGFiYXNlWFBDRW5kcG9pbnRNZXNzYWdlTmFtZSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
cHJvY2Vzc1Bvb2woKS5zZW5kTmV0d29ya1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2Vzcyhl
dmVudCk7CisgICAgLy8gRklYTUU6IE5vdCBzdXJlIHdoYXQgZXF1aXZhbGVudCBpcyBoZXJlLgog
CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmNwcAppbmRleCA0MDE4NjBkMjBjMjc4NzZlYzQwODI3NTRjNWYw
YjJkNmIzNzVhZjM2Li5jYjdhZDc4MDVlMjRhMmNmMDU3NjFhN2Q4MjgyYTJjNjE1MjcyYWZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5j
cHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQ
SVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJPcHRpb25hbENhbGxi
YWNrSUQuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJXZWJDb29raWVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzksMjAgKzQwLDE1IEBACiBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jb25zdCBjaGFy
KiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkKK1dlYkNvb2tpZU1hbmFn
ZXJQcm94eSYgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKQogewotICAgIHJldHVy
biAiV2ViQ29va2llTWFuYWdlclByb3h5IjsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2Vi
Q29va2llTWFuYWdlclByb3h5PiBtYW5hZ2VyOworICAgIHJldHVybiBtYW5hZ2VyOwogfQogCi1S
ZWY8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZShX
ZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNv
b2tpZU1hbmFnZXJQcm94eSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2ll
TWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
V2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLSAgICA6
IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRleHRTdXBw
bGVtZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwog
fQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHkoKQpAQCAt
NjUsNTkgKzYxLDI1IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2xp
ZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2UqIGNsCiAgICAgbV9jbGllbnQuaW5p
dGlhbGl6ZShjbGllbnQpOwogfQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3Rv
cjxPYnNlcnZlcio+IG9ic2VydmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9j
b29raWVPYnNlcnZlcnMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6
IG9ic2VydmVyU2V0KQotICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0g
ICAgfQotCi0gICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2Jz
ZXJ2ZXItPm1hbmFnZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVy
cy5pc0VtcHR5KCkpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0Rp
ZENsb3NlKFdlYlByb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5Ojpwcm9jZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQg
V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAg
QVBJOjpPYmplY3Q6OnJlZigpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVy
ZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19
Ci0KIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0
cmluZz4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0
d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3
b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OkdldEhvc3RuYW1lc1dpdGhDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBob3N0bmFtZXMpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxl
dGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwog
fQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpEZWxldGVBbGxDb29raWVzKHNlc3Npb25JRCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENv
b2tpZXMoc2Vzc2lvbklEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpk
ZWxldGVDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUmIGNvb2tp
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAg
YXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBbY2Fs
bGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbildKCkgbXV0YWJsZSB7CiAg
ICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTEyNSw0MiArODcsNDIgQEAg
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IENvb2tpZSYKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRl
bGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2Fs
bFRpbWUgdGltZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5j
ZShzZXNzaW9uSUQsIHRpbWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQ
cm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1By
b2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRD
b29raWUoc2Vzc2lvbklELCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBVUkwmIG1haW5Eb2N1bWVudFVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNz
ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Mu
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVz
KHNlc3Npb25JRCwgY29va2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxi
YWNrRnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFsbENv
b2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1
dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAg
ICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVN
YW5hZ2VyOjpHZXRBbGxDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
bikpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZlY3RvcjxDb29raWU+JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0
d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAg
IGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7
CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpHZXRDb29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxsYmFja0Z1
bmN0aW9uKSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQ
b29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNz
YWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Np
b25JRCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9u
SUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdD
b29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9v
bCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25J
RCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6
OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCks
IDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llT2JzZXJ2ZXJD
YWxsYmFjayhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4m
JiBjYWxsYmFjaykKQEAgLTIxMSwyMSArMTczLDEzIEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclBy
b3h5Ojpjb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIAogdm9pZCBX
ZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNz
aW9uSUQsIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBp
ZiAoIXByb2Nlc3NQb29sKCktPmlzVXNpbmdUZXN0aW5nTmV0d29ya1Nlc3Npb24oKSkKLSAgICAg
ICAgcGVyc2lzdEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNlbmRpZgotI2lmIFVT
RShTT1VQKQotICAgIHByb2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9s
aWN5KHBvbGljeSk7Ci0jZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNz
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIH0K
IAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
UEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBv
bGljeSk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29y
a1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3Jr
UHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6Okdl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgK
aW5kZXggMGJkZmMwZDRlNDdjNDM2ZjU4NWNmMjljMDlkNTFhMjliYzgxMWE5ZC4uZTczOGI4NTgw
MjE3MDlhODg4YmMwMzgyOWI0OWRlMWMwZmM5ZWRjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKQEAgLTU2LDExICs1Niw5IEBAIHR5cGVk
ZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxiYWNrOwogdHlwZWRlZiBH
ZW5lcmljQ2FsbGJhY2s8V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tp
ZUFjY2VwdFBvbGljeUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNsYXNzIFdlYkNv
b2tpZU1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5
cGU6OkNvb2tpZU1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVi
bGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHBy
aXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBzdXBwbGVtZW50TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBXZWJDb29raWVNYW5h
Z2VyUHJveHkmIHNpbmdsZXRvbigpOwogICAgIHZpcnR1YWwgfldlYkNvb2tpZU1hbmFnZXJQcm94
eSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNs
aWVudEJhc2UqKTsKQEAgLTEwNCwxNyArMTAyLDExIEBAIHB1YmxpYzoKICAgICB1c2luZyBBUEk6
Ok9iamVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KFdl
YlByb2Nlc3NQb29sKik7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5KCk7CisgICAgZnJpZW5k
IE5ldmVyRGVzdHJveWVkPFdlYkNvb2tpZU1hbmFnZXJQcm94eT47CiAKICAgICB2b2lkIGNvb2tp
ZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgLy8gV2ViQ29udGV4dFN1cHBsZW1l
bnQKLSAgICB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBw
cm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9j
ZXNzRGlkQ2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZvaWQgcmVm
V2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmV2ViQ29udGV4
dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKLQogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCiAg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29v
a2llTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGEwNmI3N2I0NzNlYzYwMmJkN2M4
YzE0OTVjZDBhMjI4NmU4Y2E1M2IuLjcyNGFlZDMwMDQyNGMxOTM2NzYxM2Q0MmU2NTk3YjEwNjkz
OGZiMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29r
aWVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KQEAgLTIwLDYgKzIwLDYgQEAKICMgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotbWVzc2FnZXMgLT4gV2ViQ29va2llTWFuYWdl
clByb3h5IHsKK21lc3NhZ2VzIC0+IFdlYkNvb2tpZU1hbmFnZXJQcm94eSBOb3RSZWZDb3VudGVk
IHsKICAgICBDb29raWVzRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGExMjNmYjI4NTU5ODIx
NTMzMGI1MDkyOTY1ZWQxMGJiYWVlYzY5YjkuLjUzYTBiMDE1NDc5ZmZkMDkwNTIzMmE4NmUzODY3
MDgzMmJlMmEyMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApA
QCAtMzE4NSwxMSArMzE4NSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBC
b3VuZE1vZGVUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+CiB2b2lkIFdlYlBh
Z2VQcm94eTo6ZGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3Mo
KQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkK
LSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCku
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5k
TWVzc2FnZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRs
ZW1lbnQoKSwgMCk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0
bGVtZW50KCksIDApOwogI2VuZGlmCiB9CiAKQEAgLTMxOTgsMTMgKzMxOTQsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6Y2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShN
QUNDQVRBTFlTVCkKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBzZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50
T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCks
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgpA
QCAtOTkwOCw1OCArOTg5OCwyNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJldmlld0Fj
dGlvblRyaWdnZXJlZChjb25zdCBXZWJDb3JlOjpTeXN0ZW1QcmV2aWV3SW5mbwogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6ZHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBu
ZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRp
b24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9u
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2Fn
ZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dl
YnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgIH0gZWxzZQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhi
b29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9v
bCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2Fu
U2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0
aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQo
KSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0
aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJp
YnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0
d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkg
ewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVz
dGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xp
Y2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+
c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGlu
ZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3Nh
Z2UoKSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4
cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1h
cmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYg
RU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5jcHAKaW5kZXggNmQ2YjM0ZDdhZmRmNGNlNjQwNTljMDZmZDFjODhkNTBhYzY4NmM3
Ni4uNTkxMjFjNjE1ZTBhMzZmNTYxYTBkNDgyOGE2MWVjNjE0Y2Q4M2E1YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMjMyLDYgKzIzMiwxMSBAQCBz
dGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIGdsb2JhbFVS
TFNjaGVtZXNXaXRoQ3VzdG9tUHJvdAogICAgIHJldHVybiBzZXQ7CiB9CiAKK1ZlY3RvcjxTdHJp
bmc+IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMo
KQoreworICAgIHJldHVybiBjb3B5VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Q
cm90b2NvbEhhbmRsZXJzKCkpOworfQorCiBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2wo
QVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2Nv
bmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbi5jb3B5KCkpCiAgICAgLCBtX2RlZmF1bHRQYWdlR3Jv
dXAoV2ViUGFnZUdyb3VwOjpjcmVhdGUoKSkKQEAgLTIzOSw3ICsyNDQsNiBAQCBXZWJQcm9jZXNz
UG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZp
Z3VyYXRpb24pCiAgICAgLCBtX2F1dG9tYXRpb25DbGllbnQobWFrZVVuaXF1ZTxBUEk6OkF1dG9t
YXRpb25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2FkQ2xpZW50KG1ha2VVbmlxdWVSZWY8QVBJ
OjpEb3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlzdG9yeUNsaWVudChtYWtlVW5pcXVlPEFQ
STo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkpCi0gICAgLCBtX2N1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
PigpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgp
KQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2Fn
ZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlcj4o
KnRoaXMpKQpAQCAtMjY3LDkgKzI3MSw2IEBAIFdlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9v
bChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICNlbmRpZgog
ICAgIH0pOwogCi0gICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUgJiYgV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIG1fd2Vic2l0ZURh
dGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpOwot
CiAgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBtX2NvbmZpZ3VyYXRpb24tPmFsd2F5c1JldmFsaWRh
dGVkVVJMU2NoZW1lcygpKQogICAgICAgICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNBbHdheXNSZXZh
bGlkYXRlZC5hZGQoc2NoZW1lKTsKIApAQCAtMjg1LDcgKzI4Niw2IEBAIFdlYlByb2Nlc3NQb29s
OjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJh
dGlvbikKICAgICBhZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIAogICAgIC8vIE5PVEU6IFRoZXNlIHN1Yi1v
YmplY3RzIG11c3QgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuLgot
ICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBs
ZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxX
ZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04p
CkBAIC0zNDIsOSArMzQyLDYgQEAgV2ViUHJvY2Vzc1Bvb2w6On5XZWJQcm9jZXNzUG9vbCgpCiAg
ICAgcHJvY2Vzc1Bvb2xDb3VudGVyLmRlY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2h1dERvd25Qcm9jZXNz
KCk7Ci0KICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICBpZiAoIW1fcHJvY2Vzc2VzVXNpbmdHYW1l
cGFkcy5pc0VtcHR5KCkpCiAgICAgICAgIFVJR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5w
cm9jZXNzUG9vbFN0b3BwZWRVc2luZ0dhbWVwYWRzKCp0aGlzKTsKQEAgLTQwMiwxNiArMzk5LDYg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYKICAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0g
V1RGTW92ZShhdXRvbWF0aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0
TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQp
Ci17Ci0jaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKLSAgICBpZiAo
IWN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQgPSBtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
PigpOwotICAgIGVsc2UKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBX
VEZNb3ZlKGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoYm9vbCBlbmFibGVkKQog
ewogICAgIG1fc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQgPSBlbmFibGVkOwpAQCAtNDMxLDcgKzQx
OCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1CiAKIElQQzo6Q29ubmVjdGlvbiogV2ViUHJv
Y2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCiB7Ci0gICAgcmV0dXJuIG1f
bmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkuY29ubmVjdGlvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4dCkKQEAgLTQ0Myw4ICs0MzAsNyBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQoKQogewogICAgIHNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQo
KSk7CiAjaWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVy
cmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdl
cygpKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtNDgyLDI3MSArNDY4LDEzIEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNjcmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2VuZGlmCiB9CiAKLU5l
dHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhX
ZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKK05ldHdvcmtQcm9jZXNzUHJv
eHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3Jl
KikKIHsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNpbmcgV2ViS2l0IEFQ
SSBvbiBub24tbWFpbiB0aHJlYWRzLgotICAgIC8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNl
IHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIgQVBJcy4KLSAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMjQ2LgotICAgIGlm
ICghUnVuTG9vcDo6aXNNYWluKCkpIHsKLSAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGVu
c3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gKm1fbmV0
d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAg
ICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAg
ICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9Ci0KLSAgICBhdXRv
IG5ldHdvcmtQcm9jZXNzID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7
Ci0KLSAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCi0g
ICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0
ZURhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9y
ZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3Rv
cmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsK
LSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25TZWNvbmRh
cnlJZGVudGlmaWVyKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBwYXJhbWV0ZXJzLmNhY2hlTW9k
ZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotCi0g
ICAgZm9yIChhdXRvJiBzY2hlbWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMoKSkKLSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1
c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29v
a2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIGlmICghY29va2llU3RvcmFnZURpcmVjdG9yeS5p
c0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIGNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5
KCk7Ci0gICAgaWYgKCFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0g
V2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyZW50
QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNl
bmRpZgotI2VuZGlmCi0KLSAgICBwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5ID0gbV9j
b25maWd1cmF0aW9uLT5oc3RzU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIGlmICghcGFyYW1ldGVy
cy5oc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuaHN0c1N0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotCi0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzU2VjdXJlID0gY29w
eVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdp
c3RlckFzU2VjdXJlKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5
cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxT
ZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFzc2luZ0NvbnRlbnRT
ZWN1cml0eVBvbGljeSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNM
b2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2No
ZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lz
dGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7Ci0KLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLSAgICAvLyAqKioqKioqKioKLSAgICAvLyBJTVBPUlRBTlQ6IERvIG5v
dCBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGluZGV4ZWQgZGF0YWJhc2VzIG9u
IGRpc2sgd2l0aG91dCBmaXJzdCBjb25zdWx0aW5nIGEgcmV2aWV3ZXIgZnJvbSBBcHBsZSAoPHJk
YXI6Ly9wcm9ibGVtLzE3NDU0NzEyPikKLSAgICAvLyAqKioqKioqKioKLSAgICBpZiAobV93ZWJz
aXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2
ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+cGFyYW1ldGVycygp
LmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHko
KSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgbmV0d29ya1By
b2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgfQotI2VuZGlm
Ci0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9y
ZSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5ID0gIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGxvY2FsU3RvcmFnZURp
cmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2
ZWRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWxvY2Fs
U3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dlYnNp
dGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNhY2hlU3RvcmFnZURpcmVjdG9yeSgp
IDogbnVsbFN0cmluZygpOwotICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHko
KSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5ID0gV1RGTW92ZShjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOwotICAgIH0KLQotICAgIFN0
cmluZyByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICByZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCktPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5OwotICAgIAotICAgIGlmICghcmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5LCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKLQotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IGZhbHNlOwot
ICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IGZh
bHNlOwotICAgIGJvb2wgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IHRydWU7Ci0gICAgYm9vbCBl
bmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gZmFsc2U7Ci0jaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBXZWJDb3JlOjpUaGly
ZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGw7Ci0gICAgV2ViQ29yZTo6U2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEVuYWJsZWQgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBX
ZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87Ci0gICAgV2ViQ29y
ZTo6Q05BTUVDbG9ha2luZ01pdGlnYXRpb25FbmFibGVkIGNuYW1lQ2xvYWtpbmdNaXRpZ2F0aW9u
RW5hYmxlZCA9IFdlYkNvcmU6OkNOQU1FQ2xvYWtpbmdNaXRpZ2F0aW9uRW5hYmxlZDo6Tm87Ci0j
ZW5kaWYKLSAgICBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSBmaXJz
dFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzOwotICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICBIYXNoU2V0PFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiBhcHBCb3VuZERvbWFpbnM7Ci0gICAgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4gbWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0KLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBtX3RjY1ByZWZlcmVuY2VFbmFibGVkID0gZG9lc0FwcEhhdmVJVFBFbmFibGVkKCk7
Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlICYmICF3aXRoV2Vic2l0ZURhdGFTdG9yZS0+
aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAgd2l0aFdlYnNpdGVE
YXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0YVN0b3JlICYmICFt
X3dlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0g
ICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNlIGlmIChXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkgJiYgIVdlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmUoKS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAg
ICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsK
LSAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT5zZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJl
ZmVyZW5jZUVuYWJsZWQ7Ci0jZW5kaWYKLQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkg
ewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gd2l0aFdlYnNpdGVEYXRh
U3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYgRU5BQkxFKFJFU09V
UkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0xvZ1Rlc3RpbmdFdmVudCA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0aWNzVGVz
dGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0g
d2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNob3VsZEluY2x1ZGVM
b2NhbGhvc3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdN
b2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJh
bWV0ZXJzLmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQotICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy50aGlyZFBh
cnR5Q29va2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ7Ci0gICAgICAg
ICAgICBjbmFtZUNsb2FraW5nTWl0aWdhdGlvbkVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuY25hbWVDbG9ha2luZ01pdGln
YXRpb25FbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTsKLSAgICAgICAg
ICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25lQXBwbGljYXRpb25E
b21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91bmREb21haW5zOwot
ICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFsUHJldmFsZW50UmVz
b3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5w
ZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gd2l0aFdlYnNp
dGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAg
Ci0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IHdpdGhXZWJzaXRl
RGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAo
IW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0
d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3dlYnNpdGVE
YXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5oYXNTdGF0aXN0
aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNs
dWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotICAg
ICAgICAgICAgY25hbWVDbG9ha2luZ01pdGlnYXRpb25FbmFibGVkID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmNuYW1lQ2xvYWtpbmdN
aXRpZ2F0aW9uRW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAg
ICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0
aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWlu
czsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVu
dFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUt
PnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLQotICAgICAg
ICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUt
PnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghbmV0d29ya0Nh
Y2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVE
aXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoV2Vic2l0ZURh
dGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICAgICAgZW5hYmxlUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAgYXV0byBuZXR3b3Jr
Q2FjaGVEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGly
ZWN0b3J5KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtD
YWNoZURpcmVjdG9yeTsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5l
dHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIH0KLQotI2lm
IEhBVkUoQ0ZORVRXT1JLX0FMVEVSTkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYgKFdlYnNpdGVEYXRh
U3RvcmU6Omh0dHAzRW5hYmxlZCgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2Vydmlj
ZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5hdGl2ZVNlcnZpY2Vz
RGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0
b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAg
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLmh0dHAzRW5hYmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgYm9vbCBp
c0l0cFN0YXRlRXhwbGljaXRseVNldCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgewot
ICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLAotICAgICAg
ICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
LAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAotICAgICAgICBpc0l0cFN0
YXRlRXhwbGljaXRseVNldCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xv
Z1Rlc3RpbmdFdmVudCwKLSAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwKLSAgICAgICAg
ZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSwKLSNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
LAotICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCwKLSAgICAgICAgY25h
bWVDbG9ha2luZ01pdGlnYXRpb25FbmFibGVkLAotI2VuZGlmCi0gICAgICAgIGZpcnN0UGFydHlX
ZWJzaXRlRGF0YVJlbW92YWxNb2RlLAotICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21h
aW4sCi0gICAgICAgIGFwcEJvdW5kRG9tYWlucywKLSAgICAgICAgbWFudWFsUHJldmFsZW50UmVz
b3VyY2UsCi0gICAgfTsKLQotICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1l
dGVycwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOwot
Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgIG5ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG5ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdvcmtQcm9j
ZXNzTGF0ZW5jeVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDApOwotI2Vu
ZGlmCi0KLSAgICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwotCi0g
ICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5h
ZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0gICAgICAgIHdpdGhX
ZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAgfQotCi0gICAgLy8g
TWFrZSBzdXJlIHRoZSBuZXR3b3JrIHByb2Nlc3Mga25vd3MgYWJvdXQgYWxsIHRoZSBzZXNzaW9u
cyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSBpdCBzdGFydGVkLgotICAgIGZvciAo
YXV0byYgc2Vzc2lvbklEIDogbV9zZXNzaW9uVG9QYWdlSURzTWFwLmtleXMoKSkgewotICAgICAg
ICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5n
Tm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpKQotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKndlYnNpdGVEYXRhU3RvcmUpOwotICAgIH0KLQot
ICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdvcmtQcm9jZXNzKTsKLSAgICByZXR1
cm4gKm1fbmV0d29ya1Byb2Nlc3M7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNo
ZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkKIHsKLSAgICBBU1NF
UlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJvY2Vzc1Byb3h5ID09
IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDog
bV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+cHJvY2Vzc0RpZENs
b3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzU1LDkgKzQ4Myw2IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBu
ZXR3b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24pCiAgICAgICAgIG1f
YXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVhdmUgdGhlIHByb2Nl
c3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0aGUgY2xpZW50IGNv
dWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9
IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwogfQogCkBAIC03NzEs
MTEgKzQ5NiwxMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29ya2VyUHJvY2Vzc0Ny
YXNoZWQoV2ViUHJvY2Vzc1Byb3h5JiBwcm94eSkKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwg
TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpE
ZWxheWVkUmVwbHkmJiByZXBseSkKIHsKICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAg
IG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbih3ZWJQcm9jZXNz
UHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgd2ViUHJvY2Vzc1By
b3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkgPSBXVEZNb3ZlKHJlcGx5
KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJvY2Vzc1By
b3h5LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nlc3NQcm94
eSA9IG1ha2VXZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShyZXBseSld
IChhdXRvJiBjb25uZWN0aW9uSW5mbykgbXV0YWJsZSB7CiAgICAgICAgIGlmIChVTkxJS0VMWSgh
SVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSW5mby5pZGVudGlm
aWVyKCkpICYmIHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKICAgICAgICAgICAgIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJnZXROZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb246IEZhaWxlZCBmaXJzdCBhdHRlbXB0LCByZXRyeWluZyIpOwogICAgICAgICAg
ICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJl
cGx5KSk7CisgICAgICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5nZXRO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92ZShyZXBseSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHJlcGx5KGNvbm5lY3Rp
b25JbmZvKTsKQEAgLTgwOCwxNSArNTMzLDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0R1BV
UHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE0KICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hX
b3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94
eSYgcHJveHksIFJlZ2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIEFTU0VSVF9VTlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQ
cm9jZXNzLmdldCgpKTsKLQotICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0
YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklE
KTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBpZiAoIW1fd2Vic2l0
ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgICAgICB3ZWJzaXRl
RGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwotICAgIH0KKyAgICBhdXRvKiB3
ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVGb3JT
ZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpCisgICAgICAg
IHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRh
U3RvcmUoKS5wdHIoKTsKIAogICAgIFdlYlByb2Nlc3NQcm94eSogc2VydmljZVdvcmtlclByb2Nl
c3NQcm94eSB7IG51bGxwdHIgfTsKICAgICBpZiAoIW1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzcykgewpAQCAtOTI2LDcgKzY0NSw3IEBAIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdl
YlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlCiAj
aWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCiAgICAgLy8gSW4gcGxhdGZvcm1zIHVz
aW5nIEJ1YmJsZXdyYXAgZm9yIHNhbmRib3hpbmcsIHByZXdhcm1lZCBwcm9jZXNzIGlzIGxhdW5j
aGVkIHVzaW5nIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUsCiAg
ICAgLy8gc28gd2UgZG9uJ3QgdXNlIGl0IGluIGNhc2Ugb2YgdXNpbmcgYSBkaWZmZXJlbnQgV2Vi
c2l0ZURhdGFTdG9yZS4KLSAgICBpZiAobV9zYW5kYm94RW5hYmxlZCAmJiBtX3dlYnNpdGVEYXRh
U3RvcmUgJiYgbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpICE9ICZ3ZWJzaXRlRGF0YVN0b3JlKQor
ICAgIGlmIChtX3NhbmRib3hFbmFibGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRp
ZgogCkBAIC0xMjAyLDkgKzkyMSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRG
aW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQogICAgICAgICBwcm9jZXNz
LT5jb25uZWN0aW9uKCktPmlnbm9yZVRpbWVvdXRzRm9yVGVzdGluZygpOwogCiAgICAgbV9jb25u
ZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rpb24odGhpcywgcHJvY2Vzcy0+d2ViQ29ubmVj
dGlvbigpKTsKLQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIG1fd2Vic2l0
ZURhdGFTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQpAQCAt
MTI5OSwxMCArMTAxNSw3IEBAIFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVh
dGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAgICAgaWYgKCFwYWdl
Q29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAgIC8vIFdlIHRyeSB0
byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxvbmcgYXMgcG9zc2li
bGUuCiAgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIHdl
YiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVuIHdlIGhhdmUgdG8g
Y3JlYXRlIGl0LgotICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAg
IG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLnB0cigpOwotCi0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRl
RGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAgIHBhZ2VDb25maWd1
cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZSgpLnB0cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8V2ViUHJvY2Vzc1By
b3h5PiBwcm9jZXNzOwpAQCAtMTM2OSwxNSArMTA4Miw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBh
Z2VJCiB7CiAgICAgYXV0byByZXN1bHQgPSBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAuYWRkKGRhdGFT
dG9yZS5zZXNzaW9uSUQoKSwgSGFzaFNldDxXZWJQYWdlUHJveHlJZGVudGlmaWVyPigpKS5pdGVy
YXRvci0+dmFsdWUuYWRkKHBhZ2VJRCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3Vs
dC5pc05ld0VudHJ5KTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25J
RCgpOwotICAgIGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSkgewotICAgICAgICBBU1NFUlQoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IGRhdGFT
dG9yZS5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCA9PSBz
ZXNzaW9uSUQpOwotICAgICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKGRhdGFTdG9yZSkpOwotICAgICAg
ICAgICAgZGF0YVN0b3JlLmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAgICAgICAgfQotICAgIH0K
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFnZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZShX
ZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3Jl
KQpAQCAtMTQxMywyNiArMTExNywyMyBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6
ZG93bmxvYWQoV2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYWdlUHJveAogICAgICAg
ICBpc0FwcEJvdW5kID0gaW5pdGlhdGluZ1BhZ2UtPmlzVG9wRnJhbWVOYXZpZ2F0aW5nVG9BcHBC
b3VuZERvbWFpbigpOwogICAgIH0KIAotICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgLy8g
UmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBV
Ukwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCi0gICAgICAgIC8vIFdlIHNldCB0aGUgdmFsdWUg
dG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgotICAgICAgICBpZiAoaW5pdGlhdGluZ1BhZ2Up
IHsKLSAgICAgICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGlu
aXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKLSAgICAgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKLSAg
ICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21h
aW5zRXF1YWwoaW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKLSAgICAgICAgICAg
IGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpV
c2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdl
bnQoaW5pdGlhdGluZ1BhZ2UtPnVzZXJBZ2VudCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKLSAg
ICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOwotICAgICAgICAg
ICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6
OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJB
Z2VudChXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOwotICAgICAgICB9Ci0gICAg
ICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7Ci0gICAgICAgIG5ldHdvcmtQ
cm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qo
c2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlz
QXBwQm91bmQsIHN1Z2dlc3RlZEZpbGVuYW1lKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9h
ZFByb3h5OworICAgIFJlc291cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKKyAg
ICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFzIE9yaWdp
bmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KKyAgICAvLyBXZSBzZXQgdGhlIHZhbHVl
IHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KKyAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsK
KyAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsgVVJMIHsgfSwgaW5pdGlhdGlu
Z1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAgICAgICB1cGRhdGVkUmVxdWVzdC5z
ZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0aWF0aW5nUGFnZVVSTCk7CisgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwoaW5pdGlh
dGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVz
dC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAg
ICAgICB1cGRhdGVkUmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2Vy
QWdlbnQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQ
YXJ0eUZvckNvb2tpZXMoVVJMKCkpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVT
aXRlKGZhbHNlKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmll
bGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2VudCkpCisgICAgICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7CiAg
ICAgfQorICAgIHVwZGF0ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkRvd25sb2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1
cGRhdGVkUmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKIAogICAg
IHJldHVybiBkb3dubG9hZFByb3h5OwogfQpAQCAtMTQ0NiwxMSArMTE0Nyw3IEBAIERvd25sb2Fk
UHJveHkmIFdlYlByb2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBk
YXRhU3RvcmUsIFdlYlBhCiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAobmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5LmRvd25sb2Fk
SUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25I
YW5kbGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0gICAgfQotCisgICAg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElE
KCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRoLCBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlKSwgMCk7CiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CiAKQEAgLTE1MjEsNyArMTIx
OCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZnJlc2hQbHVnaW5zKCkKIAogUHJvY2Vzc0lE
IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoKQogewotICAgIHJldHVy
biBtX25ldHdvcmtQcm9jZXNzID8gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIo
KSA6IDA7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnByb2Nl
c3NJZGVudGlmaWVyKCk7CiB9CiAKIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6cHJld2FybWVk
UHJvY2Vzc0lkZW50aWZpZXIoKQpAQCAtMTYxOCwxMCArMTMxNSw3IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRs
ZXJzKGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3Vz
dG9tUHJvdG9jb2xIYW5kbGVycygpLmFkZCh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJv
Y2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNj
aGVtZSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnJlZ2lz
dGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJv
dG9jb2xIYW5kbGVycyhjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2MzAsMTAgKzEzMjQs
NyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZp
bmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbgogICAgICAgICByZXR1cm47CiAKICAgICBnbG9i
YWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5yZW1vdmUodXJsU2NoZW1l
KTsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+dW5yZWdpc3RlclNjaGVtZUZvckxl
Z2FjeUN1c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpLnVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2Nv
bCh1cmxTY2hlbWUpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVt
ZUFzQ2FjaGVQYXJ0aXRpb25lZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE2NjcsMTYg
KzEzNTgsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVs
IGNhY2hlTW9kZWwpCiAKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nl
c3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCkpOwogCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVN
b2RlbChjYWNoZU1vZGVsKSwgMCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hl
TW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7CiAg
ICAgdXBkYXRlQmFja0ZvcndhcmRDYWNoZUNhcGFjaXR5KCk7CiAKLSAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVN
b2RlbCksIHsgfSwgeyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5z
ZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91
c2x5Rm9yVGVzdGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOwogfQogCiB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dElu
dGVydmFsKQpAQCAtMTY4Niw3ICsxMzc1LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVm
YXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKIAogRG93
bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURh
dGFTdG9yZSYgZGF0YVN0b3JlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYlBh
Z2VQcm94eSogb3JpZ2luYXRpbmdQYWdlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8p
CiB7Ci0gICAgcmV0dXJuIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94
eShkYXRhU3RvcmUsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKKyAgICBy
ZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9y
ZSwgKnRoaXMsIHJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQYWdlKTsKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c3ludGhlc2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91
bmQpCkBAIC0xNzYyLDI1ICsxNDUxLDExIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1v
cnlTYW1wbGVyKCkKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlN0b3BNZW1vcnlTYW1wbGVyKCkpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjp1c2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24oKQotewotICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkp
OwotICAgIEFTU0VSVCghbV9uZXR3b3JrUHJvY2Vzcyk7Ci0KLSAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9u
ID0gdHJ1ZTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSwgVSYm
IHJlcGx5KQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3Mt
PmNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRTeW5jKHN0
ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7CisgICAg
aWYgKE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNhblNlbmRNZXNzYWdlKCkpCisg
ICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRTeW5jKHN0ZDo6Zm9y
d2FyZDxUPihtZXNzYWdlKSwgc3RkOjpmb3J3YXJkPFU+KHJlcGx5KSwgMCk7CiB9CiAKIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJv
b2wgYWxsb3dzKQpAQCAtMTc5MCwxOSArMTQ2NSwxNCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKIAogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiB7Ci0gICAgaWYgKG1f
bmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKCksIDApOworICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDbGVhckNhY2hlZENyZWRlbnRpYWxzKCksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
Ojp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCiB7CiAgICAgdGVybWluYXRlU2VydmljZVdvcmtl
cnMoKTsKIAotICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRlcm1pbmF0ZSgpOwotICAgIG1fbmV0d29ya1Byb2Nl
c3MgPSBudWxscHRyOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnRlcm1p
bmF0ZSgpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50
UHJvY2Vzc2VzKCkKQEAgLTE4MTQsMjIgKzE0ODQsMTcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dGVybWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcygpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNlbmROZXR3b3JrUHJvY2Vzc1ByZXBhcmVUb1N1c3BlbmRGb3JUZXN0aW5nKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1fbmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0gICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6
Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuc2VuZFByZXBhcmVUb1N1c3BlbmQoSXNTdXNwZW5zaW9uSW1taW5lbnQ6
Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQog
ewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRs
eUZvclRlc3RpbmcoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9j
ZXNzRGlkUmVzdW1lKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NEaWRSZXN1bWUoKTsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpCkBAIC0xODU0LDE1ICsxNTE5
LDE0IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNs
ZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykK
LSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKCksIDApOworICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpLCAwKTsKICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphbGxvd1NwZWNpZmlj
SFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZp
Y2F0ZSwgY29uc3QgU3RyaW5nJiBob3N0KQogewogICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7
Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFs
bG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNh
dGVJbmZvKCksIGhvc3QpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlm
aWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOwog
fQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdXRvbWF0aW9uQ2FwYWJpbGl0aWVzKCkg
Y29uc3QKQEAgLTIzODEsMTAgKzIwNDUsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckN1
cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRX
aXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b0RvbWFpbiwg
T3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6OkZsYWc+IG5hdmlnYXRp
b25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFBh
Z2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKIHsKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRpZENvbW1pdENyb3NzU2l0
ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25JRCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5h
dmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQpOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRo
RGF0YVRyYW5zZmVyKHNlc3Npb25JRCwgZnJvbURvbWFpbiwgdG9Eb21haW4sIG5hdmlnYXRpb25E
YXRhVHJhbnNmZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQpOwogfQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuaAppbmRleCAxZjQ2Y2U0ZDYzN2U3NDZkOTRjNmU4YWU5NjUzYmFkMGNhNzk4
MjdlLi5jOTEyYzkwNjgwMmYyYzk4OTRmYmViYWUyM2VkZjlmNjc4NmJjM2ZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKQEAgLTgxLDcgKzgxLDYgQEAgT0JKQ19D
TEFTUyBXS1ByZWZlcmVuY2VPYnNlcnZlcjsKIAogbmFtZXNwYWNlIEFQSSB7CiBjbGFzcyBBdXRv
bWF0aW9uQ2xpZW50OwotY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OwogY2xhc3Mg
RG93bmxvYWRDbGllbnQ7CiBjbGFzcyBIVFRQQ29va2llU3RvcmU7CiBjbGFzcyBJbmplY3RlZEJ1
bmRsZUNsaWVudDsKQEAgLTE4MCw3ICsxNzksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIaXN0
b3J5Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50
PiYmKTsKICAgICB2b2lkIHNldERvd25sb2FkQ2xpZW50KFVuaXF1ZVJlZjxBUEk6OkRvd25sb2Fk
Q2xpZW50PiYmKTsKICAgICB2b2lkIHNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlxdWVfcHRy
PEFQSTo6QXV0b21hdGlvbkNsaWVudD4mJik7Ci0gICAgdm9pZCBzZXRMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50PiYmKTsKIAogICAgIHZvaWQgc2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5k
bGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOwogICAgIGNvbnN0IFN0cmluZyYgY3VzdG9tV2Vi
Q29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9u
LT5jdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKTsgfQpAQCAtMjA5LDkg
KzIwNyw2IEBAIHB1YmxpYzoKICAgICAvLyBEaXNjb25uZWN0IHRoZSBwcm9jZXNzIGZyb20gdGhl
IGNvbnRleHQuCiAgICAgdm9pZCBkaXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqKTsK
IAotICAgIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSogd2Vic2l0ZURhdGFTdG9yZSgpIGNvbnN0
IHsgcmV0dXJuIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UHJpbWFy
eURhdGFTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgeyBtX3dlYnNp
dGVEYXRhU3RvcmUgPSAmZGF0YVN0b3JlOyB9Ci0KICAgICBSZWY8V2ViUGFnZVByb3h5PiBjcmVh
dGVXZWJQYWdlKFBhZ2VDbGllbnQmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7CiAK
ICAgICB2b2lkIHBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9yZShXZWJQYWdlUHJveHlJZGVu
dGlmaWVyLCBXZWJzaXRlRGF0YVN0b3JlJik7CkBAIC0zMDksOCArMzA0LDYgQEAgcHVibGljOgog
ICAgIEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQmIGhpc3RvcnlDbGllbnQoKSB7IHJl
dHVybiAqbV9oaXN0b3J5Q2xpZW50OyB9CiAgICAgV2ViQ29udGV4dENsaWVudCYgY2xpZW50KCkg
eyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50JiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiAqbV9jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7IH0KLQogICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKICAg
ICAgICAgdW5zaWduZWQgd2tWaWV3Q291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHdrUGFnZUNvdW50
OwpAQCAtMzE4LDkgKzMxMSw2IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHN0YXRpYyBTdGF0aXN0
aWNzJiBzdGF0aXN0aWNzKCk7ICAgIAogCi0gICAgdm9pZCB1c2VUZXN0aW5nTmV0d29ya1Nlc3Np
b24oKTsKLSAgICBib29sIGlzVXNpbmdUZXN0aW5nTmV0d29ya1Nlc3Npb24oKSBjb25zdCB7IHJl
dHVybiBtX3Nob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbjsgfQotCiAgICAgdm9pZCBzZXRB
bGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChib29sKTsKIAogICAgIHZvaWQgY2xl
YXJDYWNoZWRDcmVkZW50aWFscygpOwpAQCAtNDAwLDcgKzM5MCw2IEBAIHB1YmxpYzoKIAogICAg
IC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50CiAgICAgTmV0d29ya1Byb2Nlc3NQcm94eSYg
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3Rv
cmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2Vzcygp
IGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7IH0KICAgICB2b2lkIG5ldHdv
cmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKICAgICB2b2lkIGdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJv
Y2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7CkBA
IC00MTAsOCArMzk5LDYgQEAgcHVibGljOgogICAgIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKICAgICB2b2lkIHJlbW92ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKFdl
YlByb2Nlc3NQcm94eSYpOwogICAgIHNpemVfdCBzZXJ2aWNlV29ya2VyUHJveGllc0NvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbXB1dGVTaXplKCk7IH0K
LSAgICB2b2lkIHNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcihib29s
IGFsbG93cykgeyBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlciA9IGFs
bG93czsgfQotICAgIGJvb2wgYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2Vy
KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXI7IH0KICAgICB2b2lkIHVwZGF0ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5n
JiB1c2VyQWdlbnQpOwogICAgIGNvbnN0IE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklk
ZW50aWZpZXI+JiB1c2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtl
cnMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJDb250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdv
cmtlcjsgfQogICAgIGJvb2wgaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRl
c3RpbmcoKSBjb25zdDsKQEAgLTU1Nyw2ICs1NDQsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc2Vu
ZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlByb2Nlc3MoT1NPYmplY3RQdHI8eHBjX29i
amVjdF90PiBlbmRwb2ludE1lc3NhZ2UpOwogI2VuZGlmCiAKKyAgICBzdGF0aWMgdm9pZCBwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyYpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzV2l0aEN1c3RvbVBy
b3RvY29sSGFuZGxlcnMoKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgc3RhdGlj
IFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBwYXJl
bnRCdW5kbGVEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNE
aXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3Rvcnko
KTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOworI2Vu
ZGlmCisKIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIApAQCAtNTcw
LDggKzU2OCw2IEBAIHByaXZhdGU6CiAgICAgV2ViUHJvY2Vzc1Byb3h5JiBjcmVhdGVOZXdXZWJQ
cm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkID0g
V2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8pOwogICAgIHZvaWQgaW5pdGlhbGl6ZU5l
d1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiwgV2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nl
c3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7
CiAKLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7Ci0KICAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1l
c3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2Fn
ZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVXNlckRhdGEmJik+JiYpOwogCkBAIC01OTUs
MTQgKzU5MSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHVzZXNTaW5nbGVXZWJQcm9jZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLT51c2VzU2luZ2xlV2ViUHJvY2VzcygpOyB9
CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyBTdHJpbmcgY29va2llU3Rv
cmFnZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5
KCk7Ci0gICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAg
c3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0
cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKLSNlbmRpZgotCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgdm9pZCByZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwogICAg
IHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwpAQCAtNjYyLDcgKzY1MCw2
IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4g
bV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxBUEk6OkRvd25sb2FkQ2xpZW50PiBt
X2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRI
aXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVu
dDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4gbV9hdXRvbWF0aW9uU2Vzc2lv
bjsKIApAQCAtNjk0LDggKzY4MSw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21lbW9yeVNhbXBs
ZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwg
eyAxNDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU+IG1fd2Vi
c2l0ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwgUmVmUHRy
PFdlYkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFzaDxjb25zdCBjaGFyKj4+IFdlYkNvbnRleHRT
dXBwbGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRTdXBwbGVtZW50TWFwIG1fc3VwcGxlbWVudHM7
CiAKQEAgLTczMCw4ICs3MTUsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3Byb2Nlc3NUZXJt
aW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1By
b2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKLQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJl
ZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25hcnlDYWxsYmFja3M7CiAKICNpZiBV
U0UoU09VUCkKQEAgLTg1MSwxNSArODM0LDE1IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1l
c3NhZ2UpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+
Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZv
cndhcmQ8VD4obWVzc2FnZSksIDApOworICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKS5jYW5TZW5kTWVzc2FnZSgpKQorICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJv
Y2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCiB7CiAgICAgZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxU
PihtZXNzYWdlKSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2Vu
ZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmNwcAppbmRleCA0ODg4NzIzZTBiZGE1NzgzOGMyODg3OWRjY2YyN2UxZTNi
NDE0ZjIyLi5hYTkxNDM3NGM5MmY2N2YxNzFhZmZjNjhhZWMzMzk2MTY5NDc3NjRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVy
U3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRl
ICJXZWJCYWNrRm9yd2FyZENhY2hlLmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5
LmgiCiAjaW5jbHVkZSAiV2ViS2l0MkluaXRpYWxpemUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzQ2FjaGUuaCIKQEAgLTc1LDYgKzc2LDEwIEBACiAj
aW5jbHVkZSAiU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaCIKICNlbmRpZgogCisjaWYgUExB
VEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MuaCIKKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIGJvb2wgYWxsb3dzV2Vic2l0ZURhdGFS
ZWNvcmRzRm9yQWxsT3JpZ2luczsKQEAgLTgzLDEzICs4OCwyMiBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmFsbG93V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lucygpCiAgICAgYWxsb3dz
V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lucyA9IHRydWU7CiB9CiAKLXN0YXRpYyBIYXNo
TWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4mIG5vbkRlZmF1bHREYXRhU3Rv
cmVzKCkKK3N0YXRpYyBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0YVN0b3JlKj4m
IGFsbERhdGFTdG9yZXMoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVE
YXRhU3RvcmUqPj4gbWFwOwogICAgIHJldHVybiBtYXA7CiB9CiAKK1ZlY3RvcjxXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9y
ZXMoKQoreworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gYWxsUGFyYW1l
dGVyczsKKyAgICBhbGxQYXJhbWV0ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYWxsRGF0YVN0
b3JlcygpLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBzdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52
YWx1ZXMoKSkKKyAgICAgICAgYWxsUGFyYW1ldGVycy51bmNoZWNrZWRBcHBlbmQoc3RvcmUtPnBh
cmFtZXRlcnMoKSk7CisgICAgcmV0dXJuIGFsbFBhcmFtZXRlcnM7Cit9CisKIFJlZjxXZWJzaXRl
RGF0YVN0b3JlPiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGVOb25QZXJzaXN0ZW50KCkKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVD
b25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpObyksIFBBTDo6U2Vzc2lvbklEOjpn
ZW5lcmF0ZUVwaGVtZXJhbFNlc3Npb25JRCgpKSk7CkBAIC0xMTUsMTAgKzEyOSwxMSBAQCBXZWJz
aXRlRGF0YVN0b3JlOjpXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbj4mJiBjb25maWd1cgogI2VuZGlmCiB7CiAgICAgV1RGOjpzZXRQcm9jZXNzUHJpdmls
ZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwotICAgIG1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KCk7CisgICAgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFs
aXplKCk7CiAKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLmFkZFNlc3Npb24oKnRoaXMpOwogfQogCiBXZWJzaXRlRGF0
YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCkBAIC0xMjgsMTcgKzE0MywxMiBAQCBXZWJzaXRl
RGF0YVN0b3JlOjp+V2Vic2l0ZURhdGFTdG9yZSgpCiAKICAgICBwbGF0Zm9ybURlc3Ryb3koKTsK
IAotICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpKSB7Ci0gICAgICAgIEFTU0VSVChub25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChtX3Nlc3Np
b25JRCkgPT0gdGhpcyk7Ci0gICAgICAgIG5vbkRlZmF1bHREYXRhU3RvcmVzKCkucmVtb3ZlKG1f
c2Vzc2lvbklEKTsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQ
b29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAgICAgICB9Ci0g
ICAgfQorICAgIEFTU0VSVChhbGxEYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0aGlz
KTsKKyAgICBhbGxEYXRhU3RvcmVzKCkucmVtb3ZlKG1fc2Vzc2lvbklEKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgICAgIGlmIChhdXRvKiBncHVQcm9jZXNzUHJveHkg
PSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQotICAgICAgICAgICAgZ3B1
UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKKyAgICBpZiAoYXV0byog
Z3B1UHJvY2Vzc1Byb3h5ID0gR1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkK
KyAgICAgICAgZ3B1UHJvY2Vzc1Byb3h5LT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKICNl
bmRpZgogfQogCkBAIC0xNjksMTcgKzE3OSwxNSBAQCBib29sIFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmVFeGlzdHMoKQogICAgIHJldHVybiAhIWdsb2JhbERlZmF1bHREYXRhU3Rv
cmUoKTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjptYXliZVJlZ2lzdGVyV2l0aFNlc3Np
b25JRE1hcCgpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlZ2lzdGVyV2l0aFNlc3Npb25JRE1h
cCgpCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBub25EZWZhdWx0RGF0YVN0b3Jlcygp
LmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCBy
ZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgfQorICAgIGF1dG8gcmVzdWx0ID0gYWxsRGF0YVN0b3Jl
cygpLmFkZChtX3Nlc3Npb25JRCwgdGhpcyk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJl
c3VsdC5pc05ld0VudHJ5KTsKIH0KIAotV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9y
ZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKK1dlYnNpdGVEYXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5n
RGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBy
ZXR1cm4gc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkgPyBu
b25EZWZhdWx0RGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpIDogbnVsbHB0cjsKKyAgICByZXR1
cm4gYWxsRGF0YVN0b3JlcygpLmdldChzZXNzaW9uSUQpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCkBAIC0xOTUs
MTIgKzIwMyw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dW5yZWdpc3RlclByb2Nlc3MoV2Vi
UHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogICAgIG1fcHJvY2Vzc2VzLnJlbW92ZShwcm9jZXNzKTsK
IH0KIAotV2ViUHJvY2Vzc1Bvb2wqIFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29sRm9yQ29v
a2llU3RvcmFnZU9wZXJhdGlvbnMoKQotewotICAgIGF1dG8gcG9vbHMgPSBwcm9jZXNzUG9vbHMo
MSk7Ci0gICAgcmV0dXJuIHBvb2xzLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBwb29scy5iZWdpbigp
LT5nZXQoKTsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNvbHZlRGlyZWN0b3JpZXNJ
Zk5lY2Vzc2FyeSgpCiB7CiAgICAgaWYgKG1faGFzUmVzb2x2ZWREaXJlY3RvcmllcykKQEAgLTQ0
Myw4ICs0NDUsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogICAgICAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nl
c3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5
SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgpAQCAt
NDU2LDcgKzQ1Niw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHko
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBPCiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0g
ICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZmV0Y2hXZWJzaXRlRGF0
YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0
b3IsIHByb2Nlc3NQb29sXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgeworICAgICAgICAgICAg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZmV0Y2hXZWJzaXRlRGF0YShtX3Nlc3Np
b25JRCwgZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nl
c3NQb29sXShXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YSkgewogICAgICAgICAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKFdURk1vdmUod2Vic2l0ZURhdGEp
KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC03MjcsOCArNzI3LDYgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRh
dGFUeXBlcywgV2FsbFRpbWUKICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xz
KSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewogICAg
ICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
IGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKQEAgLTc0MCw3ICs3MzgsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
ZGF0YVR5cGVzLCBXYWxsVGltZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRh
VHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7
CisgICAgICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5kZWxldGVXZWJz
aXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVn
YXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtODkxLDE0ICs4ODksOSBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0
YVR5cGVzLCBXYWxsVGltZQogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAg
ICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3MpKSB7CiAgICAgICAgIGlmICghZGlkTm90aWZ5TmV0d29ya1Byb2Nlc3NUb0RlbGV0
ZVdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHBy
b2Nlc3MtPmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVk
U2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNh
bGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmRlbGV0ZVdlYnNpdGVEYXRhKG1fc2Vz
c2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsK
KyAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFj
aygpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwpAQCAtOTkyLDggKzk4NSw2IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRh
VHlwZXMsIGNvbnN0IFZlCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykg
ewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAg
ICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAg
ICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBj
YXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6CkBAIC0xMDE5LDcgKzEwMTAsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
ZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCktPmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Np
b25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBjb29raWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3RO
YW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9v
bF0geworICAgICAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRl
V2Vic2l0ZURhdGFGb3JPcmlnaW5zKG1fc2Vzc2lvbklELCBkYXRhVHlwZXMsIG9yaWdpbnMsIGNv
b2tpZUhvc3ROYW1lcywgSFNUU0NhY2hlSG9zdE5hbWVzLCByZWdpc3RyYWJsZURvbWFpbnMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwog
ICAgICAgICB9CkBAIC0xMTgzLDggKzExNzQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhpbXVtRW50cnlDb3VudCwgQ29tcGxldAog
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vzc2lvbklELCBtYXhpbXVtRW50
cnlDb3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9z
ZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3Qg
cHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTE5Myw4ICsxMTgzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQ
cnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb24KICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lvbklELCBwcnVuZVRhcmdl
dENvdW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNz
aW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vj
b25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTIwMyw4ICsxMTkyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmlu
Z1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjwKIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRH
cmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLnNldEdyYW5kZmF0aGVyaW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVt
VGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjEzLDIwICsxMjAxLDEz
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcywKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAg
ICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRNaW5pbXVtVGltZUJldHdl
ZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25J
RCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICAgICAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmR1bXBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjM4LDEyICsx
MjE5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2kKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgICAgICBwcm9jZXNzLT5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5pc1ByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0
IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNQcmV2YWxlbnQpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTI1NSwxMiArMTIzMSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNHcmFu
ZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5pc0dyYW5k
ZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTI3NCw4ICsxMjQ1LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29t
cGxldGlvbkhhbmRsZXI8dm8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBlbnN1cmVQcm9jZXNzUG9vbHMoKSkKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UHJldmFsZW50UmVzb3Vy
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLnNldFByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdN
b2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xMjg5LDEwICsxMjU5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpz
ZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGkK
ICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0
UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ZlcnlQcmV2YWxlbnQpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTMwNCwxMiArMTI3MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzVmVy
eVByZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTMy
MywxMCArMTI4NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJl
c291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlCiAgICAgCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0g
ICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29s
IHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xMzM1LDggKzEyOTQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdgogICAgIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nl
c3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFNob3VsZENsYXNzaWZ5UmVz
b3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3QgVVJM
JiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMTM1MCwyMiArMTMwOCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjbwogCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BG
cmFtZVVSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpp
c1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY29uc3Qg
VVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB0b3BGcmFtZVVS
TCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTM3
OSwyMyArMTMyOSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YnJlc291cmNlVQogCiAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
c3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVS
TCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJl
c291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpp
c1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwg
Y29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNz
aW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0MDks
MTAgKzEzNTAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RUbyhjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLAogCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVz
b3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8g
fSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJj
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkws
IGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0MjQsMTIgKzEzNjIsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgc3Vi
cmVzb3VyY2VVUgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNv
dXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9t
IH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNv
dXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9t
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwg
Y29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE0NDEsMTIgKzEzNzQsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJM
LCBjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8o
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW3Byb2Nlc3NQ
b29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpLnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uc3QgVVJMJiB1cmxSZWRpcmVj
dGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTQ1OCwyNSArMTM4NiwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBwcm9jZXNzLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8o
Y29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkRnJvbSwgY29uc3QgVVJMJiB1cmxSZWRpcmVjdGVkVG8s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNS
ZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuaXNSZWdpc3RlcmVk
QXNSZWRpcmVjdGluZ1RvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybFJlZGlyZWN0ZWRGcm9tIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVk
aXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDg4LDQ2ICsx
NDA1LDI3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShj
b25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vz
c1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+Y2xlYXJQ
cmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNsZWFyUHJldmFsZW50UmVzb3Vy
Y2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNl
dFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnJlc2V0UGFy
YW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhtX3Nlc3Npb25JRCwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN1Ym1p
dFRlbGVtZXRyeSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPnN1Ym1pdFRlbGVtZXRyeShtX3Nlc3Npb25JRCwgW10geyB9KTsKLSAgICB9
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc3VibWl0VGVsZW1ldHJ5KG1f
c2Vzc2lvbklELCBbXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxl
Q2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgU2hvdWxk
R3JhbmRmYXRoZXJTdGF0aXN0aWNzIHNob3VsZEdyYW5kZmF0aGVyLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJv
Y2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9k
aWZpZWRTaW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBtb2RpZmll
ZFNpbmNlLCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
U3VtbWFyeShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTE1NzAsMjIgKzE0NjgsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50KFNob3VsZEdyYW5kZmF0aGVyU3RhdGkKIHsKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1f
c2Vzc2lvbklELCB7IH0sIHNob3VsZEdyYW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuc2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgeyB9
LCBzaG91bGRHcmFuZGZhdGhlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZUNvb2tpZUJsb2NraW5n
VXBkYXRlKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2NoZWR1bGVD
b29raWVCbG9ja2luZ1VwZGF0ZShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRh
UmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTU5NCwyNCArMTQ4NCwxMyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNj
aGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhDb21wbGV0aW9uSGFuZAog
ICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHNQcm9jZXNzaW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+c3RhdGlzdGlj
c0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuc3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TGFzdFNl
ZW4oY29uc3QgVVJMJiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTYyMywyMiArMTUwMiwxNCBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVSTCYgdXJsLCBTZWNvbmRzIHNlY29u
ZHMsIENvbXBsZXRpb25IYQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNldExhc3RTZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0TGFz
dFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIHNl
Y29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKGludCBkb21haW5JRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmRvbWFpbklERXhpc3RzSW5EYXRh
YmFzZShtX3Nlc3Npb25JRCwgZG9tYWluSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpLmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShtX3Nlc3Npb25JRCwg
ZG9tYWluSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGNvbnN0
IFVSTCYgdG9wRnJhbWVVcmwxLCBjb25zdCBVUkwmIHRvcEZyYW1lVXJsMiwgU2Vjb25kcyBsYXN0
U2VlbiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFNlY29uZHMgbW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvbiwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIGJvb2wgaXNQcmV2YWxlbnQsIGJvb2wgaXNW
ZXJ5UHJldmFsZW50LCB1bnNpZ25lZCBkYXRhUmVjb3Jkc1JlbW92ZWQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2NTAsMTAgKzE1MjEsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwm
IHVybCwgY29uc3QgVVJMJiB0b3BGcgogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHByb2Nlc3MtPm1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFt
ZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBk
YXRhUmVjb3Jkc1JlbW92ZWQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5tZXJnZVN0YXRp
c3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVcmwyIH0sIGxhc3RTZWVuLCBoYWRVc2Vy
SW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwg
aXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4
cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGhhZFVzZXJJbnRl
cmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBib29s
IGlzUHJldmFsZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xNjY1LDE4ICsxNTMzLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0
RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaGFkCiAKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+aW5zZXJ0RXhwaXJl
ZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29r
aWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5p
bnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZv
ckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBpc1ByZXZhbGVudCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0Tm90aWZ5UGFnZXNXaGVuRGF0
YVJlY29yZHNXZXJlU2Nhbm5lZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQs
IHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2ODQs
OCArMTU0OCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxlCiAgICAgdXNlRXhwbGljaXRJVFBT
dGF0ZSgpOwogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVu
c3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
c3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRJc1J1bm5pbmdS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3RvcmFn
ZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJiBkb21haW5zKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTE2OTYsNyArMTU1OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0QWxsU3Rv
cmFnZUFjY2Vzc0VudHJpZXMoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQsCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICB3ZWJQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vzc2lv
bklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogCkBAIC0xNzA0LDggKzE1NjcsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25k
cyBzZWNvbmRzLCBDb21wbGV0aW9uSAogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0VGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRUaW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTcxOSwxMCArMTU4MSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlcklu
dGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkCiAgICAgCiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmxvZ1VzZXJJbnRl
cmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkubG9nVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwm
IHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE3MzQsMTMgKzE1OTMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omhhc0hhZFVzZXJJ
bnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5oYXNIYWRVc2VySW50ZXJhY3Rp
b24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkuaGFzSGFkVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRh
YmFzZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0IFVSTCYgdG9wVXJsLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc1MiwxMyArMTYw
NSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFz
ZU9uY2UoY29uc3QgVVJMJiBzdWJVcmwsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmlz
UmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHN1YlVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRv
cFVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3NzIsMTAgKzE2MTksNyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuY2xlYXJV
c2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgYm9vbCBpc0dyYW5kZmF0aGVy
ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3
ODksMTAgKzE2MzMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQo
Y29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBDbwogICAgIAogICAgIGF1dG8g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0R3JhbmRmYXRoZXJl
ZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaXNHcmFu
ZGZhdGhlcmVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lvbklELCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VXNl
SVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMTgwMSwxMCArMTY0Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0VXNlSVRQRGF0YWJhc2UoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LnNldFVzZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVMb2FkV2l0
aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGZyb21VUkwsIGNvbnN0IFVSTCYg
dG9VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTE4MTMsNjIgKzE2NTEsMzggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDcm9zc1NpdGVM
b2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIGYKICAgICAKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29s
IDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldENyb3NzU2l0
ZUxvYWRXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB0b1VSTCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0Q3Jvc3NTaXRlTG9hZFdp
dGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJM
IH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNl
dENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkucmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRl
c3RpbmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmws
IGJvb2wgaW5jbHVkZUh0dHBPbmx5Q29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5kZWxldGVDb29raWVzRm9yVGVzdGluZyht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0
dHBPbmx5Q29va2llcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRw
T25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
IHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNMb2NhbFN0b3JhZ2UobV9zZXNzaW9u
SUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuaGFzTG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aGFzSXNvbGF0ZWRTZXNzaW9uRm9yVGVzdGluZyhjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29u
c3QKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5oYXNJc29sYXRlZFNlc3Npb24o
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuaGFzSXNvbGF0ZWRTZXNzaW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3Vs
ZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRG93
bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFNob3Vs
ZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpAQCAtMTg5OSwxMCArMTcxMyw3IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShX
ZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llCiAgICAgICAgICAgICB3ZWJQcm9jZXNzLnNldFRoaXJk
UGFydHlDb29raWVCbG9ja2luZ01vZGUoYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUaGlyZFBh
cnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBibG9ja2luZ01vZGUsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2Nr
aW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50Rm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5MTAsMTAgKzE3MjEsNyBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVT
aXRlU3RyaWN0RW5mb3JjZQogICAgIGF1dG8gZmxhZyA9IGVuYWJsZWQgPyBXZWJDb3JlOjpTYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6WWVzIDogV2ViQ29yZTo6U2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZEVuYmxlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIGZsYWcsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LnNldFNob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEZvclRlc3RpbmcobV9zZXNz
aW9uSUQsIGZsYWcsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlRm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5MjEsMjAgKzE3MjksMTQgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNp
dGVEYXRhUmVtb3ZhbE1vZGUKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBhdXRv
IG1vZGUgPSBlbmFibGVkID8gV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU6OkFsbEJ1dENvb2tpZXMgOiBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFs
TW9kZTo6Tm9uZTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRGaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcobV9zZXNzaW9uSUQsIG1vZGUsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLnNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyht
X3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVG9TYW1lU2l0ZVN0cmlj
dENvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VG9TYW1lU2l0ZVN0cmljdENvb2tp
ZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3Rpbmco
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlIb3N0Q05BTUVEb21haW5Gb3JUZXN0aW5nKGNvbnN0
IFVSTCYgZmlyc3RQYXJ0eVVSTCwgY29uc3QgVVJMJiBjbmFtZVVSTCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTk2OSw4ICsxNzcxLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNl
cyhTZWNvbmRzIHNlY29uZHMsIEMKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9z
ZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZWNvbmRzKTsKICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwpAQCAtMTk4MiwyMiArMTc4MywxMiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoQ29tcGxldGlvbkhhbmRsZQogI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q2FjaGVNYXhB
Z2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnJl
c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMobV9zZXNzaW9uSUQsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAj
ZW5kaWYKIH0KIAotYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjppc0Fzc29jaWF0ZWRQcm9jZXNzUG9v
bChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHBy
b2Nlc3NQb29sRGF0YVN0b3JlID0gcHJvY2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpKQotICAg
ICAgICByZXR1cm4gcHJvY2Vzc1Bvb2xEYXRhU3RvcmUgPT0gdGhpczsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0ZURhdGFTdG9y
ZTo6cHJvY2Vzc1Bvb2xzKHNpemVfdCBsaW1pdCkgY29uc3QKIHsKICAgICBIYXNoU2V0PFJlZlB0
cjxXZWJQcm9jZXNzUG9vbD4+IHByb2Nlc3NQb29sczsKQEAgLTIwMTIsOSArMTgwMyw2IEBAIEhh
c2hTZXQ8UmVmUHRyPFdlYlByb2Nlc3NQb29sPj4gV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bv
b2xzKHNpemVfdCBsaW1pdCkgY29uCiAgICAgaWYgKHByb2Nlc3NQb29scy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgb25lIG9mIHRoZSBsZWdhY3kgZGF0YSBzdG9yZXMu
CiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmICghaXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wo
KnByb2Nlc3NQb29sKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQogICAgICAgICAgICAg
cHJvY2Vzc1Bvb2xzLmFkZChwcm9jZXNzUG9vbCk7CiAgICAgICAgICAgICBpZiAocHJvY2Vzc1Bv
b2xzLnNpemUoKSA9PSBsaW1pdCkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIxMzIsMTcg
KzE5MjAsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgICAgIAogICAgICAgICByZXNvbHZlRGlyZWN0
b3JpZXNJZk5lY2Vzc2FyeSgpOwogICAgICAgICAKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSkpOworICAgICAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpLCAwKTsK
KyAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAgICAg
ICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpLCBtX3Nl
c3Npb25JRCk7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBwcm9jZXNzUG9v
bC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpKTsKKyAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIGZhbHNl
KSwgMCk7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQogICAg
ICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNzYWdlczo6
V2ViUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZmFsc2UpLCBtX3Nl
c3Npb25JRCk7Ci0gICAgfQogCiAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCA9
IGZhbHNlOwogI2Vsc2UKQEAgLTIxNTQsOCArMTk0MCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKEZ1bmN0aW9uPHZv
aWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKGNhbGxiYWNrKSB7Ci0g
ICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQodHJ1ZSkp
OworICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVu
dCh0cnVlKSwgMCk7CiAgICAgfQogICAgIAogICAgIG1fc3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spOwpAQCAtMjE3NCw4ICsxOTU5LDcgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxl
ZCwgQ29tcGxldGkKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bv
b2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
TW9kZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlKG1fc2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CiAgICAgVU5VU0VEX1BBUkFN
KGNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTIxOTAsMjAgKzE5NzQsMTUgQEAgdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjppc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25J
RCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotI2VuZGlmCisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuaXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CisjZWxzZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNl
KTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEFkQ2xpY2tBdHRyaWJ1
dGlvbkRlYnVnTW9kZShib29sIGVuYWJsZWQpCiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5hYmxlZCk7CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdN
b2RlKGVuYWJsZWQpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
QEAgLTIyMjUsMjkgKzIwMDQsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0luV2ViUHJvY2Vzc2VzKENvbXBsZXRpb25IYW5kbAogfQogI2VuZGlm
CiAKLVZlY3RvcjxXZWJDb3JlOjpDb29raWU+IFdlYnNpdGVEYXRhU3RvcmU6OnBlbmRpbmdDb29r
aWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29weVRvVmVjdG9yKG1fcGVuZGluZ0Nvb2tpZXMp
OwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUoY29uc3QgV2Vi
Q29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmVJZihb
JmNvb2tpZV0oYXV0byYgcGVuZGluZ0Nvb2tpZSkgewotICAgICAgICByZXR1cm4gcGVuZGluZ0Nv
b2tpZS5pc0tleUVxdWFsKGNvb2tpZSk7Ci0gICAgfSk7Ci0gICAgbV9wZW5kaW5nQ29va2llcy5h
ZGQoY29va2llKTsKLX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29v
a2llKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tp
ZXMucmVtb3ZlKGNvb2tpZSk7Ci19Ci0gICAgCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFy
UGVuZGluZ0Nvb2tpZXMoKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMuY2xlYXIoKTsKLX0KLQog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkaXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgpPiYm
IGZ1bmN0aW9uKQogewogICAgIG1fcXVldWUtPmRpc3BhdGNoKFdURk1vdmUoZnVuY3Rpb24pKTsK
QEAgLTIyNzEsOCArMjAyNyw2IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVE
YXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogCiAgICAgcmVzb2x2ZURpcmVjdG9yaWVzSWZOZWNlc3Nh
cnkoKTsKIAotICAgIHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMgPSBwZW5kaW5nQ29va2llcygp
OwotCiAgICAgYXV0byByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV9jb25maWd1
cmF0aW9uLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlIYW5kbGU7CiAg
ICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKQEAgLTIz
NzEsNyArMjEyNSwxNCBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0
b3JlOjpwYXJhbWV0ZXJzKCkKICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVkID0gbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZDsKICNlbmRpZgogICAgIHBsYXRmb3JtU2V0TmV0d29ya1BhcmFt
ZXRlcnMocGFyYW1ldGVycyk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tp
bmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9u
KCk7CisjZW5kaWYKIAorI2lmIFVTRShTT1VQKQorICAgIFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKS5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQo
KSwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0
b3JhZ2VQYXRoLCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJz
aXN0ZW50U3RvcmFnZVR5cGUpOworI2VuZGlmCisgICAgCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7
CiB9CiAKQEAgLTI0MDEsMTAgKzIxNjIsNiBAQCBBUEk6OkhUVFBDb29raWVTdG9yZSYgV2Vic2l0
ZURhdGFTdG9yZTo6Y29va2llU3RvcmUoKQogICAgIHJldHVybiAqbV9jb29raWVTdG9yZTsKIH0K
IAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCi17Ci19
Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlv
bjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghaXNQZXJzaXN0ZW50KCkpIHsK
QEAgLTI0MjUsMTAgKzIxODIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3Rv
cmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHBy
b2Nlc3MtPnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnJlc2V0UXVvdGEo
bV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiAhUExBVEZP
Uk0oQ09DT0EpCkBAIC0yNDY2LDM0ICsyMjIwLDIxIEBAIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6Omhhc0FwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAg
bmV0d29ya1Byb2Nlc3MtPmhhc0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckFwcEJv
dW5kU2Vzc2lvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3Jr
UHJvY2Vzcy0+Y2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5jbGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW5hbWVPcmln
aW5JbldlYnNpdGVEYXRhKFVSTCYmIG9sZE5hbWUsIFVSTCYmIG5ld05hbWUsIE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp0
aGlzKTsKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZW5hbWVPcmlnaW5JbldlYnNpdGVE
YXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuYWRkU2Vzc2lvbigqdGhpcyk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkucmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgb2xk
TmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0yNTE2LDcgKzIyNTcsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmZvcndhcmRBcHBCb3VuZERvbWFpbnNUb0lUUElmSW5pdGlhbGl6ZWQoQ29tcGxl
dGlvbkhhbmRsZQogCiAgICAgcHJvcGFnYXRlQXBwQm91bmREb21haW5zKGdsb2JhbERlZmF1bHRE
YXRhU3RvcmUoKS5nZXQoKSwgKmFwcEJvdW5kRG9tYWlucyk7CiAKLSAgICBmb3IgKGF1dG8qIHN0
b3JlIDogbm9uRGVmYXVsdERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKKyAgICBmb3IgKGF1dG8qIHN0
b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQogICAgICAgICBwcm9wYWdhdGVBcHBCb3Vu
ZERvbWFpbnMoc3RvcmUsICphcHBCb3VuZERvbWFpbnMpOwogfQogCkBAIC0yNTI0LDEwICsyMjY1
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBcHBCb3VuZERvbWFpbnNGb3JJVFAoY29u
c3QgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWIKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRBcHBCb3VuZERvbWFpbnNG
b3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBkb21haW5zLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5zZXRBcHBCb3VuZERvbWFpbnNGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lv
bklELCBkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogI2VuZGlmCiAKQEAg
LTI1MzUsMTYgKzIyNzMsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVCdW5kbGVJ
ZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBTdHJpbmcmIGJ1bmQKIHsKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
dXBkYXRlQnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnVwZGF0ZUJ1
bmRsZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5l
dHdvcmtQcm9jZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCkuY2xlYXJCdW5kbGVJZGVudGlmaWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuY2xlYXJCdW5kbGVJ
ZGVudGlmaWVyKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaApp
bmRleCA0ZWMxM2UxNmZlNDgyZDI2YTJlYWZhMzEyM2UzMjMzYTczN2NiMTJiLi42NTQxMTJjNDI3
YjRmYTVlZTg2NDRhNjcyNjJjNjBiNjk2MGQ4ZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC0xMDgsNyAr
MTA4LDcgQEAgcHVibGljOgogICAgIFdlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3Rv
cmVDb25maWd1cmF0aW9uPiYmLCBQQUw6OlNlc3Npb25JRCk7CiAgICAgfldlYnNpdGVEYXRhU3Rv
cmUoKTsKIAotICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlKiBleGlzdGluZ05vbkRlZmF1bHRE
YXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOworICAgIHN0YXRpYyBXZWJzaXRl
RGF0YVN0b3JlKiBleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7
CiAKICAgICBib29sIGlzUGVyc2lzdGVudCgpIGNvbnN0IHsgcmV0dXJuICFtX3Nlc3Npb25JRC5p
c0VwaGVtZXJhbCgpOyB9CiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTIyOCwxNSArMjI4LDggQEAgcHVibGljOgogCiAgICAg
RGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UmIGRldmljZUlkSGFzaFNhbHRTdG9yYWdlKCkgeyByZXR1
cm4gbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS5nZXQoKTsgfQogCi0gICAgV2ViUHJvY2Vzc1Bv
b2wqIHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIGlz
QXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJikgY29uc3Q7Ci0KICAgICBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyBwYXJhbWV0ZXJzKCk7Ci0KLSAgICBWZWN0b3I8V2ViQ29y
ZTo6Q29va2llPiBwZW5kaW5nQ29va2llcygpIGNvbnN0OwotICAgIHZvaWQgYWRkUGVuZGluZ0Nv
b2tpZShjb25zdCBXZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIHJlbW92ZVBlbmRpbmdDb29r
aWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdDb29raWVz
KCk7CisgICAgc3RhdGljIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gcGFyYW1l
dGVyc0Zyb21BbGxTdG9yZXMoKTsKIAogICAgIHZvaWQgZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9u
PHZvaWQoKT4mJik7CiAKQEAgLTI2MSw4ICsyNTQsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRN
b2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uKFdlYkNvcmU6Ok1vY2tXZWJBdXRoZW50
aWNhdGlvbkNvbmZpZ3VyYXRpb24mJik7CiAjZW5kaWYKIAotICAgIHZvaWQgZGlkQ3JlYXRlTmV0
d29ya1Byb2Nlc3MoKTsKLQogICAgIGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uKCkgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLmdldCgpOyB9CiAKICAg
ICBXZWJzaXRlRGF0YVN0b3JlQ2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudC5nZXQo
KTsgfQpAQCAtMzQ0LDcgKzMzNSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcmVtb3Zl
TWVkaWFLZXlzKGNvbnN0IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgV2FsbFRp
bWUgbW9kaWZpZWRTaW5jZSk7CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlTWVkaWFLZXlzKGNvbnN0
IFN0cmluZyYgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSwgY29uc3QgSGFzaFNldDxXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAKLSAgICB2b2lkIG1heWJlUmVnaXN0ZXJXaXRoU2Vz
c2lvbklETWFwKCk7CisgICAgdm9pZCByZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKIAogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIHN0YXRpYyBPcHRpb25hbDxIYXNoU2V0PFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluPj4gYXBwQm91bmREb21haW5zSWZJbml0aWFsaXplZCgpOwpAQCAtMzgy
LDggKzM3Myw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQgeyB0cnVlIH07CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29v
a2llPiBtX3BlbmRpbmdDb29raWVzOwotICAgIAogICAgIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQ
cm94eT4gbV9wcm9jZXNzZXM7CiAKICAgICBib29sIG1faXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQg
eyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAppbmRleCAxMmY5Y2Q4
MTliNmRjY2E4YWM1MDkyYTMwZGQ5M2M1M2I4ZWU5MzQyLi41YmEzOTAwZDJkYWZmMDU2YWJkMGNk
ZjA1N2FlMzI4NTRlYmZlY2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcApA
QCAtMzksOCArMzksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtU2V0TmV0d29y
a1BhcmFtZXRlcnMoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmCiAgICAgYXV0byYgbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7
CiAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFn
ZUVuYWJsZWQgPSBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQ7CiAKLSAgICBp
ZiAoYXV0byogcHJvY2Vzc1Bvb2wgPSBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRp
b25zKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQ
cm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UobV9zZXNzaW9uSUQsIG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOworICAgIFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5nZXRDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3Rl
bnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlVHlwZSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UGVyc2lzdGVudENy
ZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29sIGVuYWJsZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcAppbmRleCAwYTg0YTc1
OTBkOWE5ODViZmM5OTY4NGE0ODk1MTM3NGU1YjI5NDI5Li4yN2YyM2VhMDY1ZGM3NWNlNGE4Mjcw
YzU3NmVhMmFhNTVhYjBkYzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9n
bGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBXZWJQ
cm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6Okxh
dW5jaE9wdGlvbnMmIGwKICAgICAgICAgaWYgKCFkYXRhU3RvcmUpIHsKICAgICAgICAgICAgIC8v
IFByZXdhcm1lZCBwcm9jZXNzZXMgZG9uJ3QgaGF2ZSBhIFdlYnNpdGVEYXRhU3RvcmUgeWV0LCBz
byB1c2UgdGhlIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSBmcm9tIHRoZSBXZWJQcm9jZXNzUG9v
bC4KICAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNzIHdvbid0IGJlIHVzZWQgaWYgY3VycmVudCBX
ZWJzaXRlRGF0YVN0b3JlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBXZWJQcm9jZXNzUG9vbCBwcmlt
YXJ5IG9uZS4KLSAgICAgICAgICAgIGRhdGFTdG9yZSA9IG1fcHJvY2Vzc1Bvb2wtPndlYnNpdGVE
YXRhU3RvcmUoKTsKKyAgICAgICAgICAgIGRhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChkYXRh
U3RvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29r
aWVNYW5hZ2VyUHJveHlTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2Vi
Q29va2llTWFuYWdlclByb3h5U291cC5jcHAKaW5kZXggOWY3YmUzYzk0MWI2Y2QwYTFiOTRjYjEz
NjA5OGYzYTA0MWNlZmY5OS4uMDg5MjhmY2QzMTZkODhmOWQ1MTUwMGVjNjg0YWQxYjY0YWY4YTNm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5h
Z2VyUHJveHlTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNv
b2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAKKyNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlck1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKIApAQCAtMzQsNyArMzUsNyBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVQZXJz
aXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3Rv
cmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUpCiB7
CiAgICAgbV9jb29raWVQZXJzaXN0ZW50U3RvcmFnZU1hcC5zZXQoc2Vzc2lvbklELCBzdGQ6Om1h
a2VfcGFpcihzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUpKTsKLSAgICBwcm9jZXNzUG9vbCgpLT5z
ZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0Q29v
a2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBzdG9yYWdlUGF0aCwgc3RvcmFnZVR5cGUp
KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0
b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSksIDApOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6Z2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBTdHJpbmcmIHN0b3JhZ2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlJiBz
dG9yYWdlVHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3Nv
dXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAv
V2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAppbmRleCBiZmJiZjk2NjRlNDgzNTMwOTcwOTcxMWRmZDZj
MTM0MTU3MzJiZGFjLi4wNzkzZWQ1MTM5MTUyOGQ5YjRiOWZkYjBmNGFkM2M4OTYwZmRhNTI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291
cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNv
dXAuY3BwCkBAIC0zNywzMCArMzcsMjQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIE5ldHdvcmtTZXNzaW9u
Q3JlYXRpb25QYXJhbWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLSAg
ICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lzdGVu
dFN0b3JhZ2UoZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVmYXVsdFNlc3Np
b25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVsdFNlc3Npb25Q
YXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7Ci0gICAgaWYgKG1fd2Vic2l0
ZURhdGFTdG9yZSkKLSAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3RlbnRD
cmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlcnNpc3RlbnRD
cmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoKTsKKyAgICAvLyBGSVhNRTogbV9pbml0aWFsSFRUUENv
b2tpZUFjY2VwdFBvbGljeSBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUu
CisgICAgLy8gRklYTUU6IG1faWdub3JlVExTRXJyb3JzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUg
V2Vic2l0ZURhdGFTdG9yZSBvciByZW1vdmVkLgorICAgIC8vIEZJWE1FOiBtX25ldHdvcmtQcm94
eVNldHRpbmdzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KIAotICAg
IHBhcmFtZXRlcnMuY29va2llQWNjZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENvb2tpZUFjY2Vw
dFBvbGljeTsKLSAgICBwYXJhbWV0ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1faWdub3JlVExTRXJy
b3JzOwogICAgIHBhcmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclByZWZlcnJlZExhbmd1YWdlcygp
OwotICAgIHBhcmFtZXRlcnMucHJveHlTZXR0aW5ncyA9IG1fbmV0d29ya1Byb3h5U2V0dGluZ3M7
CiAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IHRydWU7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9y
cykKIHsKICAgICBtX2lnbm9yZVRMU0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKLSAgICBpZiAo
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vycm9ycyks
IDApOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRJZ25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAw
KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoY29u
c3QgV2ViQ29yZTo6U291cE5ldHdvcmtQcm94eVNldHRpbmdzJiBzZXR0aW5ncykKIHsKICAgICBt
X25ldHdvcmtQcm94eVNldHRpbmdzID0gc2V0dGluZ3M7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdzKSwgMCk7
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OlNldE5ldHdvcmtQcm94eVNldHRpbmdzKG1fbmV0d29ya1Byb3h5U2V0dGlu
Z3MpLCAwKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IDlkZTFhNWYxMzM1MmFkNDAyMjYyMjYwZmE1YjI3N2E0NTk4OTA1MjIuLmYy
OTA2YmE0YTBmYjA0YzA2ODI4ZTBkM2ZmNDk5ZGM0MTU4MzQ1ZDkgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAyMC0w
OC0xMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAg
ICAgIFVzZSBhIE5ldHdvcmtQcm9jZXNzUHJveHkgc2luZ2xldG9uIGluc3RlYWQgb2Ygb25lIHBl
ciBXZWJQcm9jZXNzUG9vbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAzNTQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVO
YW1lLm1tOgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW06
CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1RMU0RlcHJlY2F0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9y
ZS5tbToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3ZWJWaWV3OnJ1
bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0
aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB3
YWl0Rm9yTWVzc2FnZV0pOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRl
IGFsZXJ0Q29va2llSFRNTF0pOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVy
OjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dCk6CisKIDIwMjAtMDgtMTEgIEtlaXRoIFJvbGxp
biAgPGtyb2xsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBmaWx0ZXItYnVpbGQtd2Vi
a2l0IGZvciB1bmtub3duL3VuaGFuZGxlZCBtZXNzYWdlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0KaW5k
ZXggMTFmODdmODAzNGQyYjFiNTVkNzIwZGViNzY1YTMxNjgyMTIwZDc3My4uYTk4YmYzODI1YmIx
ZWQ2ZDc1OWMwOGQ0NTMzYWRjYjdmZjM5NWZkNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCkBAIC00
OSw3ICs0OSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8V0tTY3JpcHRNZXNzYWdlPiBsYXN0U2NyaXB0
TWVzc2FnZTsKIAogQGVuZAogCi1zdGF0aWMgdm9pZCBydW5UZXN0KCkKK3N0YXRpYyB2b2lkIHJ1
blRlc3QoYm9vbCBvbGRGaWxlU2hvdWxkRXhpc3QgPSB0cnVlKQogewogICAgIGF1dG8gaGFuZGxl
ciA9IGFkb3B0TlMoW1tJbmRleGVkREJGaWxlTmFtZU1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0
XSk7CiAgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gYWxsb2NdIGluaXRdKTsKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVz
dCgpCiAgICAgTlNVUkwgKm9sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lv
bkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IEAiZmlsZV9fMCJdOwog
ICAgIE5TVVJMICpuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMID0gW25ld1ZlcnNpb25EaXJl
Y3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAgICBO
U1VSTCAqb2xkVmVyc2lvblVudXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25P
cmlnaW5EaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnVudXNlZERhdGFi
YXNlTmFtZV07Ci0gICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSBmaWxlRXhpc3RzQXRQYXRoOm9sZFZlcnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5w
YXRoXSk7CisgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBm
aWxlRXhpc3RzQXRQYXRoOm9sZFZlcnNpb25VbnVzZWREYXRhYmFzZURpcmVjdG9yeVVSTC5wYXRo
XSA9PSBvbGRGaWxlU2hvdWxkRXhpc3QpOwogICAgIAogICAgIC8vIEZvciBkYXRhYmFzZSB0aGF0
IGlzIG9wZW5lZCBhZnRlciB1cGdyYWRlLCBpdHMgZmlsZSBzaG91bGQgb25seSBiZSBpbiB2MS4K
ICAgICBOU1VSTCAqb2xkVmVyc2lvbkV4aXN0aW5nRGF0YWJhc2VEaXJlY3RvcnlVUkwgPSBbb2xk
VmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6IGV4
aXN0aW5nRGF0YWJhc2VOYW1lXTsKQEAgLTE1NCw3ICsxNTQsNyBAQCBzdGF0aWMgdm9pZCBjcmVh
dGVEaXJlY3RvcmllcyhTdHJpbmcgdGVzdE5hbWUpCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERC
RmlsZU5hbWUpCiB7CiAgICAgY3JlYXRlRGlyZWN0b3JpZXMoIm5vbmUiKTsKLSAgICBydW5UZXN0
KCk7CisgICAgcnVuVGVzdChmYWxzZSk7CiB9CiAKIFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJG
aWxlTmFtZVYwKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCmluZGV4IDE3YmM3ZjVkNzQ0
ODRhYjU0ZDY3N2E0NzI4OTE0MjhlZjJmZmEyYzAuLjY1NjJlMmVlNDRiNDEzOWMwNmFhMzNiMzEw
MWE1MzBkZTVkNjIyYzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KQEAgLTE1NTgs
MTAgKzE1NTgsOCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIE1pZ3JhdGVEYXRhRnJv
bU1pc3NpbmdUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0U2FtZVNpdAogCiBURVNUKFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2wpCiB7Cisg
ICAgTlNVUkwgKml0cFJvb3RVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFy
eURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNhbkFjY2Vzc0Rh
dGFTdW1tYXJ5V2l0aE5vUHJvY2Vzc1Bvb2xUZXN0Il0gaXNEaXJlY3Rvcnk6WUVTXTsKICAgICBh
dXRvIGRlZmF1bHRGaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsK
LSAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0YVN0b3JlQ29uZmlndXJh
dGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSBhdXRvcmVsZWFz
ZV07Ci0gICAgYXV0byAqZGF0YVN0b3JlID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBf
aW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNl
XTsKLSAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtbZGF0YVN0b3JlIF9jb25maWd1cmF0aW9uXSBf
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeV07CiAgICAgTlNVUkwgKmZpbGVVUkwgPSBb
aXRwUm9vdFVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJvYnNlcnZhdGlvbnMuZGIi
XTsKICAgICBbZGVmYXVsdEZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFBhdGg6aXRwUm9vdFVSTC5w
YXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX0ZBTFNFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmls
ZUV4aXN0c0F0UGF0aDppdHBSb290VVJMLnBhdGhdKTsKQEAgLTE1NzIsNiArMTU3MCwxMCBAQCBU
RVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENhbkFjY2Vzc0RhdGFTdW1tYXJ5V2l0aE5vUHJv
Y2Vzc1Bvb2wpCiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3Rz
QXRQYXRoOm5ld0ZpbGVVUkwucGF0aF0pOwogICAgIFtkZWZhdWx0RmlsZU1hbmFnZXIgY29weUl0
ZW1BdFBhdGg6bmV3RmlsZVVSTC5wYXRoIHRvUGF0aDpmaWxlVVJMLnBhdGggZXJyb3I6bmlsXTsK
ICAgICBFWFBFQ1RfVFJVRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6Zmls
ZVVSTC5wYXRoXSk7CisKKyAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqZGF0
YVN0b3JlQ29uZmlndXJhdGlvbiA9IFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24g
bmV3XSBhdXRvcmVsZWFzZV07CisgICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5fcmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IGl0cFJvb3RVUkw7CisgICAgYXV0byAqZGF0YVN0b3Jl
ID0gW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRh
dGFTdG9yZUNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXTsKICAgICBbZGF0YVN0b3JlIF9zZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOwogCiAgICAgc3RhdGljIGJvb2wgZG9u
ZUZsYWcgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvVExTRGVwcmVjYXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tCmluZGV4IDY3N2YwMGEzMDU3MDNlMjQ5NmFiZGU2
NGMzYWZjMmNkMjc3YWQxNjcuLjRhMDZiZGZhNzdhYjk5NzUzN2RlMmVjNWNiZTE5NTE4ZDA5NjMz
OTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVExT
RGVwcmVjYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9UTFNEZXByZWNhdGlvbi5tbQpAQCAtMTc2LDcgKzE3Niw4IEBAIFRFU1QoVExTVmVyc2lvbiwg
TmV0d29ya1Nlc3Npb24pCiAgICAgfTsKICAgICB7CiAgICAgICAgIFRDUFNlcnZlciBzZXJ2ZXIo
VENQU2VydmVyOjpQcm90b2NvbDo6SFRUUFMsIFRDUFNlcnZlcjo6cmVzcG9uZFdpdGhPSywgdGxz
MV8xKTsKLSAgICAgICAgYXV0byB3ZWJWaWV3ID0gbWFrZVdlYlZpZXdXaXRoKFtXS1dlYnNpdGVE
YXRhU3RvcmUgZGVmYXVsdERhdGFTdG9yZV0pOworICAgICAgICBfV0tXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25m
aWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGF1dG8gd2ViVmll
dyA9IG1ha2VXZWJWaWV3V2l0aChbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0
aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdKTsKICAgICAgICAgW3dl
YlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImh0dHBzOi8vMTI3LjAuMC4x
OiVkLyIsIHNlcnZlci5wb3J0KCldXV1dOwogICAgICAgICBbZGVsZWdhdGUgd2FpdEZvckRpZEZp
bmlzaE5hdmlnYXRpb25dOwogICAgIH0KQEAgLTIwMiw3ICsyMDMsOCBAQCBURVNUKFRMU1ZlcnNp
b24sIE5ldHdvcmtTZXNzaW9uKQogICAgICAgICBUQ1BTZXJ2ZXIgc2VydmVyKFRDUFNlcnZlcjo6
UHJvdG9jb2w6OkhUVFBTLCBbXShTU0wgKnNzbCkgewogICAgICAgICAgICAgRVhQRUNUX0ZBTFNF
KHNzbCk7CiAgICAgICAgIH0sIHRsczFfMSk7Ci0gICAgICAgIGF1dG8gd2ViVmlldyA9IG1ha2VX
ZWJWaWV3V2l0aChbV0tXZWJzaXRlRGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdKTsKKyAgICAg
ICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1tf
V0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OworICAgICAgICBhdXRvIHdlYlZpZXcgPSBtYWtlV2ViVmlld1dpdGgoW1tbV0tXZWJzaXRlRGF0
YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dIGF1dG9y
ZWxlYXNlXSk7CiAgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVx
dWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJodHRwczovLzEyNy4wLjAuMTolZC8iLCBzZXJ2ZXIucG9ydCgpXV1dXTsKICAgICAgICAg
W2RlbGVnYXRlIHdhaXRGb3JEaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uXTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENv
b2tpZVN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hU
VFBDb29raWVTdG9yZS5tbQppbmRleCBhMzVmMDUzNTBhYWI0YjQyZjM2YzQ2YWVjZGVlZWU2Y2U1
NDRlZjg2Li4zMzc2MDkyYTE5NWI1MTJkYTY3YzQ5NmU0NTIxN2I5MTRmZTJhNTc5IDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0
b3JlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQ
Q29va2llU3RvcmUubW0KQEAgLTQ3OSw4ICs0NzksNiBAQCBzdGF0aWMgYm9vbCBmaW5pc2hlZDsK
IH0KIEBlbmQKIAotLy8gRklYTUU6IG9uIGlPUywgVUkgcHJvY2VzcyBzaG91bGQgYmUgdXNpbmcg
dGhlIHNhbWUgY29va2llIGZpbGUgYXMgdGhlIG5ldHdvcmsgcHJvY2VzcyBmb3IgZGVmYXVsdCBz
ZXNzaW9uLgotI2lmIFBMQVRGT1JNKE1BQykKIGVudW0gY2xhc3MgU2hvdWxkRW5hYmxlUHJvY2Vz
c1ByZXdhcm1pbmcgeyBObywgWWVzIH07CiB2b2lkIHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91
dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nIHNob3VsZEVuYWJsZVBy
b2Nlc3NQcmV3YXJtaW5nKQogewpAQCAtNTg5LDIwICs1ODcsNjYgQEAgVEVTVChXS0hUVFBDb29r
aWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29sV2l0aFByZXdhcm1pbmcpCiAgICAgcnVuV0tIVFRQ
Q29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1p
bmc6Olllcyk7CiB9CiAKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hl
Y2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJRGVsZWdhdGU+CistIChO
U1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTDsKKy0gKE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2U7
CiBAZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlCitA
aW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSB7CisgICAgUmV0YWlu
UHRyPE5TU3RyaW5nPiBfbWVzc2FnZTsKK30KKwogLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcg
Kil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICop
bWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIEVYUEVDVF9T
VFJFUSgiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiLCBtZXNzYWdlLlVURjhTdHJpbmcp
OworICAgIF9tZXNzYWdlID0gbWVzc2FnZTsKICAgICBmaW5pc2hlZCA9IHRydWU7CiAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKIH0KKworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZQorewor
ICAgIHdoaWxlICghX21lc3NhZ2UpCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5S
dW5Mb29wKCk7CisgICAgcmV0dXJuIF9tZXNzYWdlLmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5T
U3RyaW5nICopYWxlcnRDb29raWVIVE1MCit7CisgICAgcmV0dXJuIEAiPHNjcmlwdD52YXIgY29v
a2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNv
b2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBj
b29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOworfQor
CiBAZW5kCiAKK1RFU1QoV2ViS2l0LCBXS0hUVFBDb29raWVTdG9yZU11bHRpcGxlVmlld3MpCit7
CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzEgPSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRv
cmVsZWFzZV07CisgICAgW3dlYlZpZXcxIHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0
YXJ0IG5ldHdvcmsgcHJvY2VzcyJdOworCisgICAgTlNIVFRQQ29va2llICpzZXNzaW9uQ29va2ll
ID0gW05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJvcGVydGllczpAeworICAgICAgICBOU0hUVFBD
b29raWVQYXRoOiBAIi8iLAorICAgICAgICBOU0hUVFBDb29raWVOYW1lOiBAIlNlc3Npb25Db29r
aWVOYW1lIiwKKyAgICAgICAgTlNIVFRQQ29va2llVmFsdWU6IEAiQ29va2llVmFsdWUiLAorICAg
ICAgICBOU0hUVFBDb29raWVEb21haW46IEAiMTI3LjAuMC4xIiwKKyAgICB9XTsKKworICAgIF9f
YmxvY2sgYm9vbCBzZXRDb29raWVEb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcxLmNvbmZpZ3Vy
YXRpb24ud2Vic2l0ZURhdGFTdG9yZS5odHRwQ29va2llU3RvcmUgc2V0Q29va2llOnNlc3Npb25D
b29raWUgY29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgc2V0Q29va2llRG9uZSA9IHRydWU7
CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzZXRDb29raWVEb25lKTsK
KworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtDaGVja1Nlc3Npb25Db29raWVVSURlbGVn
YXRlIG5ld10pOworICAgIFt3ZWJWaWV3MSBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsK
KworICAgIFt3ZWJWaWV3MSBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1M
XSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29r
aWVOYW1lPUNvb2tpZVZhbHVlIik7CisKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtb
VGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxl
Z2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcyIGxvYWRIVE1MU3RyaW5nOltkZWxl
Z2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRw
Oi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1l
c3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKK30KKwogVEVTVChXS0hU
VFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29sRXBoZW1lcmFsU2Vzc2lvbikKIHsKICAg
ICBSZXRhaW5QdHI8V0tXZWJzaXRlRGF0YVN0b3JlPiBlcGhlbWVyYWxTdG9yZVdpdGhDb29raWVz
ID0gW1dLV2Vic2l0ZURhdGFTdG9yZSBub25QZXJzaXN0ZW50RGF0YVN0b3JlXTsKQEAgLTYyNyw5
ICs2NzEsOCBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhl
bWVyYWxTZXNzaW9uKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOwog
ICAgIGZpbmlzaGVkID0gZmFsc2U7CiAgICAgCi0gICAgTlNTdHJpbmcgKmFsZXJ0Q29va2llSFRN
TCA9IEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBm
b3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBj
b29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7
ICcpKTs8L3NjcmlwdD4iOwotICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOmFsZXJ0Q29va2ll
SFRNTCBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsK
LSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKKyAgICBbd2ViVmlldyBs
b2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBV
UkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
W2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVl
Iik7CiB9CiAKIHN0YXRpYyBib29sIGFyZUNvb2tpZXNFcXVhbChOU0hUVFBDb29raWUgKmZpcnN0
LCBOU0hUVFBDb29raWUgKnNlY29uZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHAKaW5kZXggYTQzZmE4MTM0YTdhYjc2YzNhM2I3ZjgyMDhkYzkyNjY3Mjc0NzQ2MS4u
YTA2MzAzNDVmNThlNTA2ZjBhNDEzZGMxMWZlODNlYjU2NGZiMjRhYyAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTEwNjYsOCArMTA2Niw2IEBAIGJvb2wg
VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9w
dGlvbnMmIG9wdGlvbnMsIFJlCiAKICAgICByZXNldFF1b3RhKCk7CiAKLSAgICBXS0NvbnRleHRT
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKHBsYXRmb3Jt
Q29udGV4dCgpLCB0cnVlKTsKLQogICAgIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3Rh
dGVGb3JUZXN0aW5nKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkpOwogCiAg
ICAgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCBmYWxzZSk7CkBAIC0zMTc1LDkgKzMxNzMsOCBA
QCBQbGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZU90aGVyUGFn
ZShQbGF0Zm9ybVdlYlZpZXcqIHBhcmVudAogICAgIHJldHVybiBuZXcgUGxhdGZvcm1XZWJWaWV3
KGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpOwogfQogCi1XS0NvbnRleHRSZWYgVGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0
Q29uZmlndXJhdGlvblJlZiBjb250ZXh0Q29uZmlndXJhdGlvbikKK1dLQ29udGV4dFJlZiBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBX
S0NvbnRleHRDb25maWd1cmF0aW9uUmVmKQogewotICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJz
aXRlRGF0YVN0b3JlKGNvbnRleHQsIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIHJl
dHVybiBjb250ZXh0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406544</attachid>
            <date>2020-08-13 14:41:03 -0700</date>
            <delta_ts>2020-08-13 15:33:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20200813144102.patch</filename>
            <type>text/plain</type>
            <size>249478</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUxZGU2MTI2ZjljNTI2MDQx
ZmVlMzMzMjgzNTJkY2E0ZDU1MjliMzcuLjVkMzJlMzkwYjE4NGI4ZTUxNzg5ZjdjN2E2N2U5Yjlh
ZTM1NzczMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgyIEBACisyMDIwLTA4LTExICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIGEgTmV0
d29ya1Byb2Nlc3NQcm94eSBzaW5nbGV0b24gaW5zdGVhZCBvZiBvbmUgcGVyIFdlYlByb2Nlc3NQ
b29sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM1
NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZh
dWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKToK
KyAgICAgICAgKFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChX
S0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXS0NvbnRleHRT
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbToKKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2V0Q29va2llQWNjZXB0UG9saWN5Ol0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0
ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZTo6fl9XZWJLaXRDb29raWVN
YW5hZ2VyUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKToKKyAg
ICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKToKKyAg
ICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAg
ICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9jb29raWVzKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfY29va2llKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4
dC5jcHA6CisgICAgICAgICh3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
UHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lk
ZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9O
ZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojpz
dGFydExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RvcExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Omdsb2JhbE5ldHdv
cmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YXR0ZW1wdFJlbGF1bmNoQWZ0
ZXJDcmFzaElmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OmFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KToKKyAgICAgICAg
KFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vz
c1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25z
dCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJD
b250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzYWJs
ZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25P
dmVycmlkZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9y
VGVzdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9v
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xv
YmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29ya1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJMZWdhY3lQ
cml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5z
ZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVG
b3JTZXNzaW9uSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERh
dGFBbmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURh
dGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNz
RW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50
cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5k
ZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVC
bG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3Rp
Y0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50
cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNI
YWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpp
c1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRz
V2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3Rpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9k
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1Nh
bWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2
YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9j
ZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlc2V0UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNB
cHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQ
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRp
ZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1
bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJv
Y2Vzc1Bvb2wgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwZW5kaW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdv
cmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dl
YnNpdGVEYXRhU3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2ds
aWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
cm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291
cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIw
MjAtMDgtMTEgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW01h
Y10gQWRkIEV4cGVyaW1lbnRhbCBGZWF0dXJlIHByZWZlcmVuY2UgZm9yIFNXIFZQOQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1h
bmFnZXIuY3BwCmluZGV4IGZjZTIzODk4N2E3ODUwZjE4YzlmMzA2YzUwZTk4Y2U5ODhkMTI1ZmQu
LmViNThmYzk0NWQxOTI1NTQ2MWI4NjBmNGE4YjhkYzYxMjVmNTNmODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdl
ci5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksCiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24o
KS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9wcm9jZXNz
LnN0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpLT5jb29r
aWVBY2NlcHRQb2xpY3koKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCAwMjhlMGZi
YjllMTk0OGIwZTA4OWY0YWRkM2IwYTcwNTBjNmVkMWNlLi43ZWJhNGExYjU4MmY5M2QyYmExODBk
MjFiNTUzOTllNmZmNjBkZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ1LDI5ICszNDUsMTkgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJz
LmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0g
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lv
bjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBw
YXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQg
PSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7
CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShkYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAg
IGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1l
dGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQ
YXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VE
aXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVk
RGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
KyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFTdG9yZVBh
cmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQorICAgICAg
ICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJz
LmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4
dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUoZGF0YVN0b3Jl
UGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBib29sIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSB0cnVlOwotICAgIGFkZFNl
cnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIHNl
cnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUocGFyYW1l
dGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVycy5zZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAg
YWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUoZGF0YVN0
b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25J
RCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNzaW9uID0g
bmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAg
YXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdvcmtTdG9y
YWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAgICB9CiAKICAgICBmb3IgKGF1
dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVt
ZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNDI3LDEyICs0MTcsNiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyhQcm9jZXNz
SWRlbnRpZmllciBpZGVudAogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlZENyZWRl
bnRpYWxzKCkKIHsKLSAgICBkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFn
ZSgpLmNsZWFyQ3JlZGVudGlhbHMoKTsKLSAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0
aGlzLT5uZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSkK
LSAgICAgICAgbmV0d29ya1Nlc3Npb24tPmNsZWFyQ3JlZGVudGlhbHMoKTsKLSAgICBlbHNlCi0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCiAgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9u
KFtdIChhdXRvJiBuZXR3b3JrU2Vzc2lvbikgewogICAgICAgICBpZiAoYXV0byBzdG9yYWdlU2Vz
c2lvbiA9IG5ldHdvcmtTZXNzaW9uLm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpKQogICAgICAgICAg
ICAgc3RvcmFnZVNlc3Npb24tPmNyZWRlbnRpYWxTdG9yYWdlKCkuY2xlYXJDcmVkZW50aWFscygp
OwpAQCAtNTEyLDggKzQ5Niw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24o
Y29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQs
IGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50
aWZpZXJCYXNlKQogI2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3
b3JrU3RvcmFnZVNlc3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRk
UmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyOCw3ICs1MTAsNyBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBz
ZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVu
dGlmaWVyID0gbWFrZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwg
Y3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChz
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENG
KGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBl
bHNlCisgICAgZWxzZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpjcmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZp
ZXIuZ2V0KCkpOwogCiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVz
ZUNvb2tpZUFQSSgpKSB7CkBAIC01NTEsMjEgKzUzMywxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
Ojpjb29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9s
aWN5KQogCiBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpz
dG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewot
ICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkK
LSAgICAgICAgcmV0dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9u
ZXR3b3JrU3RvcmFnZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSBjb25zdAotewotICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAg
ICAgICBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
Jik+JiBmdW5jdG9yKQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwog
ICAgIGZvciAoYXV0byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMu
dmFsdWVzKCkpCiAgICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBmMjNmZDU4MGVm
NTRjYWRmODBmNDY4MzY2NTZmYjIzZmQ0ZGRmMmZjLi4xMDExOWRmMzFmNGRlMTY5NDc4NjBiMmNh
ZThjMWI1Yzc3M2Q4ZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5oCkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JF
YWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uKiBzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29u
c3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4g
bmV3VGVzdGluZ1Nlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICB2b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29s
IHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
LCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNzEsNyArMzcwLDYg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNy
ZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZl
TmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwog
CkBAIC01NDgsNyArNTQ2LDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9u
SUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwog
ICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJs
ZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+
IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAK
aW5kZXggYWE4Y2U3NTNjNjMyMDdkMmE2MGQ1ZDNlMDE3YjJlMGViZjQ1NjI2ZC4uYTI0YzIwYjNm
ODc3ZmEzYmFhYzYyODUyMzNjODdkMTEwZTYxZmYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBJUEM6
OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CiAgICAgZW5jb2RlciA8
PCBzdG9yYWdlQWNjZXNzQVBJRW5hYmxlZDsKICNlbmRpZgotICAgIGVuY29kZXIgPDwgZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZW5jb2RlciA8PCBkYXRhU3RvcmVQYXJhbWV0ZXJz
OwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9saWN5OwogICAg
IGVuY29kZXIgPDwgaWdub3JlVExTRXJyb3JzOwpAQCAtNjksOSArNjksNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAg
IGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIGVuY29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlIDw8IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVs
YXk7Ci0jZW5kaWYKICAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZUlUUERhdGFiYXNlOwogICAg
IGVuY29kZXIgPDwgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlOwogICAgIGVuY29k
ZXIgPDwgaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7CkBAIC0xMjEsMTEgKzExOCwxMSBAQCBib29sIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNv
ZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIE9w
dGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGlm
ICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9yPFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBkZWNvZGVy
ID4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0ZXJzKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzID0gV1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJlc3VsdC5k
YXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7CiAKICNp
ZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVBY2NlcHRQ
b2xpY3kpKQpAQCAtMTQ3LDIwICsxNDQsNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2Vz
cykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlvbmFsPFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERpc2FibGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0jZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJs
ZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmgKaW5kZXggY2YxNWNhNDFiZmJlYWNkM2RlMWM2M2UzN2QzNzJkZmUyNDljODQ5
Ni4uNzNjZGYyZmM0NDRiNDVmNjRkM2MzMmM4ZWY2MzZmZmIxNWM1NTkzNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNzIsNyArNzIsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIGJvb2wgc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7
CiAjZW5kaWYKIAotICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIGRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGF0
YVN0b3JlUGFyYW1ldGVyczsKICAgICAKICNpZiBVU0UoU09VUCkKICAgICBXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSB7IFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3k6OkFsd2F5c0FjY2VwdCB9OwpAQCAtODYsMTIgKzg2LDcgQEAgc3RydWN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBWZWN0b3I8U3RyaW5nPiB1
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAg
IFN0cmluZyBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OwotICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotICAgIGJvb2wgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVy
bWluYXRpb25EZWxheSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBib29sIHNob3VsZEVuYWJsZUlU
UERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFiYXNlIHsg
dHJ1ZSB9OwogICAgIGJvb2wgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlIHsgZmFs
c2UgfTsKICAgICBTdHJpbmcgaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlIGhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0Nv
Y29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vz
c0NvY29hLm1tCmluZGV4IGFmYmQ5MzBmNGIzNWUyNDlhODhhMTA4ZjU1MTFjMDRkN2VlZDM1NTEu
LjhlNzhlNmFmZWFiN2U3MzFkNWUyMjJlYjYwZTI5YjUyZjkxZjBjMmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29j
b2EubW0KQEAgLTg1LDkgKzg1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1l
UGVybWFuZW50bHkocGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0
ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5
KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVt
cEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9D
Rk5ldHdvcmtTZXRBVFNDb250ZXh0KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkp
OwpAQCAtMTE0LDExICsxMTEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFtOU1VS
TENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBs
YXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3Jr
UHJvY2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShT
T1VSQ0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKaW5kZXggZDk5Zjlk
ZDY0YmFkNmU0MmRjYzhlM2Y5YjhmMTY5Mjk5N2Y2NzE5Mi4uNDk1MzgxMWIyMTY0ZTg5ODQ2Zjky
NzllNjIyOWQ1OTNlMjI1NmEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKQEAgLTM5LDExICszOSw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNv
bnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURl
ZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2Vy
dGlmaWNhdGVGb3JIb3N0KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBj
b25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0
Lm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW0KaW5kZXggYzI3MzZlMDI2YTU1ZDNkNDAyMGY4NGY0ZDY5M2QxNmI0NjUyZWQyMy4u
MWUxODQ4OWY5NDYyMGYwMmE3ZDllOWU4NjllYzg2NDkxYjdiYmQ0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0K
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW0KQEAgLTU1LDE1ICs1NSwxMSBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0
OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0dwogICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29r
aWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAgICBpZiAoIXNlc3Npb25J
RC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVu
dGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFw
YXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSAmJiBw
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgIT0gUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAgdWlQcm9jZXNzQ29va2llU3RvcmFn
ZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFtZXRlcnMudWlQcm9jZXNz
Q29va2llU3RvcmFnZUlkZW50aWZpZXIpOwogCiAgICAgbmV0d29ya1Byb2Nlc3MuZW5zdXJlU2Vz
c2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3Vs
ZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNlLCAnLicsIHNlc3Npb25J
RC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3NDb29raWVTdG9yYWdlKSk7CiAKLSAgICBh
dXRvKiBzZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsK
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMp
Ci0gICAgICAgIHNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAgICAgbmV0d29ya1Byb2Nl
c3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1By
b2Nlc3MsIFdURk1vdmUocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
UHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtQcm9jZXNzU291cC5jcHAKaW5kZXggNjBmYTU1NmI5ZTRmNDg3OTRkNWFhMmYwNTY5ZmJiZGVl
NjUzMjk5MC4uMDFjYmI3YmE5YmQ4YWMwZmYwYzVkZjRiMzQyMmYzZDc4NDM1NmQyZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291
cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9j
ZXNzU291cC5jcHAKQEAgLTE0NCwxMSArMTQ0LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkK
ICAgICB9KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMp
CiB7CiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRTaG91bGRJZ25vcmVUTFNFcnJvcnMoaWdu
b3JlVExTRXJyb3JzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmNwcAppbmRleCA2ZDBjMTI5YTc0MDUxMGQzODY5NzM3MDVhZDA5MmVm
MTMyY2MwNzVhLi4wNDgxMGIzZTE5YmU5NmNhZDFhZDgyYTQ0ZGNlZGIyNmVmNzgyNjFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
Y3BwCkBAIC00MCwxMyArNDAsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpl
bmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzOwogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzQ29va2llU3RvcmFn
ZUlkZW50aWZpZXI7CiAgICAgZW5jb2RlciA8PCBjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhh
bmRsZTsKLSAgICBlbmNvZGVyIDw8IHBlbmRpbmdDb29raWVzOwogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAgICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPDwg
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCkBAIC04MywxMiArNzksNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlYwogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZVBhdGhF
eHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRs
ZSk7CiAKLSAgICBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6Q29va2llPj4gcGVuZGluZ0Nvb2tp
ZXM7Ci0gICAgZGVjb2RlciA+PiBwZW5kaW5nQ29va2llczsKLSAgICBpZiAoIXBlbmRpbmdDb29r
aWVzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMucGVuZGlu
Z0Nvb2tpZXMgPSBXVEZNb3ZlKCpwZW5kaW5nQ29va2llcyk7Ci0KICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKICAgICBPcHRpb25hbDxTdHJpbmc+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eTsKICAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKQEAgLTEwMSwxNCAr
OTEsNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlYwogICAgIGlmICghaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0g
V1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlPiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAg
ICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlOwotICAgIGlmICghaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmlu
ZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgog
I2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAppbmRleCBmMjdkZjQ4OTgwOWYz
MTk2MDhiNjgwY2IyYThhMWMxNGI3MDE4NDM5Li5lMWIyMzM3MDE5OWZlMzcwMzFlOWRjNWMwNTc4
MTU1MDIxZTM0ZDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmgKQEAgLTUxLDE1ICs1MSwxMSBAQCBzdHJ1Y3QgV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMgewogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHVpUHJvY2Vzc0Nvb2tpZVN0
b3JhZ2VJZGVudGlmaWVyOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjb29raWVTdG9y
YWdlUGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5k
aW5nQ29va2llczsKICAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBT
dHJpbmcgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFi
YXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcAppbmRleCBhNmUxNTkxZTU1MDQ5ZDI5ZTc3NjE0
MTlhYTMxOGRmMDBhNDc3OThjLi5lNWYxOGVlMWJiOGM2MmEyZTNlNDkyNjc2NTNjMTA5MjA1NDhm
MTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcApAQCAtNDYsOCArNDYsNiBAQCBuYW1lc3BhY2UgQVBJIHsKIEhUVFBDb29raWVT
dG9yZTo6SFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURh
dGFTdG9yZSkKICAgICA6IG1fb3duaW5nRGF0YVN0b3JlKHdlYnNpdGVEYXRhU3RvcmUpCiB7Ci0g
ICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpKQotICAgICAgICByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpOwogfQogCiBIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUoKQpAQCAtNTUsOCAr
NTMsNiBAQCBIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUoKQogICAgIEFTU0VSVCht
X29ic2VydmVycy5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCghbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSk7CiAgICAgQVNTRVJUKCFtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLQot
ICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogdm9p
ZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJvdW5kQ29va2llcyhjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTgxLDMzICs3NywxNiBA
QCB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiBjb29raQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2ll
cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0
b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFw
b29sKSB7Ci0gICAgICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGFsbENvb2tpZXM7Ci0gICAg
ICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgICAgIGFsbENvb2tpZXMgPSBnZXRBbGxEZWZh
dWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7Ci0gICAgICAgIGFsbENvb2tpZXMuYXBw
ZW5kVmVjdG9yKG1fb3duaW5nRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLQotICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
YWxsQ29va2llc10gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tp
ZXMoYWxsQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICB9KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29s
LT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tp
ZU1hbmFnZXItPmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwb29sID0gV1RGTW92ZShwb29s
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBj
b29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigp
OworICAgIGNvb2tpZU1hbmFnZXIuZ2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5k
Q29va2llcyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9
CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkKLSAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2Vy
ID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOworICAgIGNvb2tp
ZU1hbmFnZXIuZ2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwg
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYg
Y29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhjb29raWVz
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0xMTUsODEgKzk0
LDI5IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6c2V0
Q29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGZpbHRlckFwcEJv
dW5kQ29va2llcyhjb29raWVzLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYm
IGFwcEJvdW5kQ29va2llcykgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgbmVlZHNGbHVzaCA9IGZh
bHNlOwotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29s
Rm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7Ci0gICAg
ICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vzc2lvbiBi
ZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3b3JrIFBy
b2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAgICAgICAg
ICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG5lZWRzRmx1c2ggPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzZXRDb29raWVJ
bkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+YWRkUGVuZGluZ0Nv
b2tpZShjb29raWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobmVlZHNGbHVz
aCkKLSAgICAgICAgICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tpZU1h
bmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewot
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAgIGF1
dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xl
dG9uKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNv
bnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAg
ICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5yZW1vdmVQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBb
cG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZShtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byog
cG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVy
YXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBkZWxldGVDb29raWVz
SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBhdXRvJiBjb29r
aWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwor
ICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBUaGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJl
IHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRh
U3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAo
IXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNF
cGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1
bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xpY3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwg
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFi
bGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2llTWFuYWdlci5zZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgfSk7CiB9CkBAIC0yMjcsMjEgKzE1NCw3IEBA
IHZvaWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKE9ic2VydmVyJiBvYnNlcnZl
cikKIAogICAgIG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIgPSBtYWtlVW5pcXVlPEFQSVdl
YkNvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyPigqdGhpcyk7CiAKLSAgICBhdXRvKiBwb29sID0g
bV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMo
KTsKLQotICAgIGlmICghcG9vbCkgewotICAgICAgICBBU1NFUlQoIW1fb2JzZXJ2aW5nVUlQcm9j
ZXNzQ29va2llcyk7Ci0KLSAgICAgICAgLy8gTGlzdGVuIGZvciBjb29raWUgbm90aWZpY2F0aW9u
cyBpbiB0aGUgVUlQcm9jZXNzIGluIHRoZSBtZWFudGltZS4KLSAgICAgICAgc3RhcnRPYnNlcnZp
bmdDaGFuZ2VzVG9EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoW3RoaXNdICgpIHsKLSAgICAg
ICAgICAgIGNvb2tpZXNEaWRDaGFuZ2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgbV9vYnNl
cnZpbmdVSVByb2Nlc3NDb29raWVzID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHkgPSAmV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwogICAg
IG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9
CiAKQEAgLTI3Niw0NiArMTg5LDEwIEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRGlk
Q2hhbmdlKCkKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKCkK
IHsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT51bnJlZ2lzdGVyT2JzZXJ2ZXIo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcik7Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG51bGxwdHI7Ci0KLSAg
ICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3Rv
cmFnZU9wZXJhdGlvbnMoKTsKLQotICAgIGlmICghcG9vbCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQ
cm94eSA9ICZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CiAgICAg
bV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0K
IAotdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmlj
YXRpb25zKCkKLXsKLSAgICBBU1NFUlQoIW1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRl
bnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIg
PSBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIoW3Ro
aXNdKFdlYlByb2Nlc3NQb29sJiBuZXdQcm9jZXNzUG9vbCkgewotICAgICAgICBpZiAoIW1fb3du
aW5nRGF0YVN0b3JlLT5pc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChuZXdQcm9jZXNzUG9vbCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gTm93IHRoYXQgYW4gYXNzb2NpYXRlZCBw
cm9jZXNzIHBvb2wgZXhpc3RzLCB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBVSSBwcm9jZXNzIGNvb2tp
ZSBzdG9yZQotICAgICAgICAvLyB0byBtYWtlIHN1cmUgYW55IGNoYW5nZXMgYXJlIHJlZmxlY3Rl
ZCB3aXRoaW4gdGhlIG5ldyBwcm9jZXNzIHBvb2wuCi0gICAgICAgIGZsdXNoRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKFtdIHsgfSk7Ci0gICAgICAgIG5ld1Byb2Nlc3NQb29sLmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0KLSAgICAgICAgaWYgKG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2
ZXIpIHsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBuZXdQcm9j
ZXNzUG9vbC5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAg
ICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlciht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyKTsKLSAgICAgICAgfQotICAgICAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lz
dGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBpZiAobV9wcm9jZXNz
UG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKQotICAgICAgICBXZWJQcm9jZXNzUG9vbDo6
dW5yZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihtX3Byb2Nlc3NQb29sQ3JlYXRp
b25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVu
ZXJJZGVudGlmaWVyID0gMDsKLX0KLQogI2lmICFQTEFURk9STShDT0NPQSkKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIoKTsg
fQogVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gSFRUUENvb2tpZVN0b3JlOjpnZXRBbGxEZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCkgeyByZXR1cm4geyB9OyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKaW5kZXggMjBkZWM2
NTY1ODhhMzU4YmNkMWFmNDBjZmU3ZmZhNDMyN2YyNGVjNC4uYjBiMmI4MTEzNTJlODg0YWQ2ZTI0
YjllZDEyYzdhNzFmNjE3NDUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElIVFRQQ29va2llU3RvcmUuaApAQCAtODIsOSArODIsNiBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmKTsKIAotICAg
IHZvaWQgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB2b2lk
IHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLQogICAgIHZvaWQg
Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKICAgICBzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gZ2V0QWxsRGVmYXVsdFVJ
UHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwogICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUlu
RGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKaW5kZXggOGZiOGUwOTZk
NDY2ZTIzNjFjZGI1MjAzZWZjOWM1NjhjOWU2OTUxMS4uNWUyZTYyYTdiOTM2YzFlMDRmNjViMDEw
NDg0NzNmMGIxZjllOTNmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuY3BwCkBAIC00MjYsOSArNDI2LDkgQEAgdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9T
ZXJ2ZXIoV0tDb250ZXh0UmVmLCBXS1VSTFJlZikKIHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVm
IFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCitXS0Nv
b2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYpCiB7
Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1
cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkp
OwogfQogCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9y
ZShXS0NvbnRleHRSZWYpCkBAIC01NDMsOSArNTQzLDggQEAgdm9pZCBXS0NvbnRleHRTZXRKYXZh
U2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChXS0NvbnRleHRSZWYgY29udGV4dFJl
ZiwKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VD
b2xsZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpCit2b2lkIFdLQ29udGV4dFVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dCktPnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwogfQogCiB2b2lkIFdLQ29u
dGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhXS0NvbnRl
eHRSZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCkBAIC01NTMsMTMgKzU1Miw2IEBAIHZvaWQgV0tD
b250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nKFdLQ29u
dGV4dFJlZiBjb250ZXh0CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyk7CiB9CiAKLXZvaWQgV0tDb250ZXh0
U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRl
eHRSZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXIoYWxsb3dzKTsKLSNlbmRpZgotfQotCiB2b2lkIFdLQ29udGV4dENs
ZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgV2ViS2l0
Ojp0b0ltcGwoY29udGV4dCktPmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKQEAgLTY2NiwxMiAr
NjU4LDExIEBAIHZvaWQgV0tDb250ZXh0Q2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0
b3JhZ2UoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIHZvCiAgICAgfSk7CiB9CiAKLXZvaWQgV0tD
b250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRleHRSZWYgY29u
dGV4dFJlZiwgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQordm9pZCBXS0Nv
bnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiwgYm9v
bCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogewotICAgIFdlYktpdDo6dG9JbXBs
KGNvbnRleHRSZWYpLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mp
OwogfQogCi12b2lkIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmLCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSkK
K3ZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUoV0tDb250ZXh0UmVmLCBX
S1dlYnNpdGVEYXRhU3RvcmVSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZikt
PnNldFByaW1hcnlEYXRhU3RvcmUoKldlYktpdDo6dG9JbXBsKHdlYnNpdGVEYXRhU3RvcmUpKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUu
aAppbmRleCAzOWMwY2E3Y2M2YTZiNmI1NWM4MDNiODNjZGU1YjM4YmZjMTljOThlLi44ODQ3NGQz
MGEwZDBiYjg0YTE5YjYxMGMyYzE1YjlhYzEyYmQwOWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBAIC04NywxMCArODcsOSBAQCBX
S19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3JrUHJvY2VzcyhXS0NvbnRleHRS
ZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlcnMoV0tD
b250ZXh0UmVmKTsKIAogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nKFdLQ29udGV4dFJlZiwgYm9vbCk7Ci1XS19FWFBP
UlQgdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXJUZXN0aW5nKFdLQ29udGV4dFJlZiwgYm9vbCk7CiAKIC8vIFRlc3Qgb25seS4gU2hvdWxkIGJl
IGNhbGxlZCBiZWZvcmUgYW55IHNlY29uZGFyeSBwcm9jZXNzZXMgYXJlIHN0YXJ0ZWQuCi1XS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVm
IGNvbnRleHQpOworV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNz
aW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KSBXS19DX0FQSV9ERVBSRUNBVEVEOwogCiAvLyBUZXN0
IG9ubHkuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHJ1bm5pbmcgYSB0ZXN0LgogV0tfRVhQT1JU
IHZvaWQgV0tDb250ZXh0Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhXS0NvbnRleHRSZWYgY29udGV4
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9j
ZXNzUG9vbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQ
b29sLm1tCmluZGV4IDY4MjBmNDkxZTk0NzU5NWUwMGQwY2JkMmQ1ODg5NTIwNzAzYTU4MDguLjE5
YWQ3Yjg5MTc3MzFiYjIxZGEwOWFiYjBmOWI5NDYwYjFmOWRmYzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCkBAIC0yMDEsNyAr
MjAxLDcgQEAgc3RhdGljIFdLUHJvY2Vzc1Bvb2wgKnNoYXJlZFByb2Nlc3NQb29sOwogCiAtICh2
b2lkKV9zZXRDb29raWVBY2NlcHRQb2xpY3k6KE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSlwb2xp
Y3kKIHsKLSAgICBfcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSwgV2ViQ29yZTo6dG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGlj
eSksIFtdKCkgeyB9KTsKKyAgICBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xl
dG9uKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpLCBXZWJDb3JlOjp0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10o
KSB7IH0pOwogfQogCiAtIChpZClfb2JqZWN0Rm9yQnVuZGxlUGFyYW1ldGVyOihOU1N0cmluZyAq
KXBhcmFtZXRlcgpAQCAtNDM3LDcgKzQzNyw3IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKnBvbGlj
aWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTCiAK
IC0gKHZvaWQpX3NldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6KEJPT0wpdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcwogewotICAgIF9wcm9jZXNzUG9vbC0+c2V0VXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQogCiAtIChwaWRf
dClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyCkBAIC01NzgsMTMgKzU3OCw2IEBAIHN0YXRpYyBO
U0RpY3Rpb25hcnkgKnBvbGljaWVzSGFzaE1hcFRvRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0
cmluZywgSGFzaE1hcDxTCiAgICAgX3Byb2Nlc3NQb29sLT5zeW50aGVzaXplQXBwSXNCYWNrZ3Jv
dW5kKGJhY2tncm91bmQpOwogfQogCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXI6KEJPT0wpYWxsb3dzCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQotICAgIF9wcm9jZXNzUG9vbC0+c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2
aWNlV29ya2VyKGFsbG93cyk7Ci0jZW5kaWYKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAtIChpZCA8X1dLR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlcj4pX2NvcmVMb2NhdGlv
blByb3ZpZGVyCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCmluZGV4IGQzOWRiMWRkYjA5YzA4Y2M3ODAxN2Q0
ZTFmNDVmYzhkMjU2ZjVjZGYuLjg4NTRlZjZjMzA2ZmMxMGM3OTdiODMzOTkwMmQ1NTRiNDA0MmYz
YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nl
c3NQb29sUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oCkBAIC0xMjIsNyArMTIyLDYgQEAKIC0gKHZvaWQpX3ByZWNv
bm5lY3RUb1NlcnZlcjooTlNVUkwgKilzZXJ2ZXJVUkwgV0tfQVBJX0RFUFJFQ0FURURfV0lUSF9S
RVBMQUNFTUVOVCgiV0tXZWJWaWV3Ll9wcmVjb25uZWN0VG9TZXJ2ZXIiLCBtYWNvcygxMC4xMy40
LCBXS19NQUNfVEJBKSwgaW9zKDExLjMsIFdLX0lPU19UQkEpKTsKIAogLy8gVGVzdCBvbmx5Lgot
LSAodm9pZClfc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyOihCT09M
KWFsbG93cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTEuMykpOwogLSAo
dm9pZClfZ2V0QWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNzRm9yVGVzdGluZzoocGlkX3Qp
cGlkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4gKikpY29t
cGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIp
KTsKIC0gKEJPT0wpX25ldHdvcmtQcm9jZXNzSGFzRW50aXRsZW1lbnRGb3JUZXN0aW5nOihOU1N0
cmluZyAqKWVudGl0bGVtZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygx
Mi4yKSk7CiAtICh2b2lkKV9jbGVhclBlcm1hbmVudENyZWRlbnRpYWxzRm9yUHJvdGVjdGlvblNw
YWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAqKXByb3RlY3Rpb25TcGFjZSBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKaW5kZXggMWVlNzNl
YmMwZWEwMzZmODZiM2ZlOTQ0MTQ5MDcyZTZhYzRkYzc2Ny4uZmI5OGQwNTkwYzlhZDI4MjM1ZDcx
MWI3Y2FhYzliYzU1YzlhNjQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKQEAgLTY0LDggKzY0LDcgQEAg
c3RydWN0IF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7CiAKICAgICB+X1dlYktpdENvb2tp
ZU1hbmFnZXJQcml2YXRlKCkKICAgICB7Ci0gICAgICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wg
OiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMoZGF0YU1hbmFnZXIpKQot
ICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpLT5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsKKyAg
ICAgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5zZXRDb29raWVPYnNlcnZl
ckNhbGxiYWNrKHNlc3Npb25JRCgpLCBudWxscHRyKTsKICAgICB9CiAKICAgICBXZWJLaXRXZWJz
aXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwpAQCAtMTM5LDExICsxMzgsOSBAQCBXZWJLaXRD
b29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlciogZGF0YU1hbgogewogICAgIFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBX
RUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5B
R0VSLCBudWxscHRyKSk7CiAgICAgbWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBkYXRhTWFu
YWdlcjsKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkgewotICAgICAg
ICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldENv
b2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFttYW5hZ2Vy
XSB7Ci0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0s
IDApOwotICAgICAgICB9KTsKLSAgICB9CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5n
bGV0b24oKS5zZXRDb29raWVPYnNlcnZlckNhbGxiYWNrKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCBbbWFuYWdlcl0geworICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNb
Q0hBTkdFRF0sIDApOworICAgIH0pOwogICAgIHJldHVybiBtYW5hZ2VyOwogfQogCkBAIC0xNzMs
OCArMTcwLDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3Rv
cmFnZShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLAogICAgIGlmIChzZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9v
bCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2
LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tp
ZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBT
dHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VU
eXBlKHN0b3JhZ2UpKTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNl
dENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgU3RyaW5nOjpmcm9tVVRGOChmaWxl
bmFtZSksIHRvU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZShzdG9yYWdlKSk7CiB9CiAK
IC8qKgpAQCAtMTkyLDggKzE4OCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9h
Y2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIFdlYktpCiB7CiAgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOwogCi0g
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFBy
b2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0
UG9saWN5KHBvbGljeSksIFtdKCkgeyB9KTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNp
bmdsZXRvbigpLnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+c2Vzc2lv
bklEKCksIHRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpLCBbXSgpIHsgfSk7CiB9CiAK
IC8qKgpAQCAtMjI0LDcgKzIxOSw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9h
Y2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdDYW5jCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29v
a2llTWFuYWdlclByb3h5PigpLT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3kgcG9saWN5KSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5n
bGV0b24oKS5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCBbdGFzayA9IFdURk1vdmUodGFzayldKFdlYkNvcmU6OkhUVFBDb29raWVBY2NlcHRQb2xp
Y3kgcG9saWN5KSB7CiAgICAgICAgIGdfdGFza19yZXR1cm5faW50KHRhc2suZ2V0KCksIHRvV2Vi
S2l0Q29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOwogICAgIH0pOwogfQpAQCAtMjY5LDExICsy
NjQsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9hZGRfY29va2llKFdlYktpdENvb2tp
ZU1hbmFnZXIqIG1hbmFnZXIsIFNvdXBDb29raWUqCiAgICAgZ19yZXR1cm5faWZfZmFpbChjb29r
aWUpOwogCiAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1h
bmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tp
ZXMgYXJlIHJlYWQvd3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBk
aXNrIHJlZ2FyZGxlc3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9t
LCBzbyBqdXN0IHVzZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHBy
b2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5h
Z2VyLT5wcml2LT5kYXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNz
aW9uSUQoKSwgeyBXZWJDb3JlOjpDb29raWUoY29va2llKSB9LCBbdGFzayA9IFdURk1vdmUodGFz
ayldKCkgeworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2ll
cyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgeyBXZWJDb3JlOjpDb29raWUoY29va2llKSB9
LCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xl
YW4odGFzay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9CkBAIC0zMjAsMTEgKzMxMSw3IEBAIHZv
aWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9jb29raWVzKFdlYktpdENvb2tpZU1hbmFnZXIq
IG1hbmFnZXIsIGNvbnN0IGdjaGFyCiAgICAgZ19yZXR1cm5faWZfZmFpbCh1cmkpOwogCiAgICAg
R1JlZlB0cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNl
bGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLQotICAgIC8vIENvb2tpZXMgYXJlIHJlYWQv
d3JpdHRlbiBmcm9tL3RvIHRoZSBzYW1lIFNRTGl0ZSBkYXRhYmFzZSBvbiBkaXNrIHJlZ2FyZGxl
c3MKLSAgICAvLyBvZiB0aGUgcHJvY2VzcyB3ZSBhY2Nlc3MgdGhlbSBmcm9tLCBzbyBqdXN0IHVz
ZSB0aGUgZmlyc3QgcHJvY2VzcyBwb29sLgotICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5k
YXRhTWFuYWdlcik7Ci0gICAgcHJvY2Vzc1Bvb2xzWzBdLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKS0+Z2V0Q29va2llcyhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwgVVJM
KFVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpLCBbdGFzayA9IFdURk1vdmUodGFzayldKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSB7CisgICAgV2ViQ29va2llTWFu
YWdlclByb3h5OjpzaW5nbGV0b24oKS5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKICAgICAgICAg
R0xpc3QqIGNvb2tpZXNMaXN0ID0gbnVsbHB0cjsKICAgICAgICAgZm9yIChhdXRvJiBjb29raWUg
OiBjb29raWVzKQogICAgICAgICAgICAgY29va2llc0xpc3QgPSBnX2xpc3RfcHJlcGVuZChjb29r
aWVzTGlzdCwgY29va2llLnRvU291cENvb2tpZSgpKTsKQEAgLTM3OCwxMSArMzY1LDcgQEAgdm9p
ZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZShXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBTb3VwQ29va2kKICAgICBnX3JldHVybl9pZl9mYWlsKGNvb2tpZSk7CiAKICAg
ICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2Fu
Y2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBhcmUgcmVh
ZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sgcmVnYXJk
bGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNvIGp1c3Qg
dXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vzc1Bvb2xz
ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYt
PmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2ViQ29va2ll
TWFuYWdlclByb3h5PigpLT5kZWxldGVDb29raWUobWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCks
IFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFzayA9IFdURk1vdmUodGFzayldKCkgeworICAg
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRlQ29va2llKG1hbmFnZXIt
PnByaXYtPnNlc3Npb25JRCgpLCBXZWJDb3JlOjpDb29raWUoY29va2llKSwgW3Rhc2sgPSBXVEZN
b3ZlKHRhc2spXSgpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9ib29sZWFuKHRhc2suZ2V0KCks
IFRSVUUpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCBkMDM3OTM5ZWJkZGQ4NTNkYjhkZWIz
YWQ1MWU5NTdkOGE1ODljZmNiLi5hMzAwNGJmNmUwNmRkMjljMDEzNThkZDBkNDc2NjBlOGUwMGI1
YTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRX
ZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRXZWJDb250ZXh0LmNwcApAQCAtNDA3LDcgKzQwNyw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdl
YkNvbnRleHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIGNvbmZpZ3VyYXRp
b24uc2V0SFNUU1N0b3JhZ2VEaXJlY3RvcnkoRmlsZVN5c3RlbTo6c3RyaW5nRnJvbUZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2hzdHNfY2Fj
aGVfZGlyZWN0b3J5KHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpKTsKIAogICAgIHBy
aXYtPnByb2Nlc3NQb29sID0gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0aW9uKTsK
LSAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0UHJpbWFyeURhdGFTdG9yZSh3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXREYXRhU3RvcmUocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKSk7
CiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFVzZXJNZXNzYWdlSGFuZGxlcihbd2ViQ29udGV4
dF0oVXNlck1lc3NhZ2UmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJNZXNz
YWdlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIC8vIFNpbmsgdGhlIGZsb2F0
aW5nIHJlZi4KICAgICAgICAgR1JlZlB0cjxXZWJLaXRVc2VyTWVzc2FnZT4gdXNlck1lc3NhZ2Ug
PSB3ZWJraXRVc2VyTWVzc2FnZUNyZWF0ZShXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IGU2ZTRhY2MxMWE5MWEz
NzBmYjY4OGZhYjQ4ZDI1MjA2OTZkNTAyOGYuLjUyZWIzOTk4OGFhZTAwZGVkZWViN2I0NjQ3ZjQ0
MjQyMGJkMjMxODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xMzkzLDggKzEzOTMsNyBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUsCiAgICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVh
bigiaHR0cE9ubHkiX3MsIGNvb2tpZS5odHRwT25seSkpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFy
YW1ldGVyICdodHRwT25seScgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29v
a2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPnNldENvb2tpZXMocGFnZS0+
d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBbY2FsbGJhY2tdKCkg
eworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuc2V0Q29va2llcyhwYWdl
LT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10o
KSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQpAQCAtMTQx
MCw4ICsxNDA5LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2ll
cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmkKIAogICAgIFN0cmluZyBob3N0
ID0gYWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCi0gICAgV2ViQ29va2llTWFuYWdlclBy
b3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWlu
QnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKyAgICBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnNpbmdsZXRvbigpLmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vic2l0
ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4
SWZOZWVkZWQoaG9zdCkgfSk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldFNl
c3Npb25QZXJtaXNzaW9ucyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT4+JiBvdXRf
cGVybWlzc2lvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXhpbGlh
cnlQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nl
c3NQcm94eS5oCmluZGV4IDQxYzBhMGZiZjUwNmVmYTE0MDhiY2VmOWFmOGE5MGI4NWExYWQwOGEu
LjRmMzk4YjUzMGY2MDg1NzVjOTY3YjgzYzc0ZmEyZjQzMjhmNmNlM2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oCkBAIC00OCw3ICs0OCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BdXhpbGlhcnlQcm9jZXNzUHJveHkoKTsKIAogICAg
IHZvaWQgY29ubmVjdCgpOwotICAgIHZvaWQgdGVybWluYXRlKCk7CisgICAgdmlydHVhbCB2b2lk
IHRlcm1pbmF0ZSgpOwogCiAgICAgdmlydHVhbCBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIo
KSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBy
b2Nlc3NQb29sQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9j
ZXNzUG9vbENvY29hLm1tCmluZGV4IDVkOTYwZTFmMzI2ZDJiNzI5MWU3MTMwOTZkZWVlZWQ5OGNh
Y2EwNmEuLjEzMWVkNTk0N2MzM2M1ZGQ3ODdiZjBkNWZmNmQ2YTQ4NjI0ZDE1MjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5t
bQpAQCAtMTM0LDggKzEzNCw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZO
ZWVkZWQoKQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25T
dGF0ZSgpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5h
YmxlZCgpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRQcm9jZXNz
U3VwcHJlc3Npb25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7CiAKICNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAoIW1fcHJvY2Vzc1N1cHByZXNzaW9u
RGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpKQpAQCAtMTY2LDggKzE2NSw2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAgICAgaWYgKCFbW05TVXNlckRl
ZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2ViS2l0U3VwcHJlc3NN
ZW1vcnlQcmVzc3VyZUhhbmRsZXIiXSkKICAgICAgICAgaW5zdGFsbE1lbW9yeVByZXNzdXJlSGFu
ZGxlcigpOwogCi0gICAgc2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KG1ha2VV
bmlxdWU8TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PigpKTsKLQogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBpZiAoIV9NR0Nh
Y2hlVmFsaWQoKSkgewogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFs
X3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeewpAQCAtNDgwLDIy
ICs0NzcsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogCiAgICAgTlNVc2VyRGVmYXVsdHMg
KmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKIAotICAg
IHsKLSAgICAgICAgYm9vbCBpc1NhZmFyaSA9IGZhbHNlOwotICAgICAgICBib29sIGlzTWluaUJy
b3dzZXIgPSBmYWxzZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpc1NhZmFy
aSA9IFdlYkNvcmU6OklPU0FwcGxpY2F0aW9uOjppc01vYmlsZVNhZmFyaSgpOwotICAgICAgICBp
c01pbmlCcm93c2VyID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsK
LSNlbGlmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgaXNTYWZhcmkgPSBXZWJDb3JlOjpNYWNBcHBs
aWNhdGlvbjo6aXNTYWZhcmkoKTsKLSAgICAgICAgaXNNaW5pQnJvd3NlciA9IFdlYkNvcmU6Ok1h
Y0FwcGxpY2F0aW9uOjppc01pbmlCcm93c2VyKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGlzU2Fm
YXJpIHx8IGlzTWluaUJyb3dzZXIpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBQcm94eSA9IFVS
TChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJLaXQySFRUUFBy
b3h5RGVmYXVsdHNLZXldKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHBzUHJveHkgPSBVUkwoVVJM
KCksIFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6KE5TU3RyaW5nICopV2ViS2l0MkhUVFBTUHJveHlE
ZWZhdWx0c0tleV0pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcGFyYW1ldGVycy5uZXR3b3Jr
QVRTQ29udGV4dCA9IGFkb3B0Q0YoX0NGTmV0d29ya0NvcHlBVFNDb250ZXh0KCkpOwogCiAgICAg
cGFyYW1ldGVycy5zaG91bGRTdXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciA9IFtkZWZhdWx0
cyBib29sRm9yS2V5OldlYktpdFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyRGVmYXVsdHNL
ZXldOwpAQCAtNTA2LDE3ICs0ODcsMTEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1J
bml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKICAgICBw
YXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyID0gaWRlbnRpZnlpbmdE
YXRhRnJvbUNvb2tpZVN0b3JhZ2UoW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29r
aWVTdG9yYWdlXSBfY29va2llU3RvcmFnZV0pOwogI2VuZGlmCiAKLSAgICBwYXJhbWV0ZXJzLnN0
b3JhZ2VBY2Nlc3NBUElFbmFibGVkID0gc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoKTsKLQogICAg
IE5TTnVtYmVyICpkYXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtkZWZhdWx0cyBvYmplY3RGb3JLZXk6
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5hbERlYnVnJUAiLCBXZWJQcmVmZXJl
bmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgp
XV07CiAgICAgaWYgKGRhdGFiYXNlRW5hYmxlZFZhbHVlKQogICAgICAgICBwYXJhbWV0ZXJzLnNo
b3VsZEVuYWJsZUlUUERhdGFiYXNlID0gZGF0YWJhc2VFbmFibGVkVmFsdWUuYm9vbFZhbHVlOwot
ICAgIGVsc2UKLSAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IG1f
ZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5pc0lUUERhdGFiYXNlRW5hYmxlZCgpOwog
CiAgICAgcGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUgPSBbZGVm
YXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4cGVyaW1lbnRh
bCVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJs
ZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07Ci0KLSAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1
ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dl
YnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxh
dGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAKaW5kZXggYzVkZTRlN2QwZjU5MTk0ZjQzYTAy
M2IwODllMzcyYzU4Y2Y4ZWUwNi4uYTk3YTYyZGRjMDhjZDllM2FkODFlYmY2Y2QwMDdjZGMxYzJh
NGU5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5LmNwcApAQCAtNzUsOCArNzUsNyBAQCB2b2lkIERvd25sb2FkUHJveHk6OmNhbmNl
bCgpCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
TmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOworICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDYW5jZWxEb3dubG9hZChtX2Rvd25sb2FkSUQpLCAwKTsKIH0KIAogdm9pZCBEb3dubG9hZFBy
b3h5OjppbnZhbGlkYXRlKCkKQEAgLTEwNiwxMiArMTA1LDEwIEBAIHZvaWQgRG93bmxvYWRQcm94
eTo6cHVibGlzaFByb2dyZXNzKGNvbnN0IFVSTCYgVVJMKQogICAgIGlmICghbV9wcm9jZXNzUG9v
bCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9w
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBib29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0g
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5k
Ym94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIGhhbmRsZSk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uKTsK
LSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQ
dWJsaXNoRG93bmxvYWRQcm9ncmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7Ci0g
ICAgfQorICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7CisgICAgYm9vbCBjcmVh
dGVkU2FuZGJveEV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShVUkwu
ZmlsZVN5c3RlbVBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBoYW5k
bGUpOworICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZFNhbmRib3hFeHRlbnNpb24sIGNyZWF0ZWRT
YW5kYm94RXh0ZW5zaW9uKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHVibGlzaERvd25sb2FkUHJvZ3Jlc3MobV9k
b3dubG9hZElELCBVUkwsIGhhbmRsZSksIDApOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09B
KQogCkBAIC0xNDYsMTUgKzE0Myw3IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6d2lsbFNlbmRSZXF1
ZXN0KFJlc291cmNlUmVxdWVzdCYmIHByb3Bvc2VkUmVxdWVzdCwgY29uc3QgUmVzCiAKICAgICBt
X3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLndpbGxTZW5kUmVxdWVzdCgqdGhpcywgV1RG
TW92ZShwcm9wb3NlZFJlcXVlc3QpLCByZWRpcmVjdFJlc3BvbnNlLCBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpXShSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KSB7CiAg
ICAgICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobmV3UmVxdWVzdC51cmwoKSk7Ci0KLSAgICAg
ICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX3Byb2Nlc3NQb29sKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGF1dG8qIG5ldHdvcmtQcm9jZXNzUHJveHkgPSBwcm90ZWN0ZWRUaGlzLT5t
X3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpOwotICAgICAgICBpZiAoIW5ldHdvcmtQcm9j
ZXNzUHJveHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3NQ
cm94eS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlV2lsbFNlbmRSZXF1
ZXN0KHByb3RlY3RlZFRoaXMtPm1fZG93bmxvYWRJRCwgbmV3UmVxdWVzdCksIDApOworICAgICAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6Q29udGludWVXaWxsU2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9h
ZElELCBuZXdSZXF1ZXN0KSwgMCk7CiAgICAgfSk7CiB9CiAKQEAgLTE3OSwxNiArMTY4LDEyIEBA
IHZvaWQgRG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5h
bWVBc3luYyhEb3dubG9hZElEIGRvd25sCiAgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNp
ZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgqdGhpcywgUmVzb3VyY2VSZXNwb25z
ZUJhc2U6OnNhbml0aXplU3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUpLCBbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkb3dubG9hZElEID0gZG93bmxvYWRJ
RF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24pIHsK
KyAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0
aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVT
dWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFtZSksIFtkb3dubG9hZElEID0gZG93bmxv
YWRJRF0gKEFsbG93T3ZlcndyaXRlIGFsbG93T3ZlcndyaXRlLCBTdHJpbmcgZGVzdGluYXRpb24p
IHsKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5k
bGU7CiAgICAgICAgIGlmICghZGVzdGluYXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZGVzdGluYXRpb24sIFNhbmRib3hFeHRlbnNpb246
OlR5cGU6OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICAgICAgaWYg
KCFtX3Byb2Nlc3NQb29sKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAg
ICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNv
bnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGlu
YXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3Zl
cndyaXRlOjpZZXMpLCAwKTsKKyAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rv
d25sb2FkRGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNp
b25IYW5kbGUsIGFsbG93T3ZlcndyaXRlID09IEFsbG93T3ZlcndyaXRlOjpZZXMpLCAwKTsKICAg
ICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHlNYXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkUHJveHlNYXAuY3BwCmluZGV4IDc2YTA3MTU3YjU5MWFhY2U1MGYxNWQxNTI1ZGJj
ZmI4YzZhNGJiYzguLjlmZGY5N2EwMzExYTVkN2NiMzE4NjRlNzkwNmJhY2RmNmY2MTk2MWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eU1hcC5jcHAKQEAgLTEwOSw5ICsxMDksNiBAQCB2b2lkIERvd25sb2FkUHJveHlNYXA6OmRv
d25sb2FkRmluaXNoZWQoRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkKIAogICAgIFJFTEVB
U0VfTE9HKExvYWRpbmcsICJSZW1vdmluZyBkb3dubG9hZCAlIiBQUkl1NjQgIiBmcm9tIFVJUHJv
Y2VzcyBEb3dubG9hZFByb3h5TWFwIiwgZG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwogCi0gICAg
Ly8gVGhlIERvd25sb2FkUHJveHkgbWF5IGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRv
IHRoZSBwcm9jZXNzIHBvb2wuCi0gICAgYXV0byBwcm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VS
ZWZQdHIobV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpKTsKLQogICAgIEFTU0VSVChtX2Rvd25sb2Fk
cy5jb250YWlucyhkb3dubG9hZElEKSk7CiAKICAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBk
b3dubG9hZElELmRvd25sb2FkSUQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29s
cy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKaW5kZXggOGMyM2JiZThjMDZh
MTU5OWNiOWI5MTZhMGIzMmFmYjM3NzgzZjMwNS4uYzIzOGJlMDY4ZGNmOTNmMTVmZTYyNmYxNzE4
YjkwOGE3MmVmYTE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcApAQCAtNDQsMTcgKzQ0LDIwIEBAIExlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojp+TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHkoKQogCiB2b2lkIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpzdGFydExv
YWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1By
b3h5LnByb2Nlc3NQb29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RhcnRMb2Fk
aW5nKCp0aGlzLCBjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKKyAgICBpZiAoYXV0byogY2xp
ZW50ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkubGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50KCkpCisgICAgICAgIGNsaWVudC0+c3RhcnRMb2FkaW5nKCp0aGlzLCBj
dXN0b21Qcm90b2NvbElELCByZXF1ZXN0KTsKIH0KIAogdm9pZCBMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eTo6c3RvcExvYWRpbmcoTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Q
cm90b2NvbElEKQogewotICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpLnN0b3BMb2FkaW5nKCp0aGlzLCBjdXN0b21Qcm90
b2NvbElEKTsKKyAgICBpZiAoYXV0byogY2xpZW50ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkubGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkpCisgICAgICAgIGNs
aWVudC0+c3RvcExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQpOwogfQogCiB2b2lkIExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBtX25l
dHdvcmtQcm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQoKS5pbnZhbGlkYXRlKCp0aGlzKTsKKyAgICBpZiAoYXV0byogY2xpZW50ID0gTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkubGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
KCkpCisgICAgICAgIGNsaWVudC0+aW52YWxpZGF0ZSgqdGhpcyk7CiB9CiAKIHZvaWQgTGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QoTGVnYWN5
Q3VzdG9tUHJvdG9jb2xJRCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGly
ZWN0UmVzcG9uc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBkMTI1MDIwYTU5NWQyOTg4OTY5M2I0MjMw
YzEwMWQ4MzI0M2FlM2JlLi5mNDc5ZDJlOWYxODJiZWJiOTFmNzkzNDkzYTUxMTA5NTQ0MTNiNjE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJMZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgorI2luY2x1ZGUgIkxlZ2FjeUdsb2Jh
bFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb250
ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb25JbmZvLmgiCkBAIC02MCw2ICs2MSw3IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFT
dG9yZUNsaWVudC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0Fn
Z3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogI2lmIEVO
QUJMRShTRUNfSVRFTV9TSElNKQpAQCAtNzAsMTggKzcyLDEwOSBAQAogI2luY2x1ZGUgPHd0Zi9z
cGkvZGFyd2luL1hQQ1NQSS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNs
dWRlICJMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCIKKyNlbmRpZgorCiAjZGVm
aW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9u
LCBjb25uZWN0aW9uKCkpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKLU5ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2ViUHJv
Y2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KHByb2Nl
c3NQb29sLmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQotICAgICwgbV9wcm9jZXNz
UG9vbChwcm9jZXNzUG9vbCkKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nlc3NQ
cm94eT4mIGdsb2JhbE5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8c3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+PiBuZXR3b3JrUHJvY2VzczsK
KyAgICByZXR1cm4gbmV0d29ya1Byb2Nlc3M7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHkmIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpCit7CisgICAgaWYgKCFnbG9iYWxOZXR3b3Jr
UHJvY2VzcygpKSB7CisgICAgICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNzKCkgPSBtYWtlVW5pcXVl
PE5ldHdvcmtQcm9jZXNzUHJveHk+KCk7CisgICAgICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNzKCkt
PnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICB9CisgICAgcmV0dXJu
ICpnbG9iYWxOZXR3b3JrUHJvY2VzcygpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnRlcm1pbmF0ZSgpCit7CisgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKTsK
KyAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpID0gbnVsbHB0cjsKK30KKwordm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjphdHRlbXB0UmVsYXVuY2hBZnRlckNyYXNoSWZOZWNlc3NhcnkoVmVjdG9y
PHN0ZDo6cGFpcjxSZWY8V2ViUHJvY2Vzc1Byb3h5PiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94
eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5Pj4mJiBwZW5kaW5nUmVx
dWVzdHMpCit7CisgICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSA9IG51bGxwdHI7CisgICAgaWYg
KHBlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBu
ZXdOZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOworICAg
IGZvciAoYXV0byYgcmVxdWVzdCA6IHBlbmRpbmdSZXF1ZXN0cykKKyAgICAgICAgbmV3TmV0d29y
a1Byb2Nlc3MuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHJlcXVlc3QuZmlyc3QuZ2V0KCks
IFdURk1vdmUocmVxdWVzdC5zZWNvbmQpKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29y
a2Fyb3VuZCBmb3IgYXBwcyB1c2luZyBXZWJLaXQgQVBJIG9uIG5vbi1tYWluIHRocmVhZHMuCisg
ICAgLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgZW5mb3JjZSB0aHJlYWRpbmcgdmlv
bGF0aW9uIGNoZWNrIG9uIG91ciBBUElzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDAyNDYuCisgICAgaWYgKCFSdW5Mb29wOjppc01haW4oKSkgewor
ICAgICAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoW3RoaXNdIHsKKyAgICAgICAgICAgIHNl
bmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKTsKKyAgICAgICAgfSk7CisgICAgfQor
CisgICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBp
ZiAoIXBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpCisgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0
ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNT
ZWN1cmUgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNj
aGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUoKSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5ID0gY29weVRvVmVjdG9yKExl
Z2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzQnlwYXNz
aW5nQ29udGVudFNlY3VyaXR5UG9saWN5KCkpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7CisgICAgcGFyYW1ldGVycy51cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0
dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKKyAgICBw
YXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCku
Y2FjaGVNb2RlbCgpOworICAgIGZvciAoYXV0byYgc2NoZW1lIDogV2ViUHJvY2Vzc1Bvb2w6OnVy
bFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQorICAgICAgICBwYXJhbWV0ZXJz
LnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKFN0cmluZyBjb29raWVTdG9yYWdlRGly
ZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsgIWNvb2tp
ZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBp
ZiAoU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3
b3JraW5nQ2FjaGVzRGlyZWN0b3J5KCk7ICFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0
eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgaWYgKFN0cmluZyBwYXJlbnRCdW5k
bGVEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6cGFyZW50QnVuZGxlRGlyZWN0b3J5KCk7ICFw
YXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpU
eXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOworI2VuZGlmCisgICAgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpOworICAgIHBhcmFtZXRlcnMuZGF0YVN0b3JlUGFyYW1l
dGVycyA9IFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKCk7CisgICAg
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhw
YXJhbWV0ZXJzKSwgMCk7Cit9CisKK3N0YXRpYyBib29sIGFueVByb2Nlc3NQb29sQWx3YXlzUnVu
c0F0QmFja2dyb3VuZFByaW9yaXR5KCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDog
V2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNz
UG9vbC0+YWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBhbnlQ
cm9jZXNzUG9vbFNob3VsZFRha2VVSUJhY2tncm91bmRBc3NlcnRpb24oKQoreworICAgIGZvciAo
YXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsK
KyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5zaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9u
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5OjpOZXR3b3JrUHJvY2Vzc1Byb3h5KCkKKyAgICA6IEF1
eGlsaWFyeVByb2Nlc3NQcm94eShhbnlQcm9jZXNzUG9vbEFsd2F5c1J1bnNBdEJhY2tncm91bmRQ
cmlvcml0eSgpKQogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCiAg
ICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5KCp0aGlzKQogI2VuZGlmCi0gICAgLCBt
X3Rocm90dGxlcigqdGhpcywgcHJvY2Vzc1Bvb2wuc2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2Vy
dGlvbigpKQorICAgICwgbV90aHJvdHRsZXIoKnRoaXMsIGFueVByb2Nlc3NQb29sU2hvdWxkVGFr
ZVVJQmFja2dyb3VuZEFzc2VydGlvbigpKQorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICwgbV9j
dXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ+KCkpCisjZW5kaWYKIHsKICAgICBjb25uZWN0KCk7CiB9CkBAIC0xMDUs
MTUgKzE5OCwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMo
UHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogICAgIGxhdW5jaE9wdGlvbnMu
cHJvY2Vzc1R5cGUgPSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwogICAg
IEF1eGlsaWFyeVByb2Nlc3NQcm94eTo6Z2V0TGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTsK
IAotICAgIGlmIChwcm9jZXNzUG9vbCgpLnNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sKCkuc2V0U2hvdWxkTWFr
ZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGZhbHNlKTsKLSAgICAgICAg
bGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdHJ1
ZTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+c2hvdWxkTWFrZU5leHROZXR3
b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NQ
b29sLT5zZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmco
ZmFsc2UpOworICAgICAgICAgICAgbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLQotI2lmIFBMQVRGT1JN
KFBMQVlTVEFUSU9OKQotICAgIGxhdW5jaE9wdGlvbnMucHJvY2Vzc1BhdGggPSBtX3Byb2Nlc3NQ
b29sLm5ldHdvcmtQcm9jZXNzUGF0aCgpOwotICAgIGxhdW5jaE9wdGlvbnMudXNlcklkID0gbV9w
cm9jZXNzUG9vbC51c2VySWQoKTsKLSNlbmRpZgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCkBAIC0x
NjYsMTIgKzI1NiwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnN5bnRoZXNpemVBcHBJ
c0JhY2tncm91bmQoYm9vbCBiYWNrZ3JvdW5kKQogICAgIH0KIH0KIAotRG93bmxvYWRQcm94eSYg
TmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94eShXZWJzaXRlRGF0YVN0b3Jl
JiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25z
dCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdl
KQorRG93bmxvYWRQcm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlRG93bmxvYWRQcm94
eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9v
bCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IEZyYW1lSW5m
b0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UpCiB7CiAgICAg
aWYgKCFtX2Rvd25sb2FkUHJveHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IG1h
a2VVbmlxdWU8RG93bmxvYWRQcm94eU1hcD4oKnRoaXMpOwogCi0gICAgcmV0dXJuIG1fZG93bmxv
YWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3RvcmUsIG1fcHJvY2Vzc1Bvb2ws
IHJlc291cmNlUmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVy
biBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCBwcm9j
ZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCAoV2Vic2l0ZURhdGEpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjM3LDgg
KzMyNywxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZCgpCiB7CiAgICAgY2xlYXJDYWxsYmFja1N0YXRlcygpOwogCi0gICAgLy8gVGVsbCB0aGUgbmV0
d29yayBwcm9jZXNzIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IHRoaXMgbmV0d29yayBwcm9jZXNz
IHByb3h5LiBUaGlzIHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4KLSAgICBtX3Byb2Nlc3NQ
b29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNz
UG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgqdGhpcyk7CisKKyAgICBnbG9iYWxOZXR3b3Jr
UHJvY2VzcygpID0gbnVsbHB0cjsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjbGVh
ckNhbGxiYWNrU3RhdGVzKCkKQEAgLTI1OCw5ICszNTAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBD
OjpEZQogICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChtX3Byb2Nlc3NQb29sLmRpc3BhdGNoTWVzc2FnZShjb25u
ZWN0aW9uLCBkZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZGlkUmVjZWl2ZU5ldHdv
cmtQcm9jZXNzUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCkBAIC0yNzQs
OCArMzYzLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlU3luY01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEMKIAogdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewotICAgIGF1dG8gcHJvdGVjdGVk
UHJvY2Vzc1Bvb2wgPSBtYWtlUmVmKG1fcHJvY2Vzc1Bvb2wpOwotCiAgICAgaWYgKG1fZG93bmxv
YWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5TWFwLT5pbnZhbGlkYXRlKCk7CiAj
aWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKQEAgLTMzNCwxMSArNDIx
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmICghdG9wT3JpZ2luIHx8ICFtX3Byb2Nlc3NQb29sLmlzU2VydmljZVdvcmtlclBhZ2VJ
RChwYWdlSUQpKSB7Ci0gICAgICAgIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShzZXNz
aW9uSUQsIFdURk1vdmUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIFdlYlBhZ2VQcm94eTo6Zm9yTW9zdFZpc2libGVXZWJQYWdlSWZBbnko
c2Vzc2lvbklELCAqdG9wT3JpZ2luLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlz
KSwgc2Vzc2lvbklELCBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IFdURk1vdmUoYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UpLCBuZWdvdGlhdGVkTGVnYWN5VExTXShhdXRvKiBwYWdlKSBtdXRhYmxl
IHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM5NSwx
MSArNDc3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmco
UHJvY2Vzc0xhdW5jaGVyKiBsYXVuY2hlciwgSVBDOjpDb24KICAgICAgICAgbmV0d29ya1Byb2Nl
c3NDcmFzaGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBpZiAobV9wcm9jZXNzUG9vbC5wcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCi0g
ICAgICAgIHNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKICAgICAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICh4cGNfY29ubmVjdGlvbl90IGNvbm5l
Y3Rpb24gPSB0aGlzLT5jb25uZWN0aW9uKCktPnhwY0Nvbm5lY3Rpb24oKSkKQEAgLTEyMDYsNyAr
MTI4Myw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0VGhpcmRQYXJ0eUNOQU1FRG9t
YWluRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzCiB9CiB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLnNldERvbWFp
bnNXaXRoVXNlckludGVyYWN0aW9uKFdURk1vdmUoZG9tYWlucykpOworICAgIGZvciAoYXV0byog
cHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAg
IHByb2Nlc3NQb29sLT5zZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihIYXNoU2V0PFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluPiB7IGRvbWFpbnMgfSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIApAQCAtMTI3MSwxNCArMTM0OSwxNCBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFN5bmNBbGxDb29raWVzKCkKICAgICB9CiB9CiAKLXZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4m
JiBzdG9yZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0
YVN0b3JlJiBzdG9yZSkKIHsKICAgICBpZiAoY2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9yZS0+
cGFyYW1ldGVycygpIH0sIDApOwotICAgIGF1dG8gc2Vzc2lvbklEID0gc3RvcmUtPnNlc3Npb25J
RCgpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0ZURh
dGFTdG9yZSB7IHN0b3JlLnBhcmFtZXRlcnMoKSB9LCAwKTsKKyAgICBhdXRvIHNlc3Npb25JRCA9
IHN0b3JlLnNlc3Npb25JRCgpOwogICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpIHsK
ICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAgICAgY3JlYXRlU3ltTGlua0ZvckZp
bGVVcGdyYWRlKHN0b3JlLT5yZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKKyAg
ICAgICAgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHN0b3JlLnJlc29sdmVkSW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5KCkpOwogI2VuZGlmCiAgICAgfQogfQpAQCAtMTI5MSwxNiArMTM2OSw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQpCiAKIFdlYnNpdGVEYXRhU3RvcmUqIE5ldHdvcmtQcm9jZXNzUHJveHk6Ondl
YnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsK
LSAgICBpZiAoc2Vzc2lvbklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
IHsKLSAgICAgICAgaWYgKCFXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3Rz
KCkpIHsKLSAgICAgICAgICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29s
LndlYnNpdGVEYXRhU3RvcmUoKTsKLSAgICAgICAgICAgIGlmICh3ZWJzaXRlRGF0YVN0b3JlICYm
IHdlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IHNlc3Npb25JRCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gd2Vic2l0ZURhdGFTdG9yZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkucHRyKCk7Ci0gICAgfQotICAg
IHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JT
ZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICByZXR1cm4gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3Rp
bmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpyZXRyaWV2ZUNhY2hlU3RvcmFnZVBhcmFtZXRlcnMoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQpAQCAtMTM0Nyw3ICsxNDE2LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkoV2ViVXNlckNvbnRlbnQK
ICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmVz
dGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhSZWdpc3RyYWJs
ZURvbWFpbiYmIHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3By
b2Nlc3NQb29sLmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vz
cygqdGhpcywgV1RGTW92ZShyZWdpc3RyYWJsZURvbWFpbiksIHNlc3Npb25JRCwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworICAgIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJD
b250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoKnRoaXMsIFJlZ2lzdHJhYmxlRG9tYWlu
IHtyZWdpc3RyYWJsZURvbWFpbn0sIHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OndvcmtlckNvbnRleHRDb25uZWN0
aW9uTm9Mb25nZXJOZWVkZWQoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgaWRlbnRpZmllcikK
QEAgLTE1MTAsMTYgKzE1NzksMzQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpwcmVjb25u
ZWN0VG8oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJQYWdlUHJveHlJZGUKICAgICBzZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlY29ubmVjdFRvKHNlc3Npb25JRCwgd2ViUGFn
ZVByb3h5SUQsIHdlYlBhZ2VJRCwgdXJsLCB1c2VyQWdlbnQsIHN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKSwgMCk7CiB9CiAKK3N0YXRpYyBib29s
IGFueVByb2Nlc3NQb29sSGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpCit7CisgICAgZm9yIChh
dXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewor
ICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPmhhc0ZvcmVncm91bmRXZWJQcm9jZXNzZXMoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyBib29sIGFueVByb2Nlc3NQb29sSGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpCit7Cisg
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9v
bHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPmhhc0JhY2tncm91bmRXZWJQcm9jZXNz
ZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigp
CiB7Ci0gICAgaWYgKHByb2Nlc3NQb29sKCkuaGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7
CisgICAgaWYgKGFueVByb2Nlc3NQb29sSGFzRm9yZWdyb3VuZFdlYlByb2Nlc3NlcygpKSB7CiAg
ICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEZvcmVncm91bmRBY3Rpdml0eSht
X2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcykpIHsKICAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9t
V2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCkuZm9yZWdyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5n
IGZvciBmb3JlZ3JvdW5kIHZpZXcocykiX3MpOwogICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NEaWRUcmFuc2l0aW9uVG9Gb3JlZ3JvdW5kKCksIDApOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHByb2Nlc3NQb29sKCku
aGFzQmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKSB7CisgICAgaWYgKGFueVByb2Nlc3NQb29sSGFz
QmFja2dyb3VuZFdlYlByb2Nlc3NlcygpKSB7CiAgICAgICAgIGlmICghUHJvY2Vzc1Rocm90dGxl
cjo6aXNWYWxpZEJhY2tncm91bmRBY3Rpdml0eShtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3Nlcykp
IHsKICAgICAgICAgICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gdGhyb3R0bGVyKCku
YmFja2dyb3VuZEFjdGl2aXR5KCJOZXR3b3JraW5nIGZvciBiYWNrZ3JvdW5kIHZpZXcocykiX3Mp
OwogICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlByb2Nlc3NEaWRU
cmFuc2l0aW9uVG9CYWNrZ3JvdW5kKCksIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAppbmRleCBhNDA5NDA0MTY1MDg1
YTI4ZjYyODA1ODJmMWY0MDUyNGI3OTVkOTQyLi4zODkzZjdjY2FkNmZlMTEwZWNjNzc5YjcyYzMz
OWJiNGIxYjY4NTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaApAQCAtNTIsNiArNTIsMTAgQEAgbmFtZXNwYWNlIElQ
QyB7CiBjbGFzcyBGb3JtRGF0YVJlZmVyZW5jZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CitjbGFz
cyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cit9CisKIG5hbWVzcGFjZSBQQUwgewogY2xh
c3MgU2Vzc2lvbklEOwogfQpAQCAtNzQsNyArNzgsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNs
YXNzIERvd25sb2FkUHJveHk7CiBjbGFzcyBEb3dubG9hZFByb3h5TWFwOwogY2xhc3MgV2ViUGFn
ZVByb3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eTsKIAogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MgOiBi
b29sOwpAQCAtMTAyLDEyICsxMDUsMTUgQEAgcHVibGljOgogICAgIHVzaW5nIERvbWFpbkluTmVl
ZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogICAgIHVzaW5n
IE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgZXhwbGlj
aXQgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOworICAgIHN0YXRpYyBOZXR3
b3JrUHJvY2Vzc1Byb3h5JiBzaW5nbGV0b24oKTsKKyAgICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vz
c1Byb3h5KCk7CiAgICAgfk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAorICAgIHZvaWQgdGVybWlu
YXRlKCkgZmluYWw7CisKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQ
cm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7CiAKLSAgICBEb3dubG9hZFByb3h5JiBjcmVhdGVE
b3dubG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1Bh
Z2UpOworICAgIERvd25sb2FkUHJveHkmIGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFT
dG9yZSYsIFdlYlByb2Nlc3NQb29sJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgRnJhbWVJbmZvRGF0YSYsIFdlYlBhZ2VQcm94eSogb3JpZ2luYXRpbmdQYWdlKTsKIAog
ICAgIHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+JiYpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURh
dGEoUEFMOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBt
b2RpZmllZFNpbmNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpOwpAQCAtMjA1LDEzICsyMTEsMTEgQEAgcHVibGljOgogICAgIFByb2Nlc3NUaHJvdHRsZXIm
IHRocm90dGxlcigpIGZpbmFsIHsgcmV0dXJuIG1fdGhyb3R0bGVyOyB9CiAgICAgdm9pZCB1cGRh
dGVQcm9jZXNzQXNzZXJ0aW9uKCk7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wo
KSB7IHJldHVybiBtX3Byb2Nlc3NQb29sOyB9Ci0KICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQogICAgIHZvaWQgZGlkRGVzdHJveVdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KFdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkU2Vz
c2lvbihSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJik7CisgICAgdm9pZCBhZGRTZXNzaW9uKFdlYnNp
dGVEYXRhU3RvcmUmKTsKICAgICB2b2lkIHJlbW92ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwog
ICAgIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpAQCAtMjI3LDYgKzIzMSwxMiBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKGNv
bnN0IFN0cmluZyYpOwogICAgIHZvaWQgdW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVBy
b3RvY29sKGNvbnN0IFN0cmluZyYpOwogCisjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9D
T0xfTUFOQUdFUikKKyAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCogbGVnYWN5
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgeyByZXR1cm4gbV9jdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQuZ2V0KCk7IH0KKyNlbmRpZgorCisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQoKTsKKyAgICAKICAgICB2b2lkIHJlc2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICB2b2lkIHJlc291cmNlTG9hZERpZFNlbmRS
ZXF1ZXN0KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFJlc291cmNlTG9hZEluZm8mJiwgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIE9wdGlvbmFsPElQQzo6Rm9ybURhdGFSZWZlcmVuY2U+JiYp
OwpAQCAtMjQ1LDYgKzI1NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRp
ZmllcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiBwcml2YXRlOgorICAgIHZvaWQg
c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIHN0YXRpYyB2b2lkIGF0
dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2FyeShWZWN0b3I8c3RkOjpwYWlyPFJlZjxX
ZWJQcm9jZXNzUHJveHk+LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHk+PiYmKTsKKwogICAgIC8vIEF1eGlsaWFyeVByb2Nl
c3NQcm94eQogICAgIEFTQ0lJTGl0ZXJhbCBwcm9jZXNzTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuICJOZXR3b3JraW5nIl9zOyB9CiAKQEAgLTI1Miw3ICsyNjUsNiBAQCBwcml2YXRlOgogICAg
IHZvaWQgY29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogICAg
IHZvaWQgcHJvY2Vzc1dpbGxTaHV0RG93bihJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKIAot
ICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiAgICAgdm9pZCBjbGVhckNhbGxiYWNr
U3RhdGVzKCk7CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudApAQCAtMzA4LDggKzMy
MCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShQQUw6OlNlc3Npb25JRCwgUmVmPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+JiYpOwog
Ci0gICAgV2ViUHJvY2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7Ci0KICAgICBIYXNoTWFwPENhbGxi
YWNrSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vic2l0ZURhdGEpPj4gbV9wZW5kaW5nRmV0
Y2hXZWJzaXRlRGF0YUNhbGxiYWNrczsKICAgICBIYXNoTWFwPENhbGxiYWNrSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4+IG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzOwog
ICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5k
aW5nRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zQ2FsbGJhY2tzOwpAQCAtMzQ3LDYgKzM1Nywx
MCBAQCBwcml2YXRlOgogICAgICAgICBXZWFrUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0
d29ya1Byb2Nlc3M7CiAgICAgfTsKICNlbmRpZgorCisjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01f
UFJPVE9DT0xfTUFOQUdFUikKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ+IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OworI2VuZGlmCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXggYjhk
YWVkZjdiZWJhMWNkODFmNmU1MjQ0OTYwMzEwZjEzMzEwYzExZS4uODJjMTBlNDFkNTYyNWRiYWFk
ZjkxM2I5NDgwNDQ3YzcwY2MxOWQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTUxLDgg
KzUxLDEwIEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5k
bGVYUENFdmVudCh4cGNfb2JqZWN0X3QgZXZlbnQpIGNvCiAgICAgaWYgKG1lc3NhZ2VOYW1lLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1lc3NhZ2VOYW1lID09
IExhdW5jaFNlcnZpY2VzRGF0YWJhc2VYUENDb25zdGFudHM6OnhwY0xhdW5jaFNlcnZpY2VzRGF0
YWJhc2VYUENFbmRwb2ludE1lc3NhZ2VOYW1lKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5w
cm9jZXNzUG9vbCgpLnNlbmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2
ZW50KTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0Nv
bnN0YW50czo6eHBjTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUp
IHsKKyAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKSkKKyAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kTmV0d29ya1Byb2Nl
c3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhldmVudCk7CisgICAgfQogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5h
Z2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclBy
b3h5LmNwcAppbmRleCA0MDE4NjBkMjBjMjc4NzZlYzQwODI3NTRjNWYwYjJkNmIzNzVhZjM2Li5j
YjdhZDc4MDVlMjRhMmNmMDU3NjFhN2Q4MjgyYTJjNjE1MjcyYWZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2lu
LmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdv
cmtQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQuaCIKICNpbmNs
dWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5h
Z2VyUHJveHlNZXNzYWdlcy5oIgpAQCAtMzksMjAgKzQwLDE1IEBACiBuYW1lc3BhY2UgV2ViS2l0
IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jb25zdCBjaGFyKiBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnN1cHBsZW1lbnROYW1lKCkKK1dlYkNvb2tpZU1hbmFnZXJQcm94eSYgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKQogewotICAgIHJldHVybiAiV2ViQ29va2llTWFu
YWdlclByb3h5IjsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2ViQ29va2llTWFuYWdlclBy
b3h5PiBtYW5hZ2VyOworICAgIHJldHVybiBtYW5hZ2VyOwogfQogCi1SZWY8V2ViQ29va2llTWFu
YWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQcm9jZXNzUG9vbCog
cHJvY2Vzc1Bvb2wpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94
eSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29va2llTWFuYWdlclByb3h5KHBy
b2Nlc3NQb29sKSk7Ci19Ci0KLVdlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFuYWdl
clByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKLSAgICA6IFdlYkNvbnRleHRTdXBw
bGVtZW50KHByb2Nlc3NQb29sKQotewotICAgIFdlYkNvbnRleHRTdXBwbGVtZW50Ojpwcm9jZXNz
UG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXJQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogfQogCiBXZWJDb29raWVN
YW5hZ2VyUHJveHk6On5XZWJDb29raWVNYW5hZ2VyUHJveHkoKQpAQCAtNjUsNTkgKzYxLDI1IEBA
IHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojppbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29v
a2llTWFuYWdlckNsaWVudEJhc2UqIGNsCiAgICAgbV9jbGllbnQuaW5pdGlhbGl6ZShjbGllbnQp
OwogfQogCi0vLyBXZWJDb250ZXh0U3VwcGxlbWVudAotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQotewotICAgIFZlY3RvcjxPYnNlcnZlcio+IG9i
c2VydmVyczsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyU2V0IDogbV9jb29raWVPYnNlcnZlcnMu
dmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVyU2V0KQot
ICAgICAgICAgICAgb2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7Ci0gICAgfQotCi0gICAgZm9y
IChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVycykKLSAgICAgICAgb2JzZXJ2ZXItPm1hbmFnZXJE
ZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX2Nvb2tpZU9ic2VydmVycy5pc0VtcHR5KCkpOwot
fQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nl
c3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlk
Q2xvc2UoTmV0d29ya1Byb2Nlc3NQcm94eSopCi17Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5OjpyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OnJl
ZigpOwotfQotCi12b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3Vw
cGxlbWVudCgpCi17Ci0gICAgQVBJOjpPYmplY3Q6OmRlcmVmKCk7Ci19Ci0KIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29s
KCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhvc3RuYW1lc1dp
dGhDb29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwogfQogCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMpCiB7
Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lm
TmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29raWVzRm9ySG9z
dG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lcyhzZXNzaW9uSUQsIGhvc3RuYW1lcyksIDApOwogfQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxsQ29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5j
aGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29r
aWVzKHNlc3Npb25JRCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNl
bmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXMoc2Vzc2lvbklE
KSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWUoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDb29raWUmIGNvb2tpZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8m
IG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAg
bmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5h
Z2VyOjpEZWxldGVDb29raWUoc2Vzc2lvbklELCBjb29raWUpLCBbY2FsbGJhY2tGdW5jdGlvbiA9
IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbildKCkgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxiYWNr
RnVuY3Rpb24oKTsKICAgICB9KTsKQEAgLTEyNSw0MiArODcsNDIgQEAgdm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmRlbGV0ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IENvb2tpZSYKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXNN
b2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2FsbFRpbWUgdGltZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYg
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOwor
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJD
b29raWVNYW5hZ2VyOjpEZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShzZXNzaW9uSUQsIHRp
bWUpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5h
Z2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBWZWN0
b3I8Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNr
RnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5l
bnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWUoc2Vzc2lvbklE
LCBjb29raWVzKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiB9CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIG1h
aW5Eb2N1bWVudFVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rp
b24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgpLT5lbnN1cmVO
ZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVzKHNlc3Npb25JRCwgY29v
a2llcywgdXJsLCBtYWluRG9jdW1lbnRVUkwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsK
IH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEFsbENvb2tpZXMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+JiYp
PiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9j
ZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nl
c3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRBbGxD
b29raWVzKHNlc3Npb25JRCksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwogfQogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxDb29raWU+
JiYpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7Ci0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQ
cm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1By
b2Nlc3Muc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpHZXRD
b29raWVzKHNlc3Npb25JRCwgdXJsKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiB9CiAK
IHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2ll
TWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhzZXNzaW9uSUQpLCAwKTsKIH0KIAog
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3
b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCkpOworICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFn
ZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCksIDApOwogfQogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4mJiBjYWxsYmFjaykKQEAg
LTIxMSwyMSArMTczLDEzIEBAIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpjb29raWVzRGlk
Q2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIAogdm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQsIEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kgcG9saWN5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJh
Y2tGdW5jdGlvbikKIHsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAoIXByb2Nlc3NQb29s
KCktPmlzVXNpbmdUZXN0aW5nTmV0d29ya1Nlc3Npb24oKSkKLSAgICAgICAgcGVyc2lzdEhUVFBD
b29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKLSNlbmRpZgotI2lmIFVTRShTT1VQKQotICAgIHBy
b2Nlc3NQb29sKCktPnNldEluaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSk7Ci0j
ZW5kaWYKLQotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2woKS0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNzLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U2V0SFRUUENvb2tpZUFjY2VwdFBvbGlj
eShwb2xpY3kpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIH0KIAogdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpTZXNzaW9uSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk+JiYgY2FsbGJh
Y2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCkt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgKaW5kZXggMGJkZmMwZDRl
NDdjNDM2ZjU4NWNmMjljMDlkNTFhMjliYzgxMWE5ZC4uZTczOGI4NTgwMjE3MDlhODg4YmMwMzgy
OWI0OWRlMWMwZmM5ZWRjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29v
a2llTWFuYWdlclByb3h5LmgKQEAgLTU2LDExICs1Niw5IEBAIHR5cGVkZWYgR2VuZXJpY0NhbGxi
YWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8
V2ViQ29yZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tpZUFjY2VwdFBvbGljeUNh
bGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNv
b2tpZT4mPiBHZXRDb29raWVzQ2FsbGJhY2s7CiAKLWNsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94
eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFn
ZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIgeworY2xhc3MgV2ViQ29va2llTWFuYWdlclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0
SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29va2llTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNz
YWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50
TmFtZSgpOwotCi0gICAgc3RhdGljIFJlZjxXZWJDb29raWVNYW5hZ2VyUHJveHk+IGNyZWF0ZShX
ZWJQcm9jZXNzUG9vbCopOworICAgIHN0YXRpYyBXZWJDb29raWVNYW5hZ2VyUHJveHkmIHNpbmds
ZXRvbigpOwogICAgIHZpcnR1YWwgfldlYkNvb2tpZU1hbmFnZXJQcm94eSgpOwogCiAgICAgdm9p
ZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJhc2UqKTsKQEAg
LTEwNCwxNyArMTAyLDExIEBAIHB1YmxpYzoKICAgICB1c2luZyBBUEk6Ok9iamVjdDo6ZGVyZWY7
CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29va2llTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKik7
CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5KCk7CisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVk
PFdlYkNvb2tpZU1hbmFnZXJQcm94eT47CiAKICAgICB2b2lkIGNvb2tpZXNEaWRDaGFuZ2UoUEFM
OjpTZXNzaW9uSUQpOwogCi0gICAgLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLSAgICB2b2lkIHBy
b2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2Uo
V2ViUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoTmV0
d29ya1Byb2Nlc3NQcm94eSopIG92ZXJyaWRlOwotICAgIHZvaWQgcmVmV2ViQ29udGV4dFN1cHBs
ZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBv
dmVycmlkZTsKLQogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCiAgICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluCmluZGV4IGEwNmI3N2I0NzNlYzYwMmJkN2M4YzE0OTVjZDBhMjI4NmU4
Y2E1M2IuLjcyNGFlZDMwMDQyNGMxOTM2NzYxM2Q0MmU2NTk3YjEwNjkzOGZiMzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHku
bWVzc2FnZXMuaW4KQEAgLTIwLDYgKzIwLDYgQEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KIAotbWVzc2FnZXMgLT4gV2ViQ29va2llTWFuYWdlclByb3h5IHsKK21lc3Nh
Z2VzIC0+IFdlYkNvb2tpZU1hbmFnZXJQcm94eSBOb3RSZWZDb3VudGVkIHsKICAgICBDb29raWVz
RGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGExMjNmYjI4NTU5ODIxNTMzMGI1MDkyOTY1ZWQx
MGJiYWVlYzY5YjkuLjUzYTBiMDE1NDc5ZmZkMDkwNTIzMmE4NmUzODY3MDgzMmJlMmEyMjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMzE4NSwxMSArMzE4
NSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojppc0ZvcmNlZEludG9BcHBCb3VuZE1vZGVUZXN0aW5n
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+CiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlzYWJs
ZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MoKQogewogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKLSAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSwgMCk7Ci0g
ICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50KCksIDApOwog
I2VuZGlmCiB9CiAKQEAgLTMxOTgsMTMgKzMxOTQsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xl
YXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUNDQVRBTFlTVCkKICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBt
X3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAo
IW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKCksIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyU2Vydmlj
ZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
ICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgpAQCAtOTkwOCw1OCArOTg5
OCwyNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRyaWdnZXJlZChj
b25zdCBXZWJDb3JlOjpTeXN0ZW1QcmV2aWV3SW5mbwogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZHVt
cEFkQ2xpY2tBdHRyaWJ1dGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlm
ICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKGVtcHR5U3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpEdW1wQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9y
ZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0
YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29y
a1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dlYnNpdGVEYXRhU3RvcmUt
PnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIH0gZWxzZQot
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNs
ZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRB
ZENsaWNrQXR0cmlidXRpb25PdmVycmlkZVRpbWVyRm9yVGVzdGluZyhib29sIHZhbHVlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1
dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkg
ewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1l
ckZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKG1fd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCksIHZhbHVlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lv
blVSTEZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBt
X3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAo
IW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhtX3dlYnNpdGVE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCB1cmwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNv
bnZlcnNpb25VUkxGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVy
bCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsK
LSAgICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5n
KG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6Ok1hcmtBZENsaWNrQXR0cmli
dXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgp
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiAjaWYgRU5BQkxFKFNQRUVDSF9T
WU5USEVTSVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5k
ZXggNmQ2YjM0ZDdhZmRmNGNlNjQwNTljMDZmZDFjODhkNTBhYzY4NmM3Ni4uZWZmZGE5N2ViMGM0
M2MxYWJiOTgwOTZjNjQwM2UwYTVhMzBhNGE1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMTQzLDggKzE0MywxMCBAQAogI2VuZGlmCiAKICNkZWZp
bmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0coY2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0Vf
TE9HKGNoYW5uZWwsICIlcCAtIFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FS
R1NfXykKKyNkZWZpbmUgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfU1RBVElDKGNoYW5uZWws
IGZtdCwgLi4uKSBSRUxFQVNFX0xPRyhjaGFubmVsLCAiV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCAj
I19fVkFfQVJHU19fKQogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJPUihj
aGFubmVsLCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5lbCwgIiVwIC0gV2ViUHJv
Y2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBXRUJQUk9DRVNT
UE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xP
R19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIGNoYW5uZWwsICIlcCAt
IFdlYlByb2Nlc3NQb29sOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV0VC
UFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoY2hhbm5lbCwgZm10LCAu
Li4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwg
Y2hhbm5lbCwgIldlYlByb2Nlc3NQb29sOjoiIGZtdCwgIyNfX1ZBX0FSR1NfXykKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTIzMiw2ICsyMzQsMTEg
QEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBnbG9i
YWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3QKICAgICByZXR1cm4gc2V0OwogfQogCitWZWN0b3I8
U3RyaW5nPiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRs
ZXJzKCkKK3sKKyAgICByZXR1cm4gY29weVRvVmVjdG9yKGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3Vz
dG9tUHJvdG9jb2xIYW5kbGVycygpKTsKK30KKwogV2ViUHJvY2Vzc1Bvb2w6OldlYlByb2Nlc3NQ
b29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogICAgIDog
bV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24uY29weSgpKQogICAgICwgbV9kZWZhdWx0UGFn
ZUdyb3VwKFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkpCkBAIC0yMzksNyArMjQ2LDYgQEAgV2ViUHJv
Y2Vzc1Bvb2w6OldlYlByb2Nlc3NQb29sKEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uJiBj
b25maWd1cmF0aW9uKQogICAgICwgbV9hdXRvbWF0aW9uQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpB
dXRvbWF0aW9uQ2xpZW50PigpKQogICAgICwgbV9kb3dubG9hZENsaWVudChtYWtlVW5pcXVlUmVm
PEFQSTo6RG93bmxvYWRDbGllbnQ+KCkpCiAgICAgLCBtX2hpc3RvcnlDbGllbnQobWFrZVVuaXF1
ZTxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PigpKQotICAgICwgbV9jdXN0b21Qcm90
b2NvbE1hbmFnZXJDbGllbnQobWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudD4oKSkKICAgICAsIG1fdmlzaXRlZExpbmtTdG9yZShWaXNpdGVkTGlua1N0b3JlOjpjcmVh
dGUoKSkKICNpZiBQTEFURk9STShNQUMpCiAgICAgLCBtX2hpZ2hQZXJmb3JtYW5jZUdyYXBoaWNz
VXNhZ2VTYW1wbGVyKG1ha2VVbmlxdWU8SGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBs
ZXI+KCp0aGlzKSkKQEAgLTI2Nyw5ICsyNzMsNiBAQCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vz
c1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAjZW5k
aWYKICAgICB9KTsKIAotICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlICYmIFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICBtX3dlYnNp
dGVEYXRhU3RvcmUgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KTsKLQogICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9jb25maWd1cmF0aW9uLT5hbHdheXNSZXZh
bGlkYXRlZFVSTFNjaGVtZXMoKSkKICAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzQWx3YXlz
UmV2YWxpZGF0ZWQuYWRkKHNjaGVtZSk7CiAKQEAgLTI4NSw3ICsyODgsNiBAQCBXZWJQcm9jZXNz
UG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZp
Z3VyYXRpb24pCiAgICAgYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9v
bDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiAKICAgICAvLyBOT1RFOiBUaGVzZSBz
dWItb2JqZWN0cyBtdXN0IGJlIGluaXRpYWxpemVkIGFmdGVyIG1fbWVzc2FnZVJlY2VpdmVyTWFw
Li4KLSAgICBhZGRTdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKICAgICBhZGRT
dXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5PigpOwogICAgIGFkZFN1cHBsZW1l
bnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5PigpOwogI2lmIEVOQUJMRShNRURJQV9TRVNT
SU9OKQpAQCAtMzQyLDkgKzM0NCw2IEBAIFdlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2wo
KQogICAgIHByb2Nlc3NQb29sQ291bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgogCi0gICAgaWYg
KG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNodXREb3duUHJv
Y2VzcygpOwotCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgaWYgKCFtX3Byb2Nlc3Nlc1VzaW5n
R2FtZXBhZHMuaXNFbXB0eSgpKQogICAgICAgICBVSUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9u
KCkucHJvY2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1lcGFkcygqdGhpcyk7CkBAIC00MDIsMTYgKzQw
MSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEF1dG9tYXRpb25DbGllbnQoc3RkOjp1bmlx
dWVfcHRyPEFQSTo6QXV0b21hdGlvbkNsaWVudD4mCiAgICAgICAgIG1fYXV0b21hdGlvbkNsaWVu
dCA9IFdURk1vdmUoYXV0b21hdGlvbkNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJ
OjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+JiYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50KQotewotI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCi0gICAg
aWYgKCFjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCi0gICAgICAgIG1fY3VzdG9tUHJvdG9j
b2xNYW5hZ2VyQ2xpZW50ID0gbWFrZVVuaXF1ZTxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudD4oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
ID0gV1RGTW92ZShjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpOwotI2VuZGlmCi19Ci0KIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKIHsKICAgICBtX3N0b3JhZ2VBY2Nlc3NBUElFbmFibGVkID0gZW5hYmxlZDsKQEAgLTQzMSw3
ICs0MjAsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDdXN0b21XZWJDb250ZW50U2Vydmlj
ZUJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBjdQogCiBJUEM6OkNvbm5lY3Rpb24qIFdl
YlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKQogewotICAgIHJldHVy
biBtX25ldHdvcmtQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLmNvbm5lY3Rpb24oKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNz
UG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCkBAIC00NDMsOCArNDMyLDcgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKIHsKICAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFu
Z2VkKCkpOwogI2lmIFVTRShTT1VQKQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXNlclBy
ZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSwgMCk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5n
dWFnZXMoKSksIDApOwogI2VuZGlmCiB9CiAKQEAgLTQ4MiwyNzEgKzQ3MCwxMyBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzY3JlZW5Qcm9wZXJ0aWVzU3RhdGVDaGFuZ2VkKCkKICNlbmRpZgogfQog
Ci1OZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRhU3RvcmUpCitOZXR3b3JrUHJvY2Vz
c1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFT
dG9yZSopCiB7Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICAvLyBG
SVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktp
dCBBUEkgb24gbm9uLW1haW4gdGhyZWFkcy4KLSAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMg
b25jZSB3ZSBlbmZvcmNlIHRocmVhZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCi0g
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KLSAg
ICBpZiAoIVJ1bkxvb3A6OmlzTWFpbigpKSB7Ci0gICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5k
V2FpdChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgICAg
ICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuICpt
X25ldHdvcmtQcm9jZXNzOwotICAgIH0KLQotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0g
ICAgICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzcy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAg
ICAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAg
YXV0byBuZXR3b3JrUHJvY2VzcyA9IG1ha2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQcm94eT4oKnRo
aXMpOwotCi0gICAgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsK
LQotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IGNvcHlUb1ZlY3RvcihtX3dl
YnNpdGVEYXRhU3RvcmUtPnBlbmRpbmdDb29raWVzKCkpOwotICAgICAgICBtX3dlYnNpdGVEYXRh
U3RvcmUtPmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gbV93ZWJzaXRlRGF0
YVN0b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVy
KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllciA9
IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLnNvdXJjZUFwcGxpY2F0aW9uU2Vj
b25kYXJ5SWRlbnRpZmllcigpOwotI2VuZGlmCi0gICAgfQotCi0gICAgcGFyYW1ldGVycy5jYWNo
ZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsK
LQotICAgIGZvciAoYXV0byYgc2NoZW1lIDogZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90
b2NvbEhhbmRsZXJzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRG
b3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6
OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JS
ZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jb29r
aWVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIFN0cmluZyBjb250YWlu
ZXJDYWNoZXNEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ0NhY2hlc0RpcmVj
dG9yeSgpOwotICAgIGlmICghY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5
KGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSwgcGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9y
eSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBh
cmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKGVtcHR5U3RyaW5nKCksIFNhbmRib3hF
eHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeSA9
IG1fY29uZmlndXJhdGlvbi0+aHN0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFt
ZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpCi0gICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmhzdHNT
dG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLQotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9
IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1Rv
UmVnaXN0ZXJBc1NlY3VyZSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVk
QXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xv
YmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250
ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigp
LnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNS
ZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6
c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOwotCi0jaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0gICAgLy8gKioqKioqKioqCi0gICAgLy8gSU1QT1JUQU5UOiBE
byBub3QgY2hhbmdlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBpbmRleGVkIGRhdGFiYXNl
cyBvbiBkaXNrIHdpdGhvdXQgZmlyc3QgY29uc3VsdGluZyBhIHJldmlld2VyIGZyb20gQXBwbGUg
KDxyZGFyOi8vcHJvYmxlbS8xNzQ1NDcxMj4pCi0gICAgLy8gKioqKioqKioqCi0gICAgaWYgKG1f
d2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJl
c29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCk7Ci0gICAgZWxzZSBpZiAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRl
cnMoKS5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7Ci0gICAgCi0gICAgaWYgKCFwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdy
aXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5jcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUocGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwotICAgIH0KLSNl
bmRpZgotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmIChtX3dlYnNpdGVEYXRh
U3RvcmUpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0
aW9uRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnkpCi0gICAgICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeSA9ICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRTZXJ2aWNl
V29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgotCi0gICAgYXV0byBsb2NhbFN0b3Jh
Z2VEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPnJl
c29sdmVkTG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7Ci0gICAgaWYgKCFs
b2NhbFN0b3JhZ2VEaXJlY3RvcnkpCi0gICAgICAgIGxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9yeSgpOwot
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGly
ZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gbV93
ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5jYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkoKSA6IG51bGxTdHJpbmcoKTsKLSAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdy
aXRlRGlyZWN0b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFn
ZURpcmVjdG9yeSA9IFdURk1vdmUoY2FjaGVTdG9yYWdlRGlyZWN0b3J5KTsKLSAgICB9Ci0KLSAg
ICBTdHJpbmcgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICByZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0KLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBmYWxz
ZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQg
PSBmYWxzZTsKLSAgICBib29sIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSB0cnVlOwotICAgIGJv
b2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSA9IGZhbHNlOwotI2lmIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgV2ViQ29yZTo6VGhpcmRQYXJ0eUNv
b2tpZUJsb2NraW5nTW9kZSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0gV2ViQ29yZTo6
VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsOwotICAgIFdlYkNvcmU6OlNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkIHNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVk
ID0gV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6Ok5vOwotICAgIFdl
YkNvcmU6OkNOQU1FQ2xvYWtpbmdNaXRpZ2F0aW9uRW5hYmxlZCBjbmFtZUNsb2FraW5nTWl0aWdh
dGlvbkVuYWJsZWQgPSBXZWJDb3JlOjpDTkFNRUNsb2FraW5nTWl0aWdhdGlvbkVuYWJsZWQ6Ok5v
OwotI2VuZGlmCi0gICAgV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUg
Zmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llczsKLSAgICBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47Ci0gICAgSGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gYXBwQm91bmREb21haW5zOwotICAgIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIG1hbnVhbFByZXZhbGVudFJlc291cmNlOwotCi0jaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgbV90Y2NQcmVmZXJlbmNlRW5hYmxlZCA9IGRvZXNBcHBIYXZlSVRQRW5hYmxl
ZCgpOwotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSAmJiAhd2l0aFdlYnNpdGVEYXRhU3Rv
cmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0gICAgICAgIHdpdGhXZWJz
aXRlRGF0YVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKTsKLSAgICB9IGVsc2UgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSAm
JiAhbV93ZWJzaXRlRGF0YVN0b3JlLT5pc0l0cFN0YXRlRXhwbGljaXRseVNldCgpKSB7Ci0gICAg
ICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3RjY1ByZWZlcmVuY2VFbmFibGVk
OwotICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAoV2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpICYmICFXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkpIHsKLSAg
ICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJs
ZWQ7Ci0gICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+c2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBtX3Rj
Y1ByZWZlcmVuY2VFbmFibGVkOwotI2VuZGlmCi0KLSAgICBpZiAod2l0aFdlYnNpdGVEYXRhU3Rv
cmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IHdpdGhXZWJzaXRl
RGF0YVN0b3JlLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwotI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3NMb2dUZXN0aW5nRXZlbnQgPSB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+aGFzU3RhdGlzdGlj
c1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zaG91bGRJbmNs
dWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMudGhp
cmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOwotICAg
ICAgICAgICAgY25hbWVDbG9ha2luZ01pdGlnYXRpb25FbmFibGVkID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmNuYW1lQ2xvYWtpbmdN
aXRpZ2F0aW9uRW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7Ci0gICAg
ICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRhbG9uZUFwcGxpY2F0
aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFwcEJvdW5kRG9tYWlu
czsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1hbnVhbFByZXZhbGVu
dFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9y
ZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhX
ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0gICAg
ICAgIAotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSB3aXRoV2Vi
c2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICAgICAg
aWYgKCFuZXR3b3JrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
Lm5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShuZXR3b3JrQ2FjaGVEaXJlY3Rvcnks
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0NhY2hlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV93ZWJz
aXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBt
X3dlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+aGFzU3Rh
dGlzdGljc1Rlc3RpbmdDYWxsYmFjaygpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKSB7Ci0gICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVyczsKLSAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2hvdWxk
SW5jbHVkZUxvY2FsaG9zdDsKLSAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMuZW5hYmxlRGVidWdNb2RlOwotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCi0gICAgICAgICAgICB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlID0g
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
LnRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7Ci0gICAgICAgICAgICBzYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50RW5hYmxlZCA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDsK
LSAgICAgICAgICAgIGNuYW1lQ2xvYWtpbmdNaXRpZ2F0aW9uRW5hYmxlZCA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5jbmFtZUNsb2Fr
aW5nTWl0aWdhdGlvbkVuYWJsZWQ7Ci0jZW5kaWYKLSAgICAgICAgICAgIGZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOwot
ICAgICAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnN0YW5kYWxvbmVBcHBs
aWNhdGlvbkRvbWFpbjsKLSAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucyA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5hcHBCb3VuZERv
bWFpbnM7Ci0gICAgICAgICAgICBtYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5tYW51YWxQcmV2
YWxlbnRSZXNvdXJjZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gbV93
ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7Ci0KLSAg
ICAgICAgY29uc3QgYXV0byYgbmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0
b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIW5ldHdv
cmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubmV0d29ya0Nh
Y2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5OwotICAgICAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAgICAgICAgIGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCktPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0gICAgICAgIGF1dG8gbmV0
d29ya0NhY2hlRGlyZWN0b3J5ID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdE5ldHdvcmtDYWNo
ZURpcmVjdG9yeSgpOwotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3
b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShuZXR3b3JrQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0
ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICB9Ci0K
LSNpZiBIQVZFKENGTkVUV09SS19BTFRFUk5BVElWRV9TRVJWSUNFKQotICAgIGlmIChXZWJzaXRl
RGF0YVN0b3JlOjpodHRwM0VuYWJsZWQoKSkgewotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNl
cnZpY2VEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0QWx0ZXJuYXRpdmVTZXJ2
aWNlc0RpcmVjdG9yeSgpOwotICAgICAgICBpZiAoIXBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURp
cmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVTZXJ2aWNlRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZpY2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
ICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5odHRwM0VuYWJsZWQgPSB0cnVlOwotICAgIH0KLSNlbmRpZgotICAgIGJv
b2wgaXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQgPSBmYWxzZTsKLSAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGFyYW1ldGVycyA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJz
IHsKLSAgICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KSwKLSAg
ICAgICAgV1RGTW92ZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKSwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcywKLSAgICAgICAgaXNJ
dHBTdGF0ZUV4cGxpY2l0bHlTZXQsCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NMb2dUZXN0aW5nRXZlbnQsCi0gICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QsCi0gICAg
ICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUsCi0jaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5n
TW9kZSwKLSAgICAgICAgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQsCi0gICAgICAg
IGNuYW1lQ2xvYWtpbmdNaXRpZ2F0aW9uRW5hYmxlZCwKLSNlbmRpZgotICAgICAgICBmaXJzdFBh
cnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSwKLSAgICAgICAgc3RhbmRhbG9uZUFwcGxpY2F0aW9u
RG9tYWluLAotICAgICAgICBhcHBCb3VuZERvbWFpbnMsCi0gICAgICAgIG1hbnVhbFByZXZhbGVu
dFJlc291cmNlLAotICAgIH07Ci0KLSAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBh
cmFtZXRlcnMKLSAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJz
KTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBuZXR3b3Jr
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3Jr
UHJvY2VzcyhwYXJhbWV0ZXJzKSwgMCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBuZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3Jr
UHJvY2Vzc0xhdGVuY3lRT1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsK
LSNlbmRpZgotCi0gICAgbmV0d29ya1Byb2Nlc3MtPnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsK
LQotICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+YWRkU2Vzc2lvbihtYWtlUmVmKCp3aXRoV2Vic2l0ZURhdGFTdG9yZSkpOwotICAgICAgICB3
aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgIH0KLQotICAg
IC8vIE1ha2Ugc3VyZSB0aGUgbmV0d29yayBwcm9jZXNzIGtub3dzIGFib3V0IGFsbCB0aGUgc2Vz
c2lvbnMgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUgaXQgc3RhcnRlZC4KLSAgICBm
b3IgKGF1dG8mIHNlc3Npb25JRCA6IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5rZXlzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpleGlz
dGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKSkKLSAgICAgICAg
ICAgIG5ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKLSAgICB9
Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzID0gV1RGTW92ZShuZXR3b3JrUHJvY2Vzcyk7Ci0gICAg
cmV0dXJuICptX25ldHdvcmtQcm9jZXNzOworICAgIHJldHVybiBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3ND
cmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkmIG5ldHdvcmtQcm9jZXNzUHJveHkpCiB7Ci0gICAg
QVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotICAgIEFTU0VSVCgmbmV0d29ya1Byb2Nlc3NQcm94
eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKLQogICAgIGZvciAoYXV0byYgc3VwcGxlbWVu
dCA6IG1fc3VwcGxlbWVudHMudmFsdWVzKCkpCiAgICAgICAgIHN1cHBsZW1lbnQtPnByb2Nlc3NE
aWRDbG9zZSgmbmV0d29ya1Byb2Nlc3NQcm94eSk7CiAKQEAgLTc1NSw5ICs0ODUsNiBAQCB2b2lk
IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94
eSYgbmV0d29ya1Byb2Nlc3NQcgogICAgIGlmIChtX2F1dG9tYXRpb25TZXNzaW9uKQogICAgICAg
ICBtX2F1dG9tYXRpb25TZXNzaW9uLT50ZXJtaW5hdGUoKTsKIAotICAgIC8vIExlYXZlIHRoZSBw
cm9jZXNzIHByb3h5IGFyb3VuZCBkdXJpbmcgY2xpZW50IGNhbGwsIHNvIHRoYXQgdGhlIGNsaWVu
dCBjb3VsZCBxdWVyeSB0aGUgcHJvY2VzcyBpZGVudGlmaWVyLgotICAgIG1fbmV0d29ya1Byb2Nl
c3MgPSBudWxscHRyOwotCiAgICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKIH0KIApAQCAt
NzcxLDExICs0OTgsMTEgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VydmljZVdvcmtlclByb2Nl
c3NDcmFzaGVkKFdlYlByb2Nlc3NQcm94eSYgcHJveHkpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpn
ZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJv
eHksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCiB7CiAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsK
LSAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24od2ViUHJv
Y2Vzc1Byb3h5LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdlYlByb2Nl
c3NQcm94eSA9IG1ha2VXZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RGTW92ZShy
ZXBseSldIChhdXRvJiBjb25uZWN0aW9uSW5mbykgbXV0YWJsZSB7CisgICAgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2luZ2xldG9uKCkuZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHdlYlByb2Nl
c3NQcm94eSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB3ZWJQcm9jZXNz
UHJveHkgPSBtYWtlV2Vha1B0cih3ZWJQcm9jZXNzUHJveHkpLCByZXBseSA9IFdURk1vdmUocmVw
bHkpXSAoYXV0byYgY29ubmVjdGlvbkluZm8pIG11dGFibGUgewogICAgICAgICBpZiAoVU5MSUtF
TFkoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlvbkluZm8uaWRl
bnRpZmllcigpKSAmJiB3ZWJQcm9jZXNzUHJveHkgJiYgd2Vha1RoaXMpKSB7CiAgICAgICAgICAg
ICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19FUlJPUihQcm9jZXNzLCAiZ2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uOiBGYWlsZWQgZmlyc3QgYXR0ZW1wdCwgcmV0cnlpbmciKTsKICAgICAg
ICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RGTW92
ZShyZXBseSkpOworICAgICAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCp3ZWJQcm9jZXNzUHJveHksIFdURk1vdmUocmVw
bHkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICByZXBseShjb25u
ZWN0aW9uSW5mbyk7CkBAIC04MDUsMjMgKzUzMiwyNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpn
ZXRHUFVQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSwg
TQogfQogI2VuZGlmCiAKK2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6OnNfdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcyA9IGZhbHNlOworCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmIHByb3h5LCBSZWdpc3RyYWJsZURvbWFpbiYm
IHJlZ2lzdHJhYmxlRG9tYWluLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBBU1NFUlRfVU5VU0VE
KHByb3h5LCAmcHJveHkgPT0gbV9uZXR3b3JrUHJvY2Vzcy5nZXQoKSk7CisgICAgYXV0byogd2Vi
c2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vz
c2lvbklEKHNlc3Npb25JRCk7CisgICAgaWYgKCF3ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICB3
ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0
cigpOworICAgIGlmICghcHJvY2Vzc1Bvb2xzKCkuc2l6ZSgpKQorICAgICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8UmVmPFdlYlByb2Nlc3NQb29sPj4gc2VydmljZVdvcmtlclByb2Nlc3NQb29s
KFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNy
ZWF0ZSgpLmdldCgpKSk7CiAKLSAgICBhdXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURh
dGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25J
RCk7Ci0KLSAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgaWYgKCFtX3dlYnNp
dGVEYXRhU3RvcmUpCi0gICAgICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAgICAgICAgd2Vic2l0
ZURhdGFTdG9yZSA9IG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsKLSAgICB9CisgICAgLy8gQXJi
aXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wgdG8gaG9zdCB0aGUgc2Vydmlj
ZSB3b3JrZXIgcHJvY2Vzcy4KKyAgICBhdXRvKiBwcm9jZXNzUG9vbCA9IHByb2Nlc3NQb29scygp
WzBdOworICAgIEFTU0VSVChwcm9jZXNzUG9vbCk7CiAKICAgICBXZWJQcm9jZXNzUHJveHkqIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgeyBudWxscHRyIH07Ci0gICAgaWYgKCFtX3VzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MpIHsKLSAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzIDog
bV9wcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlmIChwcm9jZXNzID09IG1fcHJld2FybWVkUHJv
Y2VzcyB8fCBwcm9jZXNzLT5pc0R1bW15UHJvY2Vzc1Byb3h5KCkpCisKKyAgICBpZiAoIXNfdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgeworICAgICAgICBmb3IgKGF1dG8mIHByb2Nl
c3MgOiBwcm9jZXNzUG9vbC0+bV9wcm9jZXNzZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9jZXNz
ID09IHByb2Nlc3NQb29sLT5tX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vzcy0+aXNEdW1teVBy
b2Nlc3NQcm94eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYg
KCZwcm9jZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkgIT0gd2Vic2l0ZURhdGFTdG9yZSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTgyOSwzNSArNTU5LDM1IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhO
ZXR3b3JrUHJvCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHkgPSBwcm9jZXNzLmdldCgpOwotICAgICAgICAgICAgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnModXNlckNvbnRlbnRDb250
cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkpOworICAgICAgICAgICAgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eS0+ZW5hYmxlU2VydmljZVdvcmtlcnMocHJvY2Vzc1Bvb2wtPnVz
ZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpKTsKIAotICAg
ICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29y
a2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIHJl
dXNpbmcgYW4gZXhpc3Rpbmcgd2ViIHByb2Nlc3MgKHByb2Nlc3M9JXAsIFBJRD0lZCkiLCBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNz
SWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lG
X0FMTE9XRURfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAo
cHJvY2Vzcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIXNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHkpIHsKLSAgICAgICAgYXV0byBuZXdQcm9jZXNzUHJveHkgPSBXZWJQcm9jZXNzUHJveHk6OmNy
ZWF0ZUZvclNlcnZpY2VXb3JrZXJzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwg
KndlYnNpdGVEYXRhU3RvcmUpOworICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlBy
b2Nlc3NQcm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnByb2Nlc3NQb29sLCBXVEZNb3Zl
KHJlZ2lzdHJhYmxlRG9tYWluKSwgKndlYnNpdGVEYXRhU3RvcmUpOwogICAgICAgICBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Byb3h5ID0gbmV3UHJvY2Vzc1Byb3h5LnB0cigpOwogCi0gICAgICAgIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoU2VydmljZVdvcmtlciwgImVzdGFi
bGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyBjcmVhdGluZyBhIG5l
dyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzIChwcm9jZXM9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRp
ZmllcigpKTsKKyAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRF9T
VEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9O
ZXR3b3JrUHJvY2VzcyBjcmVhdGluZyBhIG5ldyBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzIChwcm9j
ZXM9JXAsIFBJRD0lZCkiLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LCBzZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Byb3h5LT5wcm9jZXNzSWRlbnRpZmllcigpKTsKIAotICAgICAgICBpbml0aWFsaXpl
TmV3V2ViUHJvY2VzcyhuZXdQcm9jZXNzUHJveHksIHdlYnNpdGVEYXRhU3RvcmUpOwotICAgICAg
ICBtX3Byb2Nlc3Nlcy5hcHBlbmQoV1RGTW92ZShuZXdQcm9jZXNzUHJveHkpKTsKKyAgICAgICAg
cHJvY2Vzc1Bvb2wtPmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vi
c2l0ZURhdGFTdG9yZSk7CisgICAgICAgIHByb2Nlc3NQb29sLT5tX3Byb2Nlc3Nlcy5hcHBlbmQo
V1RGTW92ZShuZXdQcm9jZXNzUHJveHkpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoIW1fc2Vydmlj
ZVdvcmtlclByb2Nlc3Nlcy5jb250YWlucygqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSkpOwot
ICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5hZGQoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJv
eHkpOworICAgIEFTU0VSVCghc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbnRhaW5zKCpzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Byb3h5KSk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLmFk
ZCgqc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSk7CiAKLSAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChtX3NlcnZpY2VXb3JrZXJQcmVm
ZXJlbmNlcyA/IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBtX2RlZmF1bHRQ
YWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgIGlmICghbV9zZXJ2aWNlV29ya2VyVXNlckFnZW50LmlzTnVsbCgpKQotICAgICAg
ICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KG1f
c2VydmljZVdvcmtlclVzZXJBZ2VudCk7CisgICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+
ZXN0YWJsaXNoU2VydmljZVdvcmtlckNvbnRleHQocHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtl
clByZWZlcmVuY2VzID8gcHJvY2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzLnZh
bHVlKCkgOiBwcm9jZXNzUG9vbC0+bV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLnN0
b3JlKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoIXByb2Nlc3NQb29s
LT5tX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkpCisgICAgICAgIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2VyQWdlbnQocHJvY2Vzc1Bvb2wtPm1f
c2VydmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlbW92
ZUZyb21TZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKIHsK
LSAgICBBU1NFUlQobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKHByb2Nlc3MpKTsK
LSAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOworICAgIEFTU0VS
VChzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFpbnMocHJvY2VzcykpOworICAgIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMoKS5yZW1vdmUocHJvY2Vzcyk7CiB9CiAjZW5kaWYKIApAQCAtOTI2
LDcgKzY1Niw3IEBAIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjp0cnlU
YWtlUHJld2FybWVkUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlCiAjaWYgUExBVEZPUk0oR1RLKSB8
fCBQTEFURk9STShXUEUpCiAgICAgLy8gSW4gcGxhdGZvcm1zIHVzaW5nIEJ1YmJsZXdyYXAgZm9y
IHNhbmRib3hpbmcsIHByZXdhcm1lZCBwcm9jZXNzIGlzIGxhdW5jaGVkIHVzaW5nIHRoZSBXZWJQ
cm9jZXNzUG9vbCBwcmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUsCiAgICAgLy8gc28gd2UgZG9uJ3Qg
dXNlIGl0IGluIGNhc2Ugb2YgdXNpbmcgYSBkaWZmZXJlbnQgV2Vic2l0ZURhdGFTdG9yZS4KLSAg
ICBpZiAobV9zYW5kYm94RW5hYmxlZCAmJiBtX3dlYnNpdGVEYXRhU3RvcmUgJiYgbV93ZWJzaXRl
RGF0YVN0b3JlLmdldCgpICE9ICZ3ZWJzaXRlRGF0YVN0b3JlKQorICAgIGlmIChtX3NhbmRib3hF
bmFibGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgogCkBAIC0xMjAyLDkgKzkz
Miw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2Vi
UHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQogICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPmln
bm9yZVRpbWVvdXRzRm9yVGVzdGluZygpOwogCiAgICAgbV9jb25uZWN0aW9uQ2xpZW50LmRpZENy
ZWF0ZUNvbm5lY3Rpb24odGhpcywgcHJvY2Vzcy0+d2ViQ29ubmVjdGlvbigpKTsKLQotICAgIGlm
IChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+ZGlkQ3Jl
YXRlTmV0d29ya1Byb2Nlc3MoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVj
dFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQpAQCAtMTI5OSwxMCArMTAyNiw3IEBA
IFJlZjxXZWJQYWdlUHJveHk+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGll
bnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6CiAgICAgaWYgKCFwYWdlQ29uZmlndXJhdGlvbi0+d2Vi
c2l0ZURhdGFTdG9yZSgpKSB7CiAgICAgICAgIC8vIFdlIHRyeSB0byBhdm9pZCBjcmVhdGluZyB0
aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxvbmcgYXMgcG9zc2libGUuCiAgICAgICAgIC8vIEJ1
dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIHdlYiBwYWdlIHdpdGhvdXQgYW55
IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVuIHdlIGhhdmUgdG8gY3JlYXRlIGl0LgotICAgICAg
ICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9y
ZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwot
Ci0gICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKG1fd2Vic2l0
ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRXZWJzaXRl
RGF0YVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0
cigpKTsKICAgICB9CiAKICAgICBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzOwpAQCAt
MTMzMyw3ICsxMDU3LDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0
ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToKICNpZiBFTkFCTEUoU0VS
VklDRV9XT1JLRVIpCiAgICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcykgewogICAg
ICAgICBtX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyA9IHBhZ2UtPnByZWZlcmVuY2VzU3RvcmUo
KTsKLSAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdv
cmtlclByb2Nlc3NlcykKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6
IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9j
ZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcmVmZXJlbmNlc1N0b3JlKCptX3NlcnZpY2VXb3JrZXJQ
cmVmZXJlbmNlcyk7CiAgICAgfQogICAgIGlmICh1c2VyQ29udGVudENvbnRyb2xsZXIpCkBAIC0x
MzYwLDcgKzEwODQsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVTZXJ2aWNlV29ya2Vy
VXNlckFnZW50KGNvbnN0IFN0cmluZyYgdXNlckFnZW50KQogICAgIGlmIChtX3NlcnZpY2VXb3Jr
ZXJVc2VyQWdlbnQgPT0gdXNlckFnZW50KQogICAgICAgICByZXR1cm47CiAgICAgbV9zZXJ2aWNl
V29ya2VyVXNlckFnZW50ID0gdXNlckFnZW50OwotICAgIGZvciAoYXV0byYgc2VydmljZVdvcmtl
clByb2Nlc3MgOiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMpCisgICAgZm9yIChhdXRvJiBzZXJ2
aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkKICAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3Muc2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChtX3NlcnZpY2VXb3Jr
ZXJVc2VyQWdlbnQpOwogfQogI2VuZGlmCkBAIC0xMzY5LDE1ICsxMDkzLDYgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIgcGFnZUkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1fc2Vzc2lvblRvUGFnZUlEc01h
cC5hZGQoZGF0YVN0b3JlLnNlc3Npb25JRCgpLCBIYXNoU2V0PFdlYlBhZ2VQcm94eUlkZW50aWZp
ZXI+KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQocGFnZUlEKTsKICAgICBBU1NFUlRfVU5VU0VEKHJl
c3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwotCi0gICAgYXV0byBzZXNzaW9uSUQgPSBkYXRhU3Rv
cmUuc2Vzc2lvbklEKCk7Ci0gICAgaWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFTU0VSVCghc2Vzc2lvbklELmlzRXBoZW1lcmFs
KCkgfHwgZGF0YVN0b3JlLnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vz
c2lvbklEID09IHNlc3Npb25JRCk7Ci0gICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKSB7Ci0g
ICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoZGF0YVN0b3Jl
KSk7Ci0gICAgICAgICAgICBkYXRhU3RvcmUuY2xlYXJQZW5kaW5nQ29va2llcygpOwotICAgICAg
ICB9Ci0gICAgfQogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlRW5kVXNpbmdXZWJzaXRl
RGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBXZWJzaXRlRGF0YVN0b3Jl
JiBkYXRhU3RvcmUpCkBAIC0xNDEzLDI2ICsxMTI4LDIzIEBAIERvd25sb2FkUHJveHkmIFdlYlBy
b2Nlc3NQb29sOjpkb3dubG9hZChXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIFdlYlBhZ2VQ
cm94CiAgICAgICAgIGlzQXBwQm91bmQgPSBpbml0aWF0aW5nUGFnZS0+aXNUb3BGcmFtZU5hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluKCk7CiAgICAgfQogCi0gICAgaWYgKG5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJlcXVlc3QpOwot
ICAgICAgICAvLyBSZXF1ZXN0J3MgZmlyc3RQYXJ0eUZvckNvb2tpZXMgd2lsbCBiZSB1c2VkIGFz
IE9yaWdpbmFsIFVSTCBvZiB0aGUgZG93bmxvYWQgcmVxdWVzdC4KLSAgICAgICAgLy8gV2Ugc2V0
IHRoZSB2YWx1ZSB0byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCi0gICAgICAgIGlmIChpbml0
aWF0aW5nUGFnZSkgewotICAgICAgICAgICAgVVJMIGluaXRpYXRpbmdQYWdlVVJMID0gVVJMIHsg
VVJMIHsgfSwgaW5pdGlhdGluZ1BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OwotICAgICAg
ICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1Bh
Z2VVUkwpOwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdp
c3RyYWJsZURvbWFpbnNFcXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOwot
ICAgICAgICAgICAgaWYgKCF1cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhl
YWRlck5hbWU6OlVzZXJBZ2VudCkpCi0gICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0
SFRUUFVzZXJBZ2VudChpbml0aWF0aW5nUGFnZS0+dXNlckFnZW50KCkpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
VVJMKCkpOwotICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7
Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQ
SGVhZGVyTmFtZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5z
ZXRIVFRQVXNlckFnZW50KFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsKLSAgICAg
ICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRvd25s
b2FkUmVxdWVzdChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgpLCB1cGRhdGVk
UmVxdWVzdCwgaXNBcHBCb3VuZCwgc3VnZ2VzdGVkRmlsZW5hbWUpLCAwKTsKLSAgICAgICAgcmV0
dXJuIGRvd25sb2FkUHJveHk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHVwZGF0ZWRSZXF1ZXN0KHJl
cXVlc3QpOworICAgIC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJlIHVz
ZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0LgorICAgIC8vIFdlIHNl
dCB0aGUgdmFsdWUgdG8gdG9wIGxldmVsIGRvY3VtZW50J3MgVVJMLgorICAgIGlmIChpbml0aWF0
aW5nUGFnZSkgeworICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwgPSBVUkwgeyBVUkwgeyB9
LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07CisgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKKyAg
ICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShhcmVSZWdpc3RyYWJsZURvbWFpbnNF
cXVhbChpbml0aWF0aW5nUGFnZVVSTCwgcmVxdWVzdC51cmwoKSkpOworICAgICAgICBpZiAoIXVw
ZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50
KSkKKyAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlhdGlu
Z1BhZ2UtPnVzZXJBZ2VudCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1cGRhdGVkUmVxdWVz
dC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhVUkwoKSk7CisgICAgICAgIHVwZGF0ZWRSZXF1ZXN0
LnNldElzU2FtZVNpdGUoZmFsc2UpOworICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hU
VFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKKyAgICAgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJB
Z2VudCgpKTsKICAgICB9CisgICAgdXBkYXRlZFJlcXVlc3Quc2V0SXNUb3BTaXRlKGZhbHNlKTsK
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6RG93bmxvYWRSZXF1ZXN0KHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3du
bG9hZElEKCksIHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5kLCBzdWdnZXN0ZWRGaWxlbmFtZSks
IDApOwogCiAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CiB9CkBAIC0xNDQ2LDExICsxMTU4LDcg
QEAgRG93bmxvYWRQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKFdlYnNpdGVE
YXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUGEKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQogICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aCwgU2FuZGJveEV4dGVuc2lv
bjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIGlmIChu
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChzZXNzaW9uSUQsIGRvd25sb2FkUHJv
eHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZSksIDApOwotICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKLSAg
ICB9Ci0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoc2Vzc2lvbklELCBkb3dubG9hZFByb3h5
LmRvd25sb2FkSUQoKSwgcmVzdW1lRGF0YS5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hF
eHRlbnNpb25IYW5kbGUpLCAwKTsKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KIApAQCAt
MTUyMSw3ICsxMjI5LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVmcmVzaFBsdWdpbnMoKQog
CiBQcm9jZXNzSUQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpCiB7
Ci0gICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MgPyBtX25ldHdvcmtQcm9jZXNzLT5wcm9jZXNz
SWRlbnRpZmllcigpIDogMDsKKyAgICByZXR1cm4gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkucHJvY2Vzc0lkZW50aWZpZXIoKTsKIH0KIAogUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29s
OjpwcmV3YXJtZWRQcm9jZXNzSWRlbnRpZmllcigpCkBAIC0xNjE4LDEwICsxMzI2LDcgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVBy
b3RvY29sSGFuZGxlcnMoY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2No
ZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkuYWRkKHVybFNjaGVtZSk7Ci0gICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJv
dG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwog
fQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZp
bmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpAQCAtMTYz
MCwxMCArMTMzNSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxT
Y2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uCiAgICAgICAgIHJldHVybjsK
IAogICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJlbW92
ZSh1cmxTY2hlbWUpOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT51bnJlZ2lzdGVy
U2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKLSAgICB9CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkudW5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1
c3RvbVByb3RvY29sKHVybFNjaGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lz
dGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQpA
QCAtMTY2NywxNiArMTM2OSwxNCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVs
KENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIAogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdl
czo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CiAKLSAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOworICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKENhY2hlTW9kZWwgY2FjaGVN
b2RlbCkKIHsKICAgICB1cGRhdGVCYWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkoKTsKIAotICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVz
dGluZyhjYWNoZU1vZGVsKSwgeyB9LCB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2Rl
bFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJs
ZSB0aW1lb3V0SW50ZXJ2YWwpCkBAIC0xNjg2LDcgKzEzODYsNyBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVy
dmFsKQogCiBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlRG93bmxvYWRQcm94
eShXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1BhZ2UsIGNvbnN0IEZyYW1lSW5mb0RhdGEm
IGZyYW1lSW5mbykKIHsKLSAgICByZXR1cm4gZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5jcmVhdGVE
b3dubG9hZFByb3h5KGRhdGFTdG9yZSwgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1Bh
Z2UpOworICAgIHJldHVybiBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLmNyZWF0ZURvd25sb2FkUHJv
eHkoZGF0YVN0b3JlLCAqdGhpcywgcmVxdWVzdCwgZnJhbWVJbmZvLCBvcmlnaW5hdGluZ1BhZ2Up
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5kKGJv
b2wgYmFja2dyb3VuZCkKQEAgLTE3NjIsMjUgKzE0NjIsMTEgQEAgdm9pZCBXZWJQcm9jZXNzUG9v
bDo6c3RvcE1lbW9yeVNhbXBsZXIoKQogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6
V2ViUHJvY2Vzczo6U3RvcE1lbW9yeVNhbXBsZXIoKSk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpCi17Ci0gICAgQVNTRVJUKG1fcHJvY2Vzc2Vz
LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX25ldHdvcmtQcm9jZXNzKTsKLQotICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcHJvY2Vzc2Vz
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaG91bGRVc2VUZXN0aW5nTmV0
d29ya1Nlc3Npb24gPSB0cnVlOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
Pgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBt
ZXNzYWdlLCBVJiYgcmVwbHkpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3
b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
c2VuZFN5bmMoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCBzdGQ6OmZvcndhcmQ8VT4ocmVwbHkp
LCAwKTsKKyAgICBpZiAoTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuY2FuU2VuZE1l
c3NhZ2UoKSkKKyAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZFN5
bmMoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCBzdGQ6OmZvcndhcmQ8VT4ocmVwbHkpLCAwKTsK
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JX
ZWJTb2NrZXQoYm9vbCBhbGxvd3MpCkBAIC0xNzkwLDE5ICsxNDc2LDE0IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wgYWxs
b3dzKQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIHsK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKSwgMCk7
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKSwgMCk7CiB9CiAKIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKICAgICB0ZXJtaW5hdGVT
ZXJ2aWNlV29ya2VycygpOwogCi0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Ci0gICAgbV9u
ZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkudGVybWluYXRlKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFs
bFdlYkNvbnRlbnRQcm9jZXNzZXMoKQpAQCAtMTgxNCwzMCArMTQ5NSwyNSBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjp0ZXJtaW5hdGVBbGxXZWJDb250ZW50UHJvY2Vzc2VzKCkKIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3Rpbmco
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlm
ICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7
Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNp
b25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kUHJlcGFyZVRvU3VzcGVuZChJc1N1c3BlbnNp
b25JbW1pbmVudDo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9y
VGVzdGluZygpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29y
a1Byb2Nlc3MtPnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRQcm9jZXNzV2lsbFN1c3Bl
bmRJbW1pbmVudGx5Rm9yVGVzdGluZygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5k
TmV0d29ya1Byb2Nlc3NEaWRSZXN1bWUoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQot
ICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kUHJvY2Vzc0RpZFJlc3VtZSgpOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7CiB9
CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCkKIHsKICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyk7Ci0gICAgd2hpbGUgKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21wdXRlU2l6
ZSgpKQotICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYmVnaW4oKS0+ZGlzYWJsZVNl
cnZpY2VXb3JrZXJzKCk7CisgICAgd2hpbGUgKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb21w
dXRlU2l6ZSgpKQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuYmVnaW4oKS0+ZGlz
YWJsZVNlcnZpY2VXb3JrZXJzKCk7CiAjZW5kaWYKIH0KIApAQCAtMTg1NCwxNSArMTUzMCwxNCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZAogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhckxl
Z2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVh
ckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpLCAwKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xl
YXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoKSwgMCk7CiAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBT
Q2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUs
IGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwotICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBbGxvd1Nw
ZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGUtPmNlcnRpZmljYXRlSW5m
bygpLCBob3N0KSwgMCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRl
Rm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXV0b21hdGlvbkNhcGFiaWxpdGllcygpIGNvbnN0
CkBAIC0yMTM5LDE1ICsxODE0LDE5IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlcG9ydFdlYkNv
bnRlbnRDUFVUaW1lKFNlY29uZHMgY3B1VGltZSwgdWludDY0X3QgYWN0aXZpdHlTCiAjZW5kaWYK
IH0KIAorV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiYgV2ViUHJvY2Vzc1Bvb2w6OnNlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWFrSGFz
aFNldDxXZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXM7CisgICAgcmV0dXJuIHByb2Nlc3NlczsK
K30KKwogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbnMoKQogewog
ICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkudXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpOwogI2lm
IEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICAvLyBDaGVjayBvbiBuZXh0IHJ1biBsb29wIHNp
bmNlIHRoZSB3ZWIgcHJvY2VzcyBwcm94eSB0b2tlbnMgYXJlIHByb2JhYmx5IGJlaW5nIHVwZGF0
ZWQuCi0gICAgY2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
dGhpcyldIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgZm9yIChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclBy
b2Nlc3NlcykKKyAgICBjYWxsT25NYWluUnVuTG9vcChbXSB7CisgICAgICAgIGZvciAoYXV0byYg
c2VydmljZVdvcmtlclByb2Nlc3MgOiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkpCiAgICAgICAg
ICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy51cGRhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzc0Fzc2Vy
dGlvbigpOwogICAgIH0pOwogI2VuZGlmCkBAIC0yMTU3LDcgKzE4MzYsNyBAQCBib29sIFdlYlBy
b2Nlc3NQb29sOjppc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllciBw
YWdlSUQpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGluZWZmaWNpZW50LgotICAgIHJldHVybiBXVEY6OmFueU9mKG1fc2VydmljZVdv
cmtlclByb2Nlc3NlcywgW3BhZ2VJRF0oYXV0byYgcHJvY2VzcykgeworICAgIHJldHVybiBXVEY6
OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW3BhZ2VJRF0oYXV0byYgcHJvY2Vzcykg
ewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyUGFnZVByb3h5KHBhZ2VJ
RCk7CiAgICAgfSk7CiAjZW5kaWYKQEAgLTIzODEsMTAgKzIwNjAsNyBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpjbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZygpCiAjaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1p
dENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZyb21Eb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiB0b0RvbWFpbiwgT3B0aW9uU2V0PENyb3NzU2l0ZU5hdmlnYXRpb25EYXRhVHJhbnNmZXI6
OkZsYWc+IG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgd2Vi
UGFnZVByb3h5SUQsIFBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCkKIHsKLSAgICBpZiAoIW1fbmV0
d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmRp
ZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25JRCwgZnJvbURvbWFp
biwgdG9Eb21haW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQ
YWdlSUQpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmRpZENvbW1pdENy
b3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyKHNlc3Npb25JRCwgZnJvbURvbWFpbiwgdG9Eb21h
aW4sIG5hdmlnYXRpb25EYXRhVHJhbnNmZXIsIHdlYlBhZ2VQcm94eUlELCB3ZWJQYWdlSUQpOwog
fQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbihI
YXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCkBAIC0yNDI5LDI3
ICsyMTA1LDI4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUF1ZGlibGVNZWRpYUFzc2Vy
dGlvbnMoKQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKIHsKLSAgICBp
ZiAobV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID09IHVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MpCisgICAgaWYgKHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyA9PSB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogICAgICAgICByZXR1cm47CiAK
LSAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhTZXJ2aWNlV29ya2VyLCAic2V0VXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczogKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3M9JWQpIiwgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CisgICAgV0VCUFJPQ0VT
U1BPT0xfUkVMRUFTRV9MT0dfU1RBVElDKFNlcnZpY2VXb3JrZXIsICJzZXRVc2VTZXBhcmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcz0lZCki
LCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIAotICAgIG1fdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M7Ci0g
ICAgdGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKLSAgICB0ZXJtaW5hdGVOZXR3b3JrUHJvY2Vz
cygpOworICAgIHNfdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3M7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlBy
b2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnRlcm1p
bmF0ZVNlcnZpY2VXb3JrZXJzKCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkudGVybWluYXRlKCk7CiB9CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiBib29sIFdl
YlByb2Nlc3NQb29sOjpoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGlu
ZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6YW55T2YobV9zZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzLCBbXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0dXJuIFdURjo6YW55T2Yoc2VydmljZVdv
cmtlclByb2Nlc3NlcygpLCBbXShhdXRvJiBwcm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9j
ZXNzLmhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCk7CiAgICAg
fSk7CiB9CiAKIGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5k
QWN0aXZpdHlGb3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3Nl
cnZpY2VXb3JrZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RG
OjphbnlPZihzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsKICAg
ICAgICAgcmV0dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZv
clRlc3RpbmcoKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oCmluZGV4IDFmNDZjZTRkNjM3ZTc0NmQ5NGM2ZThhZTk2NTNiYWQwY2E3OTgyN2UuLjNk
MWNlZTg1ODhmNWUxNDJhNjczMjk5YmQyOTc2YTk5OGM3MDRkNTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtODEsNyArODEsNiBAQCBPQkpDX0NMQVNTIFdL
UHJlZmVyZW5jZU9ic2VydmVyOwogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEF1dG9tYXRpb25D
bGllbnQ7Ci1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7CiBjbGFzcyBEb3dubG9h
ZENsaWVudDsKIGNsYXNzIEhUVFBDb29raWVTdG9yZTsKIGNsYXNzIEluamVjdGVkQnVuZGxlQ2xp
ZW50OwpAQCAtMTgwLDcgKzE3OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhpc3RvcnlDbGll
bnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+JiYpOwog
ICAgIHZvaWQgc2V0RG93bmxvYWRDbGllbnQoVW5pcXVlUmVmPEFQSTo6RG93bmxvYWRDbGllbnQ+
JiYpOwogICAgIHZvaWQgc2V0QXV0b21hdGlvbkNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpB
dXRvbWF0aW9uQ2xpZW50PiYmKTsKLSAgICB2b2lkIHNldExlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQ+JiYpOwogCiAgICAgdm9pZCBzZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50
aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBjdXN0b21XZWJDb250ZW50
U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPmN1c3Rv
bVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpOyB9CkBAIC0yMDksOSArMjA3LDYg
QEAgcHVibGljOgogICAgIC8vIERpc2Nvbm5lY3QgdGhlIHByb2Nlc3MgZnJvbSB0aGUgY29udGV4
dC4KICAgICB2b2lkIGRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSopOwogCi0gICAg
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlKiB3ZWJzaXRlRGF0YVN0b3JlKCkgY29uc3QgeyByZXR1
cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRQcmltYXJ5RGF0YVN0
b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlKSB7IG1fd2Vic2l0ZURhdGFT
dG9yZSA9ICZkYXRhU3RvcmU7IH0KLQogICAgIFJlZjxXZWJQYWdlUHJveHk+IGNyZWF0ZVdlYlBh
Z2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsKIAogICAgIHZv
aWQgcGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIs
IFdlYnNpdGVEYXRhU3RvcmUmKTsKQEAgLTMwOSw4ICszMDQsNiBAQCBwdWJsaWM6CiAgICAgQVBJ
OjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJuICpt
X2hpc3RvcnlDbGllbnQ7IH0KICAgICBXZWJDb250ZXh0Q2xpZW50JiBjbGllbnQoKSB7IHJldHVy
biBtX2NsaWVudDsgfQogCi0gICAgQVBJOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQmIGN1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCgpIGNvbnN0IHsgcmV0dXJuICptX2N1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudDsgfQotCiAgICAgc3RydWN0IFN0YXRpc3RpY3MgewogICAgICAgICB1
bnNpZ25lZCB3a1ZpZXdDb3VudDsKICAgICAgICAgdW5zaWduZWQgd2tQYWdlQ291bnQ7CkBAIC0z
MTgsOSArMzExLDYgQEAgcHVibGljOgogICAgIH07CiAgICAgc3RhdGljIFN0YXRpc3RpY3MmIHN0
YXRpc3RpY3MoKTsgICAgCiAKLSAgICB2b2lkIHVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwot
ICAgIGJvb2wgaXNVc2luZ1Rlc3RpbmdOZXR3b3JrU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1f
c2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uOyB9Ci0KICAgICB2b2lkIHNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGJvb2wpOwogCiAgICAgdm9pZCBjbGVhckNhY2hl
ZENyZWRlbnRpYWxzKCk7CkBAIC00MDAsMTggKzM5MCwxNSBAQCBwdWJsaWM6CiAKICAgICAvLyBO
ZXR3b3JrIFByb2Nlc3MgTWFuYWdlbWVudAogICAgIE5ldHdvcmtQcm9jZXNzUHJveHkmIGVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGhXZWJzaXRlRGF0YVN0b3JlID0g
bnVsbHB0cik7Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSBjb25z
dCB7IHJldHVybiBtX25ldHdvcmtQcm9jZXNzLmdldCgpOyB9CiAgICAgdm9pZCBuZXR3b3JrUHJv
Y2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYpOwogCiAgICAgdm9pZCBnZXROZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgTWVzc2FnZXM6OldlYlByb2Nlc3NQ
cm94eTo6R2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5JiYpOwogCiAgICAg
Ym9vbCBpc1NlcnZpY2VXb3JrZXJQYWdlSUQoV2ViUGFnZVByb3h5SWRlbnRpZmllcikgY29uc3Q7
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIHZvaWQgZXN0YWJsaXNoV29ya2VyQ29u
dGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzUHJveHkmLCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmLCBQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJv
Y2Vzc1Byb3h5Jik7Ci0gICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29tcHV0ZVNpemUoKTsgfQotICAg
IHZvaWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyKGJvb2wgYWxs
b3dzKSB7IG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyID0gYWxsb3dz
OyB9Ci0gICAgYm9vbCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoKSBj
b25zdCB7IHJldHVybiBtX2FsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjsg
fQorICAgIHNpemVfdCBzZXJ2aWNlV29ya2VyUHJveGllc0NvdW50KCkgY29uc3QgeyByZXR1cm4g
c2VydmljZVdvcmtlclByb2Nlc3NlcygpLmNvbXB1dGVTaXplKCk7IH0KICAgICB2b2lkIHVwZGF0
ZVNlcnZpY2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpOwogICAgIGNv
bnN0IE9wdGlvbmFsPFVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXI+JiB1c2VyQ29udGVu
dENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSBjb25zdCB7IHJldHVybiBt
X3VzZXJDb250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdvcmtlcjsgfQogICAgIGJvb2wgaGFz
U2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdDsKQEAgLTUz
OSw4ICs1MjYsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIm
IHBsdWdJbkF1dG9TdGFydFByb3ZpZGVyKCkgeyByZXR1cm4gbV9wbHVnSW5BdXRvU3RhcnRQcm92
aWRlcjsgfQogCi0gICAgdm9pZCBzZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJv
b2wpOwotICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIGNvbnN0IHsg
cmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQorICAgIHN0YXRpYyB2
b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7CisgICAgc3RhdGlj
IGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpIHsgcmV0dXJuIHNfdXNlU2Vw
YXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsgfQogCiAjaWYgRU5BQkxFKENGUFJFRlNfRElSRUNU
X01PREUpCiAgICAgdm9pZCBub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoY29uc3QgU3RyaW5nJiBk
b21haW4sIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBPcHRpb25hbDxTdHJpbmc+JiBlbmNvZGVk
VmFsdWUpOwpAQCAtNTU3LDYgKzU0NCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kTmV0d29y
a1Byb2Nlc3NYUENFbmRwb2ludFRvV2ViUHJvY2VzcyhPU09iamVjdFB0cjx4cGNfb2JqZWN0X3Q+
IGVuZHBvaW50TWVzc2FnZSk7CiAjZW5kaWYKIAorICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtSW5p
dGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7
CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycygpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBzdGF0aWMgU3RyaW5n
IGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRs
ZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9y
eSgpOworICAgIHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOworICAg
IHN0YXRpYyBTdHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7CisjZW5kaWYKKwog
cHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCkBAIC01NzAsOCArNTY4
LDYgQEAgcHJpdmF0ZToKICAgICBXZWJQcm9jZXNzUHJveHkmIGNyZWF0ZU5ld1dlYlByb2Nlc3Mo
V2Vic2l0ZURhdGFTdG9yZSosIFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQgPSBXZWJQcm9j
ZXNzUHJveHk6OklzUHJld2FybWVkOjpObyk7CiAgICAgdm9pZCBpbml0aWFsaXplTmV3V2ViUHJv
Y2VzcyhXZWJQcm9jZXNzUHJveHkmLCBXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5
OjpJc1ByZXdhcm1lZCA9IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKIAotICAg
IHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMmKTsKLQogICAgIHZvaWQgaGFuZGxlTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJv
ZHkpOwogICAgIHZvaWQgaGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJik7CiAKQEAgLTU5NSwxNCArNTkx
LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdXNlc1NpbmdsZVdlYlByb2Nlc3MoKSBjb25zdCB7
IHJldHVybiBtX2NvbmZpZ3VyYXRpb24tPnVzZXNTaW5nbGVXZWJQcm9jZXNzKCk7IH0KIAotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIFN0cmluZyBjb29raWVTdG9yYWdlRGly
ZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBwYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKLSAg
ICBzdGF0aWMgU3RyaW5nIG5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMg
U3RyaW5nIHdlYkNvbnRlbnRDYWNoZXNEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNv
bnRhaW5lclRlbXBvcmFyeURpcmVjdG9yeSgpOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NP
QSkKICAgICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CiAgICAgdm9pZCB1
bnJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CkBAIC02NDQsOSArNjMyLDggQEAgcHJp
dmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWFrUHRyPFdlYlByb2Nlc3NQcm94
eT4+IG1fZHVtbXlQcm9jZXNzUHJveGllczsgLy8gTGlnaHR3ZWlnaHQgV2ViUHJvY2Vzc1Byb3h5
IG9iamVjdHMgd2l0aG91dCBiYWNraW5nIHByb2Nlc3MuCiAKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCi0gICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3NlcnZpY2VXb3JrZXJQ
cm9jZXNzZXM7CisgICAgc3RhdGljIFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4mIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzZXMoKTsKICAgICBib29sIG1fd2FpdGluZ0ZvcldvcmtlckNvbnRleHRQ
cm9jZXNzQ29ubmVjdGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2FsbG93c0FueVNTTENlcnRp
ZmljYXRlRm9yU2VydmljZVdvcmtlciB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fc2VydmljZVdv
cmtlclVzZXJBZ2VudDsKICAgICBPcHRpb25hbDxXZWJQcmVmZXJlbmNlc1N0b3JlPiBtX3NlcnZp
Y2VXb3JrZXJQcmVmZXJlbmNlczsKICAgICBPcHRpb25hbDxVc2VyQ29udGVudENvbnRyb2xsZXJJ
ZGVudGlmaWVyPiBtX3VzZXJDb250ZW50Q29udHJvbGxlcklERm9yU2VydmljZVdvcmtlcjsKQEAg
LTY2Miw3ICs2NDksNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9t
YXRpb25DbGllbnQ+IG1fYXV0b21hdGlvbkNsaWVudDsKICAgICBVbmlxdWVSZWY8QVBJOjpEb3du
bG9hZENsaWVudD4gbV9kb3dubG9hZENsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpM
ZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4gbV9oaXN0b3J5Q2xpZW50OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2Nv
bE1hbmFnZXJDbGllbnQ7CiAKICAgICBSZWZQdHI8V2ViQXV0b21hdGlvblNlc3Npb24+IG1fYXV0
b21hdGlvblNlc3Npb247CiAKQEAgLTY5NCw4ICs2ODAsNiBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9tZW1vcnlTYW1wbGVyRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgZG91YmxlIG1fbWVtb3J5U2Ft
cGxlckludGVydmFsIHsgMTQwMC4wIH07CiAKLSAgICBSZWZQdHI8V2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmU7Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3Qg
Y2hhciosIFJlZlB0cjxXZWJDb250ZXh0U3VwcGxlbWVudD4sIFB0ckhhc2g8Y29uc3QgY2hhcio+
PiBXZWJDb250ZXh0U3VwcGxlbWVudE1hcDsKICAgICBXZWJDb250ZXh0U3VwcGxlbWVudE1hcCBt
X3N1cHBsZW1lbnRzOwogCkBAIC03MzAsOCArNzE0LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
bV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkIHsgdHJ1ZSB9OwogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1fbmV0d29ya1Byb2Nlc3M7Ci0KICAgICBIYXNoTWFw
PHVpbnQ2NF90LCBSZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNrPj4gbV9kaWN0aW9uYXJ5Q2FsbGJh
Y2tzOwogCiAjaWYgVVNFKFNPVVApCkBAIC04MzcsNyArODE5LDcgQEAgcHJpdmF0ZToKICNlbHNl
CiAgICAgYm9vbCBtX2lzRGVsYXllZFdlYlByb2Nlc3NMYXVuY2hEaXNhYmxlZCB7IGZhbHNlIH07
CiAjZW5kaWYKLSAgICBib29sIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyB7IGZh
bHNlIH07CisgICAgc3RhdGljIGJvb2wgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
OwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBIYXNoU2V0PFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBtX2RvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uOwpA
QCAtODUxLDE1ICs4MzMsMTUgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKIHsK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVz
c2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPiht
ZXNzYWdlKSwgMCk7CisgICAgaWYgKE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNh
blNlbmRNZXNzYWdlKCkpCisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVu
Y2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSkKIHsKICAgICBlbnN1cmVOZXR3b3JrUHJvY2Vz
cygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2Up
LCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKHN0ZDo6Zm9y
d2FyZDxUPihtZXNzYWdlKSwgMCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuY3BwCmluZGV4IDQ4ODg3MjNlMGJkYTU3ODM4YzI4ODc5ZGNjZjI3ZTFlM2I0MTRmMjIuLmFh
OTE0Mzc0YzkyZjY3ZjE3MWFmZmM2OGFlYzMzOTYxNjk0Nzc2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3Bw
CkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNz
LmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkJhY2tG
b3J3YXJkQ2FjaGUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNs
dWRlICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2lu
Y2x1ZGUgIldlYlByb2Nlc3NDYWNoZS5oIgpAQCAtNzUsNiArNzYsMTAgQEAKICNpbmNsdWRlICJT
T0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NP
QSkKKyNpbmNsdWRlICJEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5oIgorI2VuZGlmCisKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBzdGF0aWMgYm9vbCBhbGxvd3NXZWJzaXRlRGF0YVJlY29yZHNGb3JB
bGxPcmlnaW5zOwpAQCAtODMsMTMgKzg4LDIyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6YWxs
b3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zKCkKICAgICBhbGxvd3NXZWJzaXRlRGF0
YVJlY29yZHNGb3JBbGxPcmlnaW5zID0gdHJ1ZTsKIH0KIAotc3RhdGljIEhhc2hNYXA8UEFMOjpT
ZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgbm9uRGVmYXVsdERhdGFTdG9yZXMoKQorc3Rh
dGljIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYnNpdGVEYXRhU3RvcmUqPiYgYWxsRGF0YVN0
b3JlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNVSVRocmVhZCgpKTsKICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+
PiBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAorVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzRnJvbUFsbFN0b3JlcygpCit7Cisg
ICAgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBhbGxQYXJhbWV0ZXJzOworICAg
IGFsbFBhcmFtZXRlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhbGxEYXRhU3RvcmVzKCkuc2l6
ZSgpKTsKKyAgICBmb3IgKGF1dG8qIHN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKQor
ICAgICAgICBhbGxQYXJhbWV0ZXJzLnVuY2hlY2tlZEFwcGVuZChzdG9yZS0+cGFyYW1ldGVycygp
KTsKKyAgICByZXR1cm4gYWxsUGFyYW1ldGVyczsKK30KKwogUmVmPFdlYnNpdGVEYXRhU3RvcmU+
IFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZU5vblBlcnNpc3RlbnQoKQogewogICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRp
b246OmNyZWF0ZShJc1BlcnNpc3RlbnQ6Ok5vKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlRXBo
ZW1lcmFsU2Vzc2lvbklEKCkpKTsKQEAgLTExNSwxMCArMTI5LDExIEBAIFdlYnNpdGVEYXRhU3Rv
cmU6OldlYnNpdGVEYXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYm
IGNvbmZpZ3VyCiAjZW5kaWYKIHsKICAgICBXVEY6OnNldFByb2Nlc3NQcml2aWxlZ2VzKGFsbFBy
aXZpbGVnZXMoKSk7Ci0gICAgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKKyAgICBy
ZWdpc3RlcldpdGhTZXNzaW9uSURNYXAoKTsKICAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIAog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuYWRkU2Vzc2lvbigqdGhpcyk7CiB9CiAKIFdlYnNpdGVEYXRhU3RvcmU6On5X
ZWJzaXRlRGF0YVN0b3JlKCkKQEAgLTEyOCwxNyArMTQzLDEyIEBAIFdlYnNpdGVEYXRhU3RvcmU6
On5XZWJzaXRlRGF0YVN0b3JlKCkKIAogICAgIHBsYXRmb3JtRGVzdHJveSgpOwogCi0gICAgaWYg
KG1fc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAg
ICAgICAgQVNTRVJUKG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuZ2V0KG1fc2Vzc2lvbklEKSA9PSB0
aGlzKTsKLSAgICAgICAgbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQp
OwotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
QVNTRVJUKGFsbERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9uSUQpID09IHRoaXMpOworICAgIGFs
bERhdGFTdG9yZXMoKS5yZW1vdmUobV9zZXNzaW9uSUQpOworICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwogI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKLSAgICAgICAgaWYgKGF1dG8qIGdwdVByb2Nlc3NQcm94eSA9IEdQVVByb2Nl
c3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCi0gICAgICAgICAgICBncHVQcm9jZXNzUHJv
eHktPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOworICAgIGlmIChhdXRvKiBncHVQcm9jZXNz
UHJveHkgPSBHUFVQcm9jZXNzUHJveHk6OnNpbmdsZXRvbklmQ3JlYXRlZCgpKQorICAgICAgICBn
cHVQcm9jZXNzUHJveHktPnJlbW92ZVNlc3Npb24obV9zZXNzaW9uSUQpOwogI2VuZGlmCiB9CiAK
QEAgLTE2OSwxNyArMTc5LDE1IEBAIGJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZUV4aXN0cygpCiAgICAgcmV0dXJuICEhZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgpOwogfQog
Ci12b2lkIFdlYnNpdGVEYXRhU3RvcmU6Om1heWJlUmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkK
K3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCkKIHsKLSAg
ICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkg
ewotICAgICAgICBhdXRvIHJlc3VsdCA9IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkuYWRkKG1fc2Vz
c2lvbklELCB0aGlzKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05l
d0VudHJ5KTsKLSAgICB9CisgICAgYXV0byByZXN1bHQgPSBhbGxEYXRhU3RvcmVzKCkuYWRkKG1f
c2Vzc2lvbklELCB0aGlzKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3
RW50cnkpOwogfQogCi1XZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGlu
Z05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQorV2Vic2l0ZURhdGFTdG9yZSogV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVG
b3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHJldHVybiBzZXNz
aW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSA/IG5vbkRlZmF1bHRE
YXRhU3RvcmVzKCkuZ2V0KHNlc3Npb25JRCkgOiBudWxscHRyOworICAgIHJldHVybiBhbGxEYXRh
U3RvcmVzKCkuZ2V0KHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVn
aXN0ZXJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKQEAgLTE5NSwxMiArMjAzLDYg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp1bnJlZ2lzdGVyUHJvY2VzcyhXZWJQcm9jZXNzUHJv
eHkmIHByb2Nlc3MpCiAgICAgbV9wcm9jZXNzZXMucmVtb3ZlKHByb2Nlc3MpOwogfQogCi1XZWJQ
cm9jZXNzUG9vbCogV2Vic2l0ZURhdGFTdG9yZTo6cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdl
T3BlcmF0aW9ucygpCi17Ci0gICAgYXV0byBwb29scyA9IHByb2Nlc3NQb29scygxKTsKLSAgICBy
ZXR1cm4gcG9vbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6IHBvb2xzLmJlZ2luKCktPmdldCgpOwot
fQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5
KCkKIHsKICAgICBpZiAobV9oYXNSZXNvbHZlZERpcmVjdG9yaWVzKQpAQCAtNDQzLDggKzQ0NSw2
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBPCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwb29scykgewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5
cGUpIHsKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVk
OgotICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6CkBAIC00NTYsNyArNDU2
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAg
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpLT5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lv
bklELCBkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vz
c1Bvb2xdKFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CisgICAgICAgICAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5mZXRjaFdlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBkYXRh
VHlwZXMsIGZldGNoT3B0aW9ucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdKFdl
YnNpdGVEYXRhIHdlYnNpdGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTcyNyw4ICs3MjcsNiBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBX
YWxsVGltZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsKICAgICAg
ICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICBj
YXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAgICAgICBp
ZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBQcm9j
ZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgpAQCAtNzQwLDcgKzczOCw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMs
IFdhbGxUaW1lCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9k
aWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKKyAgICAgICAg
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmRlbGV0ZVdlYnNpdGVEYXRhKG1f
c2Vzc2lvbklELCBkYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjYWxsYmFja0FnZ3JlZ2F0b3Is
IHByb2Nlc3NQb29sXSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1v
dmVQZW5kaW5nQ2FsbGJhY2soKTsKICAgICAgICAgICAgIH0pOwogI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC04OTEsMTQgKzg4OSw5IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFdh
bGxUaW1lCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBpZiAoZGF0
YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcykp
IHsKICAgICAgICAgaWYgKCFkaWROb3RpZnlOZXR3b3JrUHJvY2Vzc1RvRGVsZXRlV2Vic2l0ZURh
dGEpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9y
LT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy0+ZGVs
ZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0gewotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRlV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIGRh
dGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAg
ICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRk
UGVuZGluZ0NhbGxiYWNrKCk7CkBAIC05OTIsOCArOTg1LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29u
c3QgVmUKICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBvb2xzKSB7CiAgICAgICAg
ICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2Fz
ZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYg
KCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vz
c0FjY2Vzc1R5cGU6OkxhdW5jaDoKQEAgLTEwMTksNyArMTAxMCw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMs
IGNvbnN0IFZlCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKS0+ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKG1fc2Vzc2lvbklELCBkYXRh
VHlwZXMsIG9yaWdpbnMsIGNvb2tpZUhvc3ROYW1lcywgSFNUU0NhY2hlSG9zdE5hbWVzLCByZWdp
c3RyYWJsZURvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IsIHByb2Nlc3NQb29sXSB7CisgICAg
ICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5kZWxldGVXZWJzaXRlRGF0
YUZvck9yaWdpbnMobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5h
bWVzLCBIU1RTQ2FjaGVIb3N0TmFtZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdn
cmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0
b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0K
QEAgLTExODMsOCArMTE3NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWF4U3RhdGlz
dGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0CiAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2V0TWF4U3RhdGlzdGljc0VudHJpZXMobV9zZXNzaW9uSUQsIG1heGltdW1FbnRyeUNvdW50LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtX3Nlc3Npb25JRCwg
bWF4aW11bUVudHJ5Q291bnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdl
dENvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xMTkzLDggKzExODMsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50cmll
c0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCwgQ29tcGxldGlvbgogICAgIAogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3Mo
KS5zZXRQcnVuZUVudHJpZXNEb3duVG8obV9zZXNzaW9uSUQsIHBydW5lVGFyZ2V0Q291bnQsIFtw
cm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIE5ldHdvcmtQcm9jZXNz
UHJveHk6OnNpbmdsZXRvbigpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1
bmVUYXJnZXRDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjAzLDggKzEx
OTIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNv
bmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0g
ICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldEdyYW5kZmF0aGVy
aW5nVGltZShtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0R3Jh
bmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMTMsMjAgKzEyMDEsMTMgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwo
U2Vjb25kcyBzZWNvbmRzLAogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQ
b29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNv
cmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0
TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNvbmRz
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogICAgIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNv
bnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZHVtcFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlz
UHJldmFsZW50KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyMzgsMTIgKzEyMTksNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IHByb2Nlc3MtPmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLmlzUHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBpc1ByZXZhbGVudCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0xMjU1LDEyICsxMjMxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc0dy
YW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm8KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc0dyYW5kZmF0aGVyZWQo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmlzR3JhbmRmYXRoZXJlZCht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZh
bGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMjc0LDggKzEyNDUsNyBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2bwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IGVuc3VyZVByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuc2V0UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTEyODksMTAgKzEyNTksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVu
dFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aQogICAgIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0UHJldmFs
ZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRQcmV2YWxlbnRS
ZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sIGlzVmVyeVByZXZhbGVudCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xMzA0LDEyICsxMjcxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXIKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aXNWZXJ5UHJldmFsZW50
UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmlzVmVyeVBy
ZXZhbGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzIzLDEwICsxMjg1
LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGUKICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdn
cmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VmVyeVByZXZh
bGVudFJlc291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0VmVyeVByZXZhbGVudFJlc291cmNl
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMzUsOCAr
MTI5NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2CiAgICAgCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCB2
YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZv
cmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1l
VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
MzUwLDIyICsxMzA4LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvCiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBz
dWJGcmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0s
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJl
ZEFzU3ViRnJhbWVVbmRlcihjb25zdCBVUkwmIHN1YkZyYW1lVVJMLCBjb25zdCBVUkwmIHRvcEZy
YW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+
aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihj
b25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMzc5LDIzICsxMzI5
LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJj
ZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtwcm9j
ZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4o
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwg
fSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJl
ZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwm
IHRvcEZyYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAg
IHByb2Nlc3MtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9u
SGFuZGxlcihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuaXNS
ZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBV
UkwmIHN1YnJlc291cmNlVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQwOSwxMCArMTM1MCw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyht
X3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNvdXJjZVVSTCB9
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwgY29uc3QgVVJM
JiB1cmxSZWRpcmVjdGVkRnJvbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpAQCAtMTQyNCwxMiArMTM2Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVS
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIHByb2Nlc3MtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nl
c3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0s
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwm
IHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTQ0MSwxMiArMTM3NCw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGlyZWN0ZWRUbyB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJv
bShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDU4LDI1
ICsxMzg2LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdEZyb20oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwgY29uCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nl
c3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3Mt
PnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdXJsUmVkaXJlY3RlZEZyb20gfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
UmVkaXJlY3RlZEZyb20gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBVUkwm
IHVybFJlZGlyZWN0ZWRGcm9tLCBjb25zdCBVUkwmIHVybFJlZGlyZWN0ZWRUbywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsUmVkaXJlY3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRp
cmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJl
Y3RlZEZyb20gfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8g
fSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0ODgsNDYgKzE0MDUsMjcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wt
Pm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5jbGVhclByZXZhbGVudFJl
c291cmNlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBb
cHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UGFyYW1ldGVy
c1RvRGVmYXVsdFZhbHVlcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRQYXJhbWV0ZXJzVG9E
ZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucmVz
ZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c3VibWl0VGVsZW1ldHJ5
KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c3VibWl0VGVsZW1ldHJ5KG1fc2Vzc2lvbklELCBbXSB7IH0pOwotICAgIH0KKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9uSUQs
IFtdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVt
b3J5QW5kUGVyc2lzdGVudChXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBTaG91bGRHcmFuZGZhdGhl
clN0YXRpc3RpY3Mgc2hvdWxkR3JhbmRmYXRoZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0g
cHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hl
ZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCBtb2RpZmllZFNpbmNl
LCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNjaGVkdWxl
Q2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIHNo
b3VsZEdyYW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6Z2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6VGhpcmRQYXJ0eURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTU3MCwyMiAr
MTQ2OCwxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnQoU2hvdWxkR3JhbmRmYXRoZXJTdGF0aQogewogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAg
IHByb2Nlc3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQs
IHsgfSwgc2hvdWxkR3JhbmRmYXRoZXIsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zY2hl
ZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KG1fc2Vzc2lvbklELCB7IH0sIHNob3VsZEdy
YW5kZmF0aGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUobV9z
ZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0K
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zY2hlZHVsZUNvb2tpZUJsb2Nr
aW5nVXBkYXRlKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJv
Y2Vzc2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xNTk0LDI0ICsxNDg0LDEzIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0
aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKENvbXBsZXRpb25IYW5kCiAgICAgCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zY2hlZHVsZVN0
YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5zY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3Np
bmcobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5zdGF0aXN0aWNzRGF0YWJhc2VI
YXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbXBsZXRpb25IYW5k
bGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zdGF0aXN0
aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBV
UkwmIHVybCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNjIzLDIyICsxNTAyLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgVVJMJiB1cmwsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxl
dGlvbkhhCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYg
cHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
c2V0TGFzdFNlZW4obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIHNlY29uZHMsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRMYXN0U2VlbihtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgc2Vjb25kcywgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpkb21h
aW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1fc2Vz
c2lvbklELCBkb21haW5JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKG1fc2Vzc2lvbklELCBkb21haW5JRCwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiB0b3BG
cmFtZVVybDEsIGNvbnN0IFVSTCYgdG9wRnJhbWVVcmwyLCBTZWNvbmRzIGxhc3RTZWVuLCBib29s
IGhhZFVzZXJJbnRlcmFjdGlvbiwgU2Vjb25kcyBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBi
b29sIGlzR3JhbmRmYXRoZXJlZCwgYm9vbCBpc1ByZXZhbGVudCwgYm9vbCBpc1ZlcnlQcmV2YWxl
bnQsIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3ZlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY1MCwxMCArMTUyMSw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBjb25z
dCBVUkwmIHRvcEZyCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJv
Y2Vzcy0+bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZy
YW1lVXJsMSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBs
YXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBp
c0dyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRz
UmVtb3ZlZCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLm1lcmdlU3RhdGlzdGljRm9yVGVz
dGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZVVybDEgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB0b3BGcmFtZVVybDIgfSwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlv
biwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgaXNHcmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVu
dCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRp
c3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBi
b29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxl
bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2
NjUsMTggKzE1MzMsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBpcmVkU3Rh
dGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBoYWQKIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQ
b29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5pbnNlcnRFeHBpcmVkU3RhdGlzdGlj
Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgaGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1v
dmFsLCBpc1ByZXZhbGVudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmluc2VydEV4cGly
ZWRTdGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwsIGlzUHJldmFsZW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChtX3Nlc3Npb25JRCwgdmFsdWUsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QoYm9vbCB2YWx1ZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY4NCw4ICsxNTQ4LDcg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVGVzdChib29sIHZhbHVlLCBDb21wbGUKICAgICB1c2VFeHBsaWNpdElUUFN0YXRlKCk7CiAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29y
a1Byb2Nlc3MoKS5zZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChtX3Nlc3Np
b25JRCwgdmFsdWUsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldElzUnVubmluZ1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZXN0KG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50
cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8U3RyaW5nPiYmIGRvbWFpbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY5
Niw3ICsxNTU5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNz
RW50cmllcyhXZWJQYWdlUHJveHlJZGVudGlmaWVyIHBhZ2VJRCwKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIHdlYlBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmVuc3VyZU5ldHdv
cmtQcm9jZXNzKCkuZ2V0QWxsU3RvcmFnZUFjY2Vzc0VudHJpZXMobV9zZXNzaW9uSUQsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiAKQEAgLTE3MDQsOCArMTU2Nyw3IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMs
IENvbXBsZXRpb25ICiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNz
UG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9u
KG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzE5
LDEwICsxNTgxLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24o
Y29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQKICAgICAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+bG9nVXNlckludGVyYWN0aW9uKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5sb2dVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTczNCwx
MyArMTU5Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9u
KGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Np
b25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAg
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShj
b25zdCBVUkwmIHN1YlVybCwgY29uc3QgVVJMJiB0b3BVcmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzUyLDEzICsxNjA1LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShjb25z
dCBVUkwmIHN1YlVybCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAg
ICAgcHJvY2Vzcy0+aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluIHsgdG9wVXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuaXNSZWxhdGlvbnNo
aXBPbmx5SW5EYXRhYmFzZU9uY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgc3ViVXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wVXJsIH0sIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpj
bGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc3MiwxMCArMTYxOSw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHByb2Nlc3MtPmNsZWFyVXNlckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5jbGVhclVzZXJJbnRlcmFj
dGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRH
cmFuZGZhdGhlcmVkKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTc4OSwxMCArMTYz
Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwm
IHVybCwgYm9vbCBpc0dyYW5kZmF0aGVyZWQsIENvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29s
cygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQ
cm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRHcmFuZGZhdGhlcmVkKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpc0dyYW5kZmF0aGVyZWQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLnNldEdyYW5kZmF0aGVyZWQobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRmYXRoZXJlZCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRVc2VJVFBEYXRhYmFz
ZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0xODAxLDEwICsxNjQyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRVc2VJ
VFBEYXRhYmFzZShib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYKICAgICAK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBw
cm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldFVz
ZUlUUERhdGFiYXNlKG1fc2Vzc2lvbklELCB2YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0VXNlSVRQ
RGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
fQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29y
YXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZnJvbVVSTCwgY29uc3QgVVJMJiB0b1VSTCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTgxMyw2MiAr
MTY1MSwzOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENyb3NzU2l0ZUxvYWRXaXRoTGlu
a0RlY29yYXRpb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgZgogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0Q3Jvc3NTaXRlTG9hZFdpdGhM
aW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgZnJvbVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvVVJMIH0s
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNv
cmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9VUkwgfSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENy
b3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlc2V0Q3Jvc3NTaXRl
TG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5yZXNldENyb3NzU2l0ZUxvYWRzV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nl
c3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpkZWxldGVDb29raWVzRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBpbmNs
dWRlSHR0cE9ubHlDb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpbmNsdWRlSHR0cE9ubHlDb29r
aWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5kZWxldGVDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaW5jbHVkZUh0dHBPbmx5Q29va2ll
cywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpoYXNMb2NhbFN0b3JhZ2VGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25I
YW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5oYXNM
b2NhbFN0b3JhZ2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpoYXNJc29sYXRlZFNlc3Npb25Gb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5oYXNJc29sYXRlZFNlc3Npb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRl
UmVmZXJyZXJGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGREb3duZ3JhZGVSZWZl
cnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U2hvdWxkRG93bmdyYWRl
UmVmZXJyZXJGb3JUZXN0aW5nKGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9
CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCkBAIC0xODk5LDEwICsxNzEzLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKFdlYkNvcmU6OlRo
aXJkUGFydHlDb29raWUKICAgICAgICAgICAgIHdlYlByb2Nlc3Muc2V0VGhpcmRQYXJ0eUNvb2tp
ZUJsb2NraW5nTW9kZShibG9ja2luZ01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAg
ICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFRoaXJkUGFydHlDb29raWVC
bG9ja2luZ01vZGUobV9zZXNzaW9uSUQsIGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0
VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBb
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnRGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTkxMCwxMCArMTcyMSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlCiAgICAgYXV0byBmbGFnID0gZW5hYmxlZCA/IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0
RW5mb3JjZW1lbnRFbmFibGVkOjpZZXMgOiBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50RW5hYmxlZDo6Tm87CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0U2hvdWxkRW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxhZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U2hvdWxk
RW5ibGVTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgZmxh
ZywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGVGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTkyMSwyMCArMTcyOSwxNCBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIGF1dG8gbW9kZSA9IGVu
YWJsZWQgPyBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0
Q29va2llcyA6IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpOb25l
OwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgbW9kZSwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
c2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklE
LCBtb2RlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1NhbWVTaXRlU3RyaWN0Q29va2llc0Zv
clRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRUb1NhbWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3Rp
bmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNp
bmdsZXRvbigpLnNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVzRm9yVGVzdGluZyhtX3Nlc3Npb25J
RCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRmlyc3RQYXJ0eUhvc3RDTkFNRURvbWFpbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmaXJz
dFBhcnR5VVJMLCBjb25zdCBVUkwmIGNuYW1lVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTY5LDggKzE3NzEsNyBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMg
c2Vjb25kcywgQwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwg
c2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5zZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyht
X3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKHNlY29uZHMpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0x
OTgyLDIyICsxNzgzLDEyIEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRDYWNoZU1heEFn
ZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhDb21wbGV0aW9uSGFuZGxlCiAjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRDYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucmVzZXRDYWNoZU1h
eEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICNlbmRpZgogfQog
Ci1ib29sIFdlYnNpdGVEYXRhU3RvcmU6OmlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKFdlYlByb2Nl
c3NQb29sJiBwcm9jZXNzUG9vbCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcHJvY2Vzc1Bvb2xE
YXRhU3RvcmUgPSBwcm9jZXNzUG9vbC53ZWJzaXRlRGF0YVN0b3JlKCkpCi0gICAgICAgIHJldHVy
biBwcm9jZXNzUG9vbERhdGFTdG9yZSA9PSB0aGlzOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQog
SGFzaFNldDxSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNz
UG9vbHMoc2l6ZV90IGxpbWl0KSBjb25zdAogewogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYlByb2Nl
c3NQb29sPj4gcHJvY2Vzc1Bvb2xzOwpAQCAtMjAxMiw5ICsxODAzLDYgQEAgSGFzaFNldDxSZWZQ
dHI8V2ViUHJvY2Vzc1Bvb2w+PiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbHMoc2l6ZV90
IGxpbWl0KSBjb24KICAgICBpZiAocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSkgewogICAgICAgICAv
LyBDaGVjayBpZiB3ZSdyZSBvbmUgb2YgdGhlIGxlZ2FjeSBkYXRhIHN0b3Jlcy4KICAgICAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICAgICAgaWYgKCFpc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbCgqcHJvY2Vzc1Bv
b2wpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCiAgICAgICAgICAgICBwcm9jZXNzUG9v
bHMuYWRkKHByb2Nlc3NQb29sKTsKICAgICAgICAgICAgIGlmIChwcm9jZXNzUG9vbHMuc2l6ZSgp
ID09IGxpbWl0KQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjEzMiwxNyArMTkyMCwxNSBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVk
KGJvb2wgZW5hYmxlZCkKICAgICAgICAgCiAgICAgICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVj
ZXNzYXJ5KCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSk7CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgdHJ1ZSksIDApOworICAgICAgICBm
b3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgICAgICBwcm9j
ZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzRm9yU2Vzc2lvbihNZXNzYWdlczo6V2ViUHJvY2Vz
czo6U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1ZSksIG1fc2Vzc2lvbklEKTsK
LSAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zZW5kVG9O
ZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSkpOworICAgIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChtX3Nlc3Npb25JRCwgZmFsc2UpLCAwKTsKKyAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCiAgICAgICAgIHByb2Nl
c3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChmYWxzZSksIG1fc2Vzc2lvbklEKTsK
LSAgICB9CiAKICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkID0gZmFsc2U7CiAj
ZWxzZQpAQCAtMjE1NCw4ICsxOTQwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2soRnVuY3Rpb248dm9pZChjb25zdCBT
dHJpbmcmKT4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICAgICAgcHJvY2Vz
c1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCh0cnVlKSk7CisgICAgICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpLCAw
KTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayk7CkBAIC0yMTc0LDggKzE5NTksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGVkLCBDb21wbGV0
aQogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG1fc2Vz
c2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01v
ZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiAjZWxz
ZQogICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKICAgICBVTlVTRURfUEFSQU0oY29tcGxldGlv
bkhhbmRsZXIpOwpAQCAtMjE5MCwyMCArMTk3NCwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHBy
b2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vz
cy0+aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKG1fc2Vzc2lvbklELCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci0jZW5kaWYKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5pc1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworI2VuZGlm
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdN
b2RlKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNl
dEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShlbmFibGVkKTsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZXRBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGUoZW5hYmxl
ZCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjIyNSwy
OSArMjAwNCw2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzSW5XZWJQcm9jZXNzZXMoQ29tcGxldGlvbkhhbmRsCiB9CiAjZW5kaWYKIAotVmVjdG9y
PFdlYkNvcmU6OkNvb2tpZT4gV2Vic2l0ZURhdGFTdG9yZTo6cGVuZGluZ0Nvb2tpZXMoKSBjb25z
dAotewotICAgIHJldHVybiBjb3B5VG9WZWN0b3IobV9wZW5kaW5nQ29va2llcyk7Ci19Ci0KLXZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6YWRkUGVuZGluZ0Nvb2tpZShjb25zdCBXZWJDb3JlOjpDb29r
aWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLnJlbW92ZUlmKFsmY29va2llXShh
dXRvJiBwZW5kaW5nQ29va2llKSB7Ci0gICAgICAgIHJldHVybiBwZW5kaW5nQ29va2llLmlzS2V5
RXF1YWwoY29va2llKTsKLSAgICB9KTsKLSAgICBtX3BlbmRpbmdDb29raWVzLmFkZChjb29raWUp
OwotfQotCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVBlbmRpbmdDb29raWUoY29uc3Qg
V2ViQ29yZTo6Q29va2llJiBjb29raWUpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5yZW1vdmUo
Y29va2llKTsKLX0KLSAgICAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29v
a2llcygpCi17Ci0gICAgbV9wZW5kaW5nQ29va2llcy5jbGVhcigpOwotfQotCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24p
CiB7CiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goV1RGTW92ZShmdW5jdGlvbikpOwpAQCAtMjI3MSw4
ICsyMDI3LDYgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6
cGFyYW1ldGVycygpCiAKICAgICByZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOwogCi0g
ICAgcGFyYW1ldGVycy5wZW5kaW5nQ29va2llcyA9IHBlbmRpbmdDb29raWVzKCk7Ci0KICAgICBh
dXRvIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPnJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeUhhbmRsZTsKICAgICBpZiAoIXJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtMjM3MSw3ICsyMTI1
LDE0IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFt
ZXRlcnMoKQogICAgIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNl
TG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQgPSBtX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkOwogI2VuZGlmCiAgICAgcGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhwYXJh
bWV0ZXJzKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5hcHBIYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Np
b24gPSBoYXNSZXF1ZXN0ZWRDcm9zc1dlYnNpdGVUcmFja2luZ1Blcm1pc3Npb24oKTsKKyNlbmRp
ZgogCisjaWYgVVNFKFNPVVApCisgICAgV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNp
bmdsZXRvbigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCgpLCBwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgs
IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlVHlwZSk7CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gcGFyYW1ldGVyczsKIH0KIApAQCAt
MjQwMSwxMCArMjE2Miw2IEBAIEFQSTo6SFRUUENvb2tpZVN0b3JlJiBXZWJzaXRlRGF0YVN0b3Jl
Ojpjb29raWVTdG9yZSgpCiAgICAgcmV0dXJuICptX2Nvb2tpZVN0b3JlOwogfQogCi12b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLX0KLQogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVj
dG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFpc1BlcnNpc3RlbnQoKSkgewpAQCAtMjQyNSwx
MCArMjE4Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWls
cyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VECiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+cmVz
ZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucmVzZXRRdW90YShtX3Nlc3Npb25J
RCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkK
QEAgLTI0NjYsMzQgKzIyMjAsMjEgQEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpCiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9
IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJv
Y2Vzcy0+aGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29t
cGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLmhhc0FwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQXBwQm91bmRTZXNzaW9u
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBh
dXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBw
cm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5j
bGVhckFwcEJvdW5kU2Vzc2lvbihtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0
ZURhdGEoVVJMJiYgb2xkTmFtZSwgVVJMJiYgbmV3TmFtZSwgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gZGF0YVR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0
b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkgewotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKnRoaXMpOwotICAg
ICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNz
aW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIGRhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5hZGRTZXNzaW9uKCp0aGlzKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5yZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdO
YW1lLCBkYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKQEAgLTI1MTYsNyArMjI1Nyw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Zm9yd2FyZEFwcEJvdW5kRG9tYWluc1RvSVRQSWZJbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxl
CiAKICAgICBwcm9wYWdhdGVBcHBCb3VuZERvbWFpbnMoZ2xvYmFsRGVmYXVsdERhdGFTdG9yZSgp
LmdldCgpLCAqYXBwQm91bmREb21haW5zKTsKIAotICAgIGZvciAoYXV0byogc3RvcmUgOiBub25E
ZWZhdWx0RGF0YVN0b3JlcygpLnZhbHVlcygpKQorICAgIGZvciAoYXV0byogc3RvcmUgOiBhbGxE
YXRhU3RvcmVzKCkudmFsdWVzKCkpCiAgICAgICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhz
dG9yZSwgKmFwcEJvdW5kRG9tYWlucyk7CiB9CiAKQEAgLTI1MjQsMTAgKzIyNjUsNyBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnNldEFwcEJvdW5kRG9tYWluc0ZvcklUUChjb25zdCBIYXNoU2V0
PFdlYkNvcmU6OlJlZ2lzdHJhYgogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldEFwcEJvdW5kRG9tYWluc0ZvclJlc291cmNl
TG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldEFw
cEJvdW5kRG9tYWluc0ZvclJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIGRvbWFp
bnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAjZW5kaWYKIApAQCAtMjUzNSwxNiAr
MjI3MywxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJ
bk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmluZyYgYnVuZAogewogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVCdW5k
bGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkudXBkYXRlQnVuZGxlSWRlbnRp
ZmllcihidW5kbGVJZGVudGlmaWVyLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nl
c3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5jbGVhckJ1bmRsZUlkZW50aWZpZXIo
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDRlYzEz
ZTE2ZmU0ODJkMjZhMmVhZmEzMTIzZTMyMzNhNzM3Y2IxMmIuLjY1NDExMmM0MjdiNGZhNWVlODY0
NGE2NzI2MmM2MGI2OTYwZDhmMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTEwOCw3ICsxMDgsNyBAQCBw
dWJsaWM6CiAgICAgV2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3Vy
YXRpb24+JiYsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB+V2Vic2l0ZURhdGFTdG9yZSgpOwogCi0g
ICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUqIGV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZv
clNlc3Npb25JRChQQUw6OlNlc3Npb25JRCk7CisgICAgc3RhdGljIFdlYnNpdGVEYXRhU3RvcmUq
IGV4aXN0aW5nRGF0YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKIAogICAgIGJv
b2wgaXNQZXJzaXN0ZW50KCkgY29uc3QgeyByZXR1cm4gIW1fc2Vzc2lvbklELmlzRXBoZW1lcmFs
KCk7IH0KICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3Nl
c3Npb25JRDsgfQpAQCAtMjI4LDE1ICsyMjgsOCBAQCBwdWJsaWM6CiAKICAgICBEZXZpY2VJZEhh
c2hTYWx0U3RvcmFnZSYgZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UoKSB7IHJldHVybiBtX2Rldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlLmdldCgpOyB9CiAKLSAgICBXZWJQcm9jZXNzUG9vbCogcHJvY2Vz
c1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGJvb2wgaXNBc3NvY2lhdGVk
UHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmKSBjb25zdDsKLQogICAgIFdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzIHBhcmFtZXRlcnMoKTsKLQotICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+
IHBlbmRpbmdDb29raWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRQZW5kaW5nQ29va2llKGNvbnN0
IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgcmVtb3ZlUGVuZGluZ0Nvb2tpZShjb25zdCBX
ZWJDb3JlOjpDb29raWUmKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKKyAgICBz
dGF0aWMgVmVjdG9yPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBwYXJhbWV0ZXJzRnJvbUFs
bFN0b3JlcygpOwogCiAgICAgdm9pZCBkaXNwYXRjaE9uUXVldWUoRnVuY3Rpb248dm9pZCgpPiYm
KTsKIApAQCAtMjYxLDggKzI1NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tXZWJBdXRo
ZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24oV2ViQ29yZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29u
ZmlndXJhdGlvbiYmKTsKICNlbmRpZgogCi0gICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2Vz
cygpOwotCiAgICAgY29uc3QgV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3Vy
YXRpb24oKSB7IHJldHVybiBtX2NvbmZpZ3VyYXRpb24uZ2V0KCk7IH0KIAogICAgIFdlYnNpdGVE
YXRhU3RvcmVDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CkBAIC0z
NDQsNyArMzM1LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMo
Y29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBXYWxsVGltZSBtb2RpZmll
ZFNpbmNlKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVNZWRpYUtleXMoY29uc3QgU3RyaW5nJiBt
ZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5LCBjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YT4mKTsKIAotICAgIHZvaWQgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXAo
KTsKKyAgICB2b2lkIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogCiAjaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgc3RhdGljIE9wdGlvbmFsPEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+PiBhcHBCb3VuZERvbWFpbnNJZkluaXRpYWxpemVkKCk7CkBAIC0zODIsOCArMzczLDYg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxl
ZCB7IHRydWUgfTsKICNlbmRpZgogCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1fcGVu
ZGluZ0Nvb2tpZXM7Ci0gICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBtX3By
b2Nlc3NlczsKIAogICAgIGJvb2wgbV9pc0l0cFN0YXRlRXhwbGljaXRseVNldCB7IGZhbHNlIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dl
YnNpdGVEYXRhU3RvcmVTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCmluZGV4IDEyZjljZDgxOWI2ZGNjYThh
YzUwOTJhMzBkZDkzYzUzYjhlZTkzNDIuLjViYTM5MDBkMmRhZmYwNTZhYmQwY2RmMDU3YWUzMjg1
NGViZmVjZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCkBAIC0zOSw4ICsz
OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVy
cyhXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYKICAgICBhdXRvJiBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMgPSBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKICAgICBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCA9
IG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZDsKIAotICAgIGlmIChhdXRvKiBw
cm9jZXNzUG9vbCA9IHByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKSkKLSAg
ICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5n
ZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShtX3Nlc3Npb25JRCwgbmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgbmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisgICAgV2ViS2l0OjpXZWJDb29raWVN
YW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vz
c2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQ
YXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBl
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0
b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCmluZGV4IDBhODRhNzU5MGQ5YTk4NWJm
Yzk5Njg0YTQ4OTUxMzc0ZTViMjk0MjkuLjI3ZjIzZWEwNjVkYzc1Y2U0YTgyNzBjNTc2ZWEyYWE1
NWFiMGRjOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Byb3h5R0xpYi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQ
cm9jZXNzUHJveHlHTGliLmNwcApAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94
eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9u
cyYgbAogICAgICAgICBpZiAoIWRhdGFTdG9yZSkgewogICAgICAgICAgICAgLy8gUHJld2FybWVk
IHByb2Nlc3NlcyBkb24ndCBoYXZlIGEgV2Vic2l0ZURhdGFTdG9yZSB5ZXQsIHNvIHVzZSB0aGUg
cHJpbWFyeSBXZWJzaXRlRGF0YVN0b3JlIGZyb20gdGhlIFdlYlByb2Nlc3NQb29sLgogICAgICAg
ICAgICAgLy8gVGhlIHByb2Nlc3Mgd29uJ3QgYmUgdXNlZCBpZiBjdXJyZW50IFdlYnNpdGVEYXRh
U3RvcmUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgb25lLgot
ICAgICAgICAgICAgZGF0YVN0b3JlID0gbV9wcm9jZXNzUG9vbC0+d2Vic2l0ZURhdGFTdG9yZSgp
OworICAgICAgICAgICAgZGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFT
dG9yZSgpLnB0cigpOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGRhdGFTdG9yZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29raWVNYW5h
Z2VyUHJveHlTb3VwLmNwcAppbmRleCA5ZjdiZTNjOTQxYjZjZDBhMWI5NGNiMTM2MDk4ZjNhMDQx
Y2VmZjk5Li4wODkyOGZjZDMxNmQ4OGY5ZDUxNTAwZWM2ODRhZDFiNjRhZjhhM2Y5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJQcm94eVNv
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdl
clByb3h5U291cC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzUG9vbC5oIgogCkBAIC0zNCw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwg
U291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKIHsKICAgICBtX2Nv
b2tpZVBlcnNpc3RlbnRTdG9yYWdlTWFwLnNldChzZXNzaW9uSUQsIHN0ZDo6bWFrZV9wYWlyKHN0
b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOwotICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRDb29raWVQZXJzaXN0
ZW50U3RvcmFnZShzZXNzaW9uSUQsIHN0b3JhZ2VQYXRoLCBzdG9yYWdlVHlwZSkpOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYkNvb2tpZU1h
bmFnZXI6OlNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgs
IHN0b3JhZ2VUeXBlKSwgMCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRD
b29raWVQZXJzaXN0ZW50U3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYg
c3RvcmFnZVBhdGgsIFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUmIHN0b3JhZ2VUeXBl
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9j
ZXNzUG9vbFNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNz
UG9vbFNvdXAuY3BwCmluZGV4IGJmYmJmOTY2NGU0ODM1MzA5NzA5NzExZGZkNmMxMzQxNTczMmJk
YWMuLjA3OTNlZDUxMzkxNTI4ZDliNGI5ZmRiMGY0YWQzYzg5NjBmZGE1MjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NQb29sU291cC5jcHAKQEAg
LTM3LDMwICszNywyNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBh
cmFtZXRlcnMmIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgIHN1cHBsZW1l
bnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShk
ZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklELCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRl
cnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMu
Y29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKLSAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3Jl
KQotICAgICAgICBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZCA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZCgpOworICAgIC8vIEZJWE1FOiBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0
UG9saWN5IHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgV2Vic2l0ZURhdGFTdG9yZS4KKyAgICAvLyBG
SVhNRTogbV9pZ25vcmVUTFNFcnJvcnMgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0
YVN0b3JlIG9yIHJlbW92ZWQuCisgICAgLy8gRklYTUU6IG1fbmV0d29ya1Byb3h5U2V0dGluZ3Mg
c2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgogCi0gICAgcGFyYW1ldGVy
cy5jb29raWVBY2NlcHRQb2xpY3kgPSBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5Owot
ICAgIHBhcmFtZXRlcnMuaWdub3JlVExTRXJyb3JzID0gbV9pZ25vcmVUTFNFcnJvcnM7CiAgICAg
cGFyYW1ldGVycy5sYW5ndWFnZXMgPSB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgcGFy
YW1ldGVycy5wcm94eVNldHRpbmdzID0gbV9uZXR3b3JrUHJveHlTZXR0aW5nczsKICAgICBwYXJh
bWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gdHJ1ZTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0SWdub3JlVExTRXJyb3JzKGJvb2wgaWdub3JlVExTRXJyb3JzKQogewogICAg
IG1faWdub3JlVExTRXJyb3JzID0gaWdub3JlVExTRXJyb3JzOwotICAgIGlmIChuZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7CisgICAg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldElnbm9yZVRMU0Vycm9ycyhtX2lnbm9yZVRMU0Vycm9ycyksIDApOwogfQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhjb25zdCBXZWJDb3Jl
OjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmIHNldHRpbmdzKQogewogICAgIG1fbmV0d29ya1By
b3h5U2V0dGluZ3MgPSBzZXR0aW5nczsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAg
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldE5l
dHdvcmtQcm94eVNldHRpbmdzKG1fbmV0d29ya1Byb3h5U2V0dGluZ3MpLCAwKTsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9uZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggOWRlMWE1ZjEzMzUyYWQ0MDIyNjIyNjBmYTViMjc3YTQ1OTg5MDUyMi4uZjI5MDZiYTRhMGZi
MDRjMDY4MjhlMGQzZmY0OTlkYzQxNTgzNDVkOSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIwLTA4LTExICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIGEg
TmV0d29ya1Byb2Nlc3NQcm94eSBzaW5nbGV0b24gaW5zdGVhZCBvZiBvbmUgcGVyIFdlYlByb2Nl
c3NQb29sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDM1NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW06Cisg
ICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbToKKyAgICAgICAg
KFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVExTRGVw
cmVjYXRpb24ubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tOgorICAg
ICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlw
dEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVy
Ol0pOgorICAgICAgICAoLVtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIHdhaXRGb3JNZXNz
YWdlXSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgYWxlcnRDb29r
aWVIVE1MXSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3Rh
dGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1BZGp1c3RDb250ZXh0KToKKwogMjAyMC0wOC0xMSAgS2VpdGggUm9sbGluICA8a3JvbGxp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIGZpbHRlci1idWlsZC13ZWJraXQgZm9yIHVu
a25vd24vdW5oYW5kbGVkIG1lc3NhZ2VzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdp
dGhQZW5kaW5nQ29ubmVjdGlvbi5tbQppbmRleCA5NzM4OWYwMWZmMmVlOTliNzgzYjBiNTIxMDgw
NzRmMWE4MWI2OTgxLi4xNWY4NmFlZDNkNjMwMmMxYjUzNzVlMTI3ZDYwNDEyZjYwNDkwMmZkIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vz
c0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0K
QEAgLTE0Niw4ICsxNDYsOCBAQCBURVNUKFdlYktpdCwgTmV0d29ya1Byb2Nlc3NSZWxhdW5jaE9u
TGF1bmNoRmFpbHVyZSkKIAogICAgIC8vIENvbnN0dWN0aW5nIGEgV2ViVmlldyBzdGFydHMgYSBu
ZXR3b3JrIHByb2Nlc3Mgc28gdGVybWluYXRlIHRoaXMgb25lLiBUaGUgcGFnZSBsb2FkIGJlbG93
IHdpbGwgdGhlbiByZXF1ZXN0IGEgbmV0d29yayBwcm9jZXNzIGFuZCB3ZQogICAgIC8vIG1ha2Ug
dGhpcyBuZXcgbmV0d29yayBwcm9jZXNzIGxhdW5jaCBjcmFzaCBvbiBzdGFydHVwLgotICAgIFtw
cm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogICAgIFtwcm9jZXNzUG9vbCBf
bWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nXTsKKyAgICBbcHJvY2Vz
c1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKIAogICAgIGF1dG8gZGVsZWdhdGUgPSBh
ZG9wdE5TKFtbTW9uaXRvcldlYkNvbnRlbnRDcmFzaE5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10g
aW5pdF0pOwogICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQo
KV07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
ZGV4ZWREQkZpbGVOYW1lLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JbmRleGVkREJGaWxlTmFtZS5tbQppbmRleCAxMWY4N2Y4MDM0ZDJiMWI1NWQ3MjBkZWI3NjVh
MzE2ODIxMjBkNzczLi5hOThiZjM4MjViYjFlZDZkNzU5YzA4ZDQ1MzNhZGNiN2ZmMzk1ZmQ1IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luZGV4ZWRE
QkZpbGVOYW1lLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCRmlsZU5hbWUubW0KQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIFJldGFpblB0cjxX
S1NjcmlwdE1lc3NhZ2U+IGxhc3RTY3JpcHRNZXNzYWdlOwogCiBAZW5kCiAKLXN0YXRpYyB2b2lk
IHJ1blRlc3QoKQorc3RhdGljIHZvaWQgcnVuVGVzdChib29sIG9sZEZpbGVTaG91bGRFeGlzdCA9
IHRydWUpCiB7CiAgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbW0luZGV4ZWREQkZpbGVOYW1l
TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwpAQCAtODcsNyAr
ODcsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KCkKICAgICBOU1VSTCAqb2xkVmVyc2lvbk9yaWdp
bkRpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDogQCJmaWxlX18wIl07CiAgICAgTlNVUkwgKm5ld1ZlcnNpb25PcmlnaW5EaXJl
Y3RvcnlVUkwgPSBbbmV3VmVyc2lvbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21w
b25lbnQ6IEAiZmlsZV9fMCJdOwogICAgIE5TVVJMICpvbGRWZXJzaW9uVW51c2VkRGF0YWJhc2VE
aXJlY3RvcnlVUkwgPSBbb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGlu
Z1BhdGhDb21wb25lbnQ6dW51c2VkRGF0YWJhc2VOYW1lXTsKLSAgICBFWFBFQ1RfVFJVRShbW05T
RmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVu
dXNlZERhdGFiYXNlRGlyZWN0b3J5VVJMLnBhdGhdKTsKKyAgICBFWFBFQ1RfVFJVRShbW05TRmls
ZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6b2xkVmVyc2lvblVudXNl
ZERhdGFiYXNlRGlyZWN0b3J5VVJMLnBhdGhdID09IG9sZEZpbGVTaG91bGRFeGlzdCk7CiAgICAg
CiAgICAgLy8gRm9yIGRhdGFiYXNlIHRoYXQgaXMgb3BlbmVkIGFmdGVyIHVwZ3JhZGUsIGl0cyBm
aWxlIHNob3VsZCBvbmx5IGJlIGluIHYxLgogICAgIE5TVVJMICpvbGRWZXJzaW9uRXhpc3RpbmdE
YXRhYmFzZURpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5
QXBwZW5kaW5nUGF0aENvbXBvbmVudDogZXhpc3RpbmdEYXRhYmFzZU5hbWVdOwpAQCAtMTU0LDcg
KzE1NCw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZURpcmVjdG9yaWVzKFN0cmluZyB0ZXN0TmFtZSkK
IFRFU1QoSW5kZXhlZERCLCBJbmRleGVkREJGaWxlTmFtZSkKIHsKICAgICBjcmVhdGVEaXJlY3Rv
cmllcygibm9uZSIpOwotICAgIHJ1blRlc3QoKTsKKyAgICBydW5UZXN0KGZhbHNlKTsKIH0KIAog
VEVTVChJbmRleGVkREIsIEluZGV4ZWREQkZpbGVOYW1lVjApCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3MubW0KaW5kZXggMTdiYzdmNWQ3NDQ4NGFiNTRkNjc3YTQ3Mjg5MTQyOGVmMmZmYTJjMC4u
NjU2MmUyZWU0NGI0MTM5YzA2YWEzM2IzMTAxYTUzMGRlNWQ2MjJjNSAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5tbQpAQCAtMTU1OCwxMCArMTU1OCw4IEBAIFRFU1QoUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcywgTWlncmF0ZURhdGFGcm9tTWlzc2luZ1RvcEZyYW1lVW5pcXVlUmVkaXJlY3RT
YW1lU2l0CiAKIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2FuQWNjZXNzRGF0YVN1bW1h
cnlXaXRoTm9Qcm9jZXNzUG9vbCkKIHsKKyAgICBOU1VSTCAqaXRwUm9vdFVSTCA9IFtOU1VSTCBm
aWxlVVJMV2l0aFBhdGg6W05TVGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQ
YXRoQ29tcG9uZW50OkAiQ2FuQWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbFRlc3Qi
XSBpc0RpcmVjdG9yeTpZRVNdOwogICAgIGF1dG8gZGVmYXVsdEZpbGVNYW5hZ2VyID0gW05TRmls
ZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1
cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKLSAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tX
S1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3Jl
Q29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdOwotICAgIE5TVVJMICppdHBSb290VVJMID0gW1tk
YXRhU3RvcmUgX2NvbmZpZ3VyYXRpb25dIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
XTsKICAgICBOU1VSTCAqZmlsZVVSTCA9IFtpdHBSb290VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENv
bXBvbmVudDpAIm9ic2VydmF0aW9ucy5kYiJdOwogICAgIFtkZWZhdWx0RmlsZU1hbmFnZXIgcmVt
b3ZlSXRlbUF0UGF0aDppdHBSb290VVJMLnBhdGggZXJyb3I6bmlsXTsKICAgICBFWFBFQ1RfRkFM
U0UoW2RlZmF1bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOml0cFJvb3RVUkwucGF0aF0p
OwpAQCAtMTU3Miw2ICsxNTcwLDEwIEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2Fu
QWNjZXNzRGF0YVN1bW1hcnlXaXRoTm9Qcm9jZXNzUG9vbCkKICAgICBFWFBFQ1RfVFJVRShbZGVm
YXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6bmV3RmlsZVVSTC5wYXRoXSk7CiAgICAg
W2RlZmF1bHRGaWxlTWFuYWdlciBjb3B5SXRlbUF0UGF0aDpuZXdGaWxlVVJMLnBhdGggdG9QYXRo
OmZpbGVVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVYUEVDVF9UUlVFKFtkZWZhdWx0RmlsZU1h
bmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpmaWxlVVJMLnBhdGhdKTsKKworICAgIF9XS1dlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uICpkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gW1tfV0tXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBkYXRhU3Rv
cmVDb25maWd1cmF0aW9uLl9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gaXRwUm9v
dFVSTDsKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2Nd
IF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbl0gYXV0b3JlbGVh
c2VdOwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOllF
U107CiAKICAgICBzdGF0aWMgYm9vbCBkb25lRmxhZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNp
Yy5tbQppbmRleCA5NWFmYjQwYWJjNGE1MjQ4MmE1ODI5NzU3MTgwNmI4M2MwNTIzN2M1Li5jMTdh
MzRhZmRjNTE3YzhiNDJjMmM3YzgyNDkyYjk4MWIxYzRiMTVjIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNp
Yy5tbQpAQCAtNTYxLDcgKzU2MSw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFVzZXJBZ2VudE92
ZXJyaWRlKQogCiAgICAgY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAKLSAgICBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tT
V1VzZXJBZ2VudE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0V2l0aEV4cGVjdGVkTWVzc2FnZTpA
Ik1lc3NhZ2UgZnJvbSB3b3JrZXI6IEJhciBDdXN0b20gVXNlckFnZW50Il0pOworICAgIG1lc3Nh
Z2VIYW5kbGVyID0gYWRvcHROUyhbW1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGlu
aXRXaXRoRXhwZWN0ZWRNZXNzYWdlOkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogRm9vIEN1c3RvbSBV
c2VyQWdlbnQiXSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0g
YWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07
CiAKICAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKQEAgLTYzNiw4ICs2MzYsNiBAQCBURVNUKFNlcnZpY2VXb3JrZXJzLCBDYWNoZVN0
b3JhZ2VSZXN0b3JlRnJvbURpc2spCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25l
KTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9kZWxldGVE
ZWZhdWx0RGF0YVN0b3JlRm9yVGVzdGluZ107Ci0KICAgICBTZXJ2aWNlV29ya2VyVENQU2VydmVy
IHNlcnZlcih7CiAgICAgICAgIHsgInRleHQvaHRtbCIsIG1haW5DYWNoZVN0b3JhZ2VCeXRlcyB9
CiAgICAgfSwgewpAQCAtOTg1LDYgKzk4Myw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMsIFNlcnZp
Y2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmln
dXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSk7CiAgICAgc2V0Q29uZmlndXJhdGlvbkluamVjdGVkQnVuZGxlUGF0aChj
b25maWd1cmF0aW9uLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8V0tQcm9jZXNzUG9vbD4gb3JpZ2lu
YWxQcm9jZXNzUG9vbCA9IGNvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2w7CiAKICAgICBk
b25lID0gZmFsc2U7CiAKQEAgLTEwMzgsNyArMTAzNyw3IEBAIFRFU1QoU2VydmljZVdvcmtlcnMs
IFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgZG9uZSA9IGZhbHNlOwogCiAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgbG9hZGluZyB0aGUgc2ltcGxlIHBhZ2UgZGlkIG5vdCBzdGFydCB0
aGUgc2VydmljZSB3b3JrZXIgcHJvY2Vzcy4KLSAgICBFWFBFQ1RfRVEoMHUsIHdlYlZpZXcuZ2V0
KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7
CisgICAgRVhQRUNUX0VRKDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bv
b2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwogCiAgICAgd2ViVmlldyA9IGFkb3B0TlMo
W1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYw
MCkgY29uZmlndXJhdGlvbjpuZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgRVhQRUNUX0VR
KDJ1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bvb2wuX3dlYlByb2Nlc3ND
b3VudElnbm9yaW5nUHJld2FybWVkKTsKQEAgLTEwNDYsOSArMTA0NSw4IEBAIFRFU1QoU2Vydmlj
ZVdvcmtlcnMsIFNlcnZpY2VXb3JrZXJQcm9jZXNzQ3JlYXRpb24pCiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lKTsKICAgICBkb25lID0gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1
cmUgdGhhdCBsb2FkaW5nIHRoaXMgcGFnZSBkaWQgc3RhcnQgdGhlIHNlcnZpY2Ugd29ya2VyIHBy
b2Nlc3MuCiAgICAgRVhQRUNUX0VRKDF1LCB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJv
Y2Vzc1Bvb2wuX3NlcnZpY2VXb3JrZXJQcm9jZXNzQ291bnQpOwotCisgICAgRVhQRUNUX0VRKDF1
LCBvcmlnaW5hbFByb2Nlc3NQb29sLmdldCgpLl9zZXJ2aWNlV29ya2VyUHJvY2Vzc0NvdW50KTsK
ICAgICBbW2NvbmZpZ3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZV0gcmVtb3ZlRGF0YU9mVHlwZXM6
W1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxXZWJzaXRlRGF0YVR5cGVzXSBtb2RpZmllZFNpbmNlOltO
U0RhdGUgZGlzdGFudFBhc3RdIGNvbXBsZXRpb25IYW5kbGVyOl4oKSB7CiAgICAgICAgIGRvbmUg
PSB0cnVlOwogICAgIH1dOwpAQCAtMTYyMywyMSArMTYyMSwzNSBAQCBzdGF0aWMgc2l6ZV90IGxh
dW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzcywgYgogICAgIHJldHVybiB3ZWJWaWV3LmdldCgpLmNvbmZpZ3VyYXRpb24ucHJvY2Vzc1Bv
b2wuX3dlYlByb2Nlc3NDb3VudElnbm9yaW5nUHJld2FybWVkOwogfQogCi1URVNUKFNlcnZpY2VX
b3JrZXJzLCBPdXRPZkFuZEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCitURVNUKFNlcnZpY2VXb3Jr
ZXJzLCBPdXRPZlByb2Nlc3NTZXJ2aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2VzcyA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5r
ID0gdHJ1ZTsKIAogICAgIEVYUEVDVF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3Mo
IXVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7
Cit9CisKK1RFU1QoU2VydmljZVdvcmtlcnMsIEluUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCit7Cisg
ICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKKyAgICBib29s
IGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQRUNUX0VRKDJ1LCBsYXVuY2hT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzLCAhZmly
c3RMb2FkQWJvdXRCbGFuaykpOwogfQogCi1URVNUKFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRC
bGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoU2VydmljZVdvcmtlcikKK1RFU1QoU2VydmljZVdv
cmtlcnMsIExvYWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hPdXRPZlByb2Nlc3NT
ZXJ2aWNlV29ya2VyKQogewogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vz
cyA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExvYWRBYm91dEJsYW5rID0gdHJ1ZTsKIAogICAgIEVY
UEVDVF9FUSgxdSwgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoIXVzZVNlcGFyYXRlU2Vydmlj
ZVdvcmtlclByb2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNl
V29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaEluUHJvY2Vzc1Nl
cnZpY2VXb3JrZXIpCit7CisgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
ID0gdHJ1ZTsKKyAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOworCiAgICAgRVhQ
RUNUX0VRKDJ1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzLCBmaXJzdExvYWRBYm91dEJsYW5rKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVExTRGVwcmVjYXRpb24ubW0gYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tCmlu
ZGV4IDY3N2YwMGEzMDU3MDNlMjQ5NmFiZGU2NGMzYWZjMmNkMjc3YWQxNjcuLjRhMDZiZGZhNzdh
Yjk5NzUzN2RlMmVjNWNiZTE5NTE4ZDA5NjMzOTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVExTRGVwcmVjYXRpb24ubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UTFNEZXByZWNhdGlvbi5tbQpAQCAtMTc2LDcg
KzE3Niw4IEBAIFRFU1QoVExTVmVyc2lvbiwgTmV0d29ya1Nlc3Npb24pCiAgICAgfTsKICAgICB7
CiAgICAgICAgIFRDUFNlcnZlciBzZXJ2ZXIoVENQU2VydmVyOjpQcm90b2NvbDo6SFRUUFMsIFRD
UFNlcnZlcjo6cmVzcG9uZFdpdGhPSywgdGxzMV8xKTsKLSAgICAgICAgYXV0byB3ZWJWaWV3ID0g
bWFrZVdlYlZpZXdXaXRoKFtXS1dlYnNpdGVEYXRhU3RvcmUgZGVmYXVsdERhdGFTdG9yZV0pOwor
ICAgICAgICBfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9
IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV07CisgICAgICAgIGF1dG8gd2ViVmlldyA9IG1ha2VXZWJWaWV3V2l0aChbW1tXS1dlYnNp
dGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0g
YXV0b3JlbGVhc2VdKTsKICAgICAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAImh0dHBzOi8vMTI3LjAuMC4xOiVkLyIsIHNlcnZlci5wb3J0KCldXV1dOwogICAg
ICAgICBbZGVsZWdhdGUgd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwogICAgIH0KQEAgLTIw
Miw3ICsyMDMsOCBAQCBURVNUKFRMU1ZlcnNpb24sIE5ldHdvcmtTZXNzaW9uKQogICAgICAgICBU
Q1BTZXJ2ZXIgc2VydmVyKFRDUFNlcnZlcjo6UHJvdG9jb2w6OkhUVFBTLCBbXShTU0wgKnNzbCkg
ewogICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHNzbCk7CiAgICAgICAgIH0sIHRsczFfMSk7Ci0g
ICAgICAgIGF1dG8gd2ViVmlldyA9IG1ha2VXZWJWaWV3V2l0aChbV0tXZWJzaXRlRGF0YVN0b3Jl
IGRlZmF1bHREYXRhU3RvcmVdKTsKKyAgICAgICAgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3Vy
YXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlv
biBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICBhdXRvIHdlYlZpZXcgPSBtYWtl
V2ViVmlld1dpdGgoW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1
cmF0aW9uOmNvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXSk7CiAgICAgICAgIFt3ZWJWaWV3IGxv
YWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJodHRwczovLzEyNy4wLjAuMTolZC8iLCBz
ZXJ2ZXIucG9ydCgpXV1dXTsKICAgICAgICAgW2RlbGVnYXRlIHdhaXRGb3JEaWRGYWlsUHJvdmlz
aW9uYWxOYXZpZ2F0aW9uXTsKICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQppbmRleCBhMzVmMDUz
NTBhYWI0YjQyZjM2YzQ2YWVjZGVlZWU2Y2U1NDRlZjg2Li4zMzc2MDkyYTE5NWI1MTJkYTY3YzQ5
NmU0NTIxN2I5MTRmZTJhNTc5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KQEAgLTQ3OSw4ICs0Nzks
NiBAQCBzdGF0aWMgYm9vbCBmaW5pc2hlZDsKIH0KIEBlbmQKIAotLy8gRklYTUU6IG9uIGlPUywg
VUkgcHJvY2VzcyBzaG91bGQgYmUgdXNpbmcgdGhlIHNhbWUgY29va2llIGZpbGUgYXMgdGhlIG5l
dHdvcmsgcHJvY2VzcyBmb3IgZGVmYXVsdCBzZXNzaW9uLgotI2lmIFBMQVRGT1JNKE1BQykKIGVu
dW0gY2xhc3MgU2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcgeyBObywgWWVzIH07CiB2b2lk
IHJ1bldLSFRUUENvb2tpZVN0b3JlV2l0aG91dFByb2Nlc3NQb29sKFNob3VsZEVuYWJsZVByb2Nl
c3NQcmV3YXJtaW5nIHNob3VsZEVuYWJsZVByb2Nlc3NQcmV3YXJtaW5nKQogewpAQCAtNTg5LDIw
ICs1ODcsNjYgQEAgVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQb29sV2l0
aFByZXdhcm1pbmcpCiAgICAgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2wo
U2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmc6Olllcyk7CiB9CiAKLSNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCi0KIEBpbnRlcmZhY2UgQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSA6IE5T
T2JqZWN0IDxXS1VJRGVsZWdhdGU+CistIChOU1N0cmluZyAqKWFsZXJ0Q29va2llSFRNTDsKKy0g
KE5TU3RyaW5nICopd2FpdEZvck1lc3NhZ2U7CiBAZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBDaGVj
a1Nlc3Npb25Db29raWVVSURlbGVnYXRlCitAaW1wbGVtZW50YXRpb24gQ2hlY2tTZXNzaW9uQ29v
a2llVUlEZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfbWVzc2FnZTsKK30KKwog
LSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBh
bmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOihXS0Zy
YW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0
aW9uSGFuZGxlcgogewotICAgIEVYUEVDVF9TVFJFUSgiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2ll
VmFsdWUiLCBtZXNzYWdlLlVURjhTdHJpbmcpOworICAgIF9tZXNzYWdlID0gbWVzc2FnZTsKICAg
ICBmaW5pc2hlZCA9IHRydWU7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KKworLSAoTlNT
dHJpbmcgKil3YWl0Rm9yTWVzc2FnZQoreworICAgIHdoaWxlICghX21lc3NhZ2UpCisgICAgICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgcmV0dXJuIF9tZXNzYWdl
LmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVIVE1MCit7Cisg
ICAgcmV0dXJuIEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgn
OycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpICsrKSB7IGNvb2tpZXNb
aV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNvcnQoKTsgYWxlcnQoY29va2llcy5q
b2luKCc7ICcpKTs8L3NjcmlwdD4iOworfQorCiBAZW5kCiAKK1RFU1QoV2ViS2l0LCBXS0hUVFBD
b29raWVTdG9yZU11bHRpcGxlVmlld3MpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldzEg
PSBbW1Rlc3RXS1dlYlZpZXcgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcxIHN5bmNo
cm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAInN0YXJ0IG5ldHdvcmsgcHJvY2VzcyJdOworCisgICAg
TlNIVFRQQ29va2llICpzZXNzaW9uQ29va2llID0gW05TSFRUUENvb2tpZSBjb29raWVXaXRoUHJv
cGVydGllczpAeworICAgICAgICBOU0hUVFBDb29raWVQYXRoOiBAIi8iLAorICAgICAgICBOU0hU
VFBDb29raWVOYW1lOiBAIlNlc3Npb25Db29raWVOYW1lIiwKKyAgICAgICAgTlNIVFRQQ29va2ll
VmFsdWU6IEAiQ29va2llVmFsdWUiLAorICAgICAgICBOU0hUVFBDb29raWVEb21haW46IEAiMTI3
LjAuMC4xIiwKKyAgICB9XTsKKworICAgIF9fYmxvY2sgYm9vbCBzZXRDb29raWVEb25lID0gZmFs
c2U7CisgICAgW3dlYlZpZXcxLmNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZS5odHRwQ29v
a2llU3RvcmUgc2V0Q29va2llOnNlc3Npb25Db29raWUgY29tcGxldGlvbkhhbmRsZXI6XnsKKyAg
ICAgICAgc2V0Q29va2llRG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZzZXRDb29raWVEb25lKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5T
KFtDaGVja1Nlc3Npb25Db29raWVVSURlbGVnYXRlIG5ld10pOworICAgIFt3ZWJWaWV3MSBzZXRV
SURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3MSBsb2FkSFRNTFN0cmlu
ZzpbZGVsZWdhdGUgYWxlcnRDb29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5n
OkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdh
aXRGb3JNZXNzYWdlXSwgIlNlc3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CisKKyAgICBU
ZXN0V0tXZWJWaWV3ICp3ZWJWaWV3MiA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNl
XTsKKyAgICBbd2ViVmlldzIgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dl
YlZpZXcyIGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9X
S19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29v
a2llVmFsdWUiKTsKK30KKwogVEVTVChXS0hUVFBDb29raWVTdG9yZSwgV2l0aG91dFByb2Nlc3NQ
b29sRXBoZW1lcmFsU2Vzc2lvbikKIHsKICAgICBSZXRhaW5QdHI8V0tXZWJzaXRlRGF0YVN0b3Jl
PiBlcGhlbWVyYWxTdG9yZVdpdGhDb29raWVzID0gW1dLV2Vic2l0ZURhdGFTdG9yZSBub25QZXJz
aXN0ZW50RGF0YVN0b3JlXTsKQEAgLTYyNyw5ICs2NzEsOCBAQCBURVNUKFdLSFRUUENvb2tpZVN0
b3JlLCBXaXRob3V0UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOwogICAgIGZpbmlzaGVkID0gZmFsc2U7CiAgICAgCi0g
ICAgTlNTdHJpbmcgKmFsZXJ0Q29va2llSFRNTCA9IEAiPHNjcmlwdD52YXIgY29va2llcyA9IGRv
Y3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOyBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVu
Z3RoOyBpICsrKSB7IGNvb2tpZXNbaV0gPSBjb29raWVzW2ldLnRyaW0oKTsgfSBjb29raWVzLnNv
cnQoKTsgYWxlcnQoY29va2llcy5qb2luKCc7ICcpKTs8L3NjcmlwdD4iOwotICAgIFt3ZWJWaWV3
IGxvYWRIVE1MU3RyaW5nOmFsZXJ0Q29va2llSFRNTCBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOkAiaHR0cDovLzEyNy4wLjAuMSJdXTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmZpbmlzaGVkKTsKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzpbZGVsZWdhdGUgYWxlcnRD
b29raWVIVE1MXSBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovLzEyNy4wLjAu
MSJdXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW2RlbGVnYXRlIHdhaXRGb3JNZXNzYWdlXSwgIlNl
c3Npb25Db29raWVOYW1lPUNvb2tpZVZhbHVlIik7CiB9CiAKIHN0YXRpYyBib29sIGFyZUNvb2tp
ZXNFcXVhbChOU0hUVFBDb29raWUgKmZpcnN0LCBOU0hUVFBDb29raWUgKnNlY29uZCkKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggYTQzZmE4MTM0YTdhYjc2
YzNhM2I3ZjgyMDhkYzkyNjY3Mjc0NzQ2MS4uYTA2MzAzNDVmNThlNTA2ZjBhNDEzZGMxMWZlODNl
YjU2NGZiMjRhYyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAK
QEAgLTEwNjYsOCArMTA2Niw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0Nv
bnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAKICAgICByZXNl
dFF1b3RhKCk7CiAKLSAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNl
cnZpY2VXb3JrZXJUZXN0aW5nKHBsYXRmb3JtQ29udGV4dCgpLCB0cnVlKTsKLQogICAgIFdLQ29u
dGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5jb250ZXh0KCkpOwogCiAgICAgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCBm
YWxzZSk7CkBAIC0zMTc1LDkgKzMxNzMsOCBAQCBQbGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybUNyZWF0ZU90aGVyUGFnZShQbGF0Zm9ybVdlYlZpZXcqIHBhcmVudAogICAg
IHJldHVybiBuZXcgUGxhdGZvcm1XZWJWaWV3KGNvbmZpZ3VyYXRpb24sIG9wdGlvbnMpOwogfQog
Ci1XS0NvbnRleHRSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0Nv
bnRleHRSZWYgY29udGV4dCwgV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBjb250ZXh0Q29uZmln
dXJhdGlvbikKK1dLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250
ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmKQogewot
ICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRlRGF0YVN0b3JlKGNvbnRleHQsIGRlZmF1bHRX
ZWJzaXRlRGF0YVN0b3JlKCkpOwogICAgIHJldHVybiBjb250ZXh0OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406548</attachid>
            <date>2020-08-13 15:33:31 -0700</date>
            <delta_ts>2020-08-13 15:54:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203547-20200813153329.patch</filename>
            <type>text/plain</type>
            <size>249486</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUxZGU2MTI2ZjljNTI2MDQx
ZmVlMzMzMjgzNTJkY2E0ZDU1MjliMzcuLjVkMzJlMzkwYjE4NGI4ZTUxNzg5ZjdjN2E2N2U5Yjlh
ZTM1NzczMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgyIEBACisyMDIwLTA4LTExICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIGEgTmV0
d29ya1Byb2Nlc3NQcm94eSBzaW5nbGV0b24gaW5zdGVhZCBvZiBvbmUgcGVyIFdlYlByb2Nlc3NQ
b29sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM1
NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvb2tpZU1hbmFnZXI6OmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1DcmVhdGVEZWZh
dWx0U3RvcmFnZVNlc3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURlZmF1bHRTdG9yYWdl
U2Vzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNw
cDoKKyAgICAgICAgKEFQSTo6SFRUUENvb2tpZVN0b3JlOjpIVFRQQ29va2llU3RvcmUpOgorICAg
ICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUpOgorICAgICAgICAo
QVBJOjpIVFRQQ29va2llU3RvcmU6OmNvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2ll
U3RvcmU6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OmRlbGV0ZUNvb2tpZSk6
CisgICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSk6Cisg
ICAgICAgIChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJPYnNlcnZlcik6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6Y29va2llTWFuYWdlckRlc3Ryb3llZCk6CisgICAgICAg
IChBUEk6OkhUVFBDb29raWVTdG9yZTo6cmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNh
dGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpIVFRQQ29va2llU3RvcmU6OnVucmVnaXN0
ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRHZXRDb29raWVNYW5hZ2VyKToK
KyAgICAgICAgKFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbik6CisgICAgICAgIChX
S0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXS0NvbnRleHRT
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbToKKyAgICAgICAgKC1bV0tQ
cm9jZXNzUG9vbCBfc2V0Q29va2llQWNjZXB0UG9saWN5Ol0pOgorICAgICAgICAoLVtXS1Byb2Nl
c3NQb29sIF9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXI6XSk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0
ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZTo6fl9XZWJLaXRDb29raWVN
YW5hZ2VyUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKToKKyAg
ICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKToKKyAg
ICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeSk6CisgICAgICAg
ICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3kpOgorICAgICAgICAod2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9jb29raWVzKToKKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfY29va2llKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4
dC5jcHA6CisgICAgICAgICh3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkUHJveHk6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2Fk
UHJveHk6OnB1Ymxpc2hQcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lk
ZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkUHJveHlNYXA6OmRvd25sb2FkRmluaXNoZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9O
ZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Ojpz
dGFydExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTo6c3RvcExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Omdsb2JhbE5ldHdv
cmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6dGVybWluYXRlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YXR0ZW1wdFJlbGF1bmNoQWZ0
ZXJDcmFzaElmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OmFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KToKKyAgICAgICAg
KFdlYktpdDo6YW55UHJvY2Vzc1Bvb2xTaG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9h
ZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpk
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OndlYnNpdGVEYXRhU3RvcmVGcm9tU2Vzc2lvbklEKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJvY2Vz
c1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6YW55UHJv
Y2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbik6CisgICAgICAgICogVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6WFBDRXZlbnRIYW5kbGVyOjpoYW5kbGVYUENFdmVudCBjb25z
dCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVNYW5hZ2VyUHJveHkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclBy
b3h5OjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRBbGxDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Ojpn
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFu
YWdlclByb3h5OjpzdXBwbGVtZW50TmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
V2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENsb3NlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5OjpyZWZXZWJD
b250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1h
bmFnZXJQcm94eTo6ZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzYWJs
ZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudEluTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmR1bXBBZENsaWNrQXR0cmlidXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsZWFyQWRDbGlja0F0dHJpYnV0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25P
dmVycmlkZVRpbWVyRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6Om1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9y
VGVzdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9v
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2wpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Z2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlzaFdvcmtl
ckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjp0cnlUYWtlUHJld2FybWVkUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cGFnZUJlZ2luVXNpbmdXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlc3VtZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6Om5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xv
YmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZURvd25sb2FkUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZFN5bmNUb05ldHdvcmtpbmdQcm9jZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29ya1By
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9j
ZXNzUHJlcGFyZVRvU3VzcGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NE
aWRSZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6Y2xlYXJMZWdhY3lQ
cml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5z
ZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjp1c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVzKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6On5XZWJzaXRlRGF0YVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFw
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3RvcmVG
b3JTZXNzaW9uSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERh
dGFBbmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURh
dGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNz
RW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFBydW5lRW50
cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5k
ZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldE1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRUZWxlbWV0cnkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDb29raWVC
bG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNjaGVk
dWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3Rp
Y0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXROb3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRBbGxTdG9yYWdlQWNjZXNzRW50
cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFRpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpsb2dV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNI
YWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpp
c1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENyb3NzU2l0ZUxvYWRz
V2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3Rpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9k
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUb1Nh
bWVTaXRlU3RyaWN0Q29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2
YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm9j
ZXNzUG9vbHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OnNldFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRXBoZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
c2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlc2V0UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpoYXNB
cHBCb3VuZFNlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhckFwcEJvdW5kU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQ
KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRlbnRp
ZmllckluTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURNYXApOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1
bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJv
Y2Vzc1Bvb2wgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpwZW5kaW5nQ29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OmFkZFBlbmRpbmdDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVQZW5kaW5nQ29va2llKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJQZW5kaW5nQ29va2llcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRpZENyZWF0ZU5ldHdv
cmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dl
YnNpdGVEYXRhU3RvcmVTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL2ds
aWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
cm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvc291
cC9XZWJDb29raWVNYW5hZ2VyUHJveHlTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElnbm9yZVRMU0Vycm9ycyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyk6CisKIDIw
MjAtMDgtMTEgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW01h
Y10gQWRkIEV4cGVyaW1lbnRhbCBGZWF0dXJlIHByZWZlcmVuY2UgZm9yIFNXIFZQOQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1h
bmFnZXIuY3BwCmluZGV4IGZjZTIzODk4N2E3ODUwZjE4YzlmMzA2YzUwZTk4Y2U5ODhkMTI1ZmQu
LmViNThmYzk0NWQxOTI1NTQ2MWI4NjBmNGE4YjhkYzYxMjVmNTNmODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdl
ci5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnNldEhUVFBD
b29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksCiAKIHZvaWQg
V2ViQ29va2llTWFuYWdlcjo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fcHJvY2Vzcy5kZWZhdWx0U3RvcmFnZVNlc3Npb24o
KS5jb29raWVBY2NlcHRQb2xpY3koKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9wcm9jZXNz
LnN0b3JhZ2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpLT5jb29r
aWVBY2NlcHRQb2xpY3koKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCAwMjhlMGZi
YjllMTk0OGIwZTA4OWY0YWRkM2IwYTcwNTBjNmVkMWNlLi43ZWJhNGExYjU4MmY5M2QyYmExODBk
MjFiNTUzOTllNmZmNjBkZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMzQ1LDI5ICszNDUsMTkgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJiYKIAogICAgIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZShwYXJhbWV0ZXJz
LmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZSk7CiAKLSAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMuZGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8gc2Vzc2lvbklEID0g
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2Vzc2lvbklEOwotICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lv
bjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwotCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBhZGRTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KKyAgICBmb3IgKGF1dG8mIGRhdGFTdG9yZVBhcmFtZXRlcnMgOiBw
YXJhbWV0ZXJzLmRhdGFTdG9yZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQg
PSBkYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7
CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShkYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAg
IGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgZGF0YVN0b3JlUGFyYW1l
dGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIGRhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQ
YXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgZGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VE
aXJlY3RvcnksIGRhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVk
RGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
KyAgICAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIGRhdGFTdG9yZVBh
cmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBkYXRhU3RvcmVQYXJhbWV0ZXJzLmlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKLQorICAgICAg
ICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJz
LmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgZGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4
dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUoZGF0YVN0b3Jl
UGFyYW1ldGVycykpOwogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBib29sIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSB0cnVlOwotICAgIGFkZFNl
cnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIHNl
cnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUocGFyYW1l
dGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVycy5zZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAg
YWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBkYXRhU3RvcmVQYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUoZGF0YVN0
b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgZGF0YVN0
b3JlUGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKICNlbmRpZgotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25J
RCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGF1dG8qIGRlZmF1bHRTZXNzaW9uID0g
bmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAg
YXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVmYXVsdFNlc3Npb24tPm5ldHdvcmtTdG9y
YWdlU2Vzc2lvbigpOwotICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKLSAgICAgICAgZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uLT5zZXRDb29raWUoY29va2llKTsKKyAgICB9CiAKICAgICBmb3IgKGF1
dG8mIHN1cHBsZW1lbnQgOiBtX3N1cHBsZW1lbnRzLnZhbHVlcygpKQogICAgICAgICBzdXBwbGVt
ZW50LT5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwpAQCAtNDI3LDEyICs0MTcsNiBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyhQcm9jZXNz
SWRlbnRpZmllciBpZGVudAogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlZENyZWRl
bnRpYWxzKCkKIHsKLSAgICBkZWZhdWx0U3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFn
ZSgpLmNsZWFyQ3JlZGVudGlhbHMoKTsKLSAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0
aGlzLT5uZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSkK
LSAgICAgICAgbmV0d29ya1Nlc3Npb24tPmNsZWFyQ3JlZGVudGlhbHMoKTsKLSAgICBlbHNlCi0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCiAgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9u
KFtdIChhdXRvJiBuZXR3b3JrU2Vzc2lvbikgewogICAgICAgICBpZiAoYXV0byBzdG9yYWdlU2Vz
c2lvbiA9IG5ldHdvcmtTZXNzaW9uLm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpKQogICAgICAgICAg
ICAgc3RvcmFnZVNlc3Npb24tPmNyZWRlbnRpYWxTdG9yYWdlKCkuY2xlYXJDcmVkZW50aWFscygp
OwpAQCAtNTEyLDggKzQ5Niw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24o
Y29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQs
IGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50
aWZpZXJCYXNlKQogI2VuZGlmCiB7Ci0gICAgQVNTRVJUKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uZXR3
b3JrU3RvcmFnZVNlc3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwogICAgIGlmICghYWRk
UmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyOCw3ICs1MTAsNyBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBz
ZXNzaW9uSUQsIGJvb2wgc2hvdWxkVQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVu
dGlmaWVyID0gbWFrZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRlQnJvd3NpbmcuIiwg
Y3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwogICAgIGlmIChz
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBhZG9wdENG
KGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKLSAgICBl
bHNlCisgICAgZWxzZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkpCiAgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpjcmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZp
ZXIuZ2V0KCkpOwogCiAgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVz
ZUNvb2tpZUFQSSgpKSB7CkBAIC01NTEsMjEgKzUzMywxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
Ojpjb29raWVBY2NlcHRQb2xpY3lDaGFuZ2VkKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbmV3UG9s
aWN5KQogCiBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIE5ldHdvcmtQcm9jZXNzOjpz
dG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKSBjb25zdAogewot
ICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkK
LSAgICAgICAgcmV0dXJuICZkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKICAgICByZXR1cm4gbV9u
ZXR3b3JrU3RvcmFnZVNlc3Npb25zLmdldChzZXNzaW9uSUQpOwogfQogCi1XZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtQcm9jZXNzOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24o
KSBjb25zdAotewotICAgIGlmICghbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VTZXNzaW9uKQotICAg
ICAgICBtX2RlZmF1bHROZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBwbGF0Zm9ybUNyZWF0ZURlZmF1
bHRTdG9yYWdlU2Vzc2lvbigpOwotICAgIHJldHVybiAqbV9kZWZhdWx0TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
Jik+JiBmdW5jdG9yKQogewotICAgIGZ1bmN0b3IoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpOwog
ICAgIGZvciAoYXV0byYgc3RvcmFnZVNlc3Npb24gOiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMu
dmFsdWVzKCkpCiAgICAgICAgIGZ1bmN0b3IoKnN0b3JhZ2VTZXNzaW9uKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBmMjNmZDU4MGVm
NTRjYWRmODBmNDY4MzY2NTZmYjIzZmQ0ZGRmMmZjLi4xMDExOWRmMzFmNGRlMTY5NDc4NjBiMmNh
ZThjMWI1Yzc3M2Q4ZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5oCkBAIC0xNzAsNyArMTcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb3JF
YWNoTmV0d29ya1N0b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uKiBzdG9yYWdlU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIGNvbnN0OwotICAgIFdl
YkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29u
c3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4g
bmV3VGVzdGluZ1Nlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKTsKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICB2b2lkIGVuc3VyZVNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmLCBib29s
IHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
LCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJik7CkBAIC0zNzEsNyArMzcwLDYg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBwbGF0Zm9ybUNy
ZWF0ZURlZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRSZWNlaXZl
TmV0d29ya1Byb2Nlc3NNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwog
CkBAIC01NDgsNyArNTQ2LDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9u
SUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwog
ICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7Ci0gICAgbXV0YWJs
ZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBtX2RlZmF1
bHROZXR3b3JrU3RvcmFnZVNlc3Npb247CiAKICAgICBSZWZQdHI8U3RvcmFnZU1hbmFnZXJTZXQ+
IG1fc3RvcmFnZU1hbmFnZXJTZXQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAK
aW5kZXggYWE4Y2U3NTNjNjMyMDdkMmE2MGQ1ZDNlMDE3YjJlMGViZjQ1NjI2ZC4uYTI0YzIwYjNm
ODc3ZmEzYmFhYzYyODUyMzNjODdkMTEwZTYxZmYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBJUEM6
OmVuY29kZShlbmNvZGVyLCBuZXR3b3JrQVRTQ29udGV4dC5nZXQoKSk7CiAgICAgZW5jb2RlciA8
PCBzdG9yYWdlQWNjZXNzQVBJRW5hYmxlZDsKICNlbmRpZgotICAgIGVuY29kZXIgPDwgZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgZW5jb2RlciA8PCBkYXRhU3RvcmVQYXJhbWV0ZXJz
OwogI2lmIFVTRShTT1VQKQogICAgIGVuY29kZXIgPDwgY29va2llQWNjZXB0UG9saWN5OwogICAg
IGVuY29kZXIgPDwgaWdub3JlVExTRXJyb3JzOwpAQCAtNjksOSArNjksNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsOwogICAg
IGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQotICAgIGVuY29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlIDw8IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVs
YXk7Ci0jZW5kaWYKICAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZUlUUERhdGFiYXNlOwogICAg
IGVuY29kZXIgPDwgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlOwogICAgIGVuY29k
ZXIgPDwgaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7CkBAIC0xMjEsMTEgKzExOCwxMSBAQCBib29sIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNv
ZGVyLCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIE9w
dGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBkZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVyczsKLSAgICBkZWNvZGVyID4+IGRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzOwotICAgIGlm
ICghZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpCisgICAgT3B0aW9uYWw8VmVjdG9yPFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzPj4gZGF0YVN0b3JlUGFyYW1ldGVyczsKKyAgICBkZWNvZGVy
ID4+IGRhdGFTdG9yZVBhcmFtZXRlcnM7CisgICAgaWYgKCFkYXRhU3RvcmVQYXJhbWV0ZXJzKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzID0gV1RGTW92ZSgqZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOworICAgIHJlc3VsdC5k
YXRhU3RvcmVQYXJhbWV0ZXJzID0gV1RGTW92ZSgqZGF0YVN0b3JlUGFyYW1ldGVycyk7CiAKICNp
ZiBVU0UoU09VUCkKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb29raWVBY2NlcHRQ
b2xpY3kpKQpAQCAtMTQ3LDIwICsxNDQsNiBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwogICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2Vz
cykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE9wdGlvbmFsPFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmVzdWx0LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZERpc2FibGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0jZW5kaWYKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJs
ZUlUUERhdGFiYXNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmgKaW5kZXggY2YxNWNhNDFiZmJlYWNkM2RlMWM2M2UzN2QzNzJkZmUyNDljODQ5
Ni4uNzNjZGYyZmM0NDRiNDVmNjRkM2MzMmM4ZWY2MzZmZmIxNWM1NTkzNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNzIsNyArNzIsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIGJvb2wgc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQ7
CiAjZW5kaWYKIAotICAgIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIGRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gZGF0
YVN0b3JlUGFyYW1ldGVyczsKICAgICAKICNpZiBVU0UoU09VUCkKICAgICBXZWJDb3JlOjpIVFRQ
Q29va2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSB7IFdlYkNvcmU6OkhUVFBDb29r
aWVBY2NlcHRQb2xpY3k6OkFsd2F5c0FjY2VwdCB9OwpAQCAtODYsMTIgKzg2LDcgQEAgc3RydWN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBWZWN0b3I8U3RyaW5nPiB1
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc05vQWNjZXNzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAg
IFN0cmluZyBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OwotICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotICAgIGJvb2wgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVy
bWluYXRpb25EZWxheSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBib29sIHNob3VsZEVuYWJsZUlU
UERhdGFiYXNlIHsgZmFsc2UgfTsKKyAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFiYXNlIHsg
dHJ1ZSB9OwogICAgIGJvb2wgZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlIHsgZmFs
c2UgfTsKICAgICBTdHJpbmcgaHN0c1N0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlIGhzdHNTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0Nv
Y29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vz
c0NvY29hLm1tCmluZGV4IGFmYmQ5MzBmNGIzNWUyNDlhODhhMTA4ZjU1MTFjMDRkN2VlZDM1NTEu
LjhlNzhlNmFmZWFiN2U3MzFkNWUyMjJlYjYwZTI5YjUyZjkxZjBjMmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29j
b2EubW0KQEAgLTg1LDkgKzg1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0MKICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1l
UGVybWFuZW50bHkocGFyYW1ldGVycy5jb250YWluZXJDYWNoZXNEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0
ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5
KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlVGVt
cEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCiAjZW5kaWYKIAogICAgIF9D
Rk5ldHdvcmtTZXRBVFNDb250ZXh0KHBhcmFtZXRlcnMubmV0d29ya0FUU0NvbnRleHQuZ2V0KCkp
OwpAQCAtMTE0LDExICsxMTEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFtOU1VS
TENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgpXTsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBs
YXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBOZXR3b3Jr
UHJvY2Vzczo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lmIFVTRShT
T1VSQ0VfQVBQTElDQVRJT05fQVVESVRfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJvY2Vzc0N1cmwuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKaW5kZXggZDk5Zjlk
ZDY0YmFkNmU0MmRjYzhlM2Y5YjhmMTY5Mjk5N2Y2NzE5Mi4uNDk1MzgxMWIyMTY0ZTg5ODQ2Zjky
NzllNjIyOWQ1OTNlMjI1NmEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKQEAgLTM5LDExICszOSw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNv
bnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUNyZWF0ZURl
ZmF1bHRTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2Vy
dGlmaWNhdGVGb3JIb3N0KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBj
b25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0
Lm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW0KaW5kZXggYzI3MzZlMDI2YTU1ZDNkNDAyMGY4NGY0ZDY5M2QxNmI0NjUyZWQyMy4u
MWUxODQ4OWY5NDYyMGYwMmE3ZDllOWU4NjllYzg2NDkxYjdiYmQ0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0K
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW0KQEAgLTU1LDE1ICs1NSwxMSBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0
OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0dwogICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29r
aWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAgICBpZiAoIXNlc3Npb25J
RC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVu
dGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICFw
YXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSAmJiBw
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQgIT0gUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKICAgICAgICAgdWlQcm9jZXNzQ29va2llU3RvcmFn
ZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRhKHBhcmFtZXRlcnMudWlQcm9jZXNz
Q29va2llU3RvcmFnZUlkZW50aWZpZXIpOwogCiAgICAgbmV0d29ya1Byb2Nlc3MuZW5zdXJlU2Vz
c2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3Vs
ZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0cmluZyhiYXNlLCAnLicsIHNlc3Npb25J
RC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3NDb29raWVTdG9yYWdlKSk7CiAKLSAgICBh
dXRvKiBzZXNzaW9uID0gbmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsK
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMp
Ci0gICAgICAgIHNlc3Npb24tPnNldENvb2tpZShjb29raWUpOwotCiAgICAgbmV0d29ya1Byb2Nl
c3Muc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1By
b2Nlc3MsIFdURk1vdmUocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
UHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtQcm9jZXNzU291cC5jcHAKaW5kZXggNjBmYTU1NmI5ZTRmNDg3OTRkNWFhMmYwNTY5ZmJiZGVl
NjUzMjk5MC4uMDFjYmI3YmE5YmQ4YWMwZmYwYzVkZjRiMzQyMmYzZDc4NDM1NmQyZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291
cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9j
ZXNzU291cC5jcHAKQEAgLTE0NCwxMSArMTQ0LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkK
ICAgICB9KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbj4gTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtQ3JlYXRlRGVmYXVsdFN0b3JhZ2VTZXNzaW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24+KFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotfQotCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMp
CiB7CiAgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRTaG91bGRJZ25vcmVUTFNFcnJvcnMoaWdu
b3JlVExTRXJyb3JzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmNwcAppbmRleCA2ZDBjMTI5YTc0MDUxMGQzODY5NzM3MDVhZDA5MmVm
MTMyY2MwNzVhLi4wNDgxMGIzZTE5YmU5NmNhZDFhZDgyYTQ0ZGNlZGIyNmVmNzgyNjFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
Y3BwCkBAIC00MCwxMyArNDAsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpl
bmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzOwogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzQ29va2llU3RvcmFn
ZUlkZW50aWZpZXI7CiAgICAgZW5jb2RlciA8PCBjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhh
bmRsZTsKLSAgICBlbmNvZGVyIDw8IHBlbmRpbmdDb29raWVzOwogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAgICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPDwg
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgZW5jb2RlciA8PCBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCkBAIC04MywxMiArNzksNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlYwogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZVBhdGhF
eHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRs
ZSk7CiAKLSAgICBPcHRpb25hbDxWZWN0b3I8V2ViQ29yZTo6Q29va2llPj4gcGVuZGluZ0Nvb2tp
ZXM7Ci0gICAgZGVjb2RlciA+PiBwZW5kaW5nQ29va2llczsKLSAgICBpZiAoIXBlbmRpbmdDb29r
aWVzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMucGVuZGlu
Z0Nvb2tpZXMgPSBXVEZNb3ZlKCpwZW5kaW5nQ29va2llcyk7Ci0KICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKICAgICBPcHRpb25hbDxTdHJpbmc+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eTsKICAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKQEAgLTEwMSwxNCAr
OTEsNiBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlYwogICAgIGlmICghaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0g
V1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlPiBpbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAg
ICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlOwotICAgIGlmICghaW5kZXhlZERhdGFiYXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmlu
ZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSNlbmRpZgog
I2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAppbmRleCBmMjdkZjQ4OTgwOWYz
MTk2MDhiNjgwY2IyYThhMWMxNGI3MDE4NDM5Li5lMWIyMzM3MDE5OWZlMzcwMzFlOWRjNWMwNTc4
MTU1MDIxZTM0ZDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmgKQEAgLTUxLDE1ICs1MSwxMSBAQCBzdHJ1Y3QgV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMgewogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHVpUHJvY2Vzc0Nvb2tpZVN0
b3JhZ2VJZGVudGlmaWVyOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjb29raWVTdG9y
YWdlUGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBwZW5k
aW5nQ29va2llczsKICAgICBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBT
dHJpbmcgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFi
YXNlVGVtcEJsb2JEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0jZW5kaWYKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUhUVFBDb29raWVTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcAppbmRleCBhNmUxNTkxZTU1MDQ5ZDI5ZTc3NjE0
MTlhYTMxOGRmMDBhNDc3OThjLi5lNWYxOGVlMWJiOGM2MmEyZTNlNDkyNjc2NTNjMTA5MjA1NDhm
MTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tp
ZVN0b3JlLmNwcApAQCAtNDYsOCArNDYsNiBAQCBuYW1lc3BhY2UgQVBJIHsKIEhUVFBDb29raWVT
dG9yZTo6SFRUUENvb2tpZVN0b3JlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURh
dGFTdG9yZSkKICAgICA6IG1fb3duaW5nRGF0YVN0b3JlKHdlYnNpdGVEYXRhU3RvcmUpCiB7Ci0g
ICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+cHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3Bl
cmF0aW9ucygpKQotICAgICAgICByZWdpc3RlckZvck5ld1Byb2Nlc3NQb29sTm90aWZpY2F0aW9u
cygpOwogfQogCiBIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUoKQpAQCAtNTUsOCAr
NTMsNiBAQCBIVFRQQ29va2llU3RvcmU6On5IVFRQQ29va2llU3RvcmUoKQogICAgIEFTU0VSVCht
X29ic2VydmVycy5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCghbV9vYnNlcnZlZENvb2tpZU1hbmFn
ZXJQcm94eSk7CiAgICAgQVNTRVJUKCFtX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKLQot
ICAgIHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKIH0KIAogdm9p
ZCBIVFRQQ29va2llU3RvcmU6OmZpbHRlckFwcEJvdW5kQ29va2llcyhjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYgY29va2llcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTgxLDMzICs3NywxNiBA
QCB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZmlsdGVyQXBwQm91bmRDb29raWVzKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiBjb29raQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6Y29va2ll
cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+Jik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0
b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFw
b29sKSB7Ci0gICAgICAgIFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGFsbENvb2tpZXM7Ci0gICAg
ICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgICAgIGFsbENvb2tpZXMgPSBnZXRBbGxEZWZh
dWx0VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCk7Ci0gICAgICAgIGFsbENvb2tpZXMuYXBw
ZW5kVmVjdG9yKG1fb3duaW5nRGF0YVN0b3JlLT5wZW5kaW5nQ29va2llcygpKTsKLQotICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
YWxsQ29va2llc10gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmaWx0ZXJBcHBCb3VuZENvb2tp
ZXMoYWxsQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICB9KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29s
LT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tp
ZU1hbmFnZXItPmdldEFsbENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCBb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwb29sID0gV1RGTW92ZShwb29s
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBj
b29raWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigp
OworICAgIGNvb2tpZU1hbmFnZXIuZ2V0QWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiYgY29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5k
Q29va2llcyhjb29raWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9
CiAKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJsLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8qIHBvb2wgPSBtX293bmluZ0RhdGFTdG9yZS0+cHJv
Y2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpOwotICAgIGlmICghcG9vbCkKLSAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0KLSAgICBhdXRvKiBjb29raWVN
YW5hZ2VyID0gcG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KTsKLSAgICBjb29raWVNYW5hZ2VyLT5nZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNz
aW9uSUQoKSwgdXJsLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFdlYkNv
cmU6OkNvb2tpZT4mJiBjb29raWVzKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb29raWVNYW5hZ2Vy
ID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOworICAgIGNvb2tp
ZU1hbmFnZXIuZ2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCwg
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiYg
Y29va2llcykgbXV0YWJsZSB7CiAgICAgICAgIGZpbHRlckFwcEJvdW5kQ29va2llcyhjb29raWVz
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0xMTUsODEgKzk0
LDI5IEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRm9yVVJMKFdURjo6VVJMJiYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6c2V0
Q29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGZpbHRlckFwcEJv
dW5kQ29va2llcyhjb29raWVzLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYm
IGFwcEJvdW5kQ29va2llcykgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgbmVlZHNGbHVzaCA9IGZh
bHNlOwotICAgICAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29s
Rm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFwb29sKSB7Ci0gICAg
ICAgICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGFwcEJvdW5kQ29va2llcykgewotICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBwZW5kaW5nQ29va2llcyB1c2VkIGZvciBkZWZhdWx0U2Vzc2lvbiBi
ZWNhdXNlIHNlc3Npb24gY29va2llcyBjYW5ub3QgYmUgcHJvcGFnYXRlZCB0byBOZXR3b3JrIFBy
b2Nlc3Mgd2l0aCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllci4KLSAgICAgICAgICAg
ICAgICBpZiAobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpID09IFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkgJiYgIWNvb2tpZS5zZXNzaW9uKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG5lZWRzRmx1c2ggPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzZXRDb29raWVJ
bkRlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShjb29raWUpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICBtX293bmluZ0RhdGFTdG9yZS0+YWRkUGVuZGluZ0Nv
b2tpZShjb29raWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobmVlZHNGbHVz
aCkKLSAgICAgICAgICAgICAgICBmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIGNvb2tpZU1h
bmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OwotICAgICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKG1fb3duaW5nRGF0YVN0b3JlLT5z
ZXNzaW9uSUQoKSwgYXBwQm91bmRDb29raWVzLCBbcG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewot
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7CisgICAgICAgIGF1
dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xl
dG9uKCk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIuc2V0Q29va2llcyhtX293bmluZ0RhdGFTdG9y
ZS0+c2Vzc2lvbklEKCksIGFwcEJvdW5kQ29va2llcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIH0pOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQ29va2llKGNv
bnN0IFdlYkNvcmU6OkNvb2tpZSYgY29va2llLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogcG9vbCA9IG1fb3duaW5nRGF0YVN0b3Jl
LT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgaWYgKCFwb29s
KSB7Ci0gICAgICAgIGlmIChtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSAmJiAhY29va2llLnNlc3Npb24pCi0gICAgICAg
ICAgICBkZWxldGVDb29raWVGcm9tRGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvb2tpZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3duaW5nRGF0YVN0b3JlLT5yZW1vdmVQZW5k
aW5nQ29va2llKGNvb2tpZSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBs
ZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdl
ci0+ZGVsZXRlQ29va2llKG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgY29va2llLCBb
cG9vbCA9IFdURk1vdmUocG9vbCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgfSk7CisgICAgYXV0byYgY29va2llTWFuYWdlciA9IFdlYktpdDo6V2ViQ29va2llTWFuYWdl
clByb3h5OjpzaW5nbGV0b24oKTsKKyAgICBjb29raWVNYW5hZ2VyLmRlbGV0ZUNvb2tpZShtX293
bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIGNvb2tpZSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIEhUVFBDb29raWVTdG9yZTo6ZGVsZXRlQWxsQ29va2llcyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byog
cG9vbCA9IG1fb3duaW5nRGF0YVN0b3JlLT5wcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVy
YXRpb25zKCk7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGlmICghbV9vd25pbmdEYXRhU3Rv
cmUtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICBkZWxldGVDb29raWVz
SW5EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoKTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSBwb29sLT5zdXBwbGVtZW50PFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUFs
bENvb2tpZXMobV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpKTsKKyAgICBhdXRvJiBjb29r
aWVNYW5hZ2VyID0gV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwor
ICAgIGNvb2tpZU1hbmFnZXIuZGVsZXRlQWxsQ29va2llcyhtX293bmluZ0RhdGFTdG9yZS0+c2Vz
c2lvbklEKCkpOwogICAgIC8vIEZJWE1FOiBUaGUgQ29tcGxldGlvbkhhbmRsZXIgc2hvdWxkIGJl
IHBhc3NlZCB0byBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbENvb2tpZXMuCiAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBIVFRQQ29va2llU3RvcmU6OnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViQ29y
ZTo6SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRh
U3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMoKTsKLSAgICBpZiAo
IXBvb2wpIHsKLSAgICAgICAgaWYgKCFtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCkuaXNF
cGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHNldEhUVFBDb29raWVBY2NlcHRQb2xpY3lJbkRlZmF1
bHRVSVByb2Nlc3NDb29raWVTdG9yZShwb2xpY3kpOwotICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYXV0byogY29va2llTWFuYWdlciA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeShtX293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHBvbGljeSwg
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFi
bGUgeworICAgIGF1dG8mIGNvb2tpZU1hbmFnZXIgPSBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCk7CisgICAgY29va2llTWFuYWdlci5zZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KG1fb3duaW5nRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgcG9saWN5LCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgfSk7CiB9CkBAIC0yMjcsMjEgKzE1NCw3IEBA
IHZvaWQgSFRUUENvb2tpZVN0b3JlOjpyZWdpc3Rlck9ic2VydmVyKE9ic2VydmVyJiBvYnNlcnZl
cikKIAogICAgIG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2ZXIgPSBtYWtlVW5pcXVlPEFQSVdl
YkNvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyPigqdGhpcyk7CiAKLSAgICBhdXRvKiBwb29sID0g
bV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3RvcmFnZU9wZXJhdGlvbnMo
KTsKLQotICAgIGlmICghcG9vbCkgewotICAgICAgICBBU1NFUlQoIW1fb2JzZXJ2aW5nVUlQcm9j
ZXNzQ29va2llcyk7Ci0KLSAgICAgICAgLy8gTGlzdGVuIGZvciBjb29raWUgbm90aWZpY2F0aW9u
cyBpbiB0aGUgVUlQcm9jZXNzIGluIHRoZSBtZWFudGltZS4KLSAgICAgICAgc3RhcnRPYnNlcnZp
bmdDaGFuZ2VzVG9EZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoW3RoaXNdICgpIHsKLSAgICAg
ICAgICAgIGNvb2tpZXNEaWRDaGFuZ2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgbV9vYnNl
cnZpbmdVSVByb2Nlc3NDb29raWVzID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBwb29sLT5zdXBwbGVtZW50PFdlYktp
dDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2Vy
UHJveHkgPSAmV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpOwogICAg
IG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHktPnJlZ2lzdGVyT2JzZXJ2ZXIobV9vd25pbmdE
YXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNlcnZlcik7CiB9
CiAKQEAgLTI3Niw0NiArMTg5LDEwIEBAIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVzRGlk
Q2hhbmdlKCkKIHZvaWQgSFRUUENvb2tpZVN0b3JlOjpjb29raWVNYW5hZ2VyRGVzdHJveWVkKCkK
IHsKICAgICBtX29ic2VydmVkQ29va2llTWFuYWdlclByb3h5LT51bnJlZ2lzdGVyT2JzZXJ2ZXIo
bV9vd25pbmdEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCAqbV9jb29raWVNYW5hZ2VyUHJveHlPYnNl
cnZlcik7Ci0gICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IG51bGxwdHI7Ci0KLSAg
ICBhdXRvKiBwb29sID0gbV9vd25pbmdEYXRhU3RvcmUtPnByb2Nlc3NQb29sRm9yQ29va2llU3Rv
cmFnZU9wZXJhdGlvbnMoKTsKLQotICAgIGlmICghcG9vbCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eSA9IHBvb2wtPnN1cHBsZW1lbnQ8V2ViS2l0
OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CisgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQ
cm94eSA9ICZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCk7CiAgICAg
bV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlcihtX293bmluZ0Rh
dGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2VydmVyKTsKIH0K
IAotdm9pZCBIVFRQQ29va2llU3RvcmU6OnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmlj
YXRpb25zKCkKLXsKLSAgICBBU1NFUlQoIW1fcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVySWRl
bnRpZmllcik7Ci0KLSAgICBtX3Byb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcklkZW50aWZpZXIg
PSBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIoW3Ro
aXNdKFdlYlByb2Nlc3NQb29sJiBuZXdQcm9jZXNzUG9vbCkgewotICAgICAgICBpZiAoIW1fb3du
aW5nRGF0YVN0b3JlLT5pc0Fzc29jaWF0ZWRQcm9jZXNzUG9vbChuZXdQcm9jZXNzUG9vbCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gTm93IHRoYXQgYW4gYXNzb2NpYXRlZCBw
cm9jZXNzIHBvb2wgZXhpc3RzLCB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBVSSBwcm9jZXNzIGNvb2tp
ZSBzdG9yZQotICAgICAgICAvLyB0byBtYWtlIHN1cmUgYW55IGNoYW5nZXMgYXJlIHJlZmxlY3Rl
ZCB3aXRoaW4gdGhlIG5ldyBwcm9jZXNzIHBvb2wuCi0gICAgICAgIGZsdXNoRGVmYXVsdFVJUHJv
Y2Vzc0Nvb2tpZVN0b3JlKFtdIHsgfSk7Ci0gICAgICAgIG5ld1Byb2Nlc3NQb29sLmVuc3VyZU5l
dHdvcmtQcm9jZXNzKCk7Ci0KLSAgICAgICAgaWYgKG1fY29va2llTWFuYWdlclByb3h5T2JzZXJ2
ZXIpIHsKLSAgICAgICAgICAgIG1fb2JzZXJ2ZWRDb29raWVNYW5hZ2VyUHJveHkgPSBuZXdQcm9j
ZXNzUG9vbC5zdXBwbGVtZW50PFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAg
ICAgICAgICAgbV9vYnNlcnZlZENvb2tpZU1hbmFnZXJQcm94eS0+cmVnaXN0ZXJPYnNlcnZlciht
X293bmluZ0RhdGFTdG9yZS0+c2Vzc2lvbklEKCksICptX2Nvb2tpZU1hbmFnZXJQcm94eU9ic2Vy
dmVyKTsKLSAgICAgICAgfQotICAgICAgICB1bnJlZ2lzdGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3Rp
ZmljYXRpb25zKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSFRUUENvb2tpZVN0b3JlOjp1bnJlZ2lz
dGVyRm9yTmV3UHJvY2Vzc1Bvb2xOb3RpZmljYXRpb25zKCkKLXsKLSAgICBpZiAobV9wcm9jZXNz
UG9vbENyZWF0aW9uTGlzdGVuZXJJZGVudGlmaWVyKQotICAgICAgICBXZWJQcm9jZXNzUG9vbDo6
dW5yZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lcihtX3Byb2Nlc3NQb29sQ3JlYXRp
b25MaXN0ZW5lcklkZW50aWZpZXIpOwotCi0gICAgbV9wcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVu
ZXJJZGVudGlmaWVyID0gMDsKLX0KLQogI2lmICFQTEFURk9STShDT0NPQSkKIHZvaWQgSFRUUENv
b2tpZVN0b3JlOjpmbHVzaERlZmF1bHRVSVByb2Nlc3NDb29raWVTdG9yZShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsgY29tcGxldGlvbkhhbmRsZXIoKTsg
fQogVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gSFRUUENvb2tpZVN0b3JlOjpnZXRBbGxEZWZhdWx0
VUlQcm9jZXNzQ29va2llU3RvcmVDb29raWVzKCkgeyByZXR1cm4geyB9OyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmgKaW5kZXggMjBkZWM2
NTY1ODhhMzU4YmNkMWFmNDBjZmU3ZmZhNDMyN2YyNGVjNC4uYjBiMmI4MTEzNTJlODg0YWQ2ZTI0
YjllZDEyYzdhNzFmNjE3NDUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUhUVFBDb29raWVTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9BUElIVFRQQ29va2llU3RvcmUuaApAQCAtODIsOSArODIsNiBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEhUVFBDb29raWVTdG9yZShXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmKTsKIAotICAg
IHZvaWQgcmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLSAgICB2b2lk
IHVucmVnaXN0ZXJGb3JOZXdQcm9jZXNzUG9vbE5vdGlmaWNhdGlvbnMoKTsKLQogICAgIHZvaWQg
Zmx1c2hEZWZhdWx0VUlQcm9jZXNzQ29va2llU3RvcmUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKICAgICBzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4gZ2V0QWxsRGVmYXVsdFVJ
UHJvY2Vzc0Nvb2tpZVN0b3JlQ29va2llcygpOwogICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUlu
RGVmYXVsdFVJUHJvY2Vzc0Nvb2tpZVN0b3JlKGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKaW5kZXggOGZiOGUwOTZk
NDY2ZTIzNjFjZGI1MjAzZWZjOWM1NjhjOWU2OTUxMS4uY2IxMGFhMGU2MjM5MjRlYTFlOTc2Nzcw
NDE2NTFjZWRiZTgxYTA4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuY3BwCkBAIC00MjYsOSArNDI2LDkgQEAgdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9T
ZXJ2ZXIoV0tDb250ZXh0UmVmLCBXS1VSTFJlZikKIHsKIH0KIAotV0tDb29raWVNYW5hZ2VyUmVm
IFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCitXS0Nv
b2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYpCiB7
Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1
cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvQVBJKCZXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkp
OwogfQogCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9y
ZShXS0NvbnRleHRSZWYpCkBAIC01NDMsOSArNTQzLDggQEAgdm9pZCBXS0NvbnRleHRTZXRKYXZh
U2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChXS0NvbnRleHRSZWYgY29udGV4dFJl
ZiwKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlwdEdhcmJhZ2VD
b2xsZWN0b3JUaW1lckVuYWJsZWQoZW5hYmxlKTsKIH0KIAotdm9pZCBXS0NvbnRleHRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpCit2b2lkIFdLQ29udGV4dFVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0NvbnRleHRSZWYpCiB7Ci0gICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dCktPnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwogfQogCiB2b2lkIFdLQ29u
dGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhXS0NvbnRl
eHRSZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCkBAIC01NTMsMTMgKzU1Miw2IEBAIHZvaWQgV0tD
b250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXRUZXN0aW5nKFdLQ29u
dGV4dFJlZiBjb250ZXh0CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnNldEFsbG93c0Fu
eVNTTENlcnRpZmljYXRlRm9yV2ViU29ja2V0KGFsbG93cyk7CiB9CiAKLXZvaWQgV0tDb250ZXh0
U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhXS0NvbnRl
eHRSZWYgY29udGV4dCwgYm9vbCBhbGxvd3MpCi17Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXIoYWxsb3dzKTsKLSNlbmRpZgotfQotCiB2b2lkIFdLQ29udGV4dENs
ZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgV2ViS2l0
Ojp0b0ltcGwoY29udGV4dCktPmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKQEAgLTY2NiwxMiAr
NjU4LDExIEBAIHZvaWQgV0tDb250ZXh0Q2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0
b3JhZ2UoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIHZvCiAgICAgfSk7CiB9CiAKLXZvaWQgV0tD
b250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRleHRSZWYgY29u
dGV4dFJlZiwgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQordm9pZCBXS0Nv
bnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiwgYm9v
bCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQogewotICAgIFdlYktpdDo6dG9JbXBs
KGNvbnRleHRSZWYpLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MpOworICAgIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNl
dFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk7CiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUo
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiB3ZWJzaXRlRGF0
YVN0b3JlKQordm9pZCBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShXS0NvbnRl
eHRSZWYsIFdLV2Vic2l0ZURhdGFTdG9yZVJlZikKIHsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250
ZXh0UmVmKS0+c2V0UHJpbWFyeURhdGFTdG9yZSgqV2ViS2l0Ojp0b0ltcGwod2Vic2l0ZURhdGFT
dG9yZSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tD
b250ZXh0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
UHJpdmF0ZS5oCmluZGV4IDM5YzBjYTdjYzZhNmI2YjU1YzgwM2I4M2NkZTViMzhiZmMxOWM5OGUu
Ljg4NDc0ZDMwYTBkMGJiODRhMTliNjEwYzJjMTViOWFjMTJiZDA5Y2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKQEAgLTg3LDEwICs4
Nyw5IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKFdL
Q29udGV4dFJlZik7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29y
a2VycyhXS0NvbnRleHRSZWYpOwogCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRBbGxvd3NB
bnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldFRlc3RpbmcoV0tDb250ZXh0UmVmLCBib29sKTsK
LVdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlclRlc3RpbmcoV0tDb250ZXh0UmVmLCBib29sKTsKIAogLy8gVGVzdCBvbmx5LiBT
aG91bGQgYmUgY2FsbGVkIGJlZm9yZSBhbnkgc2Vjb25kYXJ5IHByb2Nlc3NlcyBhcmUgc3RhcnRl
ZC4KLVdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbihXS0Nv
bnRleHRSZWYgY29udGV4dCk7CitXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRVc2VUZXN0aW5nTmV0
d29ya1Nlc3Npb24oV0tDb250ZXh0UmVmIGNvbnRleHQpIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiAK
IC8vIFRlc3Qgb25seS4gU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgcnVubmluZyBhIHRlc3QuCiBX
S19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhckNhY2hlZENyZWRlbnRpYWxzKFdLQ29udGV4dFJl
ZiBjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1Byb2Nlc3NQb29sLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
UHJvY2Vzc1Bvb2wubW0KaW5kZXggNjgyMGY0OTFlOTQ3NTk1ZTAwZDBjYmQyZDU4ODk1MjA3MDNh
NTgwOC4uMTlhZDdiODkxNzczMWJiMjFkYTA5YWJiMGY5Yjk0NjBiMWY5ZGZjNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0KQEAg
LTIwMSw3ICsyMDEsNyBAQCBzdGF0aWMgV0tQcm9jZXNzUG9vbCAqc2hhcmVkUHJvY2Vzc1Bvb2w7
CiAKIC0gKHZvaWQpX3NldENvb2tpZUFjY2VwdFBvbGljeTooTlNIVFRQQ29va2llQWNjZXB0UG9s
aWN5KXBvbGljeQogewotICAgIF9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBXZWJDb3JlOjp0b0hUVFBDb29raWVBY2NlcHRQb2xp
Y3kocG9saWN5KSwgW10oKSB7IH0pOworICAgIFdlYktpdDo6V2ViQ29va2llTWFuYWdlclByb3h5
OjpzaW5nbGV0b24oKS5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCksIFdlYkNvcmU6OnRvSFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xp
Y3kpLCBbXSgpIHsgfSk7CiB9CiAKIC0gKGlkKV9vYmplY3RGb3JCdW5kbGVQYXJhbWV0ZXI6KE5T
U3RyaW5nICopcGFyYW1ldGVyCkBAIC00MzcsNyArNDM3LDcgQEAgc3RhdGljIE5TRGljdGlvbmFy
eSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIYXNo
TWFwPFMKIAogLSAodm9pZClfc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczooQk9P
TCl1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzCiB7Ci0gICAgX3Byb2Nlc3NQb29sLT5z
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MpOworICAgIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9CiAK
IC0gKHBpZF90KV9uZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIKQEAgLTU3OCwxMyArNTc4LDYgQEAg
c3RhdGljIE5TRGljdGlvbmFyeSAqcG9saWNpZXNIYXNoTWFwVG9EaWN0aW9uYXJ5KGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBIYXNoTWFwPFMKICAgICBfcHJvY2Vzc1Bvb2wtPnN5bnRoZXNpemVBcHBJ
c0JhY2tncm91bmQoYmFja2dyb3VuZCk7CiB9CiAKLS0gKHZvaWQpX3NldEFsbG93c0FueVNTTENl
cnRpZmljYXRlRm9yU2VydmljZVdvcmtlcjooQk9PTClhbGxvd3MKLXsKLSNpZiBFTkFCTEUoU0VS
VklDRV9XT1JLRVIpCi0gICAgX3Byb2Nlc3NQb29sLT5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZUZvclNlcnZpY2VXb3JrZXIoYWxsb3dzKTsKLSNlbmRpZgotfQotCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKIC0gKGlkIDxfV0tHZW9sb2NhdGlvbkNvcmVMb2NhdGlvblByb3ZpZGVyPilfY29y
ZUxvY2F0aW9uUHJvdmlkZXIKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKaW5kZXggZDM5ZGIxZGRiMDljMDhj
Yzc4MDE3ZDRlMWY0NWZjOGQyNTZmNWNkZi4uODg1NGVmNmMzMDZmYzEwYzc5N2I4MzM5OTAyZDU1
NGI0MDQyZjNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKQEAgLTEyMiw3ICsxMjIsNiBAQAogLSAodm9p
ZClfcHJlY29ubmVjdFRvU2VydmVyOihOU1VSTCAqKXNlcnZlclVSTCBXS19BUElfREVQUkVDQVRF
RF9XSVRIX1JFUExBQ0VNRU5UKCJXS1dlYlZpZXcuX3ByZWNvbm5lY3RUb1NlcnZlciIsIG1hY29z
KDEwLjEzLjQsIFdLX01BQ19UQkEpLCBpb3MoMTEuMywgV0tfSU9TX1RCQSkpOwogCiAvLyBUZXN0
IG9ubHkuCi0tICh2b2lkKV9zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3Jr
ZXI6KEJPT0wpYWxsb3dzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMS4z
KSk7CiAtICh2b2lkKV9nZXRBY3RpdmVQYWdlc09yaWdpbnNJbldlYlByb2Nlc3NGb3JUZXN0aW5n
OihwaWRfdClwaWQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxOU1N0cmluZyAq
PiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBp
b3MoMTIuMikpOwogLSAoQk9PTClfbmV0d29ya1Byb2Nlc3NIYXNFbnRpdGxlbWVudEZvclRlc3Rp
bmc6KE5TU3RyaW5nICopZW50aXRsZW1lbnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40
KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX2NsZWFyUGVybWFuZW50Q3JlZGVudGlhbHNGb3JQcm90
ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVjdGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Q29va2llTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAppbmRl
eCAxZWU3M2ViYzBlYTAzNmY4NmIzZmU5NDQxNDkwNzJlNmFjNGRjNzY3Li5mYjk4ZDA1OTBjOWFk
MjgyMzVkNzExYjdjYWFjOWJjNTVjOWE2NDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApAQCAtNjQsOCAr
NjQsNyBAQCBzdHJ1Y3QgX1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlIHsKIAogICAgIH5fV2Vi
S2l0Q29va2llTWFuYWdlclByaXZhdGUoKQogICAgIHsKLSAgICAgICAgZm9yIChhdXRvKiBwcm9j
ZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhkYXRhTWFu
YWdlcikpCi0gICAgICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5h
Z2VyUHJveHk+KCktPnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxw
dHIpOworICAgICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLnNldENvb2tp
ZU9ic2VydmVyQ2FsbGJhY2soc2Vzc2lvbklEKCksIG51bGxwdHIpOwogICAgIH0KIAogICAgIFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGF0YU1hbmFnZXI7CkBAIC0xMzksMTEgKzEzOCw5IEBA
IFdlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUoV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyKiBkYXRhTWFuCiB7CiAgICAgV2ViS2l0Q29va2llTWFuYWdlciogbWFu
YWdlciA9IFdFQktJVF9DT09LSUVfTUFOQUdFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQ09P
S0lFX01BTkFHRVIsIG51bGxwdHIpKTsKICAgICBtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlciA9
IGRhdGFNYW5hZ2VyOwotICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKSB7
Ci0gICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KS0+c2V0Q29va2llT2JzZXJ2ZXJDYWxsYmFjayhtYW5hZ2VyLT5wcml2LT5zZXNzaW9uSUQoKSwg
W21hbmFnZXJdIHsKLSAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwgc2lnbmFsc1tD
SEFOR0VEXSwgMCk7Ci0gICAgICAgIH0pOwotICAgIH0KKyAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnNpbmdsZXRvbigpLnNldENvb2tpZU9ic2VydmVyQ2FsbGJhY2sobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgIGdfc2lnbmFsX2VtaXQobWFuYWdlciwg
c2lnbmFsc1tDSEFOR0VEXSwgMCk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1hbmFnZXI7CiB9CiAK
QEAgLTE3Myw4ICsxNzAsNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lz
dGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiAgICAgaWYgKHNlc3Np
b25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFn
ZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShzZXNz
aW9uSUQsIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50
U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xl
dG9uKCkuc2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBTdHJpbmc6OmZyb21V
VEY4KGZpbGVuYW1lKSwgdG9Tb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKHN0b3JhZ2Up
KTsKIH0KIAogLyoqCkBAIC0xOTIsOCArMTg4LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFn
ZXJfc2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgV2ViS2kK
IHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2Vy
KSk7CiAKLSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRIVFRQ
Q29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB0b0hUVFBDb29r
aWVBY2NlcHRQb2xpY3kocG9saWN5KSwgW10oKSB7IH0pOworICAgIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCkuc2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2
LT5zZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSksIFtdKCkgeyB9
KTsKIH0KIAogLyoqCkBAIC0yMjQsNyArMjE5LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFn
ZXJfZ2V0X2FjY2VwdF9wb2xpY3koV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgR0NhbmMK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFu
YWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OnNpbmdsZXRvbigpLmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3kobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oV2ViQ29yZTo6SFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQo
KSwgdG9XZWJLaXRDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiAgICAgfSk7CiB9CkBAIC0y
NjksMTEgKzI2NCw3IEBAIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2FkZF9jb29raWUoV2Vi
S2l0Q29va2llTWFuYWdlciogbWFuYWdlciwgU291cENvb2tpZSoKICAgICBnX3JldHVybl9pZl9m
YWlsKGNvb2tpZSk7CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFz
a19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAg
Ly8gQ29va2llcyBhcmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFi
YXNlIG9uIGRpc2sgcmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0
aGVtIGZyb20sIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3Qg
YXV0byYgcHJvY2Vzc1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bv
b2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1
cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpLT5zZXRDb29raWVzKG1hbmFnZXItPnBy
aXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShjb29raWUpIH0sIFt0YXNrID0gV1RG
TW92ZSh0YXNrKV0oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5z
ZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25JRCgpLCB7IFdlYkNvcmU6OkNvb2tpZShj
b29raWUpIH0sIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSB7CiAgICAgICAgIGdfdGFza19yZXR1
cm5fYm9vbGVhbih0YXNrLmdldCgpLCBUUlVFKTsKICAgICB9KTsKIH0KQEAgLTMyMCwxMSArMzEx
LDcgQEAgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Nvb2tpZXMoV2ViS2l0Q29va2ll
TWFuYWdlciogbWFuYWdlciwgY29uc3QgZ2NoYXIKICAgICBnX3JldHVybl9pZl9mYWlsKHVyaSk7
CiAKICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdl
ciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotCi0gICAgLy8gQ29va2llcyBh
cmUgcmVhZC93cml0dGVuIGZyb20vdG8gdGhlIHNhbWUgU1FMaXRlIGRhdGFiYXNlIG9uIGRpc2sg
cmVnYXJkbGVzcwotICAgIC8vIG9mIHRoZSBwcm9jZXNzIHdlIGFjY2VzcyB0aGVtIGZyb20sIHNv
IGp1c3QgdXNlIHRoZSBmaXJzdCBwcm9jZXNzIHBvb2wuCi0gICAgY29uc3QgYXV0byYgcHJvY2Vz
c1Bvb2xzID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXIt
PnByaXYtPmRhdGFNYW5hZ2VyKTsKLSAgICBwcm9jZXNzUG9vbHNbMF0tPnN1cHBsZW1lbnQ8V2Vi
Q29va2llTWFuYWdlclByb3h5PigpLT5nZXRDb29raWVzKG1hbmFnZXItPnByaXYtPnNlc3Npb25J
RCgpLCBVUkwoVVJMKCksIFN0cmluZzo6ZnJvbVVURjgodXJpKSksIFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvb2tpZXMpIHsKKyAgICBXZWJD
b29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpLmdldENvb2tpZXMobWFuYWdlci0+cHJpdi0+
c2Vzc2lvbklEKCksIFVSTChVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKSwgW3Rhc2sgPSBX
VEZNb3ZlKHRhc2spXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYgY29va2llcykgewog
ICAgICAgICBHTGlzdCogY29va2llc0xpc3QgPSBudWxscHRyOwogICAgICAgICBmb3IgKGF1dG8m
IGNvb2tpZSA6IGNvb2tpZXMpCiAgICAgICAgICAgICBjb29raWVzTGlzdCA9IGdfbGlzdF9wcmVw
ZW5kKGNvb2tpZXNMaXN0LCBjb29raWUudG9Tb3VwQ29va2llKCkpOwpAQCAtMzc4LDExICszNjUs
NyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llKFdlYktpdENvb2tp
ZU1hbmFnZXIqIG1hbmFnZXIsIFNvdXBDb29raQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29va2ll
KTsKIAogICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhtYW5h
Z2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7Ci0KLSAgICAvLyBDb29raWVz
IGFyZSByZWFkL3dyaXR0ZW4gZnJvbS90byB0aGUgc2FtZSBTUUxpdGUgZGF0YWJhc2Ugb24gZGlz
ayByZWdhcmRsZXNzCi0gICAgLy8gb2YgdGhlIHByb2Nlc3Mgd2UgYWNjZXNzIHRoZW0gZnJvbSwg
c28ganVzdCB1c2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbC4KLSAgICBjb25zdCBhdXRvJiBwcm9j
ZXNzUG9vbHMgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9jZXNzUG9vbHMobWFuYWdl
ci0+cHJpdi0+ZGF0YU1hbmFnZXIpOwotICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmRlbGV0ZUNvb2tpZShtYW5hZ2VyLT5wcml2LT5zZXNz
aW9uSUQoKSwgV2ViQ29yZTo6Q29va2llKGNvb2tpZSksIFt0YXNrID0gV1RGTW92ZSh0YXNrKV0o
KSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5kZWxldGVDb29raWUo
bWFuYWdlci0+cHJpdi0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OkNvb2tpZShjb29raWUpLCBbdGFz
ayA9IFdURk1vdmUodGFzayldKCkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2Jvb2xlYW4odGFz
ay5nZXQoKSwgVFJVRSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IGQwMzc5MzllYmRkZDg1
M2RiOGRlYjNhZDUxZTk1N2Q4YTU4OWNmY2IuLmEzMDA0YmY2ZTA2ZGQyOWMwMTM1OGRkMGQ0NzY2
MGU4ZTAwYjVhMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC00MDcsNyArNDA3LDYgQEAgc3RhdGljIHZvaWQg
d2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgY29u
ZmlndXJhdGlvbi5zZXRIU1RTU3RvcmFnZURpcmVjdG9yeShGaWxlU3lzdGVtOjpzdHJpbmdGcm9t
RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
aHN0c19jYWNoZV9kaXJlY3RvcnkocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKSkpOwog
CiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNvbmZpZ3Vy
YXRpb24pOwotICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRQcmltYXJ5RGF0YVN0b3JlKHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIu
Z2V0KCkpKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5kbGVyKFt3
ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgLy8gU2luayB0
aGUgZmxvYXRpbmcgcmVmLgogICAgICAgICBHUmVmUHRyPFdlYktpdFVzZXJNZXNzYWdlPiB1c2Vy
TWVzc2FnZSA9IHdlYmtpdFVzZXJNZXNzYWdlQ3JlYXRlKFdURk1vdmUobWVzc2FnZSksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggZTZlNGFj
YzExYTkxYTM3MGZiNjg4ZmFiNDhkMjUyMDY5NmQ1MDI4Zi4uNTJlYjM5OTg4YWFlMDBkZWRlZWI3
YjQ2NDdmNDQyNDIwYmQyMzE4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTEzOTMsOCAr
MTM5Myw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZShjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwKICAgICBpZiAoIWNvb2tpZU9iamVjdC5n
ZXRCb29sZWFuKCJodHRwT25seSJfcywgY29va2llLmh0dHBPbmx5KSkKICAgICAgICAgQVNZTkNf
RkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwg
IlRoZSBwYXJhbWV0ZXIgJ2h0dHBPbmx5JyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgV2ViQ29v
a2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29va2llTWFuYWdlci0+c2V0Q29va2ll
cyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxs
YmFja10oKSB7CisgICAgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaW5nbGV0b24oKS5zZXRDb29r
aWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2Nh
bGxiYWNrXSgpIHsKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAgICAgfSk7CiB9
CkBAIC0xNDEwLDggKzE0MDksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVB
bGxDb29raWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaQogCiAgICAgU3Ry
aW5nIGhvc3QgPSBhY3RpdmVVUkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKLSAgICBXZWJDb29raWVN
YW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdl
YkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVz
Rm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0
LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworICAgIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdl
LT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdE
b3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6Z2V0U2Vzc2lvblBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRh
Pj4mIG91dF9wZXJtaXNzaW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1eGlsaWFyeVByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxp
YXJ5UHJvY2Vzc1Byb3h5LmgKaW5kZXggNDFjMGEwZmJmNTA2ZWZhMTQwOGJjZWY5YWY4YTkwYjg1
YTFhZDA4YS4uNGYzOThiNTMwZjYwODU3NWM5NjdiODNjNzRmYTJmNDMyOGY2Y2UzYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5LmgKQEAgLTQ4
LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkF1eGlsaWFyeVByb2Nlc3NQcm94eSgp
OwogCiAgICAgdm9pZCBjb25uZWN0KCk7Ci0gICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdGVybWluYXRlKCk7CiAKICAgICB2aXJ0dWFsIFByb2Nlc3NUaHJvdHRsZXImIHRo
cm90dGxlcigpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5kZXggNWQ5NjBlMWYzMjZkMmI3MjkxZTcxMzA5NmRl
ZWVlZDk4Y2FjYTA2YS4uMTMxZWQ1OTQ3YzMzYzVkZDc4N2JmMGQ1ZmY2ZDZhNDg2MjRkMTUyNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9v
bENvY29hLm1tCkBAIC0xMzQsOCArMTM0LDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVm
YXVsdHNJZk5lZWRlZCgpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBw
cmVzc2lvblN0YXRlKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9u
ZXR3b3JrUHJvY2Vzcy0+c2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkKCkpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNl
dFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpKTsK
IAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGlmICghbV9wcm9jZXNzU3Vw
cHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCkpCkBAIC0xNjYsOCArMTY1LDYg
QEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKCkKICAgICBpZiAoIVtb
TlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJXZWJLaXRT
dXBwcmVzc01lbW9yeVByZXNzdXJlSGFuZGxlciJdKQogICAgICAgICBpbnN0YWxsTWVtb3J5UHJl
c3N1cmVIYW5kbGVyKCk7CiAKLSAgICBzZXRMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQobWFrZVVuaXF1ZTxMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KCkpOwotCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAgIGlm
ICghX01HQ2FjaGVWYWxpZCgpKSB7CiAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57CkBA
IC00ODAsMjIgKzQ3Nyw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6
ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAKICAgICBOU1VzZXJE
ZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
OwogCi0gICAgewotICAgICAgICBib29sIGlzU2FmYXJpID0gZmFsc2U7Ci0gICAgICAgIGJvb2wg
aXNNaW5pQnJvd3NlciA9IGZhbHNlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAg
IGlzU2FmYXJpID0gV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCk7Ci0g
ICAgICAgIGlzTWluaUJyb3dzZXIgPSBXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNNaW5pQnJv
d3NlcigpOwotI2VsaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpc1NhZmFyaSA9IFdlYkNvcmU6
Ok1hY0FwcGxpY2F0aW9uOjppc1NhZmFyaSgpOwotICAgICAgICBpc01pbmlCcm93c2VyID0gV2Vi
Q29yZTo6TWFjQXBwbGljYXRpb246OmlzTWluaUJyb3dzZXIoKTsKLSNlbmRpZgotICAgICAgICBp
ZiAoaXNTYWZhcmkgfHwgaXNNaW5pQnJvd3NlcikgewotICAgICAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cFBy
b3h5ID0gVVJMKFVSTCgpLCBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OihOU1N0cmluZyAqKVdlYktp
dDJIVFRQUHJveHlEZWZhdWx0c0tleV0pOwotICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaHR0cHNQcm94eSA9
IFVSTChVUkwoKSwgW2RlZmF1bHRzIHN0cmluZ0ZvcktleTooTlNTdHJpbmcgKilXZWJLaXQySFRU
UFNQcm94eURlZmF1bHRzS2V5XSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBwYXJhbWV0ZXJz
Lm5ldHdvcmtBVFNDb250ZXh0ID0gYWRvcHRDRihfQ0ZOZXR3b3JrQ29weUFUU0NvbnRleHQoKSk7
CiAKICAgICBwYXJhbWV0ZXJzLnNob3VsZFN1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyID0g
W2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0U3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXJE
ZWZhdWx0c0tleV07CkBAIC01MDYsMTcgKzQ4NywxMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YQogICAgIHBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIgPSBpZGVu
dGlmeWluZ0RhdGFGcm9tQ29va2llU3RvcmFnZShbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVk
SFRUUENvb2tpZVN0b3JhZ2VdIF9jb29raWVTdG9yYWdlXSk7CiAjZW5kaWYKIAotICAgIHBhcmFt
ZXRlcnMuc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQgPSBzdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCgp
OwotCiAgICAgTlNOdW1iZXIgKmRhdGFiYXNlRW5hYmxlZFZhbHVlID0gW2RlZmF1bHRzIG9iamVj
dEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkludGVybmFsRGVidWclQCIsIFdl
YlByZWZlcmVuY2VzS2V5Ojppc0lUUERhdGFiYXNlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCldXTsKICAgICBpZiAoZGF0YWJhc2VFbmFibGVkVmFsdWUpCiAgICAgICAgIHBhcmFt
ZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBkYXRhYmFzZUVuYWJsZWRWYWx1ZS5ib29s
VmFsdWU7Ci0gICAgZWxzZQotICAgICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFi
YXNlID0gbV9kZWZhdWx0UGFnZUdyb3VwLT5wcmVmZXJlbmNlcygpLmlzSVRQRGF0YWJhc2VFbmFi
bGVkKCk7CiAKICAgICBwYXJhbWV0ZXJzLmVuYWJsZUFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZSA9IFtkZWZhdWx0cyBib29sRm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRXhw
ZXJpbWVudGFsJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6YWRDbGlja0F0dHJpYnV0aW9uRGVidWdN
b2RlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKLQotICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFw
cEhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbiA9IGhhc1JlcXVlc3Rl
ZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAppbmRleCBjNWRlNGU3ZDBmNTkx
OTRmNDNhMDIzYjA4OWUzNzJjNThjZjhlZTA2Li5hOTdhNjJkZGMwOGNkOWUzYWQ4MWViZjZjZDAw
N2NkYzFjMmE0ZTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkUHJveHkuY3BwCkBAIC03NSw4ICs3NSw3IEBAIHZvaWQgRG93bmxvYWRQcm94
eTo6Y2FuY2VsKCkKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSwgMCk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkNhbmNlbERvd25sb2FkKG1fZG93bmxvYWRJRCksIDApOwogfQogCiB2b2lkIERv
d25sb2FkUHJveHk6OmludmFsaWRhdGUoKQpAQCAtMTA2LDEyICsxMDUsMTAgQEAgdm9pZCBEb3du
bG9hZFByb3h5OjpwdWJsaXNoUHJvZ3Jlc3MoY29uc3QgVVJMJiBVUkwpCiAgICAgaWYgKCFtX3By
b2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nl
c3MgPSBtX3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAgIGJvb2wgY3JlYXRlZFNhbmRib3hFeHRl
bnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoVVJMLmZpbGVTeXN0ZW1QYXRo
KCksIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgaGFuZGxlKTsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiwgY3JlYXRlZFNhbmRib3hFeHRl
bnNpb24pOwotICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlB1Ymxpc2hEb3dubG9hZFByb2dyZXNzKG1fZG93bmxvYWRJRCwgVVJMLCBoYW5kbGUp
LCAwKTsKLSAgICB9CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZTsKKyAgICBi
b29sIGNyZWF0ZWRTYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlKFVSTC5maWxlU3lzdGVtUGF0aCgpLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3Jp
dGUsIGhhbmRsZSk7CisgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkU2FuZGJveEV4dGVuc2lvbiwg
Y3JlYXRlZFNhbmRib3hFeHRlbnNpb24pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmds
ZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQdWJsaXNoRG93bmxvYWRQcm9n
cmVzcyhtX2Rvd25sb2FkSUQsIFVSTCwgaGFuZGxlKSwgMCk7CiB9CiAjZW5kaWYgLy8gUExBVEZP
Uk0oQ09DT0EpCiAKQEAgLTE0NiwxNSArMTQzLDcgQEAgdm9pZCBEb3dubG9hZFByb3h5Ojp3aWxs
U2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcHJvcG9zZWRSZXF1ZXN0LCBjb25zdCBSZXMK
IAogICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkud2lsbFNlbmRSZXF1ZXN0KCp0
aGlzLCBXVEZNb3ZlKHByb3Bvc2VkUmVxdWVzdCksIHJlZGlyZWN0UmVzcG9uc2UsIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFJlc291cmNlUmVxdWVzdCYmIG5ld1JlcXVl
c3QpIHsKICAgICAgICAgbV9yZWRpcmVjdENoYWluLmFwcGVuZChuZXdSZXF1ZXN0LnVybCgpKTsK
LQotICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fcHJvY2Vzc1Bvb2wpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgYXV0byogbmV0d29ya1Byb2Nlc3NQcm94eSA9IHByb3RlY3Rl
ZFRoaXMtPm1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIGlmICghbmV0
d29ya1Byb2Nlc3NQcm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBuZXR3b3Jr
UHJvY2Vzc1Byb3h5LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVXaWxs
U2VuZFJlcXVlc3QocHJvdGVjdGVkVGhpcy0+bV9kb3dubG9hZElELCBuZXdSZXF1ZXN0KSwgMCk7
CisgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpDb250aW51ZVdpbGxTZW5kUmVxdWVzdChwcm90ZWN0ZWRUaGlzLT5t
X2Rvd25sb2FkSUQsIG5ld1JlcXVlc3QpLCAwKTsKICAgICB9KTsKIH0KIApAQCAtMTc5LDE2ICsx
NjgsMTIgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0
ZWRGaWxlbmFtZUFzeW5jKERvd25sb2FkSUQgZG93bmwKICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVu
dCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCp0aGlzLCBSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6c2FuaXRpemVTdWdnZXN0ZWRGaWxlbmFtZShzdWdnZXN0ZWRGaWxlbmFt
ZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRvd25sb2FkSUQgPSBk
b3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmluZyBkZXN0aW5h
dGlvbikgeworICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGlu
YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoKnRoaXMsIFJlc291cmNlUmVzcG9uc2VCYXNlOjpz
YW5pdGl6ZVN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKSwgW2Rvd25sb2FkSUQg
PSBkb3dubG9hZElEXSAoQWxsb3dPdmVyd3JpdGUgYWxsb3dPdmVyd3JpdGUsIFN0cmluZyBkZXN0
aW5hdGlvbikgewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVu
c2lvbkhhbmRsZTsKICAgICAgICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKICAgICAgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShkZXN0aW5hdGlvbiwgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIAotICAg
ICAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3Mo
KSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6Q29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElE
LCBkZXN0aW5hdGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0g
QWxsb3dPdmVyd3JpdGU6OlllcyksIDApOworICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNpZGVQ
ZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZSwgYWxsb3dPdmVyd3JpdGUgPT0gQWxsb3dPdmVyd3JpdGU6Olllcyks
IDApOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAKaW5kZXggNzZhMDcxNTdiNTkxYWFjZTUwZjE1
ZDE1MjVkYmNmYjhjNmE0YmJjOC4uOWZkZjk3YTAzMTFhNWQ3Y2IzMTg2NGU3OTA2YmFjZGY2ZjYx
OTYxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHlNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5TWFwLmNwcApAQCAtMTA5LDkgKzEwOSw2IEBAIHZvaWQgRG93bmxvYWRQcm94
eU1hcDo6ZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZFByb3h5JiBkb3dubG9hZFByb3h5KQogCiAg
ICAgUkVMRUFTRV9MT0coTG9hZGluZywgIlJlbW92aW5nIGRvd25sb2FkICUiIFBSSXU2NCAiIGZy
b20gVUlQcm9jZXNzIERvd25sb2FkUHJveHlNYXAiLCBkb3dubG9hZElELmRvd25sb2FkSUQoKSk7
CiAKLSAgICAvLyBUaGUgRG93bmxvYWRQcm94eSBtYXkgYmUgaG9sZGluZyB0aGUgbGFzdCByZWZl
cmVuY2UgdG8gdGhlIHByb2Nlc3MgcG9vbC4KLSAgICBhdXRvIHByb3RlY3RlZFByb2Nlc3NQb29s
ID0gbWFrZVJlZlB0cihtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkpOwotCiAgICAgQVNTRVJUKG1f
ZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSUQpKTsKIAogICAgIG1fcHJvY2Vzcy0+cmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIGRvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9t
UHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmNwcAppbmRleCA4YzIz
YmJlOGMwNmExNTk5Y2I5YjkxNmEwYjMyYWZiMzc3ODNmMzA1Li5jMjM4YmUwNjhkY2Y5M2YxNWZl
NjI2ZjE3MThiOTA4YTcyZWZhMTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2Nv
bHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuY3BwCkBAIC00NCwxNyArNDQsMjAg
QEAgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6On5MZWdhY3lDdXN0b21Qcm90b2Nv
bE1hbmFnZXJQcm94eSgpCiAKIHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6
OnN0YXJ0TG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBtX25ldHdvcmtQ
cm9jZXNzUHJveHkucHJvY2Vzc1Bvb2woKS5jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKS5z
dGFydExvYWRpbmcoKnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOworICAgIGlmIChh
dXRvKiBjbGllbnQgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5sZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSkKKyAgICAgICAgY2xpZW50LT5zdGFydExvYWRpbmco
KnRoaXMsIGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpOwogfQogCiB2b2lkIExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5OjpzdG9wTG9hZGluZyhMZWdhY3lDdXN0b21Qcm90b2NvbElE
IGN1c3RvbVByb3RvY29sSUQpCiB7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzc1Byb3h5LnByb2Nlc3NQ
b29sKCkuY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkuc3RvcExvYWRpbmcoKnRoaXMsIGN1
c3RvbVByb3RvY29sSUQpOworICAgIGlmIChhdXRvKiBjbGllbnQgPSBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5sZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSkKKyAg
ICAgICAgY2xpZW50LT5zdG9wTG9hZGluZygqdGhpcywgY3VzdG9tUHJvdG9jb2xJRCk7CiB9CiAK
IHZvaWQgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQogewot
ICAgIG1fbmV0d29ya1Byb2Nlc3NQcm94eS5wcm9jZXNzUG9vbCgpLmN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudCgpLmludmFsaWRhdGUoKnRoaXMpOworICAgIGlmIChhdXRvKiBjbGllbnQgPSBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5sZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQoKSkKKyAgICAgICAgY2xpZW50LT5pbnZhbGlkYXRlKCp0aGlzKTsKIH0KIAogdm9p
ZCBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6d2FzUmVkaXJlY3RlZFRvUmVxdWVz
dChMZWdhY3lDdXN0b21Qcm90b2NvbElEIGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYgcmVkaXJlY3RSZXNwb25zZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IGQxMjUwMjBhNTk1ZDI5ODg5
NjkzYjQyMzBjMTAxZDgzMjQzYWUzYmUuLmY0NzlkMmU5ZjE4MmJlYmI5MWY3OTM0OTNhNTExMDk1
NDQxM2I2MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkxl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2VuZGlmCisjaW5jbHVkZSAiTGVn
YWN5R2xvYmFsU2V0dGluZ3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0
d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbkluZm8uaCIKQEAgLTYwLDYgKzYxLDcgQEAKICNpbmNsdWRlICJXZWJz
aXRlRGF0YVN0b3JlQ2xpZW50LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+CisjaW5jbHVkZSA8d3RmL0Nh
bGxiYWNrQWdncmVnYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgog
CiAjaWYgRU5BQkxFKFNFQ19JVEVNX1NISU0pCkBAIC03MCwxOCArNzIsMTA5IEBACiAjaW5jbHVk
ZSA8d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09B
KQorI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oIgorI2VuZGlm
CisKICNkZWZpbmUgTUVTU0FHRV9DSEVDSyhhc3NlcnRpb24pIE1FU1NBR0VfQ0hFQ0tfQkFTRShh
c3NlcnRpb24sIGNvbm5lY3Rpb24oKSkKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAotTmV0d29ya1Byb2Nlc3NQcm94eTo6TmV0d29ya1Byb2Nlc3NQcm94
eShXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCi0gICAgOiBBdXhpbGlhcnlQcm9jZXNzUHJv
eHkocHJvY2Vzc1Bvb2wuYWx3YXlzUnVuc0F0QmFja2dyb3VuZFByaW9yaXR5KCkpCi0gICAgLCBt
X3Byb2Nlc3NQb29sKHByb2Nlc3NQb29sKQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3Jr
UHJvY2Vzc1Byb3h5PiYgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKQoreworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4+IG5ldHdvcmtQ
cm9jZXNzOworICAgIHJldHVybiBuZXR3b3JrUHJvY2VzczsKK30KKworTmV0d29ya1Byb2Nlc3NQ
cm94eSYgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkKK3sKKyAgICBpZiAoIWdsb2Jh
bE5ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICAgICAgZ2xvYmFsTmV0d29ya1Byb2Nlc3MoKSA9IG1h
a2VVbmlxdWU8TmV0d29ya1Byb2Nlc3NQcm94eT4oKTsKKyAgICAgICAgZ2xvYmFsTmV0d29ya1By
b2Nlc3MoKS0+c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgIH0KKyAg
ICByZXR1cm4gKmdsb2JhbE5ldHdvcmtQcm9jZXNzKCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6dGVybWluYXRlKCkKK3sKKyAgICBBdXhpbGlhcnlQcm9jZXNzUHJveHk6OnRlcm1p
bmF0ZSgpOworICAgIGdsb2JhbE5ldHdvcmtQcm9jZXNzKCkgPSBudWxscHRyOworfQorCit2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmF0dGVtcHRSZWxhdW5jaEFmdGVyQ3Jhc2hJZk5lY2Vzc2Fy
eShWZWN0b3I8c3RkOjpwYWlyPFJlZjxXZWJQcm9jZXNzUHJveHk+LCBNZXNzYWdlczo6V2ViUHJv
Y2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHk+PiYmIHBl
bmRpbmdSZXF1ZXN0cykKK3sKKyAgICBnbG9iYWxOZXR3b3JrUHJvY2VzcygpID0gbnVsbHB0cjsK
KyAgICBpZiAocGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGF1dG8mIG5ld05ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCk7CisgICAgZm9yIChhdXRvJiByZXF1ZXN0IDogcGVuZGluZ1JlcXVlc3RzKQorICAgICAgICBu
ZXdOZXR3b3JrUHJvY2Vzcy5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24ocmVxdWVzdC5maXJz
dC5nZXQoKSwgV1RGTW92ZShyZXF1ZXN0LnNlY29uZCkpOworfQorCit2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQoreworICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBv
cmFyeSB3b3JrYXJvdW5kIGZvciBhcHBzIHVzaW5nIFdlYktpdCBBUEkgb24gbm9uLW1haW4gdGhy
ZWFkcy4KKyAgICAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBlbmZvcmNlIHRocmVh
ZGluZyB2aW9sYXRpb24gY2hlY2sgb24gb3VyIEFQSXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDI0Ni4KKyAgICBpZiAoIVJ1bkxvb3A6OmlzTWFp
bigpKSB7CisgICAgICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbdGhpc10geworICAgICAg
ICAgICAgc2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpOworICAgICAgICB9KTsK
KyAgICB9CisKKyAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJz
OworICAgIGlmICghcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkKKyAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5
KHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lz
dGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xl
dG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3VyZSgpKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNj
aGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBjb3B5VG9W
ZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVy
QXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CisgICAgcGFyYW1ldGVycy51cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGlu
Z3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKKyAgICBwYXJhbWV0
ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lH
bG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkp
OworICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5jYWNoZU1vZGVsKCk7CisgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNz
UG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCisgICAgICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNj
aGVtZSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoU3RyaW5nIGNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgp
OyAhY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OworICAgIGlmIChTdHJpbmcgY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bv
b2w6Om5ldHdvcmtpbmdDYWNoZXNEaXJlY3RvcnkoKTsgIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9y
eS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJl
YWRXcml0ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29u
dGFpbmVyQ2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAoU3RyaW5nIHBh
cmVudEJ1bmRsZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpwYXJlbnRCdW5kbGVEaXJlY3Rv
cnkoKTsgIXBhcmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRl
bnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYKKyAgICBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisgICAgcGFyYW1ldGVycy5kYXRhU3Rv
cmVQYXJhbWV0ZXJzID0gV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVyc0Zyb21BbGxTdG9yZXMo
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKK30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xB
bHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKQoreworICAgIGZvciAoYXV0byogcHJvY2Vz
c1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYg
KHByb2Nlc3NQb29sLT5hbHdheXNSdW5zQXRCYWNrZ3JvdW5kUHJpb3JpdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBi
b29sIGFueVByb2Nlc3NQb29sU2hvdWxkVGFrZVVJQmFja2dyb3VuZEFzc2VydGlvbigpCit7Cisg
ICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9v
bHMoKSkgeworICAgICAgICBpZiAocHJvY2Vzc1Bvb2wtPnNob3VsZFRha2VVSUJhY2tncm91bmRB
c3NlcnRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK05ldHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoKQor
ICAgIDogQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5KGFueVByb2Nlc3NQb29sQWx3YXlzUnVuc0F0QmFj
a2dyb3VuZFByaW9yaXR5KCkpCiAjaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFO
QUdFUikKICAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkoKnRoaXMpCiAjZW5kaWYK
LSAgICAsIG1fdGhyb3R0bGVyKCp0aGlzLCBwcm9jZXNzUG9vbC5zaG91bGRUYWtlVUlCYWNrZ3Jv
dW5kQXNzZXJ0aW9uKCkpCisgICAgLCBtX3Rocm90dGxlcigqdGhpcywgYW55UHJvY2Vzc1Bvb2xT
aG91bGRUYWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKCkpCisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudD4oKSkKKyNlbmRpZgogewogICAgIGNvbm5lY3QoKTsKIH0K
QEAgLTEwNSwxNSArMTk4LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TGF1bmNo
T3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jCiAgICAgbGF1bmNo
T3B0aW9ucy5wcm9jZXNzVHlwZSA9IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Ok5ldHdv
cms7CiAgICAgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKGxhdW5jaE9w
dGlvbnMpOwogCi0gICAgaWYgKHByb2Nlc3NQb29sKCkuc2hvdWxkTWFrZU5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2woKS5zZXRT
aG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoZmFsc2UpOwot
ICAgICAgICBsYXVuY2hPcHRpb25zLnNob3VsZE1ha2VQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmcgPSB0cnVlOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9vbDo6
YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKHByb2Nlc3NQb29sLT5zaG91bGRNYWtl
TmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSkgeworICAgICAgICAgICAg
cHJvY2Vzc1Bvb2wtPnNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9y
VGVzdGluZyhmYWxzZSk7CisgICAgICAgICAgICBsYXVuY2hPcHRpb25zLnNob3VsZE1ha2VQcm9j
ZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB0cnVlOworICAgICAgICB9CiAgICAgfQotCi0jaWYg
UExBVEZPUk0oUExBWVNUQVRJT04pCi0gICAgbGF1bmNoT3B0aW9ucy5wcm9jZXNzUGF0aCA9IG1f
cHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3NQYXRoKCk7Ci0gICAgbGF1bmNoT3B0aW9ucy51c2Vy
SWQgPSBtX3Byb2Nlc3NQb29sLnVzZXJJZCgpOwotI2VuZGlmCiB9CiAKIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6Y29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
bikKQEAgLTE2NiwxMiArMjU2LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c3ludGhl
c2l6ZUFwcElzQmFja2dyb3VuZChib29sIGJhY2tncm91bmQpCiAgICAgfQogfQogCi1Eb3dubG9h
ZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3dubG9hZFByb3h5KFdlYnNpdGVE
YXRhU3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVl
c3QsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgV2ViUGFnZVByb3h5KiBvcmlnaW5h
dGluZ1BhZ2UpCitEb3dubG9hZFByb3h5JiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVEb3du
bG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgV2ViUHJvY2Vzc1Bvb2wmIHBy
b2Nlc3NQb29sLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3Qg
RnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSkK
IHsKICAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAgbV9kb3dubG9hZFByb3h5
TWFwID0gbWFrZVVuaXF1ZTxEb3dubG9hZFByb3h5TWFwPigqdGhpcyk7CiAKLSAgICByZXR1cm4g
bV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KGRhdGFTdG9yZSwgbV9wcm9j
ZXNzUG9vbCwgcmVzb3VyY2VSZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0aW5nUGFnZSk7Cisg
ICAgcmV0dXJuIG1fZG93bmxvYWRQcm94eU1hcC0+Y3JlYXRlRG93bmxvYWRQcm94eShkYXRhU3Rv
cmUsIHByb2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QsIGZyYW1lSW5mbywgb3JpZ2luYXRpbmdQ
YWdlKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmZXRjaFdlYnNpdGVEYXRhKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5
cGVzLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkIChXZWJzaXRlRGF0YSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0yMzcsOCArMzI3LDEwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6bmV0d29ya1Byb2Nl
c3NDcmFzaGVkKCkKIHsKICAgICBjbGVhckNhbGxiYWNrU3RhdGVzKCk7CiAKLSAgICAvLyBUZWxs
IHRoZSBuZXR3b3JrIHByb2Nlc3MgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhpcyBuZXR3b3Jr
IHByb2Nlc3MgcHJveHkuIFRoaXMgd2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgotICAgIG1f
cHJvY2Vzc1Bvb2wubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKyAgICBmb3IgKGF1dG8q
IHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAg
ICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCp0aGlzKTsKKworICAgIGdsb2Jh
bE5ldHdvcmtQcm9jZXNzKCkgPSBudWxscHRyOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmNsZWFyQ2FsbGJhY2tTdGF0ZXMoKQpAQCAtMjU4LDkgKzM1MCw2IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uLCBJUEM6OkRlCiAgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcHJvY2Vzc1Bvb2wuZGlzcGF0Y2hNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQotICAgICAgICByZXR1cm47Ci0KICAgICBkaWRSZWNl
aXZlTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAK
QEAgLTI3NCw4ICszNjMsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVT
eW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQwogCiB2b2lkIE5ldHdv
cmtQcm9jZXNzUHJveHk6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7Ci0gICAgYXV0byBw
cm90ZWN0ZWRQcm9jZXNzUG9vbCA9IG1ha2VSZWYobV9wcm9jZXNzUG9vbCk7Ci0KICAgICBpZiAo
bV9kb3dubG9hZFByb3h5TWFwKQogICAgICAgICBtX2Rvd25sb2FkUHJveHlNYXAtPmludmFsaWRh
dGUoKTsKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQpAQCAtMzM0
LDExICs0MjEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKCF0b3BPcmlnaW4gfHwgIW1fcHJvY2Vzc1Bvb2wuaXNTZXJ2aWNlV29y
a2VyUGFnZUlEKHBhZ2VJRCkpIHsKLSAgICAgICAgcHJvY2Vzc0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKHNlc3Npb25JRCwgV1RGTW92ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCiAgICAgV2ViUGFnZVByb3h5Ojpmb3JNb3N0VmlzaWJsZVdlYlBh
Z2VJZkFueShzZXNzaW9uSUQsICp0b3BPcmlnaW4sIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKHRoaXMpLCBzZXNzaW9uSUQsIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0gV1RGTW92ZShh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIG5lZ290aWF0ZWRMZWdhY3lUTFNdKGF1dG8qIHBhZ2Up
IG11dGFibGUgewogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMzk1LDExICs0NzcsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExh
dW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6OkNvbgogICAgICAgICBuZXR3
b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIGlmIChtX3Byb2Nlc3NQb29sLnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJs
ZWQoKSkKLSAgICAgICAgc2V0UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCh0cnVlKTsKLSNlbmRp
ZgogICAgIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKHhwY19jb25uZWN0aW9u
X3QgY29ubmVjdGlvbiA9IHRoaXMtPmNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpKQpAQCAt
MTIwNiw3ICsxMjgzLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXRUaGlyZFBhcnR5
Q05BTUVEb21haW5Gb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3MKIH0KIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oSGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zKQogewotICAgIHByb2Nlc3NQb29sKCku
c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb24oV1RGTW92ZShkb21haW5zKSk7CisgICAgZm9y
IChhdXRvKiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkK
KyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uKEhhc2hT
ZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHsgZG9tYWlucyB9KTsKIH0KICNlbmRpZiAv
LyBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCkBAIC0xMjcxLDE0ICsxMzQ5LDE0
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkU3luY0FsbENvb2tpZXMoKQogICAgIH0K
IH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0
YVN0b3JlPiYmIHN0b3JlKQordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphZGRTZXNzaW9uKFdl
YnNpdGVEYXRhU3RvcmUmIHN0b3JlKQogewogICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQotICAg
ICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkV2Vic2l0ZURhdGFTdG9yZSB7
IHN0b3JlLT5wYXJhbWV0ZXJzKCkgfSwgMCk7Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBzdG9yZS0+
c2Vzc2lvbklEKCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRX
ZWJzaXRlRGF0YVN0b3JlIHsgc3RvcmUucGFyYW1ldGVycygpIH0sIDApOworICAgIGF1dG8gc2Vz
c2lvbklEID0gc3RvcmUuc2Vzc2lvbklEKCk7CiAgICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSkgewogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgICAgICBjcmVhdGVTeW1M
aW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUtPnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
KCkpOworICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUucmVzb2x2ZWRJ
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC0xMjkxLDE2
ICsxMzY5LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZW1vdmVTZXNzaW9uKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKIAogV2Vic2l0ZURhdGFTdG9yZSogTmV0d29ya1Byb2Nlc3NQ
cm94eTo6d2Vic2l0ZURhdGFTdG9yZUZyb21TZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklEKQogewotICAgIGlmIChzZXNzaW9uSUQgPT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSkgewotICAgICAgICBpZiAoIVdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3Rv
cmVFeGlzdHMoKSkgewotICAgICAgICAgICAgYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IG1fcHJv
Y2Vzc1Bvb2wud2Vic2l0ZURhdGFTdG9yZSgpOwotICAgICAgICAgICAgaWYgKHdlYnNpdGVEYXRh
U3RvcmUgJiYgd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCkgPT0gc2Vzc2lvbklEKQotICAg
ICAgICAgICAgICAgIHJldHVybiB3ZWJzaXRlRGF0YVN0b3JlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS5wdHIoKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFT
dG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOworICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3Jl
OjpleGlzdGluZ0RhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpOwogfQogCiB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnJldHJpZXZlQ2FjaGVTdG9yYWdlUGFyYW1ldGVycyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCkBAIC0xMzQ3LDcgKzE0MTYsNyBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OmRpZERlc3Ryb3lXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShXZWJVc2Vy
Q29udGVudAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzKFJl
Z2lzdHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIG1fcHJvY2Vzc1Bvb2wuZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdv
cmtQcm9jZXNzKCp0aGlzLCBXVEZNb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKSwgc2Vzc2lvbklELCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgV2ViUHJvY2Vzc1Bvb2w6OmVzdGFibGlz
aFdvcmtlckNvbnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcygqdGhpcywgUmVnaXN0cmFi
bGVEb21haW4ge3JlZ2lzdHJhYmxlRG9tYWlufSwgc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6d29ya2VyQ29udGV4
dENvbm5lY3Rpb25Ob0xvbmdlck5lZWRlZChXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBpZGVu
dGlmaWVyKQpAQCAtMTUxMCwxNiArMTU3OSwzNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnByZWNvbm5lY3RUbyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlkZQog
ICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVjb25uZWN0VG8oc2Vzc2lvbklE
LCB3ZWJQYWdlUHJveHlJRCwgd2ViUGFnZUlELCB1cmwsIHVzZXJBZ2VudCwgc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3ksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pLCAwKTsKIH0KIAorc3Rh
dGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2VzKCkKK3sKKyAg
ICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzRm9yZWdyb3VuZFdlYlByb2Nlc3Nl
cygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworc3RhdGljIGJvb2wgYW55UHJvY2Vzc1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2Vz
KCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFBy
b2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChwcm9jZXNzUG9vbC0+aGFzQmFja2dyb3VuZFdl
YlByb2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNz
ZXJ0aW9uKCkKIHsKLSAgICBpZiAocHJvY2Vzc1Bvb2woKS5oYXNGb3JlZ3JvdW5kV2ViUHJvY2Vz
c2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vzc1Bvb2xIYXNGb3JlZ3JvdW5kV2ViUHJvY2Vzc2Vz
KCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkRm9yZWdyb3VuZEFj
dGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rp
dml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHkoIk5l
dHdvcmtpbmcgZm9yIGZvcmVncm91bmQgdmlldyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQo
KSwgMCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAocHJvY2Vz
c1Bvb2woKS5oYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKKyAgICBpZiAoYW55UHJvY2Vz
c1Bvb2xIYXNCYWNrZ3JvdW5kV2ViUHJvY2Vzc2VzKCkpIHsKICAgICAgICAgaWYgKCFQcm9jZXNz
VGhyb3R0bGVyOjppc1ZhbGlkQmFja2dyb3VuZEFjdGl2aXR5KG1fYWN0aXZpdHlGcm9tV2ViUHJv
Y2Vzc2VzKSkgewogICAgICAgICAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSB0aHJv
dHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIk5ldHdvcmtpbmcgZm9yIGJhY2tncm91bmQgdmll
dyhzKSJfcyk7CiAgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJv
Y2Vzc0RpZFRyYW5zaXRpb25Ub0JhY2tncm91bmQoKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IGE0MDk0
MDQxNjUwODVhMjhmNjI4MDU4MmYxZjQwNTI0Yjc5NWQ5NDIuLjM4OTNmN2NjYWQ2ZmUxMTBlY2M3
NzliNzJjMzM5YmI0YjFiNjg1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC01Miw2ICs1MiwxMCBAQCBuYW1l
c3BhY2UgSVBDIHsKIGNsYXNzIEZvcm1EYXRhUmVmZXJlbmNlOwogfQogCituYW1lc3BhY2UgQVBJ
IHsKK2NsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKK30KKwogbmFtZXNwYWNlIFBB
TCB7CiBjbGFzcyBTZXNzaW9uSUQ7CiB9CkBAIC03NCw3ICs3OCw2IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogY2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7CiBjbGFz
cyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OwogCiBlbnVtIGNsYXNzIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlz
dGljcyA6IGJvb2w7CkBAIC0xMDIsMTIgKzEwNSwxNSBAQCBwdWJsaWM6CiAgICAgdXNpbmcgRG9t
YWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAg
ICAgdXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CiAKLSAg
ICBleHBsaWNpdCBOZXR3b3JrUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJik7CisgICAgc3Rh
dGljIE5ldHdvcmtQcm9jZXNzUHJveHkmIHNpbmdsZXRvbigpOworICAgIGV4cGxpY2l0IE5ldHdv
cmtQcm9jZXNzUHJveHkoKTsKICAgICB+TmV0d29ya1Byb2Nlc3NQcm94eSgpOwogCisgICAgdm9p
ZCB0ZXJtaW5hdGUoKSBmaW5hbDsKKwogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uKFdlYlByb2Nlc3NQcm94eSYsIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSYmKTsKIAotICAgIERvd25sb2FkUHJveHkm
IGNyZWF0ZURvd25sb2FkUHJveHkoV2Vic2l0ZURhdGFTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IEZyYW1lSW5mb0RhdGEmLCBXZWJQYWdlUHJveHkqIG9yaWdp
bmF0aW5nUGFnZSk7CisgICAgRG93bmxvYWRQcm94eSYgY3JlYXRlRG93bmxvYWRQcm94eShXZWJz
aXRlRGF0YVN0b3JlJiwgV2ViUHJvY2Vzc1Bvb2wmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBGcmFtZUluZm9EYXRhJiwgV2ViUGFnZVByb3h5KiBvcmlnaW5hdGluZ1Bh
Z2UpOwogCiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYnNpdGVEYXRhKT4mJik7CiAgICAgdm9pZCBkZWxldGVX
ZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdh
bGxUaW1lIG1vZGlmaWVkU2luY2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcik7CkBAIC0yMDUsMTMgKzIxMSwxMSBAQCBwdWJsaWM6CiAgICAgUHJvY2Vzc1Ro
cm90dGxlciYgdGhyb3R0bGVyKCkgZmluYWwgeyByZXR1cm4gbV90aHJvdHRsZXI7IH0KICAgICB2
b2lkIHVwZGF0ZVByb2Nlc3NBc3NlcnRpb24oKTsKIAotICAgIFdlYlByb2Nlc3NQb29sJiBwcm9j
ZXNzUG9vbCgpIHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KLQogI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCiAgICAgdm9pZCBkaWREZXN0cm95V2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHkoV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkmKTsKICNlbmRpZgogCi0gICAgdm9p
ZCBhZGRTZXNzaW9uKFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmKTsKKyAgICB2b2lkIGFkZFNlc3Np
b24oV2Vic2l0ZURhdGFTdG9yZSYpOwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Np
b25JRCk7CiAgICAgCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkBAIC0yMjcsNiArMjMx
LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJv
dG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5
Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RP
TV9QUk9UT0NPTF9NQU5BR0VSKQorICAgIEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
KiBsZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoKSB7IHJldHVybiBtX2N1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudC5nZXQoKTsgfQorI2VuZGlmCisKKyAgICB2b2lkIG5ldHdvcmtQ
cm9jZXNzQ3Jhc2hlZCgpOworICAgIAogICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIHZvaWQgcmVzb3VyY2VMb2Fk
RGlkU2VuZFJlcXVlc3QoV2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVzb3VyY2VMb2FkSW5mbyYm
LCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgT3B0aW9uYWw8SVBDOjpGb3JtRGF0YVJlZmVy
ZW5jZT4mJik7CkBAIC0yNDUsNiArMjU1LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJCdW5k
bGVJZGVudGlmaWVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKIHByaXZhdGU6Cisg
ICAgdm9pZCBzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCk7CisgICAgc3RhdGlj
IHZvaWQgYXR0ZW1wdFJlbGF1bmNoQWZ0ZXJDcmFzaElmTmVjZXNzYXJ5KFZlY3RvcjxzdGQ6OnBh
aXI8UmVmPFdlYlByb2Nlc3NQcm94eT4sIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseT4+JiYpOworCiAgICAgLy8gQXV4aWxp
YXJ5UHJvY2Vzc1Byb3h5CiAgICAgQVNDSUlMaXRlcmFsIHByb2Nlc3NOYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gIk5ldHdvcmtpbmciX3M7IH0KIApAQCAtMjUyLDcgKzI2NSw2IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBwcm9jZXNzV2lsbFNodXREb3duKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJy
aWRlOwogCi0gICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKTsKICAgICB2b2lkIGNsZWFy
Q2FsbGJhY2tTdGF0ZXMoKTsKIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CkBAIC0z
MDgsOCArMzIwLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vzc0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFBBTDo6U2Vzc2lvbklELCBSZWY8QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eT4mJik7CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9jZXNzUG9vbDsKLQogICAgIEhhc2hN
YXA8Q2FsbGJhY2tJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJzaXRlRGF0YSk+PiBtX3Bl
bmRpbmdGZXRjaFdlYnNpdGVEYXRhQ2FsbGJhY2tzOwogICAgIEhhc2hNYXA8Q2FsbGJhY2tJRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9wZW5kaW5nRGVsZXRlV2Vic2l0ZURhdGFDYWxs
YmFja3M7CiAgICAgSGFzaE1hcDxDYWxsYmFja0lELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
PiBtX3BlbmRpbmdEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnNDYWxsYmFja3M7CkBAIC0zNDcs
NiArMzU3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8TmV0d29ya1Byb2Nlc3NQcm94
eT4gbV9uZXR3b3JrUHJvY2VzczsKICAgICB9OwogI2VuZGlmCisKKyNpZiBFTkFCTEUoTEVHQUNZ
X0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudD4gbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ7Cisj
ZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Q29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQpp
bmRleCBiOGRhZWRmN2JlYmExY2Q4MWY2ZTUyNDQ5NjAzMTBmMTMzMTBjMTFlLi44MmMxMGU0MWQ1
NjI1ZGJhYWRmOTEzYjk0ODA0NDdjNzBjYzE5ZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHlDb2NvYS5tbQpA
QCAtNTEsOCArNTEsMTAgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpYUENFdmVudEhhbmRs
ZXI6OmhhbmRsZVhQQ0V2ZW50KHhwY19vYmplY3RfdCBldmVudCkgY28KICAgICBpZiAobWVzc2Fn
ZU5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobWVzc2Fn
ZU5hbWUgPT0gTGF1bmNoU2VydmljZXNEYXRhYmFzZVhQQ0NvbnN0YW50czo6eHBjTGF1bmNoU2Vy
dmljZXNEYXRhYmFzZVhQQ0VuZHBvaW50TWVzc2FnZU5hbWUpCi0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb1dlYlBy
b2Nlc3MoZXZlbnQpOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBMYXVuY2hTZXJ2aWNlc0RhdGFi
YXNlWFBDQ29uc3RhbnRzOjp4cGNMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlWFBDRW5kcG9pbnRNZXNz
YWdlTmFtZSkgeworICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bv
b2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmROZXR3
b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKGV2ZW50KTsKKyAgICB9CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNv
b2tpZU1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVN
YW5hZ2VyUHJveHkuY3BwCmluZGV4IDQwMTg2MGQyMGMyNzg3NmVjNDA4Mjc1NGM1ZjBiMmQ2YjM3
NWFmMzYuLmNiN2FkNzgwNWUyNGEyY2YwNTc2MWE3ZDgyODJhMmM2MTUyNzJhZmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmNwcApAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJU2VjdXJp
dHlPcmlnaW4uaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJhY2tJRC5o
IgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNv
b2tpZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCkBAIC0zOSwyMCArNDAsMTUgQEAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLWNvbnN0IGNoYXIqIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c3VwcGxlbWVudE5hbWUoKQorV2ViQ29va2llTWFuYWdlclByb3h5
JiBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNpbmdsZXRvbigpCiB7Ci0gICAgcmV0dXJuICJXZWJD
b29raWVNYW5hZ2VyUHJveHkiOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWJDb29raWVN
YW5hZ2VyUHJveHk+IG1hbmFnZXI7CisgICAgcmV0dXJuIG1hbmFnZXI7CiB9CiAKLVJlZjxXZWJD
b29raWVNYW5hZ2VyUHJveHk+IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlByb2Nl
c3NQb29sKiBwcm9jZXNzUG9vbCkKK1dlYkNvb2tpZU1hbmFnZXJQcm94eTo6V2ViQ29va2llTWFu
YWdlclByb3h5KCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29raWVNYW5hZ2Vy
UHJveHkocHJvY2Vzc1Bvb2wpKTsKLX0KLQotV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29r
aWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQotICAgIDogV2ViQ29u
dGV4dFN1cHBsZW1lbnQocHJvY2Vzc1Bvb2wpCi17Ci0gICAgV2ViQ29udGV4dFN1cHBsZW1lbnQ6
OnByb2Nlc3NQb29sKCktPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQ29va2llTWFu
YWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKKyAgICBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9CiAKIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6fldlYkNvb2tpZU1hbmFnZXJQcm94eSgpCkBAIC02NSw1OSAr
NjEsMjUgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmluaXRpYWxpemVDbGllbnQoY29u
c3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFzZSogY2wKICAgICBtX2NsaWVudC5pbml0aWFsaXpl
KGNsaWVudCk7CiB9CiAKLS8vIFdlYkNvbnRleHRTdXBwbGVtZW50Ci0KLXZvaWQgV2ViQ29va2ll
TWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCgpCi17Ci0gICAgVmVjdG9yPE9ic2Vy
dmVyKj4gb2JzZXJ2ZXJzOwotICAgIGZvciAoYXV0byYgb2JzZXJ2ZXJTZXQgOiBtX2Nvb2tpZU9i
c2VydmVycy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2
ZXJTZXQpCi0gICAgICAgICAgICBvYnNlcnZlcnMuYXBwZW5kKG9ic2VydmVyKTsKLSAgICB9Ci0K
LSAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlci0+
bWFuYWdlckRlc3Ryb3llZCgpOwotCi0gICAgQVNTRVJUKG1fY29va2llT2JzZXJ2ZXJzLmlzRW1w
dHkoKSk7Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5Ojpwcm9jZXNzRGlkQ2xvc2Uo
V2ViUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnBy
b2Nlc3NEaWRDbG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5KikKLXsKLX0KLQotdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OnJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9i
amVjdDo6cmVmKCk7Ci19Ci0KLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZXJlZldlYkNv
bnRleHRTdXBwbGVtZW50KCkKLXsKLSAgICBBUEk6Ok9iamVjdDo6ZGVyZWYoKTsKLX0KLQogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYm
KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJv
Y2Vzc1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJv
Y2VzcyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9j
ZXNzLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7
CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVDb29raWVzRm9ySG9zdG5h
bWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3Ru
YW1lcykKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1
bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tp
ZXNGb3JIb3N0bmFtZXMoc2Vzc2lvbklELCBob3N0bmFtZXMpKTsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxl
dGVDb29raWVzRm9ySG9zdG5hbWVzKHNlc3Npb25JRCwgaG9zdG5hbWVzKSwgMCk7CiB9CiAKIHZv
aWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkZWxldGVBbGxDb29raWVzKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKIHsKLSAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vz
c1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0
ZUFsbENvb2tpZXMoc2Vzc2lvbklEKSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llcyhz
ZXNzaW9uSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRlbGV0ZUNv
b2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENvb2tpZSYgY29va2llLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBu
ZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Cisg
ICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNv
b2tpZU1hbmFnZXI6OkRlbGV0ZUNvb2tpZShzZXNzaW9uSUQsIGNvb2tpZSksIFtjYWxsYmFja0Z1
bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKV0oKSBtdXRhYmxlIHsKICAgICAgICAg
Y2FsbGJhY2tGdW5jdGlvbigpOwogICAgIH0pOwpAQCAtMTI1LDQyICs4Nyw0MiBAQCB2b2lkIFdl
YkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgQ29va2llJgogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6ZGVsZXRlQWxs
Q29va2llc01vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXYWxsVGltZSB0
aW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAg
ICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OkRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKHNlc3Np
b25JRCwgdGltZSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwogfQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQ
b29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3Mg
PSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZShz
ZXNzaW9uSUQsIGNvb2tpZXMpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBWZWN0b3I8Q29va2llPiYgY29va2llcywgY29uc3QgVVJMJiB1cmwsIGNvbnN0
IFVSTCYgbWFpbkRvY3VtZW50VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJh
Y2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sKCkt
PmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3b3JrUHJvY2Vzcy5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tpZXMoc2Vzc2lv
bklELCBjb29raWVzLCB1cmwsIG1haW5Eb2N1bWVudFVSTCksIFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbikpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0QWxsQ29va2llcyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPENv
b2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYgbmV0
d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBuZXR3
b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6
OkdldEFsbENvb2tpZXMoc2Vzc2lvbklEKSwgV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRDb29raWVzKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PENvb2tpZT4mJik+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBhdXRvJiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sKCktPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgYXV0byYg
bmV0d29ya1Byb2Nlc3MgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKTsKICAgICBu
ZXR3b3JrUHJvY2Vzcy5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFn
ZXI6OkdldENvb2tpZXMoc2Vzc2lvbklELCB1cmwpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24p
KTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OnN0YXJ0T2JzZXJ2aW5nQ29va2ll
Q2hhbmdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpX
ZWJDb29raWVNYW5hZ2VyOjpTdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Npb25JRCksIDAp
OwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RvcE9ic2VydmluZ0Nvb2tpZUNo
YW5nZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIHByb2Nlc3NQb29sKCktPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViQ29v
a2llTWFuYWdlcjo6U3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKSwgMCk7CiB9
CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpzZXRDb29raWVPYnNlcnZlckNhbGxiYWNr
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV1RGOjpGdW5jdGlvbjx2b2lkICgpPiYmIGNhbGxi
YWNrKQpAQCAtMjExLDIxICsxNzMsMTMgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmNv
b2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRCwg
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3ksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmICghcHJv
Y2Vzc1Bvb2woKS0+aXNVc2luZ1Rlc3RpbmdOZXR3b3JrU2Vzc2lvbigpKQotICAgICAgICBwZXJz
aXN0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpOwotI2VuZGlmCi0jaWYgVVNFKFNPVVAp
Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2V0SW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9s
aWN5KTsKLSNlbmRpZgotCi0gICAgYXV0byYgbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbCgp
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCk7CiAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KHBvbGljeSksIFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbikpOwogfQogCiB2b2lk
IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNl
c3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIVFRQQ29va2llQWNjZXB0UG9saWN5KT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewotICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vz
c1Bvb2woKS0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2Vz
cyA9IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpOwogICAgIG5ldHdvcmtQcm9jZXNz
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeSgpLCBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAppbmRleCAw
YmRmYzBkNGU0N2M0MzZmNTg1Y2YyOWMwOWQ1MWEyOWJjODExYTlkLi5lNzM4Yjg1ODAyMTcwOWE4
ODhiYzAzODI5YjQ5ZGUxYzBmYzllZGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaApAQCAtNTYsMTEgKzU2LDkgQEAgdHlwZWRlZiBHZW5l
cmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycmF5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWND
YWxsYmFjazxXZWJDb3JlOjpIVFRQQ29va2llQWNjZXB0UG9saWN5PiBIVFRQQ29va2llQWNjZXB0
UG9saWN5Q2FsbGJhY2s7CiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6Q29va2llPiY+IEdldENvb2tpZXNDYWxsYmFjazsKIAotY2xhc3MgV2ViQ29va2llTWFu
YWdlclByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Q29v
a2llTWFuYWdlcj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCwgcHJpdmF0ZSBJUEM6Ok1l
c3NhZ2VSZWNlaXZlciB7CitjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJ
OjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpDb29raWVNYW5hZ2VyPiwgcHJpdmF0ZSBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1
cHBsZW1lbnROYW1lKCk7Ci0KLSAgICBzdGF0aWMgUmVmPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4g
Y3JlYXRlKFdlYlByb2Nlc3NQb29sKik7CisgICAgc3RhdGljIFdlYkNvb2tpZU1hbmFnZXJQcm94
eSYgc2luZ2xldG9uKCk7CiAgICAgdmlydHVhbCB+V2ViQ29va2llTWFuYWdlclByb3h5KCk7CiAK
ICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb29raWVNYW5hZ2VyQ2xpZW50QmFz
ZSopOwpAQCAtMTA0LDE3ICsxMDIsMTEgQEAgcHVibGljOgogICAgIHVzaW5nIEFQSTo6T2JqZWN0
OjpkZXJlZjsKIAogcHJpdmF0ZToKLSAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vz
c1Bvb2wqKTsKKyAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkoKTsKKyAgICBmcmllbmQgTmV2ZXJE
ZXN0cm95ZWQ8V2ViQ29va2llTWFuYWdlclByb3h5PjsKIAogICAgIHZvaWQgY29va2llc0RpZENo
YW5nZShQQUw6OlNlc3Npb25JRCk7CiAKLSAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAotICAg
IHZvaWQgcHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NE
aWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKLSAgICB2b2lkIHByb2Nlc3NEaWRD
bG9zZShOZXR3b3JrUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWZXZWJDb250
ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVyZWZXZWJDb250ZXh0U3VwcGxl
bWVudCgpIG92ZXJyaWRlOwotCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lk
IGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJy
aWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5h
Z2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVN
YW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KaW5kZXggYTA2Yjc3YjQ3M2VjNjAyYmQ3YzhjMTQ5NWNk
MGEyMjg2ZThjYTUzYi4uNzI0YWVkMzAwNDI0YzE5MzY3NjEzZDQyZTY1OTdiMTA2OTM4ZmIzMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5
Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjAsNiArMjAsNiBAQAogIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogCi1tZXNzYWdlcyAtPiBXZWJDb29raWVNYW5hZ2VyUHJveHkg
eworbWVzc2FnZXMgLT4gV2ViQ29va2llTWFuYWdlclByb3h5IE5vdFJlZkNvdW50ZWQgewogICAg
IENvb2tpZXNEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYTEyM2ZiMjg1NTk4MjE1MzMwYjUw
OTI5NjVlZDEwYmJhZWVjNjliOS4uNTNhMGIwMTU0NzlmZmQwOTA1MjMyYTg2ZTM4NjcwODMyYmUy
YTIyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0zMTg1
LDExICszMTg1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmlzRm9yY2VkSW50b0FwcEJvdW5kTW9k
ZVRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4KIHZvaWQgV2ViUGFnZVByb3h5
OjpkaXNhYmxlU2VydmljZVdvcmtlckVudGl0bGVtZW50SW5OZXR3b3JrUHJvY2VzcygpCiB7CiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdl
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RGlzYWJsZVNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgp
LCAwKTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpc2FibGVTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQo
KSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtMzE5OCwxMyArMzE5NCw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpjbGVhclNlcnZpY2VXb3JrZXJFbnRpdGxlbWVudE92ZXJyaWRlKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFM
WVNUKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIHNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViUGFnZTo6Q2xlYXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlk
ZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OkNsZWFyU2VydmljZVdvcmtlckVudGl0bGVtZW50T3ZlcnJpZGUoKSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xl
YXJTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnRPdmVycmlkZSgpLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2VuZGlmCkBAIC05OTA4
LDU4ICs5ODk4LDI3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzeXN0ZW1QcmV2aWV3QWN0aW9uVHJp
Z2dlcmVkKGNvbnN0IFdlYkNvcmU6OlN5c3RlbVByZXZpZXdJbmZvCiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
U3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgaWYgKCFuZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkR1bXBBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRl
RGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAg
ICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihtX3dl
YnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJBZENsaWNrQXR0cmlidXRpb24oQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKG1fd2Vic2l0ZURh
dGFTdG9yZS0+c2Vzc2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6Q2xlYXJBZENsaWNrQXR0cmlidXRpb24obV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldEFkQ2xpY2tBdHRyaWJ1dGlvbk92ZXJyaWRlVGltZXJGb3JUZXN0aW5nKGJvb2wgdmFs
dWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVz
c2FnZSgpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRBZENsaWNrQXR0cmlidXRpb25PdmVy
cmlkZVRpbWVyRm9yVGVzdGluZyhtX3dlYnNpdGVEYXRhU3RvcmUtPnNlc3Npb25JRCgpLCB2YWx1
ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0QWRDbGlja0F0dHJpYnV0aW9uT3ZlcnJpZGVUaW1lckZvclRlc3RpbmcobV93
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBZENsaWNrQXR0cmlidXRpb25D
b252ZXJzaW9uVVJMRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAg
ICAgIGlmICghbmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgbmV0d29ya1Byb2Nlc3MtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKG1f
d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIHVybCksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0QWRDbGlja0F0dHJp
YnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9u
SUQoKSwgdXJsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6bWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoYXV0
byogbmV0d29ya1Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkubmV0d29ya1Byb2Nl
c3MoKSkgewotICAgICAgICBpZiAoIW5ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKSB7
Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpNYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZv
clRlc3RpbmcobV93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6TWFya0FkQ2xp
Y2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vz
c2lvbklEKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKICNpZiBFTkFCTEUo
U1BFRUNIX1NZTlRIRVNJUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29s
LmNwcAppbmRleCA2ZDZiMzRkN2FmZGY0Y2U2NDA1OWMwNmZkMWM4OGQ1MGFjNjg2Yzc2Li5lZmZk
YTk3ZWIwYzQzYzFhYmI5ODA5NmM2NDAzZTBhNWEzMGE0YTU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC0xNDMsOCArMTQzLDEwIEBACiAjZW5kaWYK
IAogI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPRyhjaGFubmVsLCBmbXQsIC4uLikg
UkVMRUFTRV9MT0coY2hhbm5lbCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAj
I19fVkFfQVJHU19fKQorI2RlZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19TVEFUSUMo
Y2hhbm5lbCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HKGNoYW5uZWwsICJXZWJQcm9jZXNzUG9vbDo6
IiBmbXQsICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9H
X0VSUk9SKGNoYW5uZWwsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19FUlJPUihjaGFubmVsLCAiJXAg
LSBXZWJQcm9jZXNzUG9vbDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCiAjZGVmaW5lIFdF
QlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0lGX0FMTE9XRUQoY2hhbm5lbCwgZm10LCAuLi4pIFJF
TEVBU0VfTE9HX0lGKHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgY2hhbm5l
bCwgIiVwIC0gV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2Rl
ZmluZSBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEX1NUQVRJQyhjaGFubmVs
LCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxs
b3dlZCgpLCBjaGFubmVsLCAiV2ViUHJvY2Vzc1Bvb2w6OiIgZm10LCAjI19fVkFfQVJHU19fKQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMjMyLDYg
KzIzNCwxMSBAQCBzdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFz
aD4mIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdAogICAgIHJldHVybiBzZXQ7CiB9CiAK
K1ZlY3RvcjxTdHJpbmc+IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMoKQoreworICAgIHJldHVybiBjb3B5VG9WZWN0b3IoZ2xvYmFsVVJMU2NoZW1l
c1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpOworfQorCiBXZWJQcm9jZXNzUG9vbDo6V2Vi
UHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24p
CiAgICAgOiBtX2NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbi5jb3B5KCkpCiAgICAgLCBtX2Rl
ZmF1bHRQYWdlR3JvdXAoV2ViUGFnZUdyb3VwOjpjcmVhdGUoKSkKQEAgLTIzOSw3ICsyNDYsNiBA
QCBXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgLCBtX2F1dG9tYXRpb25DbGllbnQobWFrZVVuaXF1
ZTxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCkpCiAgICAgLCBtX2Rvd25sb2FkQ2xpZW50KG1ha2VV
bmlxdWVSZWY8QVBJOjpEb3dubG9hZENsaWVudD4oKSkKICAgICAsIG1faGlzdG9yeUNsaWVudCht
YWtlVW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkpCi0gICAgLCBtX2N1
c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50PigpKQogICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRMaW5rU3Rv
cmU6OmNyZWF0ZSgpKQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1faGlnaFBlcmZvcm1hbmNl
R3JhcGhpY3NVc2FnZVNhbXBsZXIobWFrZVVuaXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1Vz
YWdlU2FtcGxlcj4oKnRoaXMpKQpAQCAtMjY3LDkgKzI3Myw2IEBAIFdlYlByb2Nlc3NQb29sOjpX
ZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlv
bikKICNlbmRpZgogICAgIH0pOwogCi0gICAgaWYgKCFtX3dlYnNpdGVEYXRhU3RvcmUgJiYgV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkpCi0gICAgICAg
IG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpOwotCiAgICAgZm9yIChhdXRvJiBzY2hlbWUgOiBtX2NvbmZpZ3VyYXRpb24tPmFs
d2F5c1JldmFsaWRhdGVkVVJMU2NoZW1lcygpKQogICAgICAgICBtX3NjaGVtZXNUb1JlZ2lzdGVy
QXNBbHdheXNSZXZhbGlkYXRlZC5hZGQoc2NoZW1lKTsKIApAQCAtMjg1LDcgKzI4OCw2IEBAIFdl
YlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlv
biYgY29uZmlndXJhdGlvbikKICAgICBhZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBy
b2Nlc3NQb29sOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIAogICAgIC8vIE5PVEU6
IFRoZXNlIHN1Yi1vYmplY3RzIG11c3QgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVj
ZWl2ZXJNYXAuLgotICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwog
ICAgIGFkZFN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAgICAgYWRk
U3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+KCk7CiAjaWYgRU5BQkxFKE1F
RElBX1NFU1NJT04pCkBAIC0zNDIsOSArMzQ0LDYgQEAgV2ViUHJvY2Vzc1Bvb2w6On5XZWJQcm9j
ZXNzUG9vbCgpCiAgICAgcHJvY2Vzc1Bvb2xDb3VudGVyLmRlY3JlbWVudCgpOwogI2VuZGlmCiAK
LSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2h1
dERvd25Qcm9jZXNzKCk7Ci0KICNpZiBFTkFCTEUoR0FNRVBBRCkKICAgICBpZiAoIW1fcHJvY2Vz
c2VzVXNpbmdHYW1lcGFkcy5pc0VtcHR5KCkpCiAgICAgICAgIFVJR2FtZXBhZFByb3ZpZGVyOjpz
aW5nbGV0b24oKS5wcm9jZXNzUG9vbFN0b3BwZWRVc2luZ0dhbWVwYWRzKCp0aGlzKTsKQEAgLTQw
MiwxNiArNDAxLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21hdGlvbkNsaWVudChz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpBdXRvbWF0aW9uQ2xpZW50PiYKICAgICAgICAgbV9hdXRvbWF0
aW9uQ2xpZW50ID0gV1RGTW92ZShhdXRvbWF0aW9uQ2xpZW50KTsKIH0KIAotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0TGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQpCi17Ci0jaWYgRU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdF
UikKLSAgICBpZiAoIWN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCkKLSAgICAgICAgbV9jdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBtYWtlVW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ2xpZW50PigpOwotICAgIGVsc2UKLSAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFn
ZXJDbGllbnQgPSBXVEZNb3ZlKGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk7Ci0jZW5kaWYK
LX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoYm9v
bCBlbmFibGVkKQogewogICAgIG1fc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQgPSBlbmFibGVkOwpA
QCAtNDMxLDcgKzQyMCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEN1c3RvbVdlYkNvbnRl
bnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGN1CiAKIElQQzo6Q29ubmVj
dGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCiB7Ci0g
ICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuY29ubmVjdGlvbigpOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4dCkKQEAgLTQ0Myw4ICs0
MzIsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQoKQogewogICAgIHNl
bmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1
YWdlc0NoYW5nZWQoKSk7CiAjaWYgVVNFKFNPVVApCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
Ci0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkp
LCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZl
cnJlZExhbmd1YWdlcygpKSwgMCk7CiAjZW5kaWYKIH0KIApAQCAtNDgyLDI3MSArNDcwLDEzIEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNjcmVlblByb3BlcnRpZXNTdGF0ZUNoYW5nZWQoKQogI2Vu
ZGlmCiB9CiAKLU5ldHdvcmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3
b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoV2Vic2l0ZURhdGFTdG9yZSkKK05ldHdv
cmtQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJz
aXRlRGF0YVN0b3JlKikKIHsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAot
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGFwcHMgdXNp
bmcgV2ViS2l0IEFQSSBvbiBub24tbWFpbiB0aHJlYWRzLgotICAgIC8vIFdlIHNob3VsZCByZW1v
dmUgdGhpcyBvbmNlIHdlIGVuZm9yY2UgdGhyZWFkaW5nIHZpb2xhdGlvbiBjaGVjayBvbiBvdXIg
QVBJcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAw
MjQ2LgotICAgIGlmICghUnVuTG9vcDo6aXNNYWluKCkpIHsKLSAgICAgICAgY2FsbE9uTWFpblJ1
bkxvb3BBbmRXYWl0KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAg
ICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIH0pOwotICAgICAgICBy
ZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7Ci0gICAgfQotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpIHsKLSAgICAgICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3Jl
KSk7Ci0gICAgICAgICAgICB3aXRoV2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2ll
cygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKLSAgICB9
Ci0KLSAgICBhdXRvIG5ldHdvcmtQcm9jZXNzID0gbWFrZVVuaXF1ZTxOZXR3b3JrUHJvY2Vzc1By
b3h5PigqdGhpcyk7Ci0KLSAgICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJh
bWV0ZXJzOwotCi0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gY29weVRvVmVj
dG9yKG1fd2Vic2l0ZURhdGFTdG9yZS0+cGVuZGluZ0Nvb2tpZXMoKSk7Ci0gICAgICAgIG1fd2Vi
c2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOwotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBtX3dl
YnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlk
ZW50aWZpZXIoKTsKLSAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVu
dGlmaWVyID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCkuc291cmNlQXBwbGlj
YXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBwYXJhbWV0
ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVN
b2RlbCgpOwotCi0gICAgZm9yIChhdXRvJiBzY2hlbWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1
c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVn
aXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKLQotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9j
ZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIGlmICghY29va2llU3RvcmFn
ZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5n
IGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nQ2Fj
aGVzRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjb250YWluZXJDYWNoZXNEaXJlY3RvcnkuaXNFbXB0
eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkoY29udGFpbmVyQ2FjaGVzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNvbnRhaW5lckNh
Y2hlc0RpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBTdHJpbmcgcGFyZW50QnVuZGxl
RGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpOwotICAg
IGlmICghcGFyZW50QnVuZGxlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmVudEJ1bmRsZURpcmVjdG9yeSwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZE9ubHksIHBhcmFtZXRlcnMucGFyZW50QnVuZGxlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoZW1wdHlTdHJpbmcoKSwg
U2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZVRlbXBCbG9iRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICBwYXJhbWV0ZXJzLmhzdHNTdG9yYWdlRGly
ZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5oc3RzU3RvcmFnZURpcmVjdG9yeSgpOwotICAgIGlm
ICghcGFyYW1ldGVycy5oc3RzU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSkKLSAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRl
cnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaHN0c1N0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotCi0gICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFz
U2VjdXJlID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5z
Y2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlKCkpOwotICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihM
ZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFz
c2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKLSAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNS
ZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2lu
Z2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOwotICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNl
dHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7Ci0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAvLyAqKioqKioqKioKLSAgICAvLyBJTVBP
UlRBTlQ6IERvIG5vdCBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGluZGV4ZWQg
ZGF0YWJhc2VzIG9uIGRpc2sgd2l0aG91dCBmaXJzdCBjb25zdWx0aW5nIGEgcmV2aWV3ZXIgZnJv
bSBBcHBsZSAoPHJkYXI6Ly9wcm9ibGVtLzE3NDU0NzEyPikKLSAgICAvLyAqKioqKioqKioKLSAg
ICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBlbHNlIGlmIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmVFeGlzdHMoKSkKLSAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnkgPSBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+
cGFyYW1ldGVycygpLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICAKLSAgICBpZiAoIXBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICAg
ICAgbmV0d29ya1Byb2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7Ci0g
ICAgfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgaWYgKG1fd2Vi
c2l0ZURhdGFTdG9yZSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0
aW9uRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkKLSAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gIFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5zZXJ2aWNl
V29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBhdXRvIGxv
Y2FsU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFT
dG9yZS0+cmVzb2x2ZWRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKLSAg
ICBpZiAoIWxvY2FsU3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgbG9jYWxTdG9yYWdlRGlyZWN0
b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0
b3J5KCk7Ci0gICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNhY2hlU3RvcmFn
ZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOwotICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0
b3J5LmlzRW1wdHkoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZShjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOwotICAg
IH0KLQotICAgIFN0cmluZyByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5OwotICAgIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlOwotICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCi0gICAgICAgIHJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVk
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwotICAgIGVsc2UgaWYgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICByZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0RGF0YVN0b3JlKCktPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZGlyZWN0b3J5OwotICAgIAotICAgIGlm
ICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShyZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyA9IGZhbHNlOwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0xvZ1Rlc3Rp
bmdFdmVudCA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IHRydWU7
Ci0gICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gZmFsc2U7
Ci0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBXZWJDb3JlOjpUaGly
ZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBX
ZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGw7Ci0gICAgV2ViQ29yZTo6
U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVu
dEVuYWJsZWQgPSBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6Tm87
Ci0gICAgV2ViQ29yZTo6Q05BTUVDbG9ha2luZ01pdGlnYXRpb25FbmFibGVkIGNuYW1lQ2xvYWtp
bmdNaXRpZ2F0aW9uRW5hYmxlZCA9IFdlYkNvcmU6OkNOQU1FQ2xvYWtpbmdNaXRpZ2F0aW9uRW5h
YmxlZDo6Tm87Ci0jZW5kaWYKLSAgICBXZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZSBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IFdlYkNvcmU6OkZpcnN0
UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzOwotICAgIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbjsKLSAgICBIYXNo
U2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBhcHBCb3VuZERvbWFpbnM7Ci0gICAgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4gbWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBtX3RjY1ByZWZlcmVuY2VFbmFibGVkID0gZG9lc0FwcEhhdmVJ
VFBFbmFibGVkKCk7Ci0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlICYmICF3aXRoV2Vic2l0
ZURhdGFTdG9yZS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQoKSkgewotICAgICAgICBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJlbmNlRW5hYmxlZDsKLSAgICAgICAg
d2l0aFdlYnNpdGVEYXRhU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpOwotICAgIH0gZWxzZSBpZiAobV93ZWJzaXRlRGF0
YVN0b3JlICYmICFtX3dlYnNpdGVEYXRhU3RvcmUtPmlzSXRwU3RhdGVFeHBsaWNpdGx5U2V0KCkp
IHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IG1fdGNjUHJlZmVyZW5j
ZUVuYWJsZWQ7Ci0gICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyk7Ci0gICAgfSBlbHNl
IGlmIChXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlRXhpc3RzKCkgJiYgIVdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+aXNJdHBTdGF0ZUV4cGxpY2l0bHlTZXQo
KSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gbV90Y2NQcmVmZXJl
bmNlRW5hYmxlZDsKLSAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgp
LT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyA9IG1fdGNjUHJlZmVyZW5jZUVuYWJsZWQ7Ci0jZW5kaWYKLQotICAgIGlmICh3aXRoV2Vic2l0
ZURhdGFTdG9yZSkgewotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gd2l0
aFdlYnNpdGVEYXRhU3RvcmUtPnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7Ci0jaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5oYXNT
dGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVuYWJsZVJl
c291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBhcmFtZXRlcnMoKS5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBzaG91bGRJbmNsdWRlTG9jYWxob3N0ID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNo
b3VsZEluY2x1ZGVMb2NhbGhvc3Q7Ci0gICAgICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWdNb2RlID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZURlYnVnTW9kZTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotICAgICAgICAgICAgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9k
ZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycy50aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOwotICAgICAgICAgICAgc2FtZVNpdGVT
dHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJs
ZWQ7Ci0gICAgICAgICAgICBjbmFtZUNsb2FraW5nTWl0aWdhdGlvbkVuYWJsZWQgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuY25hbWVD
bG9ha2luZ01pdGlnYXRpb25FbmFibGVkOwotI2VuZGlmCi0gICAgICAgICAgICBmaXJzdFBhcnR5
V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZTsKLSAgICAgICAgICAgIHN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5zdGFuZGFsb25l
QXBwbGljYXRpb25Eb21haW47Ci0gICAgICAgICAgICBhcHBCb3VuZERvbWFpbnMgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuYXBwQm91
bmREb21haW5zOwotICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMubWFudWFs
UHJldmFsZW50UmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhXZWJzaXRl
RGF0YVN0b3JlLT5wZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3Rh
ID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEo
KTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IGF1dG8mIG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9
IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpOwot
ICAgICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewotICAgICAgICAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gbmV0d29ya0NhY2hlRGlyZWN0b3J5Owot
ICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKG5ldHdvcmtDYWNoZURp
cmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3Jr
Q2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
IChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQo
KTsKLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICBlbmFibGVS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50ID0gbV93ZWJzaXRlRGF0YVN0b3Jl
LT5oYXNTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVu
YWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsKLSAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzOwotICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
cy5zaG91bGRJbmNsdWRlTG9jYWxob3N0OwotICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnTW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVEZWJ1Z01vZGU7Ci0jaWYgRU5BQkxFKFJFU09V
UkNFX0xPQURfU1RBVElTVElDUykKLSAgICAgICAgICAgIHRoaXJkUGFydHlDb29raWVCbG9ja2lu
Z01vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMudGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsKLSAgICAgICAgICAgIHNhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkID0gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJl
c291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLnNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRF
bmFibGVkOwotICAgICAgICAgICAgY25hbWVDbG9ha2luZ01pdGlnYXRpb25FbmFibGVkID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmNu
YW1lQ2xvYWtpbmdNaXRpZ2F0aW9uRW5hYmxlZDsKLSNlbmRpZgotICAgICAgICAgICAgZmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGU7Ci0gICAgICAgICAgICBzdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuc3RhbmRh
bG9uZUFwcGxpY2F0aW9uRG9tYWluOwotICAgICAgICAgICAgYXBwQm91bmREb21haW5zID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmFw
cEJvdW5kRG9tYWluczsKLSAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLm1h
bnVhbFByZXZhbGVudFJlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgICAgICBwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVv
dGEgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEo
KTsKLQotICAgICAgICBjb25zdCBhdXRvJiBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBtX3dlYnNp
dGVEYXRhU3RvcmUtPnJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlm
ICghbmV0d29ya0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5u
ZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7Ci0gICAgICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUobmV0d29ya0NhY2hlRGlyZWN0b3J5LCBT
YW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAoV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpKQotICAgICAgICAg
ICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHREYXRhU3RvcmUoKS0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKTsKLSAgICAgICAg
YXV0byBuZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0
d29ya0NhY2hlRGlyZWN0b3J5KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLm5ldHdvcmtDYWNoZURpcmVjdG9y
eSA9IG5ldHdvcmtDYWNoZURpcmVjdG9yeTsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlKG5ldHdvcmtDYWNoZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6
UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
ICAgIH0KLQotI2lmIEhBVkUoQ0ZORVRXT1JLX0FMVEVSTkFUSVZFX1NFUlZJQ0UpCi0gICAgaWYg
KFdlYnNpdGVEYXRhU3RvcmU6Omh0dHAzRW5hYmxlZCgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVy
bmF0aXZlU2VydmljZURpcmVjdG9yeSA9IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRBbHRlcm5h
dGl2ZVNlcnZpY2VzRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYWx0ZXJuYXRpdmVT
ZXJ2aWNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5hbHRlcm5hdGl2ZVNlcnZp
Y2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLmFsdGVybmF0aXZlU2VydmljZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0gICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmh0dHAzRW5hYmxlZCA9IHRydWU7Ci0gICAgfQotI2VuZGlm
Ci0gICAgYm9vbCBpc0l0cFN0YXRlRXhwbGljaXRseVNldCA9IGZhbHNlOwotICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJl
c291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bh
cmFtZXRlcnMgewotICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkpLAotICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpLAotICAgICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLAotICAg
ICAgICBpc0l0cFN0YXRlRXhwbGljaXRseVNldCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudCwKLSAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9z
dCwKLSAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSwKLSNpZiBF
TkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgICAgICB0aGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlLAotICAgICAgICBzYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCwK
LSAgICAgICAgY25hbWVDbG9ha2luZ01pdGlnYXRpb25FbmFibGVkLAotI2VuZGlmCi0gICAgICAg
IGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlLAotICAgICAgICBzdGFuZGFsb25lQXBw
bGljYXRpb25Eb21haW4sCi0gICAgICAgIGFwcEJvdW5kRG9tYWlucywKLSAgICAgICAgbWFudWFs
UHJldmFsZW50UmVzb3VyY2UsCi0gICAgfTsKLQotICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3Bl
Y2lmaWMgcGFyYW1ldGVycwotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBh
cmFtZXRlcnMpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9jZXNzLgotICAg
IG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6SW5pdGlhbGl6
ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIG5ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9T
KG5ldHdvcmtQcm9jZXNzTGF0ZW5jeVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1Mo
KSksIDApOwotI2VuZGlmCi0KLSAgICBuZXR3b3JrUHJvY2Vzcy0+dXBkYXRlUHJvY2Vzc0Fzc2Vy
dGlvbigpOwotCi0gICAgaWYgKHdpdGhXZWJzaXRlRGF0YVN0b3JlKSB7Ci0gICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5hZGRTZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7Ci0g
ICAgICAgIHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5jbGVhclBlbmRpbmdDb29raWVzKCk7Ci0gICAg
fQotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBuZXR3b3JrIHByb2Nlc3Mga25vd3MgYWJvdXQgYWxs
IHRoZSBzZXNzaW9ucyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSBpdCBzdGFydGVk
LgotICAgIGZvciAoYXV0byYgc2Vzc2lvbklEIDogbV9zZXNzaW9uVG9QYWdlSURzTWFwLmtleXMo
KSkgewotICAgICAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3Rv
cmU6OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChzZXNzaW9uSUQpKQot
ICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24oKndlYnNpdGVEYXRhU3RvcmUp
OwotICAgIH0KLQotICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBXVEZNb3ZlKG5ldHdvcmtQcm9jZXNz
KTsKLSAgICByZXR1cm4gKm1fbmV0d29ya1Byb2Nlc3M7CisgICAgcmV0dXJuIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNpbmdsZXRvbigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpuZXR3b3Jr
UHJvY2Vzc0NyYXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSYgbmV0d29ya1Byb2Nlc3NQcm94eSkK
IHsKLSAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0gICAgQVNTRVJUKCZuZXR3b3JrUHJv
Y2Vzc1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwotCiAgICAgZm9yIChhdXRvJiBz
dXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKICAgICAgICAgc3VwcGxlbWVudC0+
cHJvY2Vzc0RpZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKIApAQCAtNzU1LDkgKzQ4NSw2
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1ByCiAgICAgaWYgKG1fYXV0b21hdGlvblNlc3Npb24p
CiAgICAgICAgIG1fYXV0b21hdGlvblNlc3Npb24tPnRlcm1pbmF0ZSgpOwogCi0gICAgLy8gTGVh
dmUgdGhlIHByb2Nlc3MgcHJveHkgYXJvdW5kIGR1cmluZyBjbGllbnQgY2FsbCwgc28gdGhhdCB0
aGUgY2xpZW50IGNvdWxkIHF1ZXJ5IHRoZSBwcm9jZXNzIGlkZW50aWZpZXIuCi0gICAgbV9uZXR3
b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci0KICAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwog
fQogCkBAIC03NzEsMTEgKzQ5OCwxMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXJ2aWNlV29y
a2VyUHJvY2Vzc0NyYXNoZWQoV2ViUHJvY2Vzc1Byb3h5JiBwcm94eSkKIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmIHdlYlBy
b2Nlc3NQcm94eSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uOjpEZWxheWVkUmVwbHkmJiByZXBseSkKIHsKICAgICBlbnN1cmVOZXR3b3JrUHJv
Y2VzcygpOwotICAgIG1fbmV0d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bih3ZWJQcm9jZXNzUHJveHksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwg
d2ViUHJvY2Vzc1Byb3h5ID0gbWFrZVdlYWtQdHIod2ViUHJvY2Vzc1Byb3h5KSwgcmVwbHkgPSBX
VEZNb3ZlKHJlcGx5KV0gKGF1dG8mIGNvbm5lY3Rpb25JbmZvKSBtdXRhYmxlIHsKKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
d2ViUHJvY2Vzc1Byb3h5LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHdl
YlByb2Nlc3NQcm94eSA9IG1ha2VXZWFrUHRyKHdlYlByb2Nlc3NQcm94eSksIHJlcGx5ID0gV1RG
TW92ZShyZXBseSldIChhdXRvJiBjb25uZWN0aW9uSW5mbykgbXV0YWJsZSB7CiAgICAgICAgIGlm
IChVTkxJS0VMWSghSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9u
SW5mby5pZGVudGlmaWVyKCkpICYmIHdlYlByb2Nlc3NQcm94eSAmJiB3ZWFrVGhpcykpIHsKICAg
ICAgICAgICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HX0VSUk9SKFByb2Nlc3MsICJnZXRO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246IEZhaWxlZCBmaXJzdCBhdHRlbXB0LCByZXRyeWluZyIp
OwogICAgICAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgICAgIG1fbmV0
d29ya1Byb2Nlc3MtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigqd2ViUHJvY2Vzc1Byb3h5
LCBXVEZNb3ZlKHJlcGx5KSk7CisgICAgICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKS5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKndlYlByb2Nlc3NQcm94eSwgV1RG
TW92ZShyZXBseSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHJl
cGx5KGNvbm5lY3Rpb25JbmZvKTsKQEAgLTgwNSwyMyArNTMyLDI2IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmdldEdQVVByb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSYgd2ViUHJvY2Vz
c1Byb3h5LCBNCiB9CiAjZW5kaWYKIAorYm9vbCBXZWJQcm9jZXNzUG9vbDo6c191c2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gZmFsc2U7CisKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCiB2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlv
blRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHksIFJlZ2lzdHJhYmxl
RG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIEFTU0VS
VF9VTlVTRUQocHJveHksICZwcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKKyAgICBh
dXRvKiB3ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdEYXRhU3Rv
cmVGb3JTZXNzaW9uSUQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXdlYnNpdGVEYXRhU3RvcmUpCisg
ICAgICAgIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCkucHRyKCk7CisgICAgaWYgKCFwcm9jZXNzUG9vbHMoKS5zaXplKCkpCisgICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxSZWY8V2ViUHJvY2Vzc1Bvb2w+PiBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJh
dGlvbjo6Y3JlYXRlKCkuZ2V0KCkpKTsKIAotICAgIGF1dG8qIHdlYnNpdGVEYXRhU3RvcmUgPSBX
ZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ05vbkRlZmF1bHREYXRhU3RvcmVGb3JTZXNzaW9uSUQo
c2Vzc2lvbklEKTsKLQotICAgIGlmICghd2Vic2l0ZURhdGFTdG9yZSkgewotICAgICAgICBpZiAo
IW1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOwotICAgICAg
ICB3ZWJzaXRlRGF0YVN0b3JlID0gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOwotICAgIH0KKyAg
ICAvLyBBcmJpdHJhcmlseSBjaG9vc2UgdGhlIGZpcnN0IHByb2Nlc3MgcG9vbCB0byBob3N0IHRo
ZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgorICAgIGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vz
c1Bvb2xzKClbMF07CisgICAgQVNTRVJUKHByb2Nlc3NQb29sKTsKIAogICAgIFdlYlByb2Nlc3NQ
cm94eSogc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSB7IG51bGxwdHIgfTsKLSAgICBpZiAoIW1f
dXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcykgewotICAgICAgICBmb3IgKGF1dG8mIHBy
b2Nlc3MgOiBtX3Byb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKHByb2Nlc3MgPT0gbV9wcmV3
YXJtZWRQcm9jZXNzIHx8IHByb2Nlc3MtPmlzRHVtbXlQcm9jZXNzUHJveHkoKSkKKworICAgIGlm
ICghc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKSB7CisgICAgICAgIGZvciAoYXV0
byYgcHJvY2VzcyA6IHByb2Nlc3NQb29sLT5tX3Byb2Nlc3NlcykgeworICAgICAgICAgICAgaWYg
KHByb2Nlc3MgPT0gcHJvY2Vzc1Bvb2wtPm1fcHJld2FybWVkUHJvY2VzcyB8fCBwcm9jZXNzLT5p
c0R1bW15UHJvY2Vzc1Byb3h5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICBpZiAoJnByb2Nlc3MtPndlYnNpdGVEYXRhU3RvcmUoKSAhPSB3ZWJzaXRlRGF0YVN0b3Jl
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODI5LDM1ICs1NTksMzUgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6ZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQ
cm9jZXNzKE5ldHdvcmtQcm8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAg
ICAgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IHByb2Nlc3MuZ2V0KCk7Ci0gICAgICAgICAg
ICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyh1c2VyQ29u
dGVudENvbnRyb2xsZXJJZGVudGlmaWVyRm9yU2VydmljZVdvcmtlcnMoKSk7CisgICAgICAgICAg
ICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LT5lbmFibGVTZXJ2aWNlV29ya2Vycyhwcm9jZXNz
UG9vbC0+dXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllckZvclNlcnZpY2VXb3JrZXJzKCkp
OwogCi0gICAgICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFNl
cnZpY2VXb3JrZXIsICJlc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1By
b2Nlc3MgcmV1c2luZyBhbiBleGlzdGluZyB3ZWIgcHJvY2VzcyAocHJvY2Vzcz0lcCwgUElEPSVk
KSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkt
PnByb2Nlc3NJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFT
RV9MT0dfSUZfQUxMT1dFRF9TVEFUSUMoU2VydmljZVdvcmtlciwgImVzdGFibGlzaFdvcmtlckNv
bnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyByZXVzaW5nIGFuIGV4aXN0aW5nIHdlYiBw
cm9jZXNzIChwcm9jZXNzPSVwLCBQSUQ9JWQpIiwgc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSwg
c2VydmljZVdvcmtlclByb2Nlc3NQcm94eS0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eSkgewotICAgICAgICBhdXRvIG5ld1Byb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQ
cm94eTo6Y3JlYXRlRm9yU2VydmljZVdvcmtlcnMoKnRoaXMsIFdURk1vdmUocmVnaXN0cmFibGVE
b21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CisgICAgICAgIGF1dG8gbmV3UHJvY2Vzc1Byb3h5
ID0gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVGb3JTZXJ2aWNlV29ya2VycygqcHJvY2Vzc1Bvb2ws
IFdURk1vdmUocmVnaXN0cmFibGVEb21haW4pLCAqd2Vic2l0ZURhdGFTdG9yZSk7CiAgICAgICAg
IHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkgPSBuZXdQcm9jZXNzUHJveHkucHRyKCk7CiAKLSAg
ICAgICAgV0VCUFJPQ0VTU1BPT0xfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChTZXJ2aWNlV29ya2Vy
LCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5lY3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0
aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nlc3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNl
cnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nl
c3NJZGVudGlmaWVyKCkpOworICAgICAgICBXRUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19JRl9B
TExPV0VEX1NUQVRJQyhTZXJ2aWNlV29ya2VyLCAiZXN0YWJsaXNoV29ya2VyQ29udGV4dENvbm5l
Y3Rpb25Ub05ldHdvcmtQcm9jZXNzIGNyZWF0aW5nIGEgbmV3IHNlcnZpY2Ugd29ya2VyIHByb2Nl
c3MgKHByb2Nlcz0lcCwgUElEPSVkKSIsIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHksIHNlcnZp
Y2VXb3JrZXJQcm9jZXNzUHJveHktPnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCi0gICAgICAgIGlu
aXRpYWxpemVOZXdXZWJQcm9jZXNzKG5ld1Byb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7
Ci0gICAgICAgIG1fcHJvY2Vzc2VzLmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwor
ICAgICAgICBwcm9jZXNzUG9vbC0+aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MobmV3UHJvY2Vzc1By
b3h5LCB3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPm1fcHJvY2Vzc2Vz
LmFwcGVuZChXVEZNb3ZlKG5ld1Byb2Nlc3NQcm94eSkpOwogICAgIH0KIAotICAgIEFTU0VSVCgh
bV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1By
b3h5KSk7Ci0gICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmFkZCgqc2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eSk7CisgICAgQVNTRVJUKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29udGFp
bnMoKnNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHkpKTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c2VzKCkuYWRkKCpzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5KTsKIAotICAgIHNlcnZpY2VXb3Jr
ZXJQcm9jZXNzUHJveHktPmVzdGFibGlzaFNlcnZpY2VXb3JrZXJDb250ZXh0KG1fc2VydmljZVdv
cmtlclByZWZlcmVuY2VzID8gbV9zZXJ2aWNlV29ya2VyUHJlZmVyZW5jZXMudmFsdWUoKSA6IG1f
ZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5zdG9yZSgpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci0gICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQuaXNOdWxsKCkp
Ci0gICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzUHJveHktPnNldFNlcnZpY2VXb3JrZXJVc2Vy
QWdlbnQobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Byb3h5LT5lc3RhYmxpc2hTZXJ2aWNlV29ya2VyQ29udGV4dChwcm9jZXNzUG9vbC0+bV9zZXJ2
aWNlV29ya2VyUHJlZmVyZW5jZXMgPyBwcm9jZXNzUG9vbC0+bV9zZXJ2aWNlV29ya2VyUHJlZmVy
ZW5jZXMudmFsdWUoKSA6IHByb2Nlc3NQb29sLT5tX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVu
Y2VzKCkuc3RvcmUoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghcHJv
Y2Vzc1Bvb2wtPm1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgc2Vy
dmljZVdvcmtlclByb2Nlc3NQcm94eS0+c2V0U2VydmljZVdvcmtlclVzZXJBZ2VudChwcm9jZXNz
UG9vbC0+bV9zZXJ2aWNlV29ya2VyVXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cmVtb3ZlRnJvbVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoV2ViUHJvY2Vzc1Byb3h5JiBwcm9j
ZXNzKQogewotICAgIEFTU0VSVChtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuY29udGFpbnMocHJv
Y2VzcykpOwotICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7Cisg
ICAgQVNTRVJUKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNzKSk7Cisg
ICAgc2VydmljZVdvcmtlclByb2Nlc3NlcygpLnJlbW92ZShwcm9jZXNzKTsKIH0KICNlbmRpZgog
CkBAIC05MjYsNyArNjU2LDcgQEAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Bv
b2w6OnRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUKICNpZiBQTEFURk9S
TShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAgICAvLyBJbiBwbGF0Zm9ybXMgdXNpbmcgQnViYmxl
d3JhcCBmb3Igc2FuZGJveGluZywgcHJld2FybWVkIHByb2Nlc3MgaXMgbGF1bmNoZWQgdXNpbmcg
dGhlIFdlYlByb2Nlc3NQb29sIHByaW1hcnkgV2Vic2l0ZURhdGFTdG9yZSwKICAgICAvLyBzbyB3
ZSBkb24ndCB1c2UgaXQgaW4gY2FzZSBvZiB1c2luZyBhIGRpZmZlcmVudCBXZWJzaXRlRGF0YVN0
b3JlLgotICAgIGlmIChtX3NhbmRib3hFbmFibGVkICYmIG1fd2Vic2l0ZURhdGFTdG9yZSAmJiBt
X3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCkgIT0gJndlYnNpdGVEYXRhU3RvcmUpCisgICAgaWYgKG1f
c2FuZGJveEVuYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2VuZGlmCiAKQEAgLTEy
MDIsOSArOTMyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5j
aGluZyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCiAgICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rp
b24oKS0+aWdub3JlVGltZW91dHNGb3JUZXN0aW5nKCk7CiAKICAgICBtX2Nvbm5lY3Rpb25DbGll
bnQuZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0aW9uKCkpOwot
Ci0gICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKLSAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3Jl
LT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpk
aXNjb25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCkBAIC0xMjk5LDEwICsx
MDI2LDcgQEAgUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZVdlYlBhZ2Uo
UGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSToKICAgICBpZiAoIXBhZ2VDb25maWd1cmF0
aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCkpIHsKICAgICAgICAgLy8gV2UgdHJ5IHRvIGF2b2lkIGNy
ZWF0aW5nIHRoZSBkZWZhdWx0IGRhdGEgc3RvcmUgYXMgbG9uZyBhcyBwb3NzaWJsZS4KICAgICAg
ICAgLy8gQnV0IGlmIHRoZXJlIGlzIGFuIGF0dGVtcHQgdG8gY3JlYXRlIGEgd2ViIHBhZ2Ugd2l0
aG91dCBhbnkgc3BlY2lmaWVkIGRhdGEgc3RvcmUsIHRoZW4gd2UgaGF2ZSB0byBjcmVhdGUgaXQu
Ci0gICAgICAgIGlmICghbV93ZWJzaXRlRGF0YVN0b3JlKQotICAgICAgICAgICAgbV93ZWJzaXRl
RGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCku
cHRyKCk7Ci0KLSAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUo
bV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKKyAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNl
dFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCkucHRyKCkpOwogICAgIH0KIAogICAgIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IHByb2Nl
c3M7CkBAIC0xMzMzLDcgKzEwNTcsNyBAQCBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9v
bDo6Y3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOgogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKICAgICBpZiAoIW1fc2VydmljZVdvcmtlclByZWZlcmVuY2Vz
KSB7CiAgICAgICAgIG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzID0gcGFnZS0+cHJlZmVyZW5j
ZXNTdG9yZSgpOwotICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9z
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAgICAgICAgICAgc2VydmljZVdv
cmtlclByb2Nlc3MudXBkYXRlU2VydmljZVdvcmtlclByZWZlcmVuY2VzU3RvcmUoKm1fc2Vydmlj
ZVdvcmtlclByZWZlcmVuY2VzKTsKICAgICB9CiAgICAgaWYgKHVzZXJDb250ZW50Q29udHJvbGxl
cikKQEAgLTEzNjAsNyArMTA4NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVNlcnZp
Y2VXb3JrZXJVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpCiAgICAgaWYgKG1fc2Vy
dmljZVdvcmtlclVzZXJBZ2VudCA9PSB1c2VyQWdlbnQpCiAgICAgICAgIHJldHVybjsKICAgICBt
X3NlcnZpY2VXb3JrZXJVc2VyQWdlbnQgPSB1c2VyQWdlbnQ7Ci0gICAgZm9yIChhdXRvJiBzZXJ2
aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3NlcykKKyAgICBmb3IgKGF1
dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogc2VydmljZVdvcmtlclByb2Nlc3NlcygpKQogICAg
ICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy5zZXRTZXJ2aWNlV29ya2VyVXNlckFnZW50KG1fc2Vy
dmljZVdvcmtlclVzZXJBZ2VudCk7CiB9CiAjZW5kaWYKQEAgLTEzNjksMTUgKzEwOTMsNiBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpwYWdlQmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFn
ZVByb3h5SWRlbnRpZmllciBwYWdlSQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9zZXNzaW9uVG9Q
YWdlSURzTWFwLmFkZChkYXRhU3RvcmUuc2Vzc2lvbklEKCksIEhhc2hTZXQ8V2ViUGFnZVByb3h5
SWRlbnRpZmllcj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFkZChwYWdlSUQpOwogICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Ci0KLSAgICBhdXRvIHNlc3Npb25JRCA9
IGRhdGFTdG9yZS5zZXNzaW9uSUQoKTsKLSAgICBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAgQVNTRVJUKCFzZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSB8fCBkYXRhU3RvcmUucGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKLSAgICAgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpIHsKLSAgICAgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJlZihk
YXRhU3RvcmUpKTsKLSAgICAgICAgICAgIGRhdGFTdG9yZS5jbGVhclBlbmRpbmdDb29raWVzKCk7
Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VFbmRVc2lu
Z1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdlSUQsIFdlYnNpdGVE
YXRhU3RvcmUmIGRhdGFTdG9yZSkKQEAgLTE0MTMsMjYgKzExMjgsMjMgQEAgRG93bmxvYWRQcm94
eSYgV2ViUHJvY2Vzc1Bvb2w6OmRvd25sb2FkKFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwg
V2ViUGFnZVByb3gKICAgICAgICAgaXNBcHBCb3VuZCA9IGluaXRpYXRpbmdQYWdlLT5pc1RvcEZy
YW1lTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oKTsKICAgICB9CiAKLSAgICBpZiAobmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJlcXVlc3QocmVx
dWVzdCk7Ci0gICAgICAgIC8vIFJlcXVlc3QncyBmaXJzdFBhcnR5Rm9yQ29va2llcyB3aWxsIGJl
IHVzZWQgYXMgT3JpZ2luYWwgVVJMIG9mIHRoZSBkb3dubG9hZCByZXF1ZXN0LgotICAgICAgICAv
LyBXZSBzZXQgdGhlIHZhbHVlIHRvIHRvcCBsZXZlbCBkb2N1bWVudCdzIFVSTC4KLSAgICAgICAg
aWYgKGluaXRpYXRpbmdQYWdlKSB7Ci0gICAgICAgICAgICBVUkwgaW5pdGlhdGluZ1BhZ2VVUkwg
PSBVUkwgeyBVUkwgeyB9LCBpbml0aWF0aW5nUGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07
Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhpbml0
aWF0aW5nUGFnZVVSTCk7Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRl
KGFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVy
bCgpKSk7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZWRSZXF1ZXN0Lmhhc0hUVFBIZWFkZXJGaWVs
ZChIVFRQSGVhZGVyTmFtZTo6VXNlckFnZW50KSkKLSAgICAgICAgICAgICAgICB1cGRhdGVkUmVx
dWVzdC5zZXRIVFRQVXNlckFnZW50KGluaXRpYXRpbmdQYWdlLT51c2VyQWdlbnQoKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9y
Q29va2llcyhVUkwoKSk7Ci0gICAgICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRl
KGZhbHNlKTsKLSAgICAgICAgICAgIGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZp
ZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQotICAgICAgICAgICAgICAgIHVwZGF0ZWRS
ZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCgp
KTsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUoZmFsc2Up
OwotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6RG93bmxvYWRSZXF1ZXN0KHNlc3Npb25JRCwgZG93bmxvYWRQcm94eS5kb3dubG9hZElEKCks
IHVwZGF0ZWRSZXF1ZXN0LCBpc0FwcEJvdW5kLCBzdWdnZXN0ZWRGaWxlbmFtZSksIDApOwotICAg
ICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgdXBkYXRlZFJl
cXVlc3QocmVxdWVzdCk7CisgICAgLy8gUmVxdWVzdCdzIGZpcnN0UGFydHlGb3JDb29raWVzIHdp
bGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhlIGRvd25sb2FkIHJlcXVlc3QuCisgICAg
Ly8gV2Ugc2V0IHRoZSB2YWx1ZSB0byB0b3AgbGV2ZWwgZG9jdW1lbnQncyBVUkwuCisgICAgaWYg
KGluaXRpYXRpbmdQYWdlKSB7CisgICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7
IFVSTCB7IH0sIGluaXRpYXRpbmdQYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKKyAgICAg
ICAgdXBkYXRlZFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoaW5pdGlhdGluZ1BhZ2VV
UkwpOworICAgICAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1NhbWVTaXRlKGFyZVJlZ2lzdHJhYmxl
RG9tYWluc0VxdWFsKGluaXRpYXRpbmdQYWdlVVJMLCByZXF1ZXN0LnVybCgpKSk7CisgICAgICAg
IGlmICghdXBkYXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpV
c2VyQWdlbnQpKQorICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChp
bml0aWF0aW5nUGFnZS0+dXNlckFnZW50KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKKyAgICAgICAgdXBkYXRl
ZFJlcXVlc3Quc2V0SXNTYW1lU2l0ZShmYWxzZSk7CisgICAgICAgIGlmICghdXBkYXRlZFJlcXVl
c3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpKQorICAgICAg
ICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQYWdlUHJveHk6OnN0YW5k
YXJkVXNlckFnZW50KCkpOwogICAgIH0KKyAgICB1cGRhdGVkUmVxdWVzdC5zZXRJc1RvcFNpdGUo
ZmFsc2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklELCBkb3dubG9hZFBy
b3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIGlzQXBwQm91bmQsIHN1Z2dlc3RlZEZp
bGVuYW1lKSwgMCk7CiAKICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKIH0KQEAgLTE0NDYsMTEg
KzExNTgsNyBAQCBEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9vbDo6cmVzdW1lRG93bmxvYWQo
V2Vic2l0ZURhdGFTdG9yZSYgZGF0YVN0b3JlLCBXZWJQYQogICAgIGlmICghcGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94
RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogCi0g
ICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc3VtZURvd25sb2FkKHNlc3Npb25JRCwgZG93
bmxvYWRQcm94eS5kb3dubG9hZElEKCksIHJlc3VtZURhdGEuZGF0YVJlZmVyZW5jZSgpLCBwYXRo
LCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgMCk7Ci0gICAgICAgIHJldHVybiBkb3dubG9hZFBy
b3h5OwotICAgIH0KLQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXN1bWVEb3dubG9hZChzZXNzaW9uSUQsIGRvd25s
b2FkUHJveHkuZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLmRhdGFSZWZlcmVuY2UoKSwgcGF0aCwg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOwogICAgIHJldHVybiBkb3dubG9hZFByb3h5Owog
fQogCkBAIC0xNTIxLDcgKzEyMjksNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1
Z2lucygpCiAKIFByb2Nlc3NJRCBXZWJQcm9jZXNzUG9vbDo6bmV0d29ya1Byb2Nlc3NJZGVudGlm
aWVyKCkKIHsKLSAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2VzcyA/IG1fbmV0d29ya1Byb2Nlc3Mt
PnByb2Nlc3NJZGVudGlmaWVyKCkgOiAwOworICAgIHJldHVybiBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5wcm9jZXNzSWRlbnRpZmllcigpOwogfQogCiBQcm9jZXNzSUQgV2ViUHJv
Y2Vzc1Bvb2w6OnByZXdhcm1lZFByb2Nlc3NJZGVudGlmaWVyKCkKQEAgLTE2MTgsMTAgKzEzMjYs
NyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5n
Q3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBnbG9i
YWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5hZGQodXJsU2NoZW1lKTsK
LSAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNz
KCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lD
dXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5yZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKHVybFNj
aGVtZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hl
bWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUp
CkBAIC0xNjMwLDEwICsxMzM1LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckds
b2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb24KICAgICAgICAg
cmV0dXJuOwogCiAgICAgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJz
KCkucmVtb3ZlKHVybFNjaGVtZSk7Ci0gICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IGFsbFBy
b2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnVu
cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbCh1cmxTY2hlbWUpOwotICAgIH0K
KyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS51bnJlZ2lzdGVyU2NoZW1lRm9y
TGVnYWN5Q3VzdG9tUHJvdG9jb2wodXJsU2NoZW1lKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJiB1cmxT
Y2hlbWUpCkBAIC0xNjY3LDE2ICsxMzY5LDE0IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENh
Y2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIAotICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSwgMCk7Cisg
ICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOwogfQogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVNb2Rl
bCBjYWNoZU1vZGVsKQogewogICAgIHVwZGF0ZUJhY2tGb3J3YXJkQ2FjaGVDYXBhY2l0eSgpOwog
Ci0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNl
bmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbFN5bmNocm9ub3Vz
bHlGb3JUZXN0aW5nKGNhY2hlTW9kZWwpLCB7IH0sIHsgfSk7CisgICAgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRD
YWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoY2FjaGVNb2RlbCksIHsgfSwgeyB9KTsK
IH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2
YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKQEAgLTE2ODYsNyArMTM4Niw3IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSB0aW1l
b3V0SW50ZXJ2YWwpCiAKIERvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3du
bG9hZFByb3h5KFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBXZWJQYWdlUHJveHkqIG9yaWdpbmF0aW5nUGFnZSwgY29uc3QgRnJhbWVJ
bmZvRGF0YSYgZnJhbWVJbmZvKQogewotICAgIHJldHVybiBlbnN1cmVOZXR3b3JrUHJvY2Vzcygp
LmNyZWF0ZURvd25sb2FkUHJveHkoZGF0YVN0b3JlLCByZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdp
bmF0aW5nUGFnZSk7CisgICAgcmV0dXJuIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuY3JlYXRlRG93
bmxvYWRQcm94eShkYXRhU3RvcmUsICp0aGlzLCByZXF1ZXN0LCBmcmFtZUluZm8sIG9yaWdpbmF0
aW5nUGFnZSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bnRoZXNpemVBcHBJc0JhY2tn
cm91bmQoYm9vbCBiYWNrZ3JvdW5kKQpAQCAtMTc2MiwyNSArMTQ2MiwxMSBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKIH0KIAotdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6dXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkKLXsKLSAgICBBU1NFUlQobV9w
cm9jZXNzZXMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fbmV0d29ya1Byb2Nlc3MpOwotCi0g
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9w
cm9jZXNzZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3VsZFVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbiA9IHRydWU7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nl
c3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBseSkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAm
JiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxV
PihyZXBseSksIDApOworICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5j
YW5TZW5kTWVzc2FnZSgpKQorICAgICAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5zZW5kU3luYyhzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihyZXBs
eSksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvcldlYlNvY2tldChib29sIGFsbG93cykKQEAgLTE3OTAsMTkgKzE0NzYsMTQgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQo
Ym9vbCBhbGxvd3MpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFs
cygpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZWRDcmVkZW50aWFscygpLCAwKTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQogewogICAgIHRl
cm1pbmF0ZVNlcnZpY2VXb3JrZXJzKCk7CiAKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX25ldHdvcmtQcm9jZXNzLT50ZXJtaW5hdGUoKTsK
LSAgICBtX25ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS50ZXJtaW5hdGUoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVy
bWluYXRlQWxsV2ViQ29udGVudFByb2Nlc3NlcygpCkBAIC0xODE0LDMwICsxNDk1LDI1IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZUFsbFdlYkNvbnRlbnRQcm9jZXNzZXMoKQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kRm9y
VGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoKTsKLQotICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcmVwYXJlVG9TdXNwZW5kKElz
U3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmRQcmVwYXJlVG9TdXNwZW5kKElz
U3VzcGVuc2lvbkltbWluZW50OjpObywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWlu
ZW50bHlGb3JUZXN0aW5nKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAg
bV9uZXR3b3JrUHJvY2Vzcy0+c2VuZFByb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0
aW5nKCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZFByb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNlbmROZXR3b3JrUHJvY2Vzc0RpZFJlc3VtZSgpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmRQcm9jZXNzRGlkUmVzdW1lKCk7
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZFByb2Nlc3NEaWRSZXN1
bWUoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdvcmtlcnMo
KQogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBhdXRvIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKTsKLSAgICB3aGlsZSAobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNv
bXB1dGVTaXplKCkpCi0gICAgICAgIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5iZWdpbigpLT5k
aXNhYmxlU2VydmljZVdvcmtlcnMoKTsKKyAgICB3aGlsZSAoc2VydmljZVdvcmtlclByb2Nlc3Nl
cygpLmNvbXB1dGVTaXplKCkpCisgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKS5iZWdp
bigpLT5kaXNhYmxlU2VydmljZVdvcmtlcnMoKTsKICNlbmRpZgogfQogCkBAIC0xODU0LDE1ICsx
NTMwLDE0IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAobV9uZXR3b3JrUHJvY2Vz
cykKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKCksIDApOworICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpLCAwKTsKICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjphbGxvd1NwZWNp
ZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJbmZvKiBjZXJ0
aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBob3N0KQogewogICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlm
aWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2Vy
dGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDAp
OwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdXRvbWF0aW9uQ2FwYWJpbGl0aWVz
KCkgY29uc3QKQEAgLTIxMzksMTUgKzE4MTQsMTkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVw
b3J0V2ViQ29udGVudENQVVRpbWUoU2Vjb25kcyBjcHVUaW1lLCB1aW50NjRfdCBhY3Rpdml0eVMK
ICNlbmRpZgogfQogCitXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+JiBXZWJQcm9jZXNzUG9v
bDo6c2VydmljZVdvcmtlclByb2Nlc3NlcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFdlYWtIYXNoU2V0PFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICByZXR1cm4gcHJv
Y2Vzc2VzOworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9u
cygpCiB7CiAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS51cGRhdGVQcm9jZXNzQXNzZXJ0aW9u
KCk7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIC8vIENoZWNrIG9uIG5leHQgcnVu
IGxvb3Agc2luY2UgdGhlIHdlYiBwcm9jZXNzIHByb3h5IHRva2VucyBhcmUgcHJvYmFibHkgYmVp
bmcgdXBkYXRlZC4KLSAgICBjYWxsT25NYWluUnVuTG9vcChbdGhpcywgd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cih0aGlzKV0gewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBmb3IgKGF1dG8mIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNl
V29ya2VyUHJvY2Vzc2VzKQorICAgIGNhbGxPbk1haW5SdW5Mb29wKFtdIHsKKyAgICAgICAgZm9y
IChhdXRvJiBzZXJ2aWNlV29ya2VyUHJvY2VzcyA6IHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSkK
ICAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLnVwZGF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzQXNzZXJ0aW9uKCk7CiAgICAgfSk7CiAjZW5kaWYKQEAgLTIxNTcsNyArMTgzNiw3IEBAIGJv
b2wgV2ViUHJvY2Vzc1Bvb2w6OmlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVu
dGlmaWVyIHBhZ2VJRCkgY29uc3QKIHsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgaW5lZmZpY2llbnQuCi0gICAgcmV0dXJuIFdURjo6YW55T2YobV9z
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLCBbcGFnZUlEXShhdXRvJiBwcm9jZXNzKSB7CisgICAgcmV0
dXJuIFdURjo6YW55T2Yoc2VydmljZVdvcmtlclByb2Nlc3NlcygpLCBbcGFnZUlEXShhdXRvJiBw
cm9jZXNzKSB7CiAgICAgICAgIHJldHVybiBwcm9jZXNzLmhhc1NlcnZpY2VXb3JrZXJQYWdlUHJv
eHkocGFnZUlEKTsKICAgICB9KTsKICNlbmRpZgpAQCAtMjM4MSwxMCArMjA2MCw3IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIHRvRG9tYWluLCBPcHRpb25TZXQ8Q3Jvc3NTaXRlTmF2aWdhdGlvbkRhdGFU
cmFuc2Zlcjo6RmxhZz4gbmF2aWdhdGlvbkRhdGFUcmFuc2ZlciwgV2ViUGFnZVByb3h5SWRlbnRp
ZmllciB3ZWJQYWdlUHJveHlJRCwgUGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEKQogewotICAgIGlm
ICghbV9uZXR3b3JrUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBm
cm9tRG9tYWluLCB0b0RvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5
SUQsIHdlYlBhZ2VJRCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGlk
Q29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXIoc2Vzc2lvbklELCBmcm9tRG9tYWlu
LCB0b0RvbWFpbiwgbmF2aWdhdGlvbkRhdGFUcmFuc2Zlciwgd2ViUGFnZVByb3h5SUQsIHdlYlBh
Z2VJRCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpbnNXaXRoVXNlckludGVy
YWN0aW9uKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKQEAg
LTI0MjksMjcgKzIxMDUsMjggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQXVkaWJsZU1l
ZGlhQXNzZXJ0aW9ucygpCiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldFVzZVNlcGFyYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKQog
ewotICAgIGlmIChtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPT0gdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcykKKyAgICBpZiAoc191c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzID09IHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFdFQlBST0NFU1NQT09MX1JFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJz
ZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOiAodXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2Vzcz0lZCkiLCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKKyAgICBX
RUJQUk9DRVNTUE9PTF9SRUxFQVNFX0xPR19TVEFUSUMoU2VydmljZVdvcmtlciwgInNldFVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3M6ICh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzPSVkKSIsIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogCi0gICAgbV91c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJv
Y2VzczsKLSAgICB0ZXJtaW5hdGVTZXJ2aWNlV29ya2VycygpOwotICAgIHRlcm1pbmF0ZU5ldHdv
cmtQcm9jZXNzKCk7CisgICAgc191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdXNl
U2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzczsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9v
bC0+dGVybWluYXRlU2VydmljZVdvcmtlcnMoKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
aW5nbGV0b24oKS50ZXJtaW5hdGUoKTsKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
IGJvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1NlcnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlG
b3JUZXN0aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjphbnlPZihtX3NlcnZpY2VXb3Jr
ZXJQcm9jZXNzZXMsIFtdKGF1dG8mIHByb2Nlc3MpIHsKKyAgICByZXR1cm4gV1RGOjphbnlPZihz
ZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCksIFtdKGF1dG8mIHByb2Nlc3MpIHsKICAgICAgICAgcmV0
dXJuIHByb2Nlc3MuaGFzU2VydmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3Rpbmco
KTsKICAgICB9KTsKIH0KIAogYm9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzU2VydmljZVdvcmtlckJh
Y2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmFu
eU9mKG1fc2VydmljZVdvcmtlclByb2Nlc3NlcywgW10oYXV0byYgcHJvY2VzcykgeworICAgIHJl
dHVybiBXVEY6OmFueU9mKHNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKSwgW10oYXV0byYgcHJvY2Vz
cykgewogICAgICAgICByZXR1cm4gcHJvY2Vzcy5oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFj
dGl2aXR5Rm9yVGVzdGluZygpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmgKaW5kZXggMWY0NmNlNGQ2MzdlNzQ2ZDk0YzZlOGFlOTY1M2JhZDBjYTc5
ODI3ZS4uM2QxY2VlODU4OGY1ZTE0MmE2NzMyOTliZDI5NzZhOTk4YzcwNGQ1OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBAIC04MSw3ICs4MSw2IEBAIE9CSkNf
Q0xBU1MgV0tQcmVmZXJlbmNlT2JzZXJ2ZXI7CiAKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXV0
b21hdGlvbkNsaWVudDsKLWNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudDsKIGNsYXNz
IERvd25sb2FkQ2xpZW50OwogY2xhc3MgSFRUUENvb2tpZVN0b3JlOwogY2xhc3MgSW5qZWN0ZWRC
dW5kbGVDbGllbnQ7CkBAIC0xODAsNyArMTc5LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGlz
dG9yeUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVu
dD4mJik7CiAgICAgdm9pZCBzZXREb3dubG9hZENsaWVudChVbmlxdWVSZWY8QVBJOjpEb3dubG9h
ZENsaWVudD4mJik7CiAgICAgdm9pZCBzZXRBdXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JiYpOwotICAgIHZvaWQgc2V0TGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3RvY29sTWFu
YWdlckNsaWVudD4mJik7CiAKICAgICB2b2lkIHNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGN1c3RvbVdl
YkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlv
bi0+Y3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCk7IH0KQEAgLTIwOSw5
ICsyMDcsNiBAQCBwdWJsaWM6CiAgICAgLy8gRGlzY29ubmVjdCB0aGUgcHJvY2VzcyBmcm9tIHRo
ZSBjb250ZXh0LgogICAgIHZvaWQgZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5Kik7
CiAKLSAgICBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUqIHdlYnNpdGVEYXRhU3RvcmUoKSBjb25z
dCB7IHJldHVybiBtX3dlYnNpdGVEYXRhU3RvcmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFByaW1h
cnlEYXRhU3RvcmUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiBkYXRhU3RvcmUpIHsgbV93ZWJz
aXRlRGF0YVN0b3JlID0gJmRhdGFTdG9yZTsgfQotCiAgICAgUmVmPFdlYlBhZ2VQcm94eT4gY3Jl
YXRlV2ViUGFnZShQYWdlQ2xpZW50JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwog
CiAgICAgdm9pZCBwYWdlQmVnaW5Vc2luZ1dlYnNpdGVEYXRhU3RvcmUoV2ViUGFnZVByb3h5SWRl
bnRpZmllciwgV2Vic2l0ZURhdGFTdG9yZSYpOwpAQCAtMzA5LDggKzMwNCw2IEBAIHB1YmxpYzoK
ICAgICBBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xpZW50KCkgeyBy
ZXR1cm4gKm1faGlzdG9yeUNsaWVudDsgfQogICAgIFdlYkNvbnRleHRDbGllbnQmIGNsaWVudCgp
IHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKLSAgICBBUEk6OkN1c3RvbVByb3RvY29sTWFuYWdlckNs
aWVudCYgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gKm1fY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50OyB9Ci0KICAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CiAg
ICAgICAgIHVuc2lnbmVkIHdrVmlld0NvdW50OwogICAgICAgICB1bnNpZ25lZCB3a1BhZ2VDb3Vu
dDsKQEAgLTMxOCw5ICszMTEsNiBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBzdGF0aWMgU3RhdGlz
dGljcyYgc3RhdGlzdGljcygpOyAgICAKIAotICAgIHZvaWQgdXNlVGVzdGluZ05ldHdvcmtTZXNz
aW9uKCk7Ci0gICAgYm9vbCBpc1VzaW5nVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb247IH0KLQogICAgIHZvaWQgc2V0
QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JXZWJTb2NrZXQoYm9vbCk7CiAKICAgICB2b2lkIGNs
ZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKTsKQEAgLTQwMCwxOCArMzkwLDE1IEBAIHB1YmxpYzoKIAog
ICAgIC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50CiAgICAgTmV0d29ya1Byb2Nlc3NQcm94
eSYgZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVEYXRh
U3RvcmUgPSBudWxscHRyKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3b3JrUHJvY2Vz
cygpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7IH0KICAgICB2b2lkIG5l
dHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Jik7CiAKICAgICB2b2lkIGdl
dE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkmLCBNZXNzYWdlczo6V2Vi
UHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkmJik7
CiAKICAgICBib29sIGlzU2VydmljZVdvcmtlclBhZ2VJRChXZWJQYWdlUHJveHlJZGVudGlmaWVy
KSBjb25zdDsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgdm9pZCBlc3RhYmxpc2hX
b3JrZXJDb250ZXh0Q29ubmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94
eSYsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiYsIFBBTDo6U2Vzc2lvbklELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHN0YXRpYyB2b2lkIGVzdGFibGlzaFdvcmtlckNv
bnRleHRDb25uZWN0aW9uVG9OZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc1Byb3h5JiwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCByZW1vdmVGcm9tU2VydmljZVdvcmtlclByb2Nlc3Nl
cyhXZWJQcm9jZXNzUHJveHkmKTsKLSAgICBzaXplX3Qgc2VydmljZVdvcmtlclByb3hpZXNDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5jb21wdXRlU2l6ZSgp
OyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIo
Ym9vbCBhbGxvd3MpIHsgbV9hbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIg
PSBhbGxvd3M7IH0KLSAgICBib29sIGFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdv
cmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNl
V29ya2VyOyB9CisgICAgc2l6ZV90IHNlcnZpY2VXb3JrZXJQcm94aWVzQ291bnQoKSBjb25zdCB7
IHJldHVybiBzZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCkuY29tcHV0ZVNpemUoKTsgfQogICAgIHZv
aWQgdXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCk7
CiAgICAgY29uc3QgT3B0aW9uYWw8VXNlckNvbnRlbnRDb250cm9sbGVySWRlbnRpZmllcj4mIHVz
ZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXJGb3JTZXJ2aWNlV29ya2VycygpIGNvbnN0IHsg
cmV0dXJuIG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29ya2VyOyB9CiAgICAg
Ym9vbCBoYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpIGNvbnN0
OwpAQCAtNTM5LDggKzUyNiw4IEBAIHB1YmxpYzoKICAgICAKICAgICBQbHVnSW5BdXRvU3RhcnRQ
cm92aWRlciYgcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIoKSB7IHJldHVybiBtX3BsdWdJbkF1dG9T
dGFydFByb3ZpZGVyOyB9CiAKLSAgICB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoYm9vbCk7Ci0gICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9CisgICAg
c3RhdGljIHZvaWQgc2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKKyAg
ICBzdGF0aWMgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgeyByZXR1cm4g
c191c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9CiAKICNpZiBFTkFCTEUoQ0ZQUkVG
U19ESVJFQ1RfTU9ERSkKICAgICB2b2lkIG5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZChjb25zdCBT
dHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IE9wdGlvbmFsPFN0cmluZz4m
IGVuY29kZWRWYWx1ZSk7CkBAIC01NTcsNiArNTQ0LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
bmROZXR3b3JrUHJvY2Vzc1hQQ0VuZHBvaW50VG9XZWJQcm9jZXNzKE9TT2JqZWN0UHRyPHhwY19v
YmplY3RfdD4gZW5kcG9pbnRNZXNzYWdlKTsKICNlbmRpZgogCisgICAgc3RhdGljIHZvaWQgcGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMmKTsKKyAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1dpdGhDdXN0b21Q
cm90b2NvbEhhbmRsZXJzKCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHN0YXRp
YyBTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSgpOworICAgIHN0YXRpYyBTdHJpbmcgcGFy
ZW50QnVuZGxlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyBuZXR3b3JraW5nQ2FjaGVz
RGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0cmluZyB3ZWJDb250ZW50Q2FjaGVzRGlyZWN0b3J5
KCk7CisgICAgc3RhdGljIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKKyNl
bmRpZgorCiBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAKQEAgLTU3
MCw4ICs1NjgsNiBAQCBwcml2YXRlOgogICAgIFdlYlByb2Nlc3NQcm94eSYgY3JlYXRlTmV3V2Vi
UHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCA9
IFdlYlByb2Nlc3NQcm94eTo6SXNQcmV3YXJtZWQ6Ok5vKTsKICAgICB2b2lkIGluaXRpYWxpemVO
ZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYsIFdlYnNpdGVEYXRhU3RvcmUqLCBXZWJQcm9j
ZXNzUHJveHk6OklzUHJld2FybWVkID0gV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZDo6Tm8p
OwogCi0gICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwotCiAgICAgdm9pZCBoYW5kbGVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBt
ZXNzYWdlQm9keSk7CiAgICAgdm9pZCBoYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3Nh
Z2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJEYXRhJiYpPiYmKTsKIApAQCAtNTk1
LDE0ICs1OTEsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB1c2VzU2luZ2xlV2ViUHJvY2Vzcygp
IGNvbnN0IHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi0+dXNlc1NpbmdsZVdlYlByb2Nlc3MoKTsg
fQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHBhcmVudEJ1bmRsZURpcmVjdG9y
eSgpOwotICAgIHN0YXRpYyBTdHJpbmcgbmV0d29ya2luZ0NhY2hlc0RpcmVjdG9yeSgpOwotICAg
IHN0YXRpYyBTdHJpbmcgd2ViQ29udGVudENhY2hlc0RpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBT
dHJpbmcgY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCk7Ci0jZW5kaWYKLQogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIHZvaWQgcmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKICAg
ICB2b2lkIHVucmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKQEAgLTY0NCw5ICs2MzIs
OCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFdlYWtQdHI8V2ViUHJv
Y2Vzc1Byb3h5Pj4gbV9kdW1teVByb2Nlc3NQcm94aWVzOyAvLyBMaWdodHdlaWdodCBXZWJQcm9j
ZXNzUHJveHkgb2JqZWN0cyB3aXRob3V0IGJhY2tpbmcgcHJvY2Vzcy4KIAogI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKLSAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJveHk+IG1fc2Vydmlj
ZVdvcmtlclByb2Nlc3NlczsKKyAgICBzdGF0aWMgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5
PiYgc2VydmljZVdvcmtlclByb2Nlc3NlcygpOwogICAgIGJvb2wgbV93YWl0aW5nRm9yV29ya2Vy
Q29udGV4dFByb2Nlc3NDb25uZWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29sIG1fYWxsb3dzQW55
U1NMQ2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyIHsgZmFsc2UgfTsKICAgICBTdHJpbmcgbV9z
ZXJ2aWNlV29ya2VyVXNlckFnZW50OwogICAgIE9wdGlvbmFsPFdlYlByZWZlcmVuY2VzU3RvcmU+
IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzOwogICAgIE9wdGlvbmFsPFVzZXJDb250ZW50Q29u
dHJvbGxlcklkZW50aWZpZXI+IG1fdXNlckNvbnRlbnRDb250cm9sbGVySURGb3JTZXJ2aWNlV29y
a2VyOwpAQCAtNjYyLDcgKzY0OSw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFQ
STo6QXV0b21hdGlvbkNsaWVudD4gbV9hdXRvbWF0aW9uQ2xpZW50OwogICAgIFVuaXF1ZVJlZjxB
UEk6OkRvd25sb2FkQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiBtX2hpc3RvcnlDbGllbnQ7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50PiBtX2N1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudDsKIAogICAgIFJlZlB0cjxXZWJBdXRvbWF0aW9uU2Vzc2lv
bj4gbV9hdXRvbWF0aW9uU2Vzc2lvbjsKIApAQCAtNjk0LDggKzY4MCw2IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX21lbW9yeVNhbXBsZXJFbmFibGVkIHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9t
ZW1vcnlTYW1wbGVySW50ZXJ2YWwgeyAxNDAwLjAgfTsKIAotICAgIFJlZlB0cjxXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU+IG1fd2Vic2l0ZURhdGFTdG9yZTsKLQogICAgIHR5cGVkZWYgSGFzaE1h
cDxjb25zdCBjaGFyKiwgUmVmUHRyPFdlYkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFzaDxjb25z
dCBjaGFyKj4+IFdlYkNvbnRleHRTdXBwbGVtZW50TWFwOwogICAgIFdlYkNvbnRleHRTdXBwbGVt
ZW50TWFwIG1fc3VwcGxlbWVudHM7CiAKQEAgLTczMCw4ICs3MTQsNiBAQCBwcml2YXRlOgogCiAg
ICAgYm9vbCBtX3Byb2Nlc3NUZXJtaW5hdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKLQogICAg
IEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25h
cnlDYWxsYmFja3M7CiAKICNpZiBVU0UoU09VUCkKQEAgLTgzNyw3ICs4MTksNyBAQCBwcml2YXRl
OgogI2Vsc2UKICAgICBib29sIG1faXNEZWxheWVkV2ViUHJvY2Vzc0xhdW5jaERpc2FibGVkIHsg
ZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzIHsgZmFsc2UgfTsKKyAgICBzdGF0aWMgYm9vbCBzX3VzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3M7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIEhh
c2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IG1fZG9tYWluc1dpdGhVc2VySW50ZXJh
Y3Rpb247CkBAIC04NTEsMTUgKzgzMywxNSBAQCBwcml2YXRlOgogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKFQmJiBtZXNz
YWdlKQogewotICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNh
blNlbmRNZXNzYWdlKCkpCi0gICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoc3RkOjpmb3J3
YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKKyAgICBpZiAoTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xl
dG9uKCkuY2FuU2VuZE1lc3NhZ2UoKSkKKyAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2lu
Z2xldG9uKCkuc2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nl
c3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKQogewogICAgIGVuc3VyZU5ldHdv
cmtQcm9jZXNzKCk7Ci0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4o
bWVzc2FnZSksIDApOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQo
c3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAKaW5kZXggNDg4ODcyM2UwYmRhNTc4MzhjMjg4NzlkY2NmMjdlMWUzYjQx
NGYyMi4uYWE5MTQzNzRjOTJmNjdmMTcxYWZmYzY4YWVjMzM5NjE2OTQ3NzY0YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0
YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAi
V2ViQmFja0ZvcndhcmRDYWNoZS5oIgorI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5o
IgogI2luY2x1ZGUgIldlYktpdDJJbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5
LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NhY2hlLmgiCkBAIC03NSw2ICs3NiwxMCBAQAogI2lu
Y2x1ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKENPQ09BKQorI2luY2x1ZGUgIkRlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmgiCisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBib29sIGFsbG93c1dlYnNpdGVEYXRhUmVj
b3Jkc0ZvckFsbE9yaWdpbnM7CkBAIC04MywxMyArODgsMjIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjphbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMoKQogICAgIGFsbG93c1dl
YnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnMgPSB0cnVlOwogfQogCi1zdGF0aWMgSGFzaE1h
cDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBub25EZWZhdWx0RGF0YVN0b3Jl
cygpCitzdGF0aWMgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgV2Vic2l0ZURhdGFTdG9yZSo+JiBh
bGxEYXRhU3RvcmVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1VJVGhyZWFkKCkpOwogICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBXZWJzaXRlRGF0
YVN0b3JlKj4+IG1hcDsKICAgICByZXR1cm4gbWFwOwogfQogCitWZWN0b3I8V2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnNGcm9tQWxsU3RvcmVz
KCkKK3sKKyAgICBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IGFsbFBhcmFtZXRl
cnM7CisgICAgYWxsUGFyYW1ldGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFsbERhdGFTdG9y
ZXMoKS5zaXplKCkpOworICAgIGZvciAoYXV0byogc3RvcmUgOiBhbGxEYXRhU3RvcmVzKCkudmFs
dWVzKCkpCisgICAgICAgIGFsbFBhcmFtZXRlcnMudW5jaGVja2VkQXBwZW5kKHN0b3JlLT5wYXJh
bWV0ZXJzKCkpOworICAgIHJldHVybiBhbGxQYXJhbWV0ZXJzOworfQorCiBSZWY8V2Vic2l0ZURh
dGFTdG9yZT4gV2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlTm9uUGVyc2lzdGVudCgpCiB7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbjo6Y3JlYXRlKElzUGVyc2lzdGVudDo6Tm8pLCBQQUw6OlNlc3Npb25JRDo6Z2Vu
ZXJhdGVFcGhlbWVyYWxTZXNzaW9uSUQoKSkpOwpAQCAtMTE1LDEwICsxMjksMTEgQEAgV2Vic2l0
ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3Vy
YXRpb24+JiYgY29uZmlndXIKICNlbmRpZgogewogICAgIFdURjo6c2V0UHJvY2Vzc1ByaXZpbGVn
ZXMoYWxsUHJpdmlsZWdlcygpKTsKLSAgICBtYXliZVJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgp
OworICAgIHJlZ2lzdGVyV2l0aFNlc3Npb25JRE1hcCgpOwogICAgIHBsYXRmb3JtSW5pdGlhbGl6
ZSgpOwogCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpzaW5nbGV0b24oKS5hZGRTZXNzaW9uKCp0aGlzKTsKIH0KIAogV2Vic2l0ZURhdGFT
dG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQpAQCAtMTI4LDE3ICsxNDMsMTIgQEAgV2Vic2l0ZURh
dGFTdG9yZTo6fldlYnNpdGVEYXRhU3RvcmUoKQogCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiAK
LSAgICBpZiAobV9zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KSkgewotICAgICAgICBBU1NFUlQobm9uRGVmYXVsdERhdGFTdG9yZXMoKS5nZXQobV9zZXNzaW9u
SUQpID09IHRoaXMpOwotICAgICAgICBub25EZWZhdWx0RGF0YVN0b3JlcygpLnJlbW92ZShtX3Nl
c3Npb25JRCk7Ci0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBXZWJQcm9jZXNzUG9v
bDo6YWxsUHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5yZW1vdmVTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICAgICAgfQotICAg
IH0KKyAgICBBU1NFUlQoYWxsRGF0YVN0b3JlcygpLmdldChtX3Nlc3Npb25JRCkgPT0gdGhpcyk7
CisgICAgYWxsRGF0YVN0b3JlcygpLnJlbW92ZShtX3Nlc3Npb25JRCk7CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkucmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQotICAgICAgICBpZiAoYXV0byogZ3B1UHJvY2Vzc1Byb3h5ID0g
R1BVUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b25JZkNyZWF0ZWQoKSkKLSAgICAgICAgICAgIGdwdVBy
b2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgaWYgKGF1dG8qIGdw
dVByb2Nlc3NQcm94eSA9IEdQVVByb2Nlc3NQcm94eTo6c2luZ2xldG9uSWZDcmVhdGVkKCkpCisg
ICAgICAgIGdwdVByb2Nlc3NQcm94eS0+cmVtb3ZlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAjZW5k
aWYKIH0KIApAQCAtMTY5LDE3ICsxNzksMTUgQEAgYm9vbCBXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlRXhpc3RzKCkKICAgICByZXR1cm4gISFnbG9iYWxEZWZhdWx0RGF0YVN0b3Jl
KCk7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6bWF5YmVSZWdpc3RlcldpdGhTZXNzaW9u
SURNYXAoKQordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZWdpc3RlcldpdGhTZXNzaW9uSURNYXAo
KQogewotICAgIGlmIChtX3Nlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gbm9uRGVmYXVsdERhdGFTdG9yZXMoKS5h
ZGQobV9zZXNzaW9uSUQsIHRoaXMpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVz
dWx0LmlzTmV3RW50cnkpOwotICAgIH0KKyAgICBhdXRvIHJlc3VsdCA9IGFsbERhdGFTdG9yZXMo
KS5hZGQobV9zZXNzaW9uSUQsIHRoaXMpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1
bHQuaXNOZXdFbnRyeSk7CiB9CiAKLVdlYnNpdGVEYXRhU3RvcmUqIFdlYnNpdGVEYXRhU3RvcmU6
OmV4aXN0aW5nTm9uRGVmYXVsdERhdGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQpCitXZWJzaXRlRGF0YVN0b3JlKiBXZWJzaXRlRGF0YVN0b3JlOjpleGlzdGluZ0Rh
dGFTdG9yZUZvclNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgcmV0
dXJuIHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpID8gbm9u
RGVmYXVsdERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKSA6IG51bGxwdHI7CisgICAgcmV0dXJu
IGFsbERhdGFTdG9yZXMoKS5nZXQoc2Vzc2lvbklEKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpyZWdpc3RlclByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQpAQCAtMTk1LDEy
ICsyMDMsNiBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnVucmVnaXN0ZXJQcm9jZXNzKFdlYlBy
b2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBtX3Byb2Nlc3Nlcy5yZW1vdmUocHJvY2Vzcyk7CiB9
CiAKLVdlYlByb2Nlc3NQb29sKiBXZWJzaXRlRGF0YVN0b3JlOjpwcm9jZXNzUG9vbEZvckNvb2tp
ZVN0b3JhZ2VPcGVyYXRpb25zKCkKLXsKLSAgICBhdXRvIHBvb2xzID0gcHJvY2Vzc1Bvb2xzKDEp
OwotICAgIHJldHVybiBwb29scy5pc0VtcHR5KCkgPyBudWxscHRyIDogcG9vbHMuYmVnaW4oKS0+
Z2V0KCk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzb2x2ZURpcmVjdG9yaWVzSWZO
ZWNlc3NhcnkoKQogewogICAgIGlmIChtX2hhc1Jlc29sdmVkRGlyZWN0b3JpZXMpCkBAIC00NDMs
OCArNDQ1LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseShPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE8KICAgICAgICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHBvb2xzKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNz
QWNjZXNzVHlwZSkgewogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlm
TGF1bmNoZWQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nl
c3MoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6OkxhdW5jaDoKQEAgLTQ1
Niw3ICs0NTYsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgTwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAg
ICAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmZldGNoV2Vic2l0ZURhdGEo
bV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
LCBwcm9jZXNzUG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKKyAgICAgICAgICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmZldGNoV2Vic2l0ZURhdGEobV9zZXNzaW9u
SUQsIGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNz
UG9vbF0oV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGEpIHsKICAgICAgICAgICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjayhXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNzI3LDggKzcyNyw2IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRh
VHlwZXMsIFdhbGxUaW1lCiAgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwb29scykg
ewogICAgICAgICAgICAgc3dpdGNoIChuZXR3b3JrUHJvY2Vzc0FjY2Vzc1R5cGUpIHsKICAgICAg
ICAgICAgIGNhc2UgUHJvY2Vzc0FjY2Vzc1R5cGU6Ok9ubHlJZkxhdW5jaGVkOgotICAgICAgICAg
ICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBj
YXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6CkBAIC03NDAsNyArNzM4LDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRh
dGFUeXBlcywgV2FsbFRpbWUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5
cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0gewor
ICAgICAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuZGVsZXRlV2Vic2l0
ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNrQWdn
cmVnYXRvciwgcHJvY2Vzc1Bvb2xdIHsKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0
b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwogICAgICAgICAgICAgfSk7CiAjaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTg5MSwxNCArODg5LDkgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFU
eXBlcywgV2FsbFRpbWUKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAg
IGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzKSkgewogICAgICAgICBpZiAoIWRpZE5vdGlmeU5ldHdvcmtQcm9jZXNzVG9EZWxldGVX
ZWJzaXRlRGF0YSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0Fn
Z3JlZ2F0b3ItPmFkZFBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICBwcm9j
ZXNzLT5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNp
bmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxs
YmFja0FnZ3JlZ2F0b3ItPnJlbW92ZVBlbmRpbmdDYWxsYmFjaygpOwotICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5kZWxldGVXZWJzaXRlRGF0YShtX3Nlc3Np
b25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Cisg
ICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5yZW1vdmVQZW5kaW5nQ2FsbGJhY2so
KTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKQEAgLTk5Miw4ICs5ODUsNiBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5
cGVzLCBjb25zdCBWZQogICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcG9vbHMpIHsK
ICAgICAgICAgICAgIHN3aXRjaCAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlKSB7CiAgICAgICAg
ICAgICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpPbmx5SWZMYXVuY2hlZDoKLSAgICAgICAgICAg
ICAgICBpZiAoIXByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2Fz
ZSBQcm9jZXNzQWNjZXNzVHlwZTo6TGF1bmNoOgpAQCAtMTAxOSw3ICsxMDEwLDcgQEAgdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRh
dGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAgICAgICAgIHByb2Nlc3NQb29s
LT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMobV9zZXNzaW9u
SUQsIGRhdGFUeXBlcywgb3JpZ2lucywgY29va2llSG9zdE5hbWVzLCBIU1RTQ2FjaGVIb3N0TmFt
ZXMsIHJlZ2lzdHJhYmxlRG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciwgcHJvY2Vzc1Bvb2xd
IHsKKyAgICAgICAgICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmRlbGV0ZVdl
YnNpdGVEYXRhRm9yT3JpZ2lucyhtX3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBvcmlnaW5zLCBjb29r
aWVIb3N0TmFtZXMsIEhTVFNDYWNoZUhvc3ROYW1lcywgcmVnaXN0cmFibGVEb21haW5zLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yLCBwcm9jZXNzUG9vbF0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfQpAQCAtMTE4Myw4ICsxMTc0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRN
YXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQsIENvbXBsZXQKIAog
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+ZW5zdXJlTmV0d29ya1By
b2Nlc3MoKS5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtX3Nlc3Npb25JRCwgbWF4aW11bUVudHJ5
Q291bnQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1fc2Vz
c2lvbklELCBtYXhpbXVtRW50cnlDb3VudCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBy
dW5lVGFyZ2V0Q291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTExOTMsOCArMTE4Myw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UHJ1
bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50LCBDb21wbGV0aW9uCiAgICAg
CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3Jr
UHJvY2VzcygpLnNldFBydW5lRW50cmllc0Rvd25UbyhtX3Nlc3Npb25JRCwgcHJ1bmVUYXJnZXRD
b3VudCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0UHJ1bmVFbnRyaWVzRG93blRvKG1fc2Vzc2lv
bklELCBwcnVuZVRhcmdldENvdW50LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29u
ZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEy
MDMsOCArMTE5Miw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdU
aW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8CiAKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0R3Jh
bmRmYXRoZXJpbmdUaW1lKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUobV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0TWluaW11bVRp
bWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIxMywyMCArMTIwMSwxMyBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRz
UmVtb3ZhbChTZWNvbmRzIHNlY29uZHMsCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2V0TWluaW11bVRpbWVCZXR3ZWVu
RGF0YVJlY29yZHNSZW1vdmFsKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNzaW9uSUQs
IHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAgICAgCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5u
ZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kdW1wUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94
eTo6c2luZ2xldG9uKCkuZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MobV9zZXNzaW9uSUQsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpp
c1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wgaXNQcmV2YWxlbnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTIzOCwxMiArMTIx
OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+aXNQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgTmV0d29ya1Byb2Nl
c3NQcm94eTo6c2luZ2xldG9uKCkuaXNQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBV
UkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGlzUHJldmFsZW50KT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTEyNTUsMTIgKzEyMzEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChibwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzR3JhbmRm
YXRoZXJlZChtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuaXNHcmFuZGZh
dGhlcmVkKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEyNzQsOCArMTI0NSw3IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogZW5zdXJlUHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFByZXZhbGVudFJlc291cmNl
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbcHJvY2Vz
c1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5zZXRQcmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9k
ZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTI4OSwxMCArMTI1OSw3IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0
UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpCiAg
ICAgCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBw
cm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNz
ID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5z
ZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFBy
ZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJs
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgaXNWZXJ5UHJldmFsZW50KT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTEzMDQsMTIgKzEyNzEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxl
cgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5pc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4g
eyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdXJsIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzMjMs
MTAgKzEyODUsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZQogICAgIAogICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNz
UG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRW
ZXJ5UHJldmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluIHsgdXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRWZXJ5UHJldmFsZW50
UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0s
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2
YWx1ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTMzNSw4ICsxMjk0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHYKICAgICAKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9j
ZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9jZXNzKCku
c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwobV9zZXNz
aW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRTaG91bGRDbGFzc2lmeVJlc291
cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvbnN0IFVSTCYg
dG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTEzNTAsMjIgKzEzMDgsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJGcmFtZVVSTCwgY28KIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nl
c3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiB7IHN1YkZyYW1lVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJh
bWVVUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJG
cmFtZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNS
ZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFVSTCYgc3ViRnJhbWVVUkwsIGNvbnN0IFVS
TCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBw
cm9jZXNzLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzaW5nbGV0b24oKS5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIobV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3ViRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdG9wRnJhbWVVUkws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEzNzks
MjMgKzEzMjksMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW4oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVUKIAogICAgIGF1dG8gY2FsbGJh
Y2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNz
UG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1
YnJlc291cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwg
fSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZURvbWFpbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJyZXNv
dXJjZVVSTCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNS
ZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNv
bnN0IFVSTCYgdG9wRnJhbWVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgewotICAg
ICAgICAgICAgcHJvY2Vzcy0+aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKG1fc2Vzc2lv
bklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVVJMIH0sIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIobV9zZXNzaW9uSUQsIFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB0b3BGcmFtZVVSTCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KGNvbnN0IFVSTCYgc3VicmVzb3VyY2VVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDA5LDEw
ICsxMzUwLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0VG8oY29uc3QgVVJMJiBzdWJyZXNvdXJjZVVSTCwKIAogICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdFRvKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291
cmNlVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0s
IFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3VyY2VV
UkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJlc291cmNlVVJMLCBj
b25zdCBVUkwmIHVybFJlZGlyZWN0ZWRGcm9tLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDI0LDEyICsxMzYyLDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHN1YnJl
c291cmNlVVIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMo
KSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3Vy
Y2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9
LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVzb3Vy
Y2VVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNv
bnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0xNDQxLDEyICsxMzc0LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVVJMJiB0b3BGcmFtZVVSTCwg
Y29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVVJMIH0sIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsUmVkaXJlY3RlZFRvIH0sIFtwcm9jZXNzUG9v
bCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8obV9zZXNzaW9uSUQs
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmxSZWRpcmVjdGVkVG8gfSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RGcm9tKGNvbnN0IFVSTCYgdG9wRnJhbWVVUkwsIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3Rl
ZEZyb20sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTE0NTgsMjUgKzEzODYsMTQgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0RnJvbShjb25zdCBVUkwmIHRvcEZyYW1lVVJMLCBjb24KICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgIAotICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVVUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNv
bnN0IFVSTCYgdXJsUmVkaXJlY3RlZEZyb20sIGNvbnN0IFVSTCYgdXJsUmVkaXJlY3RlZFRvLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJv
Y2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPmlzUmVn
aXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4geyB1cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybFJlZGlyZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFs
c2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmlzUmVnaXN0ZXJlZEFz
UmVkaXJlY3RpbmdUbyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1
cmxSZWRpcmVjdGVkRnJvbSB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybFJlZGly
ZWN0ZWRUbyB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ4OCw0NiArMTQw
NSwyNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPAogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0
ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQ
b29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9j
ZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmNsZWFyUHJl
dmFsZW50UmVzb3VyY2UobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dXJsIH0sIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAg
ICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5jbGVhclByZXZhbGVudFJlc291cmNl
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRQ
YXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9v
bCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vz
c1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5yZXNldFBhcmFt
ZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFtwcm9jZXNzUG9vbCwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMobV9zZXNzaW9uSUQsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzdWJtaXRU
ZWxlbWV0cnkoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAg
ICBwcm9jZXNzLT5zdWJtaXRUZWxlbWV0cnkobV9zZXNzaW9uSUQsIFtdIHsgfSk7Ci0gICAgfQor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnN1Ym1pdFRlbGVtZXRyeShtX3Nl
c3Npb25JRCwgW10geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNs
ZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIFNob3VsZEdy
YW5kZmF0aGVyU3RhdGlzdGljcyBzaG91bGRHcmFuZGZhdGhlciwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0KLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBy
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nl
c3MtPnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIG1vZGlm
aWVkU2luY2UsIHNob3VsZEdyYW5kZmF0aGVyLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVn
YXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCku
c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nlc3Npb25JRCwgbW9kaWZpZWRT
aW5jZSwgc2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1
bW1hcnkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
NTcwLDIyICsxNDY4LDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVDbGVhcklu
TWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcmFuZGZhdGhlclN0YXRpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9
IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
LQotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAg
ICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChtX3Nl
c3Npb25JRCwgeyB9LCBzaG91bGRHcmFuZGZhdGhlciwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQobV9zZXNzaW9uSUQsIHsgfSwg
c2hvdWxkR3JhbmRmYXRoZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vzcy0+c2NoZWR1bGVDb29raWVCbG9ja2luZ1Vw
ZGF0ZShtX3Nlc3Npb25JRCwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNjaGVkdWxlQ29v
a2llQmxvY2tpbmdVcGRhdGUobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJl
Y29yZHNQcm9jZXNzaW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTE1OTQsMjQgKzE0ODQsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzY2hl
ZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoQ29tcGxldGlvbkhhbmQKICAg
ICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3Jl
YXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3Mg
PSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNj
aGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW3By
b2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
UHJvY2Vzc2luZyhtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIHByb2Nlc3MtPnN0YXRpc3RpY3NE
YXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29tcGxl
dGlvbkhhbmRsZXIoZmFsc2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyhtX3Nlc3Npb25JRCwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldExhc3RTZWVu
KGNvbnN0IFVSTCYgdXJsLCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2MjMsMjIgKzE1MDIsMTQgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBVUkwmIHVybCwgU2Vjb25kcyBzZWNvbmRz
LCBDb21wbGV0aW9uSGEKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBw
cm9jZXNzLT5zZXRMYXN0U2VlbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgc2Vjb25kcywgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldExhc3RT
ZWVuKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBzZWNv
bmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9v
bHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzLT5kb21haW5JREV4aXN0c0luRGF0YWJh
c2UobV9zZXNzaW9uSUQsIGRvbWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzaW5nbGV0b24oKS5kb21haW5JREV4aXN0c0luRGF0YWJhc2UobV9zZXNzaW9uSUQsIGRv
bWFpbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBV
UkwmIHRvcEZyYW1lVXJsMSwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDIsIFNlY29uZHMgbGFzdFNl
ZW4sIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBTZWNvbmRzIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb24sIGJvb2wgaXNHcmFuZGZhdGhlcmVkLCBib29sIGlzUHJldmFsZW50LCBib29sIGlzVmVy
eVByZXZhbGVudCwgdW5zaWduZWQgZGF0YVJlY29yZHNSZW1vdmVkLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjUwLDEwICsxNTIxLDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgVVJMJiB1
cmwsIGNvbnN0IFVSTCYgdG9wRnIKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAg
ICAgICBwcm9jZXNzLT5tZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IHsgdG9wRnJhbWVVcmwxIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdG9wRnJhbWVV
cmwyIH0sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb24sIGlzR3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0
YVJlY29yZHNSZW1vdmVkLCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
LSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkubWVyZ2VTdGF0aXN0
aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMSB9LCBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVXJsMiB9LCBsYXN0U2VlbiwgaGFkVXNlcklu
dGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBpc0dyYW5kZmF0aGVyZWQsIGlz
UHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgW2NhbGxiYWNr
QWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbnNlcnRFeHBp
cmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgYm9vbCBoYWRVc2VySW50ZXJh
Y3Rpb24sIGJvb2wgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgYm9vbCBp
c1ByZXZhbGVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtMTY2NSwxOCArMTUzMywxNCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6Omluc2VydEV4
cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBib29sIGhhZAogCiAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPmluc2VydEV4cGlyZWRT
dGF0aXN0aWNGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
biB7IHVybCB9LCBoYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWwsIGlzUHJldmFsZW50LCBbcHJvY2Vzc1Bvb2wsIGNhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuaW5z
ZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0sIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JB
bGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0
YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBD
YWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHBy
b2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFS
ZWNvcmRzV2VyZVNjYW5uZWQobV9zZXNzaW9uSUQsIHZhbHVlLCBbcHJvY2Vzc1Bvb2wsIGNhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24o
KS5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKG1fc2Vzc2lvbklELCB2
YWx1ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpzZXRJc1J1bm5pbmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdChib29sIHZhbHVlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjg0LDgg
KzE1NDgsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldElzUnVubmluZ1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZXN0KGJvb2wgdmFsdWUsIENvbXBsZQogICAgIHVzZUV4cGxpY2l0SVRQU3Rh
dGUoKTsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6
Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8m
IHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1
cmVOZXR3b3JrUHJvY2VzcygpLnNldElzUnVubmluZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0
KG1fc2Vzc2lvbklELCB2YWx1ZSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0SXNSdW5uaW5nUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3JhZ2VB
Y2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYgZG9tYWlucyk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0xNjk2LDcgKzE1NTksNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFsbFN0b3Jh
Z2VBY2Nlc3NFbnRyaWVzKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgd2ViUGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuZW5z
dXJlTmV0d29ya1Byb2Nlc3MoKS5nZXRBbGxTdG9yYWdlQWNjZXNzRW50cmllcyhtX3Nlc3Npb25J
RCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLmdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKG1fc2Vzc2lvbklELCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIApAQCAtMTcwNCw4ICsxNTY3LDcgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMg
c2Vjb25kcywgQ29tcGxldGlvbkgKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAg
IHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24obV9zZXNzaW9uSUQsIHNlY29uZHMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0VGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgc2Vjb25kcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3Qg
VVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE3MTksMTAgKzE1ODEsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmxvZ1VzZXJJbnRl
cmFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZAogICAgIAogICAg
IGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5sb2dVc2VySW50ZXJh
Y3Rpb24obV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLmxvZ1VzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgVVJMJiB1
cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xNzM0LDEzICsxNTkzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpoYXNIYWRVc2VySW50
ZXJhY3Rpb24oY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHYKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bv
b2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkgewotICAgICAgICAgICAgcHJvY2Vzcy0+aGFzSGFkVXNlckludGVyYWN0aW9u
KG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNpbmdsZXRvbigpLmhhc0hhZFVzZXJJbnRlcmFjdGlvbihtX3Nlc3Npb25JRCwgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJh
c2VPbmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdCBVUkwmIHRvcFVybCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE3NTIsMTMgKzE2MDUs
NyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VP
bmNlKGNvbnN0IFVSTCYgc3ViVXJsLCBjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAg
ICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgICAgICBwcm9jZXNzLT5pc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nl
c3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4geyB0b3BVcmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25I
YW5kbGVyKGZhbHNlKTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5pc1Jl
bGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4geyBzdWJVcmwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b3BV
cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzcyLDEwICsxNjE5LDcgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVy
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm8KICAgICAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAg
ICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQot
ICAgICAgICAgICAgcHJvY2Vzcy0+Y2xlYXJVc2VySW50ZXJhY3Rpb24obV9zZXNzaW9uSUQsIFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNsZWFyVXNl
ckludGVyYWN0aW9uKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVy
bCB9LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNHcmFuZGZhdGhlcmVk
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzg5
LDEwICsxNjMzLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNv
bnN0IFVSTCYgdXJsLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgQ28KICAgICAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIHByb2Nlc3MtPnNldEdyYW5kZmF0aGVyZWQo
bV9zZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGlzR3JhbmRm
YXRoZXJlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0R3JhbmRmYXRoZXJlZChtX3Nlc3Npb25JRCwgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwgfSwgaXNHcmFuZGZhdGhlcmVkLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlU
UERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE4MDEsMTAgKzE2NDIsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFVzZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JgogICAgIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9y
OjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIAotICAgIGZvciAoYXV0
byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBpZiAoYXV0byogcHJv
Y2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgcHJvY2Vz
cy0+c2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5z
ZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwgdmFsdWUsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhM
aW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmcm9tVVJMLCBjb25zdCBVUkwmIHRv
VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0x
ODEzLDYyICsxNjUxLDM4IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmCiAgICAgCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6
IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBwcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9jZXNzLT5zZXRDcm9zc1NpdGVM
b2FkV2l0aExpbmtEZWNvcmF0aW9uRm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyBmcm9tVVJMIH0sIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsg
dG9VUkwgfSwgW3Byb2Nlc3NQb29sLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldENyb3NzU2l0ZUxvYWRXaXRo
TGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiB7IGZyb21VUkwgfSwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB0b1VSTCB9
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0aW5nKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bv
b2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVzZXRD
cm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLnJlc2V0Q3Jvc3NTaXRlTG9hZHNXaXRoTGlua0RlY29yYXRpb25Gb3JUZXN0
aW5nKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKGNvbnN0IFVSTCYgdXJsLCBi
b29sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAK
LSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkp
Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+ZGVsZXRlQ29va2llc0ZvclRlc3RpbmcobV9z
ZXNzaW9uSUQsIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0sIGluY2x1ZGVIdHRw
T25seUNvb2tpZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgfQorICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmRlbGV0ZUNvb2tpZXNGb3JUZXN0aW5nKG1fc2Vz
c2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBpbmNsdWRlSHR0cE9u
bHlDb29raWVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6Omhhc0xvY2FsU3RvcmFnZUZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0g
ICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKSB7
Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzTG9jYWxTdG9yYWdlKG1fc2Vzc2lvbklE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29t
cGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRv
bigpLmhhc0xvY2FsU3RvcmFnZShtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6Omhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0
CiB7Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vz
cygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+aGFzSXNvbGF0ZWRTZXNzaW9uKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLmhhc0lzb2xhdGVkU2Vzc2lvbihtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4geyB1cmwgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRE
b3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgCi0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3
b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFNob3VsZERvd25n
cmFkZVJlZmVycmVyRm9yVGVzdGluZyhlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZXRTaG91bGRE
b3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmcoZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKQEAgLTE4OTksMTAgKzE3MTMsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoV2Vi
Q29yZTo6VGhpcmRQYXJ0eUNvb2tpZQogICAgICAgICAgICAgd2ViUHJvY2Vzcy5zZXRUaGlyZFBh
cnR5Q29va2llQmxvY2tpbmdNb2RlKGJsb2NraW5nTW9kZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0g
eyB9KTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xz
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0VGhpcmRQYXJ0
eUNvb2tpZUJsb2NraW5nTW9kZShtX3Nlc3Npb25JRCwgYmxvY2tpbmdNb2RlLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0
b24oKS5zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKG1fc2Vzc2lvbklELCBibG9ja2lu
Z01vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZEVuYmxlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudEZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTEwLDEwICsxNzIxLDcgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkRW5ibGVTYW1lU2l0
ZVN0cmljdEVuZm9yY2UKICAgICBhdXRvIGZsYWcgPSBlbmFibGVkID8gV2ViQ29yZTo6U2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6OlllcyA6IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0
RW5mb3JjZW1lbnRFbmFibGVkOjpObzsKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICBp
ZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkK
LSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5zZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0
RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5z
ZXRTaG91bGRFbmJsZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRGb3JUZXN0aW5nKG1fc2Vzc2lv
bklELCBmbGFnLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFS
ZW1vdmFsTW9kZUZvclRlc3RpbmcoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xOTIxLDIwICsxNzI5LDE0IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgYXV0byBt
b2RlID0gZW5hYmxlZCA/IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
OjpBbGxCdXRDb29raWVzIDogV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU6Ok5vbmU7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdv
cmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0Rmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGVGb3JUZXN0aW5nKG1fc2Vzc2lvbklELCBtb2RlLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5n
bGV0b24oKS5zZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZUZvclRlc3RpbmcobV9z
ZXNzaW9uSUQsIG1vZGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1RvU2FtZVNpdGVTdHJpY3RD
b29raWVzRm9yVGVzdGluZyhjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
Ci0gICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2Vzcygp
KQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MtPnNldFRvU2FtZVNpdGVTdHJpY3RDb29raWVz
Rm9yVGVzdGluZyhtX3Nlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2luZ2xldG9uKCkuc2V0VG9TYW1lU2l0ZVN0cmljdENvb2tpZXNGb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9LCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SG9zdENOQU1FRG9tYWluRm9yVGVzdGluZyhjb25zdCBV
UkwmIGZpcnN0UGFydHlVUkwsIGNvbnN0IFVSTCYgY25hbWVVUkwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE5NjksOCArMTc3MSw3IEBAIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMo
U2Vjb25kcyBzZWNvbmRzLCBDCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vz
c2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVz
b3VyY2VzKG1fc2Vzc2lvbklELCBzZWNvbmRzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vjb25kcyk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKQEAgLTE5ODIsMjIgKzE3ODMsMTIgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldENh
Y2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKENvbXBsZXRpb25IYW5kbGUKICNpZiBF
TkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIAotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkg
ewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29y
a1Byb2Nlc3MoKSkKLSAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5yZXNldENhY2hlTWF4QWdl
Q2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwotICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5yZXNl
dENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKG1fc2Vzc2lvbklELCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXSB7IH0pOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogI2Vu
ZGlmCiB9CiAKLWJvb2wgV2Vic2l0ZURhdGFTdG9yZTo6aXNBc3NvY2lhdGVkUHJvY2Vzc1Bvb2wo
V2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKSBjb25zdAotewotICAgIGlmIChhdXRvKiBwcm9j
ZXNzUG9vbERhdGFTdG9yZSA9IHByb2Nlc3NQb29sLndlYnNpdGVEYXRhU3RvcmUoKSkKLSAgICAg
ICAgcmV0dXJuIHByb2Nlc3NQb29sRGF0YVN0b3JlID09IHRoaXM7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiBIYXNoU2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6
OnByb2Nlc3NQb29scyhzaXplX3QgbGltaXQpIGNvbnN0CiB7CiAgICAgSGFzaFNldDxSZWZQdHI8
V2ViUHJvY2Vzc1Bvb2w+PiBwcm9jZXNzUG9vbHM7CkBAIC0yMDEyLDkgKzE4MDMsNiBAQCBIYXNo
U2V0PFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4+IFdlYnNpdGVEYXRhU3RvcmU6OnByb2Nlc3NQb29s
cyhzaXplX3QgbGltaXQpIGNvbgogICAgIGlmIChwcm9jZXNzUG9vbHMuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uZSBvZiB0aGUgbGVnYWN5IGRhdGEgc3RvcmVzLgog
ICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQXNzb2NpYXRlZFByb2Nlc3NQb29sKCpw
cm9jZXNzUG9vbCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAgICAgICAgIHBy
b2Nlc3NQb29scy5hZGQocHJvY2Vzc1Bvb2wpOwogICAgICAgICAgICAgaWYgKHByb2Nlc3NQb29s
cy5zaXplKCkgPT0gbGltaXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTMyLDE3ICsx
OTIwLDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgICAgICAKICAgICAgICAgcmVzb2x2ZURpcmVjdG9y
aWVzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bv
b2wgOiBwcm9jZXNzUG9vbHMoKSkgewotICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05l
dHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIHRydWUpKTsKKyAgICAgICAgTmV0d29ya1By
b2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCB0cnVlKSwgMCk7Cisg
ICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAgICAg
ICAgIHByb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXNGb3JTZXNzaW9uKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCh0cnVlKSwgbV9zZXNz
aW9uSUQpOwotICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1
dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgcHJvY2Vzc1Bvb2wt
PnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQobV9zZXNzaW9uSUQsIGZhbHNlKSk7CisgICAgTmV0
d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKG1fc2Vzc2lvbklELCBmYWxzZSks
IDApOworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkKICAgICAg
ICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3Nlc0ZvclNlc3Npb24oTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGZhbHNlKSwgbV9zZXNz
aW9uSUQpOwotICAgIH0KIAogICAgIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgPSBm
YWxzZTsKICNlbHNlCkBAIC0yMTU0LDggKzE5NDAsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0U3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjayhGdW5jdGlvbjx2b2lk
KGNvbnN0IFN0cmluZyYpPiYmIGNhbGxiYWNrKQogewogICAgIGlmIChjYWxsYmFjaykgewotICAg
ICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgICAg
ICBwcm9jZXNzUG9vbC0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KHRydWUpKTsK
KyAgICAgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQo
dHJ1ZSksIDApOwogICAgIH0KICAgICAKICAgICBtX3N0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKTsKQEAgLTIxNzQsOCArMTk1OSw3IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJsZWQs
IENvbXBsZXRpCiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVn
YXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29s
LT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01v
ZGUobV9zZXNzaW9uSUQsIGVuYWJsZWQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAg
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnTW9kZShtX3Nlc3Npb25JRCwgZW5hYmxlZCwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOwogICAgIFVOVVNFRF9QQVJBTShj
b21wbGV0aW9uSGFuZGxlcik7CkBAIC0yMTkwLDIwICsxOTc0LDE1IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6aXNSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRXBoZW1lcmFsKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5ldHdv
cmtQcm9jZXNzLT5pc1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFcGhlbWVyYWwobV9zZXNzaW9uSUQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSNlbmRpZgorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigp
LmlzUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VwaGVtZXJhbChtX3Nlc3Npb25JRCwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7
CisjZW5kaWYKIH0KIAogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRBZENsaWNrQXR0cmlidXRp
b25EZWJ1Z01vZGUoYm9vbCBlbmFibGVkKQogewotICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPmVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc2V0QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlKGVuYWJsZWQpOworICAgIE5ldHdv
cmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNldEFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZShlbmFibGVkKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBA
IC0yMjI1LDI5ICsyMDA0LDYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclJlc291cmNl
TG9hZFN0YXRpc3RpY3NJbldlYlByb2Nlc3NlcyhDb21wbGV0aW9uSGFuZGwKIH0KICNlbmRpZgog
Ci1WZWN0b3I8V2ViQ29yZTo6Q29va2llPiBXZWJzaXRlRGF0YVN0b3JlOjpwZW5kaW5nQ29va2ll
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdDb29raWVzKTsK
LX0KLQotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjphZGRQZW5kaW5nQ29va2llKGNvbnN0IFdlYkNv
cmU6OkNvb2tpZSYgY29va2llKQotewotICAgIG1fcGVuZGluZ0Nvb2tpZXMucmVtb3ZlSWYoWyZj
b29raWVdKGF1dG8mIHBlbmRpbmdDb29raWUpIHsKLSAgICAgICAgcmV0dXJuIHBlbmRpbmdDb29r
aWUuaXNLZXlFcXVhbChjb29raWUpOwotICAgIH0pOwotICAgIG1fcGVuZGluZ0Nvb2tpZXMuYWRk
KGNvb2tpZSk7Ci19Ci0KLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlUGVuZGluZ0Nvb2tp
ZShjb25zdCBXZWJDb3JlOjpDb29raWUmIGNvb2tpZSkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVz
LnJlbW92ZShjb29raWUpOwotfQotICAgIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpjbGVhclBl
bmRpbmdDb29raWVzKCkKLXsKLSAgICBtX3BlbmRpbmdDb29raWVzLmNsZWFyKCk7Ci19Ci0KIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlzcGF0Y2hPblF1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJiBm
dW5jdGlvbikKIHsKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChXVEZNb3ZlKGZ1bmN0aW9uKSk7CkBA
IC0yMjcxLDggKzIwMjcsNiBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0
YVN0b3JlOjpwYXJhbWV0ZXJzKCkKIAogICAgIHJlc29sdmVEaXJlY3Rvcmllc0lmTmVjZXNzYXJ5
KCk7CiAKLSAgICBwYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gcGVuZGluZ0Nvb2tpZXMoKTsK
LQogICAgIGF1dG8gcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fY29uZmlndXJh
dGlvbi0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwogICAgIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5SGFuZGxlOwogICAg
IGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCkBAIC0yMzcx
LDcgKzIxMjUsMTQgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9y
ZTo6cGFyYW1ldGVycygpCiAgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlZCA9IG1fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQ7CiAjZW5kaWYKICAgICBwbGF0Zm9ybVNldE5ldHdvcmtQYXJhbWV0
ZXJzKHBhcmFtZXRlcnMpOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmFwcEhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5n
UGVybWlzc2lvbiA9IGhhc1JlcXVlc3RlZENyb3NzV2Vic2l0ZVRyYWNraW5nUGVybWlzc2lvbigp
OworI2VuZGlmCiAKKyNpZiBVU0UoU09VUCkKKyAgICBXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2luZ2xldG9uKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklEKCks
IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlUGF0aCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lz
dGVudFN0b3JhZ2VUeXBlKTsKKyNlbmRpZgorICAgIAogICAgIHJldHVybiBwYXJhbWV0ZXJzOwog
fQogCkBAIC0yNDAxLDEwICsyMTYyLDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVE
YXRhU3RvcmU6OmNvb2tpZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAK
LXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotfQot
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248
dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7CkBA
IC0yNDI1LDEwICsyMTgyLDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3Jh
Z2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZUQKIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgZm9yIChh
dXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBwcm9j
ZXNzLT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgIH0KKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5yZXNldFF1b3RhKG1f
c2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JN
KENPQ09BKQpAQCAtMjQ2NiwzNCArMjIyMCwyMSBAQCBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCkKIAogdm9pZCBX
ZWJzaXRlRGF0YVN0b3JlOjpoYXNBcHBCb3VuZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIHBy
b2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQ
cm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5oYXNBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuaGFzQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJBcHBCb3Vu
ZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCi0gICAgZm9yIChhdXRvJiBwcm9jZXNz
UG9vbCA6IHByb2Nlc3NQb29scygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
cyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MtPmNsZWFyQXBwQm91bmRTZXNzaW9uKG1fc2Vzc2lvbklELCBbcHJvY2Vzc1Bvb2wsIGNh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6
c2luZ2xldG9uKCkuY2xlYXJBcHBCb3VuZFNlc3Npb24obV9zZXNzaW9uSUQsIFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2lu
SW5XZWJzaXRlRGF0YShVUkwmJiBvbGROYW1lLCBVUkwmJiBuZXdOYW1lLCBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICBmb3Ig
KGF1dG8mIHByb2Nlc3NQb29sIDogV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3Jr
UHJvY2VzcygpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbigqdGhp
cyk7Ci0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0
YShtX3Nlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgZGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwotICAgICAgICB9Ci0gICAgfQorICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLmFkZFNlc3Npb24oKnRoaXMpOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNpbmdsZXRvbigpLnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEobV9zZXNzaW9uSUQsIG9sZE5h
bWUsIG5ld05hbWUsIGRhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAog
I2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtMjUxNiw3ICsyMjU3LDcgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpmb3J3YXJkQXBwQm91bmREb21haW5zVG9JVFBJZkluaXRpYWxpemVkKENvbXBsZXRp
b25IYW5kbGUKIAogICAgIHByb3BhZ2F0ZUFwcEJvdW5kRG9tYWlucyhnbG9iYWxEZWZhdWx0RGF0
YVN0b3JlKCkuZ2V0KCksICphcHBCb3VuZERvbWFpbnMpOwogCi0gICAgZm9yIChhdXRvKiBzdG9y
ZSA6IG5vbkRlZmF1bHREYXRhU3RvcmVzKCkudmFsdWVzKCkpCisgICAgZm9yIChhdXRvKiBzdG9y
ZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkKICAgICAgICAgcHJvcGFnYXRlQXBwQm91bmRE
b21haW5zKHN0b3JlLCAqYXBwQm91bmREb21haW5zKTsKIH0KIApAQCAtMjUyNCwxMCArMjI2NSw3
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0QXBwQm91bmREb21haW5zRm9ySVRQKGNvbnN0
IEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFiCiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+c2V0QXBwQm91bmREb21haW5zRm9y
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25JRCwgZG9tYWlucywgW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9u
KCkuc2V0QXBwQm91bmREb21haW5zRm9yUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhtX3Nlc3Npb25J
RCwgZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KICNlbmRpZgogCkBAIC0y
NTM1LDE2ICsyMjczLDE0IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6dXBkYXRlQnVuZGxlSWRl
bnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBidW5kCiB7CiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3b3JrUHJvY2VzcygpLnVw
ZGF0ZUJ1bmRsZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllciwgW2NhbGxiYWNrQWdncmVnYXRv
cl0geyB9KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS51cGRhdGVCdW5k
bGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Y2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3
b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nl
c3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCi0gICAgICAgIHByb2Nlc3NQb29sLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLmNsZWFyQnVuZGxlSWRlbnRpZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOworICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLmNsZWFyQnVuZGxlSWRl
bnRpZmllcihbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5k
ZXggNGVjMTNlMTZmZTQ4MmQyNmEyZWFmYTMxMjNlMzIzM2E3MzdjYjEyYi4uNjU0MTEyYzQyN2I0
ZmE1ZWU4NjQ0YTY3MjYyYzYwYjY5NjBkOGYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaApAQCAtMTA4LDcgKzEw
OCw3IEBAIHB1YmxpYzoKICAgICBXZWJzaXRlRGF0YVN0b3JlKFJlZjxXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbj4mJiwgUEFMOjpTZXNzaW9uSUQpOwogICAgIH5XZWJzaXRlRGF0YVN0b3Jl
KCk7CiAKLSAgICBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZSogZXhpc3RpbmdOb25EZWZhdWx0RGF0
YVN0b3JlRm9yU2Vzc2lvbklEKFBBTDo6U2Vzc2lvbklEKTsKKyAgICBzdGF0aWMgV2Vic2l0ZURh
dGFTdG9yZSogZXhpc3RpbmdEYXRhU3RvcmVGb3JTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQpOwog
CiAgICAgYm9vbCBpc1BlcnNpc3RlbnQoKSBjb25zdCB7IHJldHVybiAhbV9zZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKTsgfQogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2Vzc2lvbklEOyB9CkBAIC0yMjgsMTUgKzIyOCw4IEBAIHB1YmxpYzoKIAogICAgIERl
dmljZUlkSGFzaFNhbHRTdG9yYWdlJiBkZXZpY2VJZEhhc2hTYWx0U3RvcmFnZSgpIHsgcmV0dXJu
IG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UuZ2V0KCk7IH0KIAotICAgIFdlYlByb2Nlc3NQb29s
KiBwcm9jZXNzUG9vbEZvckNvb2tpZVN0b3JhZ2VPcGVyYXRpb25zKCk7Ci0gICAgYm9vbCBpc0Fz
c29jaWF0ZWRQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYpIGNvbnN0OwotCiAgICAgV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMgcGFyYW1ldGVycygpOwotCi0gICAgVmVjdG9yPFdlYkNvcmU6
OkNvb2tpZT4gcGVuZGluZ0Nvb2tpZXMoKSBjb25zdDsKLSAgICB2b2lkIGFkZFBlbmRpbmdDb29r
aWUoY29uc3QgV2ViQ29yZTo6Q29va2llJik7Ci0gICAgdm9pZCByZW1vdmVQZW5kaW5nQ29va2ll
KGNvbnN0IFdlYkNvcmU6OkNvb2tpZSYpOwotICAgIHZvaWQgY2xlYXJQZW5kaW5nQ29va2llcygp
OworICAgIHN0YXRpYyBWZWN0b3I8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IHBhcmFtZXRl
cnNGcm9tQWxsU3RvcmVzKCk7CiAKICAgICB2b2lkIGRpc3BhdGNoT25RdWV1ZShGdW5jdGlvbjx2
b2lkKCk+JiYpOwogCkBAIC0yNjEsOCArMjU0LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TW9j
a1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbihXZWJDb3JlOjpNb2NrV2ViQXV0aGVudGlj
YXRpb25Db25maWd1cmF0aW9uJiYpOwogI2VuZGlmCiAKLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdv
cmtQcm9jZXNzKCk7Ci0KICAgICBjb25zdCBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiYg
Y29uZmlndXJhdGlvbigpIHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi5nZXQoKTsgfQogCiAgICAg
V2Vic2l0ZURhdGFTdG9yZUNsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7
IH0KQEAgLTM0NCw3ICszMzUsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1l
ZGlhS2V5cyhjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIFdhbGxUaW1l
IG1vZGlmaWVkU2luY2UpOwogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1lZGlhS2V5cyhjb25zdCBT
dHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnksIGNvbnN0IEhhc2hTZXQ8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhPiYpOwogCi0gICAgdm9pZCBtYXliZVJlZ2lzdGVyV2l0aFNlc3Np
b25JRE1hcCgpOworICAgIHZvaWQgcmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAKICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICBzdGF0aWMgT3B0aW9uYWw8SGFzaFNldDxXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbj4+IGFwcEJvdW5kRG9tYWluc0lmSW5pdGlhbGl6ZWQoKTsKQEAgLTM4Miw4
ICszNzMsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3Jh
Z2VFbmFibGVkIHsgdHJ1ZSB9OwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb2tp
ZT4gbV9wZW5kaW5nQ29va2llczsKLSAgICAKICAgICBXZWFrSGFzaFNldDxXZWJQcm9jZXNzUHJv
eHk+IG1fcHJvY2Vzc2VzOwogCiAgICAgYm9vbCBtX2lzSXRwU3RhdGVFeHBsaWNpdGx5U2V0IHsg
ZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKaW5kZXggMTJmOWNkODE5
YjZkY2NhOGFjNTA5MmEzMGRkOTNjNTNiOGVlOTM0Mi4uNWJhMzkwMGQyZGFmZjA1NmFiZDBjZGYw
NTdhZTMyODU0ZWJmZWNmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKQEAg
LTM5LDggKzM5LDcgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybVNldE5ldHdvcmtQ
YXJhbWV0ZXJzKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJgogICAgIGF1dG8mIG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwog
ICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkID0gbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkOwogCi0gICAgaWYg
KGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bvb2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9u
cygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJv
eHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKTsKKyAgICBXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXJQcm94eTo6c2luZ2xldG9uKCkuZ2V0Q29va2llUGVyc2lzdGVudFN0b3Jh
Z2UobV9zZXNzaW9uSUQsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50
U3RvcmFnZVBhdGgsIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3Rv
cmFnZVR5cGUpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFBlcnNpc3RlbnRDcmVk
ZW50aWFsU3RvcmFnZUVuYWJsZWQoYm9vbCBlbmFibGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKaW5kZXggMGE4NGE3NTkw
ZDlhOTg1YmZjOTk2ODRhNDg5NTEzNzRlNWIyOTQyOS4uMjdmMjNlYTA2NWRjNzVjZTRhODI3MGM1
NzZlYTJhYTU1YWIwZGM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xp
Yi9XZWJQcm9jZXNzUHJveHlHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9n
bGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVu
Y2hPcHRpb25zJiBsCiAgICAgICAgIGlmICghZGF0YVN0b3JlKSB7CiAgICAgICAgICAgICAvLyBQ
cmV3YXJtZWQgcHJvY2Vzc2VzIGRvbid0IGhhdmUgYSBXZWJzaXRlRGF0YVN0b3JlIHlldCwgc28g
dXNlIHRoZSBwcmltYXJ5IFdlYnNpdGVEYXRhU3RvcmUgZnJvbSB0aGUgV2ViUHJvY2Vzc1Bvb2wu
CiAgICAgICAgICAgICAvLyBUaGUgcHJvY2VzcyB3b24ndCBiZSB1c2VkIGlmIGN1cnJlbnQgV2Vi
c2l0ZURhdGFTdG9yZSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgV2ViUHJvY2Vzc1Bvb2wgcHJpbWFy
eSBvbmUuCi0gICAgICAgICAgICBkYXRhU3RvcmUgPSBtX3Byb2Nlc3NQb29sLT53ZWJzaXRlRGF0
YVN0b3JlKCk7CisgICAgICAgICAgICBkYXRhU3RvcmUgPSBXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0RGF0YVN0b3JlKCkucHRyKCk7CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoZGF0YVN0
b3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2ll
TWFuYWdlclByb3h5U291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dlYkNv
b2tpZU1hbmFnZXJQcm94eVNvdXAuY3BwCmluZGV4IDlmN2JlM2M5NDFiNmNkMGExYjk0Y2IxMzYw
OThmM2EwNDFjZWZmOTkuLjA4OTI4ZmNkMzE2ZDg4ZjlkNTE1MDBlYzY4NGFkMWI2NGFmOGEzZjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViQ29va2llTWFuYWdl
clByb3h5U291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJDb29r
aWVNYW5hZ2VyUHJveHlTb3VwLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogCisjaW5jbHVkZSAiTmV0
d29ya1Byb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAKQEAgLTM0LDcgKzM1LDcgQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN0b3Jh
Z2VQYXRoLCBTb3VwQ29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKQogewog
ICAgIG1fY29va2llUGVyc2lzdGVudFN0b3JhZ2VNYXAuc2V0KHNlc3Npb25JRCwgc3RkOjptYWtl
X3BhaXIoc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7Ci0gICAgcHJvY2Vzc1Bvb2woKS0+c2Vu
ZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldENvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlKHNlc3Npb25JRCwgc3RvcmFnZVBhdGgsIHN0b3JhZ2VUeXBlKSk7
CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6U2V0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Uoc2Vzc2lvbklELCBzdG9y
YWdlUGF0aCwgc3RvcmFnZVR5cGUpLCAwKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmdldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
U3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSYgc3Rv
cmFnZVR5cGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3Vw
L1dlYlByb2Nlc3NQb29sU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb3VwL1dl
YlByb2Nlc3NQb29sU291cC5jcHAKaW5kZXggYmZiYmY5NjY0ZTQ4MzUzMDk3MDk3MTFkZmQ2YzEz
NDE1NzMyYmRhYy4uMDc5M2VkNTEzOTE1MjhkOWI0YjlmZGIwZjRhZDNjODk2MGZkYTUyNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3Vw
LmNwcApAQCAtMzcsMzAgKzM3LDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKLSAgICBOZXR3b3JrU2Vzc2lvbkNy
ZWF0aW9uUGFyYW1ldGVycyYgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnM7Ci0gICAg
c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRT
dG9yYWdlKGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIGRlZmF1bHRTZXNzaW9u
UGFyYW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgsIGRlZmF1bHRTZXNzaW9uUGFy
YW1ldGVycy5jb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUpOwotICAgIGlmIChtX3dlYnNpdGVE
YXRhU3RvcmUpCi0gICAgICAgIGRlZmF1bHRTZXNzaW9uUGFyYW1ldGVycy5wZXJzaXN0ZW50Q3Jl
ZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5wZXJzaXN0ZW50Q3Jl
ZGVudGlhbFN0b3JhZ2VFbmFibGVkKCk7CisgICAgLy8gRklYTUU6IG1faW5pdGlhbEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBXZWJzaXRlRGF0YVN0b3JlLgor
ICAgIC8vIEZJWE1FOiBtX2lnbm9yZVRMU0Vycm9ycyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdl
YnNpdGVEYXRhU3RvcmUgb3IgcmVtb3ZlZC4KKyAgICAvLyBGSVhNRTogbV9uZXR3b3JrUHJveHlT
ZXR0aW5ncyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIFdlYnNpdGVEYXRhU3RvcmUuCiAKLSAgICBw
YXJhbWV0ZXJzLmNvb2tpZUFjY2VwdFBvbGljeSA9IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQ
b2xpY3k7Ci0gICAgcGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBtX2lnbm9yZVRMU0Vycm9y
czsKICAgICBwYXJhbWV0ZXJzLmxhbmd1YWdlcyA9IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKTsK
LSAgICBwYXJhbWV0ZXJzLnByb3h5U2V0dGluZ3MgPSBtX25ldHdvcmtQcm94eVNldHRpbmdzOwog
ICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSB0cnVlOwogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMp
CiB7CiAgICAgbV9pZ25vcmVUTFNFcnJvcnMgPSBpZ25vcmVUTFNFcnJvcnM7Ci0gICAgaWYgKG5l
dHdvcmtQcm9jZXNzKCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRJZ25vcmVUTFNFcnJvcnMobV9pZ25vcmVUTFNFcnJvcnMpLCAw
KTsKKyAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6U2V0SWdub3JlVExTRXJyb3JzKG1faWdub3JlVExTRXJyb3JzKSwgMCk7
CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm94eVNldHRpbmdzKGNvbnN0
IFdlYkNvcmU6OlNvdXBOZXR3b3JrUHJveHlTZXR0aW5ncyYgc2V0dGluZ3MpCiB7CiAgICAgbV9u
ZXR3b3JrUHJveHlTZXR0aW5ncyA9IHNldHRpbmdzOwotICAgIGlmIChtX25ldHdvcmtQcm9jZXNz
KQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6U2V0TmV0d29ya1Byb3h5U2V0dGluZ3MobV9uZXR3b3JrUHJveHlTZXR0aW5ncyksIDApOwor
ICAgIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtQcm9jZXNzOjpTZXROZXR3b3JrUHJveHlTZXR0aW5ncyhtX25ldHdvcmtQcm94eVNldHRpbmdz
KSwgMCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCA5ZGUxYTVmMTMzNTJhZDQwMjI2MjI2MGZhNWIyNzdhNDU5ODkwNTIyLi5mMjkw
NmJhNGEwZmIwNGMwNjgyOGUwZDNmZjQ5OWRjNDE1ODM0NWQ5IDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMjAtMDgt
MTEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBVc2UgYSBOZXR3b3JrUHJvY2Vzc1Byb3h5IHNpbmdsZXRvbiBpbnN0ZWFkIG9mIG9uZSBwZXIg
V2ViUHJvY2Vzc1Bvb2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMzU0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbmRleGVkREJGaWxlTmFt
ZS5tbToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tOgor
ICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9UTFNEZXByZWNhdGlvbi5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUu
bW06CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2ViVmlldzpydW5K
YXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlv
bkhhbmRsZXI6XSk6CisgICAgICAgICgtW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgd2Fp
dEZvck1lc3NhZ2VdKToKKyAgICAgICAgKC1bQ2hlY2tTZXNzaW9uQ29va2llVUlEZWxlZ2F0ZSBh
bGVydENvb2tpZUhUTUxdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybUFkanVzdENvbnRleHQpOgorCiAyMDIwLTA4LTExICBLZWl0aCBSb2xsaW4g
IDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgZmlsdGVyLWJ1aWxkLXdlYmtp
dCBmb3IgdW5rbm93bi91bmhhbmRsZWQgbWVzc2FnZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5l
Y3Rpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9OZXR3b3JrUHJvY2Vz
c0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tCmluZGV4IDk3Mzg5ZjAxZmYyZWU5OWI3ODNi
MGI1MjEwODA3NGYxYTgxYjY5ODEuLjE1Zjg2YWVkM2Q2MzAyYzFiNTM3NWUxMjdkNjA0MTJmNjA0
OTAyZmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L05ldHdv
cmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQvTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVj
dGlvbi5tbQpAQCAtMTQ2LDggKzE0Niw4IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc1Jl
bGF1bmNoT25MYXVuY2hGYWlsdXJlKQogCiAgICAgLy8gQ29uc3R1Y3RpbmcgYSBXZWJWaWV3IHN0
YXJ0cyBhIG5ldHdvcmsgcHJvY2VzcyBzbyB0ZXJtaW5hdGUgdGhpcyBvbmUuIFRoZSBwYWdlIGxv
YWQgYmVsb3cgd2lsbCB0aGVuIHJlcXVlc3QgYSBuZXR3b3JrIHByb2Nlc3MgYW5kIHdlCiAgICAg
Ly8gbWFrZSB0aGlzIG5ldyBuZXR3b3JrIHByb2Nlc3MgbGF1bmNoIGNyYXNoIG9uIHN0YXJ0dXAu
Ci0gICAgW3Byb2Nlc3NQb29sIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CiAgICAgW3Byb2Nl
c3NQb29sIF9tYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmddOworICAg
IFtwcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwogCiAgICAgYXV0byBkZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tNb25pdG9yV2ViQ29udGVudENyYXNoTmF2aWdhdGlvbkRlbGVnYXRl
IGFsbG9jXSBpbml0XSk7CiAgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVn
YXRlLmdldCgpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSW5kZXhlZERCRmlsZU5hbWUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0luZGV4ZWREQkZpbGVOYW1lLm1tCmluZGV4IDExZjg3ZjgwMzRkMmIxYjU1ZDcy
MGRlYjc2NWEzMTY4MjEyMGQ3NzMuLmE5OGJmMzgyNWJiMWVkNmQ3NTljMDhkNDUzM2FkY2I3ZmYz
OTVmZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5kZXhlZERCRmlsZU5hbWUubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JbmRleGVkREJGaWxlTmFtZS5tbQpAQCAtNDksNyArNDksNyBAQCBzdGF0aWMgUmV0
YWluUHRyPFdLU2NyaXB0TWVzc2FnZT4gbGFzdFNjcmlwdE1lc3NhZ2U7CiAKIEBlbmQKIAotc3Rh
dGljIHZvaWQgcnVuVGVzdCgpCitzdGF0aWMgdm9pZCBydW5UZXN0KGJvb2wgb2xkRmlsZVNob3Vs
ZEV4aXN0ID0gdHJ1ZSkKIHsKICAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbSW5kZXhlZERC
RmlsZU5hbWVNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwogICAgIGF1dG8gY29uZmlndXJh
dGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CkBA
IC04Nyw3ICs4Nyw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoKQogICAgIE5TVVJMICpvbGRWZXJz
aW9uT3JpZ2luRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25EaXJlY3RvcnlVUkwgVVJMQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OiBAImZpbGVfXzAiXTsKICAgICBOU1VSTCAqbmV3VmVyc2lvbk9y
aWdpbkRpcmVjdG9yeVVSTCA9IFtuZXdWZXJzaW9uRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5n
UGF0aENvbXBvbmVudDogQCJmaWxlX18wIl07CiAgICAgTlNVUkwgKm9sZFZlcnNpb25VbnVzZWRE
YXRhYmFzZURpcmVjdG9yeVVSTCA9IFtvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5VVJMIFVSTEJ5
QXBwZW5kaW5nUGF0aENvbXBvbmVudDp1bnVzZWREYXRhYmFzZU5hbWVdOwotICAgIEVYUEVDVF9U
UlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRW
ZXJzaW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwucGF0aF0pOworICAgIEVYUEVDVF9UUlVF
KFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpvbGRWZXJz
aW9uVW51c2VkRGF0YWJhc2VEaXJlY3RvcnlVUkwucGF0aF0gPT0gb2xkRmlsZVNob3VsZEV4aXN0
KTsKICAgICAKICAgICAvLyBGb3IgZGF0YWJhc2UgdGhhdCBpcyBvcGVuZWQgYWZ0ZXIgdXBncmFk
ZSwgaXRzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW4gdjEuCiAgICAgTlNVUkwgKm9sZFZlcnNpb25F
eGlzdGluZ0RhdGFiYXNlRGlyZWN0b3J5VVJMID0gW29sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnlV
UkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OiBleGlzdGluZ0RhdGFiYXNlTmFtZV07CkBA
IC0xNTQsNyArMTU0LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlRGlyZWN0b3JpZXMoU3RyaW5nIHRl
c3ROYW1lKQogVEVTVChJbmRleGVkREIsIEluZGV4ZWREQkZpbGVOYW1lKQogewogICAgIGNyZWF0
ZURpcmVjdG9yaWVzKCJub25lIik7Ci0gICAgcnVuVGVzdCgpOworICAgIHJ1blRlc3QoZmFsc2Up
OwogfQogCiBURVNUKEluZGV4ZWREQiwgSW5kZXhlZERCRmlsZU5hbWVWMCkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlz
dGljcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5tbQppbmRleCAxN2JjN2Y1ZDc0NDg0YWI1NGQ2NzdhNDcyODkxNDI4ZWYy
ZmZhMmMwLi42NTYyZTJlZTQ0YjQxMzljMDZhYTMzYjMxMDFhNTMwZGU1ZDYyMmM1IDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCkBAIC0xNTU4LDEwICsxNTU4LDggQEAgVEVTVChSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzLCBNaWdyYXRlRGF0YUZyb21NaXNzaW5nVG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdFNhbWVTaXQKIAogVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDYW5BY2Nlc3NE
YXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sKQogeworICAgIE5TVVJMICppdHBSb290VVJMID0g
W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQ
b29sVGVzdCJdIGlzRGlyZWN0b3J5OllFU107CiAgICAgYXV0byBkZWZhdWx0RmlsZU1hbmFnZXIg
PSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07Ci0gICAgX1dLV2Vic2l0ZURhdGFTdG9y
ZUNvbmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBbW19XS1dlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOwotICAgIGF1dG8gKmRhdGFTdG9y
ZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpk
YXRhU3RvcmVDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV07Ci0gICAgTlNVUkwgKml0cFJvb3RV
UkwgPSBbW2RhdGFTdG9yZSBfY29uZmlndXJhdGlvbl0gX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnldOwogICAgIE5TVVJMICpmaWxlVVJMID0gW2l0cFJvb3RVUkwgVVJMQnlBcHBlbmRp
bmdQYXRoQ29tcG9uZW50OkAib2JzZXJ2YXRpb25zLmRiIl07CiAgICAgW2RlZmF1bHRGaWxlTWFu
YWdlciByZW1vdmVJdGVtQXRQYXRoOml0cFJvb3RVUkwucGF0aCBlcnJvcjpuaWxdOwogICAgIEVY
UEVDVF9GQUxTRShbZGVmYXVsdEZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6aXRwUm9vdFVS
TC5wYXRoXSk7CkBAIC0xNTcyLDYgKzE1NzAsMTAgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLCBDYW5BY2Nlc3NEYXRhU3VtbWFyeVdpdGhOb1Byb2Nlc3NQb29sKQogICAgIEVYUEVDVF9U
UlVFKFtkZWZhdWx0RmlsZU1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpuZXdGaWxlVVJMLnBhdGhd
KTsKICAgICBbZGVmYXVsdEZpbGVNYW5hZ2VyIGNvcHlJdGVtQXRQYXRoOm5ld0ZpbGVVUkwucGF0
aCB0b1BhdGg6ZmlsZVVSTC5wYXRoIGVycm9yOm5pbF07CiAgICAgRVhQRUNUX1RSVUUoW2RlZmF1
bHRGaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOmZpbGVVUkwucGF0aF0pOworCisgICAgX1dL
V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBb
W19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIG5ld10gYXV0b3JlbGVhc2VdOworICAg
IGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnkg
PSBpdHBSb290VVJMOworICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtbW1dLV2Vic2l0ZURhdGFTdG9y
ZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uXSBh
dXRvcmVsZWFzZV07CiAgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQ6WUVTXTsKIAogICAgIHN0YXRpYyBib29sIGRvbmVGbGFnID0gZmFsc2U7CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJC
YXNpYy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdv
cmtlckJhc2ljLm1tCmluZGV4IDk1YWZiNDBhYmM0YTUyNDgyYTU4Mjk3NTcxODA2YjgzYzA1MjM3
YzUuLmMxN2EzNGFmZGM1MTdjOGI0MmMyYzdjODI0OTJiOTgxYjFjNGIxNWMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2lj
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdv
cmtlckJhc2ljLm1tCkBAIC01NjEsNyArNTYxLDcgQEAgVEVTVChTZXJ2aWNlV29ya2VycywgVXNl
ckFnZW50T3ZlcnJpZGUpCiAKICAgICBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKIAotICAgIG1lc3NhZ2VIYW5kbGVyID0gYWRv
cHROUyhbW1NXVXNlckFnZW50TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRXaXRoRXhwZWN0ZWRN
ZXNzYWdlOkAiTWVzc2FnZSBmcm9tIHdvcmtlcjogQmFyIEN1c3RvbSBVc2VyQWdlbnQiXSk7Cisg
ICAgbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbU1dVc2VyQWdlbnRNZXNzYWdlSGFuZGxlciBh
bGxvY10gaW5pdFdpdGhFeHBlY3RlZE1lc3NhZ2U6QCJNZXNzYWdlIGZyb20gd29ya2VyOiBGb28g
Q3VzdG9tIFVzZXJBZ2VudCJdKTsKICAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1l
OkAic3ciXTsKIAogICAgIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwpAQCAtNjM2LDggKzYzNiw2IEBAIFRFU1QoU2VydmljZVdvcmtlcnMs
IENhY2hlU3RvcmFnZVJlc3RvcmVGcm9tRGlzaykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUg
X2RlbGV0ZURlZmF1bHREYXRhU3RvcmVGb3JUZXN0aW5nXTsKLQogICAgIFNlcnZpY2VXb3JrZXJU
Q1BTZXJ2ZXIgc2VydmVyKHsKICAgICAgICAgeyAidGV4dC9odG1sIiwgbWFpbkNhY2hlU3RvcmFn
ZUJ5dGVzIH0KICAgICB9LCB7CkBAIC05ODUsNiArOTgzLDcgQEAgVEVTVChTZXJ2aWNlV29ya2Vy
cywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKIAogICAgIFJldGFpblB0cjxXS1dlYlZp
ZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBzZXRDb25maWd1cmF0aW9uSW5qZWN0ZWRCdW5k
bGVQYXRoKGNvbmZpZ3VyYXRpb24uZ2V0KCkpOworICAgIFJldGFpblB0cjxXS1Byb2Nlc3NQb29s
PiBvcmlnaW5hbFByb2Nlc3NQb29sID0gY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbDsK
IAogICAgIGRvbmUgPSBmYWxzZTsKIApAQCAtMTAzOCw3ICsxMDM3LDcgQEAgVEVTVChTZXJ2aWNl
V29ya2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBkb25lID0gZmFsc2U7
CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBsb2FkaW5nIHRoZSBzaW1wbGUgcGFnZSBkaWQgbm90
IHN0YXJ0IHRoZSBzZXJ2aWNlIHdvcmtlciBwcm9jZXNzLgotICAgIEVYUEVDVF9FUSgwdSwgd2Vi
Vmlldy5nZXQoKS5jb25maWd1cmF0aW9uLnByb2Nlc3NQb29sLl9zZXJ2aWNlV29ya2VyUHJvY2Vz
c0NvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5w
cm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7CiAKICAgICB3ZWJWaWV3ID0g
YWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOm5ld0NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBF
WFBFQ1RfRVEoMnUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5wcm9jZXNzUG9vbC5fd2Vi
UHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQpOwpAQCAtMTA0Niw5ICsxMDQ1LDggQEAgVEVT
VChTZXJ2aWNlV29ya2VycywgU2VydmljZVdvcmtlclByb2Nlc3NDcmVhdGlvbikKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIGRvbmUgPSBmYWxzZTsKIAotICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IGxvYWRpbmcgdGhpcyBwYWdlIGRpZCBzdGFydCB0aGUgc2VydmljZSB3
b3JrZXIgcHJvY2Vzcy4KICAgICBFWFBFQ1RfRVEoMXUsIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJh
dGlvbi5wcm9jZXNzUG9vbC5fc2VydmljZVdvcmtlclByb2Nlc3NDb3VudCk7Ci0KKyAgICBFWFBF
Q1RfRVEoMXUsIG9yaWdpbmFsUHJvY2Vzc1Bvb2wuZ2V0KCkuX3NlcnZpY2VXb3JrZXJQcm9jZXNz
Q291bnQpOwogICAgIFtbY29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSByZW1vdmVEYXRh
T2ZUeXBlczpbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbFdlYnNpdGVEYXRhVHlwZXNdIG1vZGlmaWVk
U2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XigpIHsKICAgICAg
ICAgZG9uZSA9IHRydWU7CiAgICAgfV07CkBAIC0xNjIzLDIxICsxNjIxLDM1IEBAIHN0YXRpYyBz
aXplX3QgbGF1bmNoU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzLCBiCiAgICAgcmV0dXJuIHdlYlZpZXcuZ2V0KCkuY29uZmlndXJhdGlvbi5w
cm9jZXNzUG9vbC5fd2ViUHJvY2Vzc0NvdW50SWdub3JpbmdQcmV3YXJtZWQ7CiB9CiAKLVRFU1Qo
U2VydmljZVdvcmtlcnMsIE91dE9mQW5kSW5Qcm9jZXNzU2VydmljZVdvcmtlcikKK1RFU1QoU2Vy
dmljZVdvcmtlcnMsIE91dE9mUHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFi
b3V0QmxhbmsgPSB0cnVlOwogCiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2Vy
UHJvY2VzcyghdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgIWZpcnN0TG9hZEFib3V0
QmxhbmspKTsKK30KKworVEVTVChTZXJ2aWNlV29ya2VycywgSW5Qcm9jZXNzU2VydmljZVdvcmtl
cikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MgPSB0cnVlOwor
ICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisKICAgICBFWFBFQ1RfRVEoMnUs
IGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3MsICFmaXJzdExvYWRBYm91dEJsYW5rKSk7CiB9CiAKLVRFU1QoU2VydmljZVdvcmtlcnMsIExv
YWRBYm91dEJsYW5rQmVmb3JlTmF2aWdhdGluZ1Rocm91Z2hTZXJ2aWNlV29ya2VyKQorVEVTVChT
ZXJ2aWNlV29ya2VycywgTG9hZEFib3V0QmxhbmtCZWZvcmVOYXZpZ2F0aW5nVGhyb3VnaE91dE9m
UHJvY2Vzc1NlcnZpY2VXb3JrZXIpCiB7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TG9hZEFib3V0QmxhbmsgPSB0cnVlOwog
CiAgICAgRVhQRUNUX0VRKDF1LCBsYXVuY2hTZXJ2aWNlV29ya2VyUHJvY2VzcyghdXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcywgZmlyc3RMb2FkQWJvdXRCbGFuaykpOworfQorCitURVNU
KFNlcnZpY2VXb3JrZXJzLCBMb2FkQWJvdXRCbGFua0JlZm9yZU5hdmlnYXRpbmdUaHJvdWdoSW5Q
cm9jZXNzU2VydmljZVdvcmtlcikKK3sKKyAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MgPSB0cnVlOworICAgIGJvb2wgZmlyc3RMb2FkQWJvdXRCbGFuayA9IHRydWU7CisK
ICAgICBFWFBFQ1RfRVEoMnUsIGxhdW5jaFNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3MsIGZpcnN0TG9hZEFib3V0QmxhbmspKTsKIH0KIApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UTFNEZXByZWNhdGlv
bi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVExTRGVwcmVjYXRp
b24ubW0KaW5kZXggNjc3ZjAwYTMwNTcwM2UyNDk2YWJkZTY0YzNhZmMyY2QyNzdhZDE2Ny4uNGEw
NmJkZmE3N2FiOTk3NTM3ZGUyZWM1Y2JlMTk1MThkMDk2MzM5OSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UTFNEZXByZWNhdGlvbi5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RMU0RlcHJlY2F0aW9uLm1tCkBA
IC0xNzYsNyArMTc2LDggQEAgVEVTVChUTFNWZXJzaW9uLCBOZXR3b3JrU2Vzc2lvbikKICAgICB9
OwogICAgIHsKICAgICAgICAgVENQU2VydmVyIHNlcnZlcihUQ1BTZXJ2ZXI6OlByb3RvY29sOjpI
VFRQUywgVENQU2VydmVyOjpyZXNwb25kV2l0aE9LLCB0bHMxXzEpOwotICAgICAgICBhdXRvIHdl
YlZpZXcgPSBtYWtlV2ViVmlld1dpdGgoW1dLV2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0
b3JlXSk7CisgICAgICAgIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICpjb25maWd1
cmF0aW9uID0gW1tbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
IGF1dG9yZWxlYXNlXTsKKyAgICAgICAgYXV0byB3ZWJWaWV3ID0gbWFrZVdlYlZpZXdXaXRoKFtb
W1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpjb25maWd1
cmF0aW9uXSBhdXRvcmVsZWFzZV0pOwogICAgICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNV
UkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiaHR0cHM6Ly8xMjcuMC4wLjE6JWQvIiwgc2VydmVyLnBvcnQoKV1d
XV07CiAgICAgICAgIFtkZWxlZ2F0ZSB3YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CiAgICAg
fQpAQCAtMjAyLDcgKzIwMyw4IEBAIFRFU1QoVExTVmVyc2lvbiwgTmV0d29ya1Nlc3Npb24pCiAg
ICAgICAgIFRDUFNlcnZlciBzZXJ2ZXIoVENQU2VydmVyOjpQcm90b2NvbDo6SFRUUFMsIFtdKFNT
TCAqc3NsKSB7CiAgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc3NsKTsKICAgICAgICAgfSwgdGxz
MV8xKTsKLSAgICAgICAgYXV0byB3ZWJWaWV3ID0gbWFrZVdlYlZpZXdXaXRoKFtXS1dlYnNpdGVE
YXRhU3RvcmUgZGVmYXVsdERhdGFTdG9yZV0pOworICAgICAgICBfV0tXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25m
aWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGF1dG8gd2ViVmll
dyA9IG1ha2VXZWJWaWV3V2l0aChbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0
aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdKTsKICAgICAgICAgW3dl
YlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImh0dHBzOi8vMTI3LjAuMC4x
OiVkLyIsIHNlcnZlci5wb3J0KCldXV1dOwogICAgICAgICBbZGVsZWdhdGUgd2FpdEZvckRpZEZh
aWxQcm92aXNpb25hbE5hdmlnYXRpb25dOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCmluZGV4
IGEzNWYwNTM1MGFhYjRiNDJmMzZjNDZhZWNkZWVlZTZjZTU0NGVmODYuLjMzNzYwOTJhMTk1YjUx
MmRhNjdjNDk2ZTQ1MjE3YjkxNGZlMmE1NzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQpAQCAtNDc5
LDggKzQ3OSw2IEBAIHN0YXRpYyBib29sIGZpbmlzaGVkOwogfQogQGVuZAogCi0vLyBGSVhNRTog
b24gaU9TLCBVSSBwcm9jZXNzIHNob3VsZCBiZSB1c2luZyB0aGUgc2FtZSBjb29raWUgZmlsZSBh
cyB0aGUgbmV0d29yayBwcm9jZXNzIGZvciBkZWZhdWx0IHNlc3Npb24uCi0jaWYgUExBVEZPUk0o
TUFDKQogZW51bSBjbGFzcyBTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZyB7IE5vLCBZZXMg
fTsKIHZvaWQgcnVuV0tIVFRQQ29va2llU3RvcmVXaXRob3V0UHJvY2Vzc1Bvb2woU2hvdWxkRW5h
YmxlUHJvY2Vzc1ByZXdhcm1pbmcgc2hvdWxkRW5hYmxlUHJvY2Vzc1ByZXdhcm1pbmcpCiB7CkBA
IC01ODksMjAgKzU4Nyw2NiBAQCBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0UHJvY2Vz
c1Bvb2xXaXRoUHJld2FybWluZykKICAgICBydW5XS0hUVFBDb29raWVTdG9yZVdpdGhvdXRQcm9j
ZXNzUG9vbChTaG91bGRFbmFibGVQcm9jZXNzUHJld2FybWluZzo6WWVzKTsKIH0KIAotI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKLQogQGludGVyZmFjZSBDaGVja1Nlc3Npb25Db29raWVVSURlbGVn
YXRlIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0ZT4KKy0gKE5TU3RyaW5nICopYWxlcnRDb29raWVI
VE1MOworLSAoTlNTdHJpbmcgKil3YWl0Rm9yTWVzc2FnZTsKIEBlbmQKIAotQGltcGxlbWVudGF0
aW9uIENoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUKK0BpbXBsZW1lbnRhdGlvbiBDaGVja1Nl
c3Npb25Db29raWVVSURlbGVnYXRlIHsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9tZXNzYWdl
OworfQorCiAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlw
dEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJh
bWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQp
KWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgRVhQRUNUX1NUUkVRKCJTZXNzaW9uQ29va2llTmFt
ZT1Db29raWVWYWx1ZSIsIG1lc3NhZ2UuVVRGOFN0cmluZyk7CisgICAgX21lc3NhZ2UgPSBtZXNz
YWdlOwogICAgIGZpbmlzaGVkID0gdHJ1ZTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQor
CistIChOU1N0cmluZyAqKXdhaXRGb3JNZXNzYWdlCit7CisgICAgd2hpbGUgKCFfbWVzc2FnZSkK
KyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyAgICByZXR1cm4g
X21lc3NhZ2UuYXV0b3JlbGVhc2UoKTsKK30KKworLSAoTlNTdHJpbmcgKilhbGVydENvb2tpZUhU
TUwKK3sKKyAgICByZXR1cm4gQCI8c2NyaXB0PnZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2ll
LnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkgKyspIHsg
Y29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNvb2tpZXMuc29ydCgpOyBhbGVydChj
b29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Cit9CisKIEBlbmQKIAorVEVTVChXZWJLaXQs
IFdLSFRUUENvb2tpZVN0b3JlTXVsdGlwbGVWaWV3cykKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3
ZWJWaWV3MSA9IFtbVGVzdFdLV2ViVmlldyBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBbd2ViVmll
dzEgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAic3RhcnQgbmV0d29yayBwcm9jZXNzIl07
CisKKyAgICBOU0hUVFBDb29raWUgKnNlc3Npb25Db29raWUgPSBbTlNIVFRQQ29va2llIGNvb2tp
ZVdpdGhQcm9wZXJ0aWVzOkB7CisgICAgICAgIE5TSFRUUENvb2tpZVBhdGg6IEAiLyIsCisgICAg
ICAgIE5TSFRUUENvb2tpZU5hbWU6IEAiU2Vzc2lvbkNvb2tpZU5hbWUiLAorICAgICAgICBOU0hU
VFBDb29raWVWYWx1ZTogQCJDb29raWVWYWx1ZSIsCisgICAgICAgIE5TSFRUUENvb2tpZURvbWFp
bjogQCIxMjcuMC4wLjEiLAorICAgIH1dOworCisgICAgX19ibG9jayBib29sIHNldENvb2tpZURv
bmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldzEuY29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3Jl
Lmh0dHBDb29raWVTdG9yZSBzZXRDb29raWU6c2Vzc2lvbkNvb2tpZSBjb21wbGV0aW9uSGFuZGxl
cjpeeworICAgICAgICBzZXRDb29raWVEb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJnNldENvb2tpZURvbmUpOworCisgICAgYXV0byBkZWxlZ2F0ZSA9
IGFkb3B0TlMoW0NoZWNrU2Vzc2lvbkNvb2tpZVVJRGVsZWdhdGUgbmV3XSk7CisgICAgW3dlYlZp
ZXcxIHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcxIGxvYWRI
VE1MU3RyaW5nOltkZWxlZ2F0ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVs
ZWdhdGUgd2FpdEZvck1lc3NhZ2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsK
KworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcyID0gW1tUZXN0V0tXZWJWaWV3IG5ld10gYXV0
b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3MiBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsK
KyAgICBbd2ViVmlldzIgbG9hZEhUTUxTdHJpbmc6W2RlbGVnYXRlIGFsZXJ0Q29va2llSFRNTF0g
YmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly8xMjcuMC4wLjEiXV07CisgICAg
RVhQRUNUX1dLX1NUUkVRKFtkZWxlZ2F0ZSB3YWl0Rm9yTWVzc2FnZV0sICJTZXNzaW9uQ29va2ll
TmFtZT1Db29raWVWYWx1ZSIpOworfQorCiBURVNUKFdLSFRUUENvb2tpZVN0b3JlLCBXaXRob3V0
UHJvY2Vzc1Bvb2xFcGhlbWVyYWxTZXNzaW9uKQogewogICAgIFJldGFpblB0cjxXS1dlYnNpdGVE
YXRhU3RvcmU+IGVwaGVtZXJhbFN0b3JlV2l0aENvb2tpZXMgPSBbV0tXZWJzaXRlRGF0YVN0b3Jl
IG5vblBlcnNpc3RlbnREYXRhU3RvcmVdOwpAQCAtNjI3LDkgKzY3MSw4IEBAIFRFU1QoV0tIVFRQ
Q29va2llU3RvcmUsIFdpdGhvdXRQcm9jZXNzUG9vbEVwaGVtZXJhbFNlc3Npb24pCiAgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaW5pc2hlZCk7CiAgICAgZmluaXNoZWQgPSBmYWxzZTsK
ICAgICAKLSAgICBOU1N0cmluZyAqYWxlcnRDb29raWVIVE1MID0gQCI8c2NyaXB0PnZhciBjb29r
aWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7IGZvciAobGV0IGkgPSAwOyBpIDwgY29v
a2llcy5sZW5ndGg7IGkgKyspIHsgY29va2llc1tpXSA9IGNvb2tpZXNbaV0udHJpbSgpOyB9IGNv
b2tpZXMuc29ydCgpOyBhbGVydChjb29raWVzLmpvaW4oJzsgJykpOzwvc2NyaXB0PiI7Ci0gICAg
W3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6YWxlcnRDb29raWVIVE1MIGJhc2VVUkw6W05TVVJMIFVS
TFdpdGhTdHJpbmc6QCJodHRwOi8vMTI3LjAuMC4xIl1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZmluaXNoZWQpOworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOltkZWxlZ2F0
ZSBhbGVydENvb2tpZUhUTUxdIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8v
MTI3LjAuMC4xIl1dOworICAgIEVYUEVDVF9XS19TVFJFUShbZGVsZWdhdGUgd2FpdEZvck1lc3Nh
Z2VdLCAiU2Vzc2lvbkNvb2tpZU5hbWU9Q29va2llVmFsdWUiKTsKIH0KIAogc3RhdGljIGJvb2wg
YXJlQ29va2llc0VxdWFsKE5TSFRUUENvb2tpZSAqZmlyc3QsIE5TSFRUUENvb2tpZSAqc2Vjb25k
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCBhNDNmYTgx
MzRhN2FiNzZjM2EzYjdmODIwOGRjOTI2NjcyNzQ3NDYxLi5hMDYzMDM0NWY1OGU1MDZmMGE0MTNk
YzExZmU4M2ViNTY0ZmIyNGFjIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcApAQCAtMTA2Niw4ICsxMDY2LDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRT
dGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKIAog
ICAgIHJlc2V0UXVvdGEoKTsKIAotICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwotCiAg
ICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CiAKICAgICBXS0NvbnRleHRTZXRVc2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250
ZXh0KCksIGZhbHNlKTsKQEAgLTMxNzUsOSArMzE3Myw4IEBAIFBsYXRmb3JtV2ViVmlldyogVGVz
dENvbnRyb2xsZXI6OnBsYXRmb3JtQ3JlYXRlT3RoZXJQYWdlKFBsYXRmb3JtV2ViVmlldyogcGFy
ZW50CiAgICAgcmV0dXJuIG5ldyBQbGF0Zm9ybVdlYlZpZXcoY29uZmlndXJhdGlvbiwgb3B0aW9u
cyk7CiB9CiAKLVdLQ29udGV4dFJlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGp1c3RDb250
ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmIGNvbnRl
eHRDb25maWd1cmF0aW9uKQorV0tDb250ZXh0UmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFk
anVzdENvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25S
ZWYpCiB7Ci0gICAgV0tDb250ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUoY29udGV4dCwg
ZGVmYXVsdFdlYnNpdGVEYXRhU3RvcmUoKSk7CiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>