<?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>165082</bug_id>
          
          <creation_ts>2016-11-27 07:26:34 -0800</creation_ts>
          <short_desc>[SOUP] Network process crash in WebKit::CustomProtocolManagerImpl::didFailWithError</short_desc>
          <delta_ts>2017-04-05 11:07:04 -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>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugzilla.redhat.com/show_bug.cgi?id=1398951</see_also>
    
    <see_also>https://bugzilla.redhat.com/show_bug.cgi?id=1402191</see_also>
    
    <see_also>https://bugzilla.redhat.com/show_bug.cgi?id=1419362</see_also>
    
    <see_also>https://bugzilla.redhat.com/show_bug.cgi?id=1426449</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>achristensen</cc>
    
    <cc>aestes</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>loic.yhuel</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mkwst</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1253747</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-27 07:26:34 -0800</bug_when>
    <thetext>This might be code that was recently removed from master, but anyway:

Truncated backtrace:
Thread no. 1 (10 frames)
 #0 WTF::GRefPtr&lt;_GInputStream&gt;::operator! at /usr/src/debug/webkitgtk-2.14.1/Source/WTF/wtf/glib/GRefPtr.h:109
 #1 WebKit::CustomProtocolManagerImpl::didFailWithError at /usr/src/debug/webkitgtk-2.14.1/Source/WebKit2/NetworkProcess/CustomProtocols/soup/CustomProtocolManagerImpl.cpp:123
 #2 IPC::callMemberFunctionImpl&lt;WebKit::CustomProtocolManager, void (WebKit::CustomProtocolManager::*)(unsigned long, WebCore::ResourceError const&amp;), std::tuple&lt;unsigned long, WebCore::ResourceError&gt;, 0ul, 1ul&gt;(WebKit::CustomProtocolManager*, void (WebKit::CustomProtocolManager::*)(unsigned long, WebCore::ResourceError const&amp;), std::tuple&lt;unsigned long, WebCore::ResourceError&gt;&amp;&amp;, std::integer_sequence&lt;unsigned long, 0ul, 1ul&gt;) at /usr/src/debug/webkitgtk-2.14.1/Source/WebKit2/Platform/IPC/HandleMessage.h:13
 #3 IPC::callMemberFunction&lt;WebKit::CustomProtocolManager, void (WebKit::CustomProtocolManager::*)(unsigned long, WebCore::ResourceError const&amp;), std::tuple&lt;unsigned long, WebCore::ResourceError&gt;, std::integer_sequence&lt;unsigned long, 0ul, 1ul&gt; &gt;(std::tuple&lt;unsigned long, WebCore::ResourceError&gt;&amp;&amp;, WebKit::CustomProtocolManager*, void (WebKit::CustomProtocolManager::*)(unsigned long, WebCore::ResourceError const&amp;)) at /usr/src/debug/webkitgtk-2.14.1/Source/WebKit2/Platform/IPC/HandleMessage.h:19
 #4 IPC::handleMessage&lt;Messages::CustomProtocolManager::DidFailWithError, WebKit::CustomProtocolManager, void (WebKit::CustomProtocolManager::*)(unsigned long, WebCore::ResourceError const&amp;)&gt; at /usr/src/debug/webkitgtk-2.14.1/Source/WebKit2/Platform/IPC/HandleMessage.h:99
 #5 WebKit::CustomProtocolManager::didReceiveMessage at /usr/src/debug/webkitgtk-2.14.1/x86_64-redhat-linux-gnu/DerivedSources/WebKit2/CustomProtocolManagerMessageReceiver.cpp:45
 #6 IPC::Connection::dispatchWorkQueueMessageReceiverMessage at /usr/src/debug/webkitgtk-2.14.1/Source/WebKit2/Platform/IPC/Connection.cpp:285
 #7 WTF::Function&lt;void ()&gt;::operator()() const at /usr/src/debug/webkitgtk-2.14.1/Source/WTF/wtf/Function.h:50
 #8 WTF::RunLoop::performWork at /usr/src/debug/webkitgtk-2.14.1/Source/WTF/wtf/RunLoop.cpp:105
 #9 WTF::RunLoop::&lt;lambda(gpointer)&gt;::operator() at /usr/src/debug/webkitgtk-2.14.1/Source/WTF/wtf/glib/RunLoopGLib.cpp:66

Full backtrace downstream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253748</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-27 07:26:58 -0800</bug_when>
    <thetext>116 reports of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253749</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-27 07:28:34 -0800</bug_when>
    <thetext>Oh and the user report: &quot;Simply opened an email within Evolution and the crash occured.  I think the email contained HTML elements.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257235</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-12-07 06:12:21 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; 116 reports of this.

We&apos;re now up to 285 reports of this crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263306</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-02 07:52:05 -0800</bug_when>
    <thetext>We&apos;re now up to 850 reports of this crash (in Fedora). Bug #165655 is potentially-related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263422</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-03 02:16:15 -0800</bug_when>
    <thetext>There is one thing I don&apos;t understand from the backtrace, the main thread is a WorkQueue thread. How can this happen? 

So what happen seems to be that CustomProtocolManager messages are handled in the work queue thread instead of the real main thread. Other IPC messages are handled in the real main thread (Thread 11) and we have two threads using CustomProtocolManager at the same time. Another thing is why we ping custom uri schemes, though. I need a way to reproduce this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263433</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-03 04:57:13 -0800</bug_when>
    <thetext>*** Bug 165655 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263436</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-03 05:16:55 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; There is one thing I don&apos;t understand from the backtrace, the main thread is
&gt; a WorkQueue thread. How can this happen? 

It can&apos;t happen. Thread 1 is the crashing thread, not the main thread.

In bug 1398951 the main thread is thread 11 (LWP 8497, lower number than any of the other threads) which is using CustomProtocolManagerImpl at the time of the crash, same as the crashing thread.

In bug 1402191, which I just realized was not public (fixed), the main thread is thread 5 (LWP 5528) which is calling WebKit::NetworkLoad::NetworkLoad. In this backtrace, the only the crashing thread&apos;s backtrace contains CustomProtocolManagerImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263440</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-03 05:27:12 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; There is one thing I don&apos;t understand from the backtrace, the main thread is
&gt; &gt; a WorkQueue thread. How can this happen? 
&gt; 
&gt; It can&apos;t happen. Thread 1 is the crashing thread, not the main thread.

Isn&apos;t Thread 1 always the main thread?

&gt; In bug 1398951 the main thread is thread 11 (LWP 8497, lower number than any
&gt; of the other threads) which is using CustomProtocolManagerImpl at the time
&gt; of the crash, same as the crashing thread.
&gt; 
&gt; In bug 1402191, which I just realized was not public (fixed), the main
&gt; thread is thread 5 (LWP 5528) which is calling
&gt; WebKit::NetworkLoad::NetworkLoad. In this backtrace, the only the crashing
&gt; thread&apos;s backtrace contains CustomProtocolManagerImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263444</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-03 08:01:15 -0800</bug_when>
    <thetext>No, thread 1 in gdb is the thread that crashed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263445</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-03 08:03:33 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; No, thread 1 in gdb is the thread that crashed.

At least in backtraces taken from core dumps it is. Maybe that&apos;s different if running a program via gdb.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263724</commentid>
    <comment_count>11</comment_count>
      <attachid>297998</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-04 01:25:14 -0800</bug_when>
    <thetext>Created attachment 297998
Patch

Ok, I finally understood the problem, see the changelog for the details. Alex, if this can be done in Mac too, I can do it in a follow up patch, or maybe even as part of the refactoring proposed in bug #165028</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263751</commentid>
    <comment_count>12</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-01-04 07:17:27 -0800</bug_when>
    <thetext>I just verified that the API test added in r149194 passes on Mac with CustomProtocolManager being a MessageReceiver instead of a WorkQueueMessageReceiver.  I did this with and without NetworkSession, but with NetworkSession also requires changing globalCustomProtocolManager() to be a std::unique_ptr and setCustomProtocolManager to call the std::unique_ptr constructor explicitly.
Let&apos;s give it a shot and see what Andy says.  We don&apos;t have many clients using WebKit2&apos;s CustomProtocolManager because it&apos;s not public API, so it&apos;s possible we have a similar thread safety issue on Mac and just don&apos;t get a lot of stack traces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263763</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-04 08:22:14 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I just verified that the API test added in r149194 passes on Mac with
&gt; CustomProtocolManager being a MessageReceiver instead of a
&gt; WorkQueueMessageReceiver.  I did this with and without NetworkSession, but
&gt; with NetworkSession also requires changing globalCustomProtocolManager() to
&gt; be a std::unique_ptr and setCustomProtocolManager to call the
&gt; std::unique_ptr constructor explicitly.
&gt; Let&apos;s give it a shot and see what Andy says.  We don&apos;t have many clients
&gt; using WebKit2&apos;s CustomProtocolManager because it&apos;s not public API, so it&apos;s
&gt; possible we have a similar thread safety issue on Mac and just don&apos;t get a
&gt; lot of stack traces.

In mac the manager is thread safe, the registered schemes were protected in r149198, in r149520 methods were dispatched to the main thread and in r149121 mutex were added. I think we should revert all those things if we change to use message receiver again. There are a lot of changes in mac code that I can&apos;t test myself, but I can try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263847</commentid>
    <comment_count>14</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-01-04 11:38:33 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; ...and setCustomProtocolManager to call the
&gt; std::unique_ptr constructor explicitly.
Woah, definitely don&apos;t do this.  Use unique_ptr properly if we make this change.

Why not just make the soup custom protocol handler thread safe?  I think it would be strange to have one port be a work queue message receiver and one port not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263857</commentid>
    <comment_count>15</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2017-01-04 12:00:50 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I just verified that the API test added in r149194 passes on Mac with
&gt; CustomProtocolManager being a MessageReceiver instead of a
&gt; WorkQueueMessageReceiver.  I did this with and without NetworkSession, but
&gt; with NetworkSession also requires changing globalCustomProtocolManager() to
&gt; be a std::unique_ptr and setCustomProtocolManager to call the
&gt; std::unique_ptr constructor explicitly.
&gt; Let&apos;s give it a shot and see what Andy says.  We don&apos;t have many clients
&gt; using WebKit2&apos;s CustomProtocolManager because it&apos;s not public API, so it&apos;s
&gt; possible we have a similar thread safety issue on Mac and just don&apos;t get a
&gt; lot of stack traces.

It looks like synchronous XHR is now handled by sending a delayed synchronous CoreIPC message from the Web process to the Networking process. The networking process handles the load asynchronously and replies to the Web process when finished.

Since there is no longer a nested, non-common-mode run loop, there&apos;s no longer a need for a WorkQueue in CustomProtocolManager.

At least on Mac, there is still a need for some synchronization between the main thread and the thread that NSURLProtocol methods are called on, but that shouldn&apos;t affect the Soup implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263861</commentid>
    <comment_count>16</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2017-01-04 12:09:43 -0800</bug_when>
    <thetext>Carlos, if you want to remove the WorkQueue and related synchronization on all platforms, I&apos;d review that patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263926</commentid>
    <comment_count>17</comment_count>
      <attachid>297998</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-01-04 16:32:54 -0800</bug_when>
    <thetext>Comment on attachment 297998
Patch

I agree.  Let&apos;s keep this the same for all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264020</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-04 22:48:46 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; &gt; ...and setCustomProtocolManager to call the
&gt; &gt; std::unique_ptr constructor explicitly.
&gt; Woah, definitely don&apos;t do this.  Use unique_ptr properly if we make this
&gt; change.
&gt; 
&gt; Why not just make the soup custom protocol handler thread safe?  I think it
&gt; would be strange to have one port be a work queue message receiver and one
&gt; port not.

Because we don&apos;t want jumps from one thread to the other and mutexes if we can just use the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264021</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-04 22:49:09 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Carlos, if you want to remove the WorkQueue and related synchronization on
&gt; all platforms, I&apos;d review that patch.

Okidoki</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264063</commentid>
    <comment_count>20</comment_count>
      <attachid>298083</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-05 02:50:24 -0800</bug_when>
    <thetext>Created attachment 298083
New patch

Made it common to cocoa and soup. I left the mutexes and initiating run loop thing because I don&apos;t know if they are still needed in mac. I&apos;m not sure the Xcode changes are correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264064</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-05 02:50:58 -0800</bug_when>
    <thetext>Michael, in the stable branch I&apos;ll land the other patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264074</commentid>
    <comment_count>22</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-05 03:37:08 -0800</bug_when>
    <thetext>The new cpp file is not buili in mac, so the Xcode changes are definitely not correct, *sigh*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264179</commentid>
    <comment_count>23</comment_count>
      <attachid>298119</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-01-05 12:00:13 -0800</bug_when>
    <thetext>Created attachment 298119
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264221</commentid>
    <comment_count>24</comment_count>
      <attachid>298119</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-05 13:28:48 -0800</bug_when>
    <thetext>Comment on attachment 298119
Patch

Clearing flags on attachment: 298119

Committed r210374: &lt;http://trac.webkit.org/changeset/210374&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264222</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-05 13:28:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264670</commentid>
    <comment_count>26</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-01-07 00:28:49 -0800</bug_when>
    <thetext>Thank you very much, Alex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272625</commentid>
    <comment_count>27</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-02-02 13:50:41 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Michael, in the stable branch I&apos;ll land the other patch

It looks like you forgot? We have 190 reports of this crash in Fedora from users who have upgraded to 2.14.3 alone!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272804</commentid>
    <comment_count>28</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-02 22:28:25 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #21)
&gt; &gt; Michael, in the stable branch I&apos;ll land the other patch
&gt; 
&gt; It looks like you forgot? We have 190 reports of this crash in Fedora from
&gt; users who have upgraded to 2.14.3 alone!

I guess I did. I&apos;ll add it to the wiki to ensure I won&apos;t forget again, it&apos;s the best way to make sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294567</commentid>
    <comment_count>29</comment_count>
    <who name="Loïc Yhuel">loic.yhuel</who>
    <bug_when>2017-04-05 11:07:04 -0700</bug_when>
    <thetext>This commit reverted https://bugs.webkit.org/show_bug.cgi?id=146014 so reintroduced the warning.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297998</attachid>
            <date>2017-01-04 01:25:14 -0800</date>
            <delta_ts>2017-01-05 02:50:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-custom-protocols-crash.diff</filename>
            <type>text/plain</type>
            <size>5724</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2MjBjMmVhYTAxMy4uNDI2NmIzNGI4NmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNiBAQAorMjAxNy0wMS0wNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE5ldHdvcmsgcHJvY2VzcyBjcmFzaCBpbiBXZWJL
aXQ6OkN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6OmRpZEZhaWxXaXRoRXJyb3IKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTA4MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1c3RvbVByb3RvY29sTWFu
YWdlciB1c2VzIGEgV29ya3F1ZXVlIHRvIHJlY2VpdmUgdGhlIElQQyBtZXNzYWdlcyBzaW5jZSBy
MTQ5MTk0LiBUaGVuIHdlIGFkZGVkIHRoZSBTb3VwCisgICAgICAgIGltcGxlbWVudGF0aW9uIGFk
b3B0aW5nIHRoYXQgYXBwcm9hY2gsIGJ1dCB3aXRob3V0IG1ha2luZyBvdXIgaW1wbGVtZW50YXRp
b24gdGhyZWFkIHNhZmUuIFRoZSBjcmFzaCBoYXBwZW5zCisgICAgICAgIGJlY2F1c2UgdGhlIEN1
c3RvbVByb3RvY29sTWFuYWdlciBpbXBsZW1lbnRhdGlvbiBpcyB1c2VkIGJ5IHR3byB0aHJlYWRz
IGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBtYWluIHRocmVhZAorICAgICAgICBiZWNhdXNlIG9mIGEg
cGluZyBsb2FkIChwcm9iYWJseSBjYXVzZWQgYnkgYW4gaW1hZ2UgbG9hZCBpbiB0aGUgdW5sb2Fk
IGhhbmRsZXIsIEkgaGF2ZW4ndCBiZWVuIGFibGUgdG8gcmVwcm9kdWNlCisgICAgICAgIHRoZSBj
cmFzaCkgYW5kIHRoZSB3b3JrIHF1ZXVlIHRocmVhZC4gSSdtIG5vdCBzdXJlIGlmIHRoZSByZWFz
b25zIHRvIG1ha2UgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIHVzZSBhIFdvcmtRdWV1ZQorICAgICAg
ICBhcmUgc3RpbGwgdmFsaWQgZm9yIE1hYywgYnV0IEkgZG9uJ3QgdGhpbmsgdGhleSBhcmUgZm9y
IFNvdXAuIEN1c3RvbVByb3RvY29sTWFuYWdlciBpcyBub3cgb25seSB1c2VkIGluIHRoZQorICAg
ICAgICBuZXR3b3JrIHByb2Nlc3MgYW5kIHN5bmMgbG9hZHMgZG9uJ3QgdXNlIGFueSBuZXN0ZWQg
cnVuIGxvb3AsIHRoZXkgYXJlIGp1c3QgYW4gSVBDIHN5bmMgbWVzc2FnZS4gU28gdGhpcyBwYXRj
aAorICAgICAgICBtYWtlcyBDdXN0b21Qcm90b2NvbE1hbmFnZXIgYSBub3JtYWwgbWVzc2FnZSBy
ZWNlaXZlciBhZ2FpbiBmb3IgU291cCB0byBlbnN1cmUgbWVzc2FnZXMgYXJlIGhhbmRsZWQgaW4g
dGhlIG1haW4KKyAgICAgICAgdGhyZWFkIGFzIGV4cGVjdGVkIGJ5IHRoZSBTb3VwIGltcGxlbWVu
dGF0aW9uLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0N1c3Rv
bVByb3RvY29sTWFuYWdlci5oOgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFn
ZXI6OmNoaWxkUHJvY2Vzcyk6IFJlbW92ZSBXb3JrUXVldWUgaW5pdGlhbGl6YXRpb24uCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKTogUmVnaXN0ZXIgdGhlIG1lc3NhZ2UgcmVjZWl2ZXIuCisg
ICAgICAgIChXZWJLaXQ6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6aW5pdGlhbGl6ZUNvbm5lY3Rp
b24pOiBEZWxldGVkLgorCiAyMDE3LTAxLTAzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gTG9hZCBvcHRpb25zIGFsbG93U3RvcmVk
Q3JlZGVudGlhbHMgPSBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgd2l0aCBjbGllbnRDcmVk
ZW50aWFsUG9saWN5ID0gTWF5QXNrQ2xpZW50Rm9yQ3JlZGVudGlhbHMgZG9lc24ndCB3b3JrCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMv
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9D
dXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmgKaW5kZXggMDQwZmM0YTNkNWEu
LmVjNDJiMDYyZmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9D
dXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5o
CkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIEN1c3RvbVByb3RvY29sTWFuYWdlcl9oCiAKICNp
bmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5j
bHVkZSAiTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1
ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTksNyArNjAsMTMgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBDaGlsZFByb2Nlc3M7CiBzdHJ1Y3QgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7CiAKLWNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlciA6
IHB1YmxpYyBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQsIHB1YmxpYyBJUEM6OkNvbm5lY3Rpb246
OldvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlciB7CitjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXIg
OiBwdWJsaWMgTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgLCBwdWJsaWMgSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIgewor
I2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAgLCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIg
eworI2VuZGlmCiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
KTsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDdXN0b21Qcm90b2NvbE1hbmFnZXIoQ2hpbGRQcm9j
ZXNzKik7CkBAIC04MSwxNSArODgsMTcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Cisj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gQ2hpbGRQcm9jZXNzU3VwcGxlbWVudAogICAgIHZv
aWQgaW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uKikgb3ZlcnJpZGU7Ci0KLSAg
ICAvLyBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQKLSAgICB2b2lkIGluaXRpYWxpemUoY29uc3Qg
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKSBvdmVycmlkZTsKKyNlbmRpZgogCiAg
ICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwogCisgICAgLy8gTmV0d29y
a1Byb2Nlc3NTdXBwbGVtZW50CisgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJikgb3ZlcnJpZGU7CisKICAgICB2b2lkIGRpZEZhaWxXaXRo
RXJyb3IodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciYpOwogICAgIHZvaWQgZGlkTG9hZERhdGEodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwg
Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7CiAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2Uo
dWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYsIHVpbnQzMl90IGNhY2hlU3RvcmFnZVBvbGljeSk7CkBAIC05Nyw5ICsxMDYsMTAgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHdhc1JlZGlyZWN0ZWRUb1JlcXVlc3QodWludDY0X3QgY3VzdG9tUHJv
dG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CiAKICAgICBDaGlsZFByb2Nlc3Mq
IG1fY2hpbGRQcm9jZXNzOwotICAgIFJlZjxXb3JrUXVldWU+IG1fbWVzc2FnZVF1ZXVlOwogCiAj
aWYgUExBVEZPUk0oQ09DT0EpCisgICAgUmVmPFdvcmtRdWV1ZT4gbV9tZXNzYWdlUXVldWU7CisK
ICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtX3JlZ2lzdGVy
ZWRTY2hlbWVzOwogICAgIExvY2sgbV9yZWdpc3RlcmVkU2NoZW1lc011dGV4OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9D
dXN0b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwCmlu
ZGV4IDcyZjdmNzA4Yjk5Li5jZmQzMTE0M2M4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
U291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9j
b2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHAKQEAgLTI0LDcgKzI0LDYgQEAK
ICNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsLmgiCiAjaW5jbHVkZSAiQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewpAQCAtMzYsMTQgKzM1LDkgQEAgY29uc3QgY2hhciogQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
OjpzdXBwbGVtZW50TmFtZSgpCiAKIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyKENoaWxkUHJvY2VzcyogY2hpbGRQcm9jZXNzKQogICAgIDogbV9jaGlsZFByb2Nl
c3MoY2hpbGRQcm9jZXNzKQotICAgICwgbV9tZXNzYWdlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUo
ImNvbS5hcHBsZS5XZWJLaXQuQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIikpCiAgICAgLCBtX2ltcGwo
c3RkOjptYWtlX3VuaXF1ZTxDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsPihjaGlsZFByb2Nlc3Mp
KQogewotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6aW5pdGlhbGl6ZUNvbm5lY3Rp
b24oSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKQotewotICAgIGNvbm5lY3Rpb24tPmFkZFdv
cmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fbWVzc2FnZVF1ZXVlLmdldCgpLCB0aGlzKTsKKyAgICBt
X2NoaWxkUHJvY2Vzcy0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2Nv
bE1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogfQogCiB2b2lkIEN1c3Rv
bVByb3RvY29sTWFuYWdlcjo6aW5pdGlhbGl6ZShjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycyYgcGFyYW1ldGVycykK
</data>
<flag name="review"
          id="320262"
          type_id="1"
          status="-"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298083</attachid>
            <date>2017-01-05 02:50:24 -0800</date>
            <delta_ts>2017-01-05 12:00:07 -0800</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-custom-protocols-crash.diff</filename>
            <type>text/plain</type>
            <size>50007</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZTA2YTVmMGE1Zi4uMGIxNjUwMGM1YWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAxNy0wMS0wNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE5ldHdvcmsgcHJvY2VzcyBjcmFzaCBpbiBXZWJL
aXQ6OkN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6OmRpZEZhaWxXaXRoRXJyb3IKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTA4MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbXBsaWZpZWQgV2ViS2l0
U291cFJlcXVlc3RHZW5lcmljQ2xpZW50LgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9z
b3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5jcHA6CisgICAgICAgICh3ZWJraXRTb3VwUmVx
dWVzdEdlbmVyaWNTZW5kQXN5bmMpOgorICAgICAgICAod2Via2l0U291cFJlcXVlc3RHZW5lcmlj
U2VuZEZpbmlzaCk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNHZXRSZXF1ZXN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvV2ViS2l0U291cFJlcXVlc3RHZW5l
cmljLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0
R2VuZXJpY0NsaWVudC5oOgorCiAyMDE3LTAxLTA0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBBZGRyZXNzaW5nIHBvc3Qt
cmV2aWV3IGNvbW1lbnRzIGFmdGVyIHIyMTAwNS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJp
Yy5jcHAKaW5kZXggYTc0OTQ5NWRkNDUuLmVjMTMyNTg0MmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvV2ViS2l0U291cFJl
cXVlc3RHZW5lcmljLmNwcApAQCAtNTAsMTUgKzUwLDE0IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFNv
dXBSZXF1ZXN0R2VuZXJpY1NlbmRBc3luYyhTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0NhbmNlbGxh
YmxlCiB7CiAgICAgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xpZW50KiBjbGllbnQgPSBXRUJL
SVRfU09VUF9SRVFVRVNUX0dFTkVSSUNfR0VUX0NMQVNTKHJlcXVlc3QpLT5jbGllbnQ7CiAgICAg
QVNTRVJUKGNsaWVudCk7Ci0gICAgY2xpZW50LT5zdGFydChnX3Rhc2tfbmV3KHJlcXVlc3QsIGNh
bmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKKyAgICBjbGllbnQtPnN0YXJ0UmVxdWVz
dChhZG9wdEdSZWYoZ190YXNrX25ldyhyZXF1ZXN0LCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVz
ZXJEYXRhKSkpOwogfQogCiBzdGF0aWMgR0lucHV0U3RyZWFtKiB3ZWJraXRTb3VwUmVxdWVzdEdl
bmVyaWNTZW5kRmluaXNoKFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBHQXN5bmNSZXN1bHQqIHJlc3Vs
dCwgR0Vycm9yKiogZXJyb3IpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ190YXNrX2lz
X3ZhbGlkKHJlc3VsdCwgcmVxdWVzdCksIG51bGxwdHIpOwotICAgIFdlYktpdFNvdXBSZXF1ZXN0
R2VuZXJpY0NsaWVudCogY2xpZW50ID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDX0dFVF9D
TEFTUyhyZXF1ZXN0KS0+Y2xpZW50OwotICAgIEFTU0VSVChjbGllbnQpOwotICAgIHJldHVybiBj
bGllbnQtPmZpbmlzaChHX1RBU0socmVzdWx0KSwgZXJyb3IpOworICAgIGF1dG8qIGlucHV0U3Ry
ZWFtID0gZ190YXNrX3Byb3BhZ2F0ZV9wb2ludGVyKEdfVEFTSyhyZXN1bHQpLCBlcnJvcik7Cisg
ICAgcmV0dXJuIGlucHV0U3RyZWFtID8gR19JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0pIDogbnVs
bHB0cjsKIH0KIAogc3RhdGljIGdvZmZzZXQgd2Via2l0U291cFJlcXVlc3RHZW5lcmljR2V0Q29u
dGVudExlbmd0aChTb3VwUmVxdWVzdCogcmVxdWVzdCkKQEAgLTEwMCw3ICs5OSw3IEBAIHZvaWQg
d2Via2l0U291cFJlcXVlc3RHZW5lcmljU2V0UmVxdWVzdChXZWJLaXRTb3VwUmVxdWVzdEdlbmVy
aWMqIHJlcXVlc3QsIGNvbnN0CiAgICAgcmVxdWVzdC0+cHJpdi0+cmVzb3VyY2VSZXF1ZXN0ID0g
cmVzb3VyY2VSZXF1ZXN0OwogfQogCi1jb25zdCBSZXNvdXJjZVJlcXVlc3QqIHdlYmtpdFNvdXBS
ZXF1ZXN0R2VuZXJpY0dldFJlcXVlc3QoV2ViS2l0U291cFJlcXVlc3RHZW5lcmljKiByZXF1ZXN0
KQorY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNHZXRSZXF1
ZXN0KFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyogcmVxdWVzdCkKIHsKLSAgICByZXR1cm4gJnJl
cXVlc3QtPnByaXYtPnJlc291cmNlUmVxdWVzdDsKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+
cmVzb3VyY2VSZXF1ZXN0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5oCmluZGV4IDBl
NTEzOWEwOGUzLi4wOWNiZDI3MjUzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuaApA
QCAtNTgsNyArNTgsNyBAQCBHVHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0X2dlbmVyaWNfZ2V0X3R5
cGUoKTsKIHZvaWQgd2Via2l0U291cFJlcXVlc3RHZW5lcmljU2V0Q29udGVudExlbmd0aChXZWJL
aXRTb3VwUmVxdWVzdEdlbmVyaWMqLCBnb2Zmc2V0IGNvbnRlbnRMZW5ndGgpOwogdm9pZCB3ZWJr
aXRTb3VwUmVxdWVzdEdlbmVyaWNTZXRDb250ZW50VHlwZShXZWJLaXRTb3VwUmVxdWVzdEdlbmVy
aWMqLCBjb25zdCBjaGFyKiBtaW1lVHlwZSk7CiB2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJp
Y1NldFJlcXVlc3QoV2ViS2l0U291cFJlcXVlc3RHZW5lcmljKiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Jik7Ci1jb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QqIHdlYmtpdFNv
dXBSZXF1ZXN0R2VuZXJpY0dldFJlcXVlc3QoV2ViS2l0U291cFJlcXVlc3RHZW5lcmljKik7Citj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY0dl
dFJlcXVlc3QoV2ViS2l0U291cFJlcXVlc3RHZW5lcmljKik7CiAKIEdfRU5EX0RFQ0xTCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9XZWJLaXRTb3Vw
UmVxdWVzdEdlbmVyaWNDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNDbGllbnQuaAppbmRleCBhNmY3MWU5YzdkYy4u
ZGI0NzBhNjdmNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xpZW50LmgK
QEAgLTE3LDIxICsxNywxOCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8K
IAotI2lmbmRlZiBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNDbGllbnRfaAotI2RlZmluZSBXZWJL
aXRTb3VwUmVxdWVzdEdlbmVyaWNDbGllbnRfaAorI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvZ2xpYi9HUmVmUHRyLmg+CiAKLXR5cGVkZWYgc3RydWN0IF9HRXJyb3IgR0Vycm9yOwotdHlw
ZWRlZiBzdHJ1Y3QgX0dJbnB1dFN0cmVhbSBHSW5wdXRTdHJlYW07CiB0eXBlZGVmIHN0cnVjdCBf
R1Rhc2sgR1Rhc2s7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgV2ViS2l0U291cFJl
cXVlc3RHZW5lcmljQ2xpZW50IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoR1Rh
c2sqKSA9IDA7Ci0gICAgdmlydHVhbCBHSW5wdXRTdHJlYW0qIGZpbmlzaChHVGFzayosIEdFcnJv
cioqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0UmVxdWVzdChHUmVmUHRyPEdUYXNrPiYm
KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBXZWJLaXRT
b3VwUmVxdWVzdEdlbmVyaWNDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCBmOWE2N2Fm
ZmM3Mi4uYmU5ZDRiNzUxZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC05Myw2ICs5Myw4IEBA
IGlmIChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF8zRCkKIGVuZGlmICgpCiAKIHNldChOZXR3b3Jr
UHJvY2Vzc19DT01NT05fU09VUkNFUworICAgIE5ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29s
cy9DdXN0b21Qcm90b2NvbE1hbmFnZXIuY3BwCisKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0
YVRhc2suY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCAwZmMxM2Q1NmIwMi4uZGZhZDM5OTdhOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1NyBAQAorMjAxNy0wMS0wNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW1NPVVBdIE5ldHdvcmsgcHJvY2VzcyBjcmFzaCBpbiBXZWJLaXQ6
OkN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6OmRpZEZhaWxXaXRoRXJyb3IKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTA4MgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1c3RvbVByb3RvY29sTWFuYWdl
ciB1c2VzIGEgV29ya3F1ZXVlIHRvIHJlY2VpdmUgdGhlIElQQyBtZXNzYWdlcyBzaW5jZSByMTQ5
MTk0LiBUaGVuIHdlIGFkZGVkIHRoZSBTb3VwCisgICAgICAgIGltcGxlbWVudGF0aW9uIGFkb3B0
aW5nIHRoYXQgYXBwcm9hY2gsIGJ1dCB3aXRob3V0IG1ha2luZyBvdXIgaW1wbGVtZW50YXRpb24g
dGhyZWFkIHNhZmUuIFRoZSBjcmFzaCBoYXBwZW5zCisgICAgICAgIGJlY2F1c2UgdGhlIEN1c3Rv
bVByb3RvY29sTWFuYWdlciBpbXBsZW1lbnRhdGlvbiBpcyB1c2VkIGJ5IHR3byB0aHJlYWRzIGF0
IHRoZSBzYW1lIHRpbWUsIHRoZSBtYWluIHRocmVhZAorICAgICAgICBiZWNhdXNlIG9mIGEgcGlu
ZyBsb2FkIChwcm9iYWJseSBjYXVzZWQgYnkgYW4gaW1hZ2UgbG9hZCBpbiB0aGUgdW5sb2FkIGhh
bmRsZXIsIEkgaGF2ZW4ndCBiZWVuIGFibGUgdG8KKyAgICAgICAgcmVwcm9kdWNlIHRoZSBjcmFz
aCkgYW5kIHRoZSB3b3JrIHF1ZXVlIHRocmVhZC4gVGhlIHJlYXNvbnMgdG8gbWFrZSBDdXN0b21Q
cm90b2NvbE1hbmFnZXIgdXNlIGEgV29ya1F1ZXVlCisgICAgICAgIGFyZSBubyBsb25nZXIgdmFs
aWQgYmVjYXVzZSBDdXN0b21Qcm90b2NvbE1hbmFnZXIgaXMgbm93IG9ubHkgdXNlZCBpbiB0aGUg
bmV0d29yayBwcm9jZXNzIGFuZCBzeW5jIGxvYWRzIGRvbid0CisgICAgICAgIHVzZSBhbnkgbmVz
dGVkIHJ1biBsb29wLCB0aGV5IGFyZSBqdXN0IGFuIElQQyBzeW5jIG1lc3NhZ2UuIFNvIHRoaXMg
cGF0Y2ggbWFrZXMgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIGEgbm9ybWFsCisgICAgICAgIG1lc3Nh
Z2UgcmVjZWl2ZXIgYWdhaW4gdG8gZW5zdXJlIG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGluIHRoZSBt
YWluIHRocmVhZC4gSXQgYWxzbyBhZGRzIHRoZSBjb21tb24gaW1wbGVtZW50YXRpb24KKyAgICAg
ICAgdG8gYSBuZXcgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcCBmaWxlIHNoYXJlZCBieSBDb2Nv
YSBhbmQgU291cCBiYXNlZCBwb3J0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBBZGQg
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DdXN0
b21Qcm90b2NvbHMvQ29jb2EvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW06CisgICAgICAg
ICgtW1dLQ3VzdG9tUHJvdG9jb2wgaW5pdFdpdGhSZXF1ZXN0OmNhY2hlZFJlc3BvbnNlOmNsaWVu
dDpdKTogVXNlIG5ldyBDdXN0b21Qcm90b2NvbE1hbmFnZXIgQVBJLgorICAgICAgICAoLVtXS0N1
c3RvbVByb3RvY29sIHN0YXJ0TG9hZGluZ10pOiBEaXR0by4KKyAgICAgICAgKC1bV0tDdXN0b21Q
cm90b2NvbCBzdG9wTG9hZGluZ10pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyOjpyZWdpc3RlclByb3RvY29sQ2xhc3MpOiBSZWdpc3RlciB0aGUgTlNVUkxQ
cm90b2NvbCBjbGFzcyB3aGVuIG5vdCB1c2luZyB0aGUKKyAgICAgICAgbmV0d29yayBzZXNzaW9u
LgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmRpZEZhaWxXaXRoRXJy
b3IpOiByZW1vdmVDdXN0b21Qcm90b2NvbCBub3cgcmVjZWl2ZXMgYW4gSUQuCisgICAgICAgIChX
ZWJLaXQ6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6ZGlkRmluaXNoTG9hZGluZyk6IERpdHRvLgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1h
bmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Z2VuZXJhdGVDdXN0b21Qcm90b2Nv
bElEKTogTW92ZWQgZnJvbSBDdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5tbSBhbmQgQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyU291cC5jcHAuCisgICAgICAgIChXZWJLaXQ6OkN1c3RvbVByb3RvY29s
TWFuYWdlcjo6c3VwcGxlbWVudE5hbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyOjpDdXN0b21Qcm90b2NvbE1hbmFnZXIpOiBBbHNvIHJlbW92ZXMgdGhl
IHdvcmsgcXVldWUgaW5pdGlhbGl6YXRpb24uCisgICAgICAgIChXZWJLaXQ6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlcjo6aW5pdGlhbGl6ZSk6IENvcGllZCBhbmQgbW9kZXJuaXplZCB0aGUgbG9vcC4K
KyAgICAgICAgKFdlYktpdDo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjphZGRDdXN0b21Qcm90b2Nv
bCk6IENvcGllZCBmcm9tIEN1c3RvbVByb3RvY29sTWFuYWdlckNvY29hLm1tLgorICAgICAgICAo
V2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnJlbW92ZUN1c3RvbVByb3RvY29sKTogRGl0
dG8uCisgICAgICAgIChXZWJLaXQ6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6c3RhcnRMb2FkaW5n
KTogU2VuZCB0aGUgU3RhcnRMb2FkaW5nIG1lc3NhZ2UgdG8gdGhlIHByb3h5LgorICAgICAgICAo
V2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnN0b3BMb2FkaW5nKTogU2VuZCB0aGUgU3Rv
cExvYWRpbmcgbWVzc2FnZSB0byB0aGUgcHJveHkuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Q3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlckltcGwu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9z
b3VwL0N1c3RvbVByb3RvY29sTWFuYWdlckltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJTb3Vw
LmNwcDogTW92ZWQgdGhlIGltcGxlbWVudGF0aW9uIGZyb20KKyAgICAgICAgQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VySW1wbCBhbmQgdXBkYXRlZCB0byB0aGUgbmV3IEN1c3RvbVByb3RvY29sTWFuYWdl
ciBBUEkuCisgICAgICAgIChXZWJLaXQ6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6V2ViU291cFJl
cXVlc3RBc3luY0RhdGE6OldlYlNvdXBSZXF1ZXN0QXN5bmNEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YTo6fldlYlNv
dXBSZXF1ZXN0QXN5bmNEYXRhKToKKyAgICAgICAgKFdlYktpdDo6Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyOjpyZWdpc3RlclByb3RvY29sQ2xhc3MpOgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90
b2NvbE1hbmFnZXI6OnJlZ2lzdGVyU2NoZW1lKToKKyAgICAgICAgKFdlYktpdDo6Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyOjpzdXBwb3J0c1NjaGVtZSk6CisgICAgICAgIChXZWJLaXQ6OkN1c3RvbVBy
b3RvY29sTWFuYWdlcjo6ZGlkRmFpbFdpdGhFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OkN1c3Rv
bVByb3RvY29sTWFuYWdlcjo6ZGlkTG9hZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Q
cm90b2NvbE1hbmFnZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OkN1
c3RvbVByb3RvY29sTWFuYWdlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6
OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6d2FzUmVkaXJlY3RlZFRvUmVxdWVzdCk6CisgICAgICAg
ICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAg
ICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE3LTAxLTA0ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUGFzc1JlZlB0
ciB1c2UgZnJvbSB0aGUgImh0bWwiIGRpcmVjdG9yeSwgb3RoZXIgaW1wcm92ZW1lbnRzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ29j
b2EvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ29jb2EvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2Eu
bW0KaW5kZXggM2M5ZmM2ODFlNWMuLjk3YWNjMWVkMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ29jb2EvQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9t
UHJvdG9jb2xzL0NvY29hL0N1c3RvbVByb3RvY29sTWFuYWdlckNvY29hLm1tCkBAIC0yNiwxNCAr
MjYsOSBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJDdXN0b21Qcm90b2NvbE1hbmFn
ZXIuaCIKIAotI2ltcG9ydCAiQ2hpbGRQcm9jZXNzLmgiCiAjaW1wb3J0ICJDdXN0b21Qcm90b2Nv
bE1hbmFnZXJNZXNzYWdlcy5oIgotI2ltcG9ydCAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlN
ZXNzYWdlcy5oIgogI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgogI2ltcG9ydCAiTmV0d29ya1By
b2Nlc3MuaCIKLSNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0j
aW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaCIKICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxTZXNzaW9uLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL05TVVJMQ29ubmVjdGlvblNQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9V
UkwuaD4KQEAgLTQ0LDE2ICszOSw2IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVDdXN0b21Qcm90b2Nv
bElEKCkKLXsKLSAgICBzdGF0aWMgdWludDY0X3QgdW5pcXVlQ3VzdG9tUHJvdG9jb2xJRCA9IDA7
Ci0gICAgcmV0dXJuICsrdW5pcXVlQ3VzdG9tUHJvdG9jb2xJRDsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KIEBpbnRlcmZhY2UgV0tDdXN0b21Qcm90b2NvbCA6IE5TVVJMUHJvdG9jb2wg
ewogQHByaXZhdGUKICAgICB1aW50NjRfdCBfY3VzdG9tUHJvdG9jb2xJRDsKQEAgLTg5LDExICs3
NCwxMSBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVDdXN0b21Qcm90b2NvbElEKCkKICAgICBz
ZWxmID0gW3N1cGVyIGluaXRXaXRoUmVxdWVzdDpyZXF1ZXN0IGNhY2hlZFJlc3BvbnNlOmNhY2hl
ZFJlc3BvbnNlIGNsaWVudDpjbGllbnRdOwogICAgIGlmICghc2VsZikKICAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICAKLSAgICBfY3VzdG9tUHJvdG9jb2xJRCA9IGdlbmVyYXRlQ3VzdG9tUHJvdG9j
b2xJRCgpOwotICAgIF9pbml0aWFsaXphdGlvblJ1bkxvb3AgPSBDRlJ1bkxvb3BHZXRDdXJyZW50
KCk7CisKICAgICBpZiAoYXV0byogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyID0gTmV0d29ya1Byb2Nl
c3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyPigpKQotICAg
ICAgICBjdXN0b21Qcm90b2NvbE1hbmFnZXItPmFkZEN1c3RvbVByb3RvY29sKHNlbGYpOworICAg
ICAgICBfY3VzdG9tUHJvdG9jb2xJRCA9IGN1c3RvbVByb3RvY29sTWFuYWdlci0+YWRkQ3VzdG9t
UHJvdG9jb2woc2VsZik7CisgICAgX2luaXRpYWxpemF0aW9uUnVuTG9vcCA9IENGUnVuTG9vcEdl
dEN1cnJlbnQoKTsKKwogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC0xMDUsMTQgKzkwLDE0IEBA
IHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZUN1c3RvbVByb3RvY29sSUQoKQogLSAodm9pZClzdGFy
dExvYWRpbmcKIHsKICAgICBpZiAoYXV0byogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyID0gTmV0d29y
a1Byb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyPigp
KQotICAgICAgICBjdXN0b21Qcm90b2NvbE1hbmFnZXItPmNoaWxkUHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6U3RhcnRMb2FkaW5nKHNlbGYuY3Vz
dG9tUHJvdG9jb2xJRCwgW3NlbGYgcmVxdWVzdF0pLCAwKTsKKyAgICAgICAgY3VzdG9tUHJvdG9j
b2xNYW5hZ2VyLT5zdGFydExvYWRpbmcoc2VsZi5jdXN0b21Qcm90b2NvbElELCBbc2VsZiByZXF1
ZXN0XSk7CiB9CiAKIC0gKHZvaWQpc3RvcExvYWRpbmcKIHsKICAgICBpZiAoYXV0byogY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyPigpKSB7Ci0gICAgICAgIGN1c3RvbVByb3RvY29sTWFuYWdl
ci0+Y2hpbGRQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlclBy
b3h5OjpTdG9wTG9hZGluZyhzZWxmLmN1c3RvbVByb3RvY29sSUQpLCAwKTsKLSAgICAgICAgY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyLT5yZW1vdmVDdXN0b21Qcm90b2NvbChzZWxmKTsKKyAgICAgICAg
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyLT5zdG9wTG9hZGluZyhzZWxmLmN1c3RvbVByb3RvY29sSUQp
OworICAgICAgICBjdXN0b21Qcm90b2NvbE1hbmFnZXItPnJlbW92ZUN1c3RvbVByb3RvY29sKHNl
bGYuY3VzdG9tUHJvdG9jb2xJRCk7CiAgICAgfQogfQogCkBAIC0xMjAsNDUgKzEwNSwxMSBAQCBz
dGF0aWMgdWludDY0X3QgZ2VuZXJhdGVDdXN0b21Qcm90b2NvbElEKCkKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLWNvbnN0IGNoYXIqIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6c3VwcGxlbWVudE5h
bWUoKQotewotICAgIHJldHVybiAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIjsKLX0KLQotQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyOjpDdXN0b21Qcm90b2NvbE1hbmFnZXIoQ2hpbGRQcm9jZXNzKiBjaGls
ZFByb2Nlc3MpCi0gICAgOiBtX2NoaWxkUHJvY2VzcyhjaGlsZFByb2Nlc3MpCi0gICAgLCBtX21l
c3NhZ2VRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5DdXN0b21Qcm90
b2NvbE1hbmFnZXIiKSkKLXsKLSAgICBXZWJDb3JlOjpVVEY4RW5jb2RpbmcoKTsKLX0KLQotdm9p
ZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVj
dGlvbiogY29ubmVjdGlvbikKLXsKLSAgICBjb25uZWN0aW9uLT5hZGRXb3JrUXVldWVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBtX21lc3NhZ2VRdWV1ZS5nZXQoKSwgdGhpcyk7Ci19Ci0KLXZvaWQgQ3VzdG9tUHJv
dG9jb2xNYW5hZ2VyOjppbml0aWFsaXplKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzKQordm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnJlZ2lzdGVy
UHJvdG9jb2xDbGFzcygpCiB7CiAjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgW05TVVJM
UHJvdG9jb2wgcmVnaXN0ZXJDbGFzczpbV0tDdXN0b21Qcm90b2NvbCBjbGFzc11dOwogI2VuZGlm
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lz
dGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlZ2lzdGVyU2No
ZW1lKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHNbaV0p
OwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6YWRkQ3VzdG9tUHJvdG9jb2woV0tD
dXN0b21Qcm90b2NvbCAqY3VzdG9tUHJvdG9jb2wpCi17Ci0gICAgQVNTRVJUKGN1c3RvbVByb3Rv
Y29sKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2N1c3RvbVByb3RvY29sTWFwTXV0ZXgpOwot
ICAgIG1fY3VzdG9tUHJvdG9jb2xNYXAuYWRkKGN1c3RvbVByb3RvY29sLmN1c3RvbVByb3RvY29s
SUQsIGN1c3RvbVByb3RvY29sKTsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnJl
bW92ZUN1c3RvbVByb3RvY29sKFdLQ3VzdG9tUHJvdG9jb2wgKmN1c3RvbVByb3RvY29sKQotewot
ICAgIEFTU0VSVChjdXN0b21Qcm90b2NvbCk7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9jdXN0
b21Qcm90b2NvbE1hcE11dGV4KTsKLSAgICBtX2N1c3RvbVByb3RvY29sTWFwLnJlbW92ZShjdXN0
b21Qcm90b2NvbC5jdXN0b21Qcm90b2NvbElEKTsKIH0KIAogI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCkBAIC0xNzQsNyArMTI1LDcgQEAgdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnJlZ2lz
dGVyU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
cmVnaXN0ZXJlZFNjaGVtZXNNdXRleCk7CiAgICAgbV9yZWdpc3RlcmVkU2NoZW1lcy5hZGQoc2No
ZW1lKTsKIH0KLSAgICAKKwogdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnVucmVnaXN0ZXJT
Y2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiB7CiAgICAgQVNTRVJUKCFzY2hlbWUuaXNOdWxs
KCkpOwpAQCAtMjEwLDcgKzE2MSw3IEBAIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpkaWRG
YWlsV2l0aEVycm9yKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlCiAgICAgICAg
IFtbcHJvdG9jb2wgY2xpZW50XSBVUkxQcm90b2NvbDpwcm90b2NvbC5nZXQoKSBkaWRGYWlsV2l0
aEVycm9yOm5zRXJyb3IuZ2V0KCldOwogICAgIH0pOwogCi0gICAgcmVtb3ZlQ3VzdG9tUHJvdG9j
b2wocHJvdG9jb2wuZ2V0KCkpOworICAgIHJlbW92ZUN1c3RvbVByb3RvY29sKGN1c3RvbVByb3Rv
Y29sSUQpOwogfQogCiB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6ZGlkTG9hZERhdGEodWlu
dDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQpA
QCAtMjQ5LDcgKzIwMCw3IEBAIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpkaWRGaW5pc2hM
b2FkaW5nKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQpCiAgICAgICAgIFtbcHJvdG9jb2wgY2xp
ZW50XSBVUkxQcm90b2NvbERpZEZpbmlzaExvYWRpbmc6cHJvdG9jb2wuZ2V0KCldOwogICAgIH0p
OwogCi0gICAgcmVtb3ZlQ3VzdG9tUHJvdG9jb2wocHJvdG9jb2wuZ2V0KCkpOworICAgIHJlbW92
ZUN1c3RvbVByb3RvY29sKGN1c3RvbVByb3RvY29sSUQpOwogfQogCiB2b2lkIEN1c3RvbVByb3Rv
Y29sTWFuYWdlcjo6d2FzUmVkaXJlY3RlZFRvUmVxdWVzdCh1aW50NjRfdCBjdXN0b21Qcm90b2Nv
bElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29s
cy9DdXN0b21Qcm90b2NvbE1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5kZjMzZGI5ZmIyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIuY3Bw
CkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXN0b21Qcm90
b2NvbE1hbmFnZXIuaCIKKworI2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgorI2luY2x1ZGUgIkN1
c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0
YXRpYyB1aW50NjRfdCBnZW5lcmF0ZUN1c3RvbVByb3RvY29sSUQoKQoreworICAgIHN0YXRpYyB1
aW50NjRfdCB1bmlxdWVDdXN0b21Qcm90b2NvbElEID0gMDsKKyAgICByZXR1cm4gKyt1bmlxdWVD
dXN0b21Qcm90b2NvbElEOworfQorCitjb25zdCBjaGFyKiBDdXN0b21Qcm90b2NvbE1hbmFnZXI6
OnN1cHBsZW1lbnROYW1lKCkKK3sKKyAgICByZXR1cm4gIkN1c3RvbVByb3RvY29sTWFuYWdlciI7
Cit9CisKK0N1c3RvbVByb3RvY29sTWFuYWdlcjo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKENoaWxk
UHJvY2VzcyogY2hpbGRQcm9jZXNzKQorICAgIDogbV9jaGlsZFByb2Nlc3MoY2hpbGRQcm9jZXNz
KQoreworICAgIG1fY2hpbGRQcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkN1
c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7Cit9CisK
K3ZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjppbml0aWFsaXplKGNvbnN0IE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIHJlZ2lzdGVyUHJvdG9j
b2xDbGFzcygpOworCisgICAgZm9yIChjb25zdCBhdXRvJiBzY2hlbWUgOiBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzKQorICAgICAgICByZWdpc3RlclNj
aGVtZShzY2hlbWUpOworfQorCit1aW50NjRfdCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmFkZEN1
c3RvbVByb3RvY29sKEN1c3RvbVByb3RvY29sJiYgY3VzdG9tUHJvdG9jb2wpCit7CisgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9jdXN0b21Qcm90b2NvbE1hcE11dGV4KTsKKyAgICBhdXRvIGN1c3Rv
bVByb3RvY29sSUQgPSBnZW5lcmF0ZUN1c3RvbVByb3RvY29sSUQoKTsKKyAgICBtX2N1c3RvbVBy
b3RvY29sTWFwLmFkZChjdXN0b21Qcm90b2NvbElELCBXVEZNb3ZlKGN1c3RvbVByb3RvY29sKSk7
CisgICAgcmV0dXJuIGN1c3RvbVByb3RvY29sSUQ7Cit9CisKK3ZvaWQgQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyOjpyZW1vdmVDdXN0b21Qcm90b2NvbCh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElEKQor
eworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY3VzdG9tUHJvdG9jb2xNYXBNdXRleCk7CisgICAg
bV9jdXN0b21Qcm90b2NvbE1hcC5yZW1vdmUoY3VzdG9tUHJvdG9jb2xJRCk7Cit9CisKK3ZvaWQg
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpzdGFydExvYWRpbmcodWludDY0X3QgY3VzdG9tUHJvdG9j
b2xJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIG1f
Y2hpbGRQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6
U3RhcnRMb2FkaW5nKGN1c3RvbVByb3RvY29sSUQsIHJlcXVlc3QpKTsKK30KKwordm9pZCBDdXN0
b21Qcm90b2NvbE1hbmFnZXI6OnN0b3BMb2FkaW5nKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQp
Cit7CisgICAgbV9jaGlsZFByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5OjpTdG9wTG9hZGluZyhjdXN0b21Qcm90b2NvbElEKSwgMCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5oIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5o
CmluZGV4IDA0MGZjNGEzZDVhLi45NTkzN2JhMTAwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9DdXN0
b21Qcm90b2NvbE1hbmFnZXIuaApAQCAtMjMsMjYgKzIzLDI5IEBACiAgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBDdXN0b21Qcm90b2NvbE1hbmFnZXJf
aAotI2RlZmluZSBDdXN0b21Qcm90b2NvbE1hbmFnZXJfaAorI3ByYWdtYSBvbmNlCiAKLSNpbmNs
dWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50LmgiCi0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiBPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb247CiBPQkpDX0NMQVNTIFdLQ3Vz
dG9tUHJvdG9jb2w7Ci0jZWxzZQotI2luY2x1ZGUgIkN1c3RvbVByb3RvY29sTWFuYWdlckltcGwu
aCIKICNlbmRpZgogCisjaWYgVVNFKFNPVVApCisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5o
PgorCit0eXBlZGVmIHN0cnVjdCBfR0NhbmNlbGxhYmxlIEdDYW5jZWxsYWJsZTsKK3R5cGVkZWYg
c3RydWN0IF9HSW5wdXRTdHJlYW0gR0lucHV0U3RyZWFtOwordHlwZWRlZiBzdHJ1Y3QgX0dUYXNr
IEdUYXNrOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyBXZWJLaXRT
b3VwUmVxdWVzdEdlbmVyaWM7CisjZW5kaWYKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBEYXRh
UmVmZXJlbmNlOwpAQCAtNTksMzEgKzYyLDQzIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3Mg
Q2hpbGRQcm9jZXNzOwogc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwog
Ci1jbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXIgOiBwdWJsaWMgTmV0d29ya1Byb2Nlc3NTdXBw
bGVtZW50LCBwdWJsaWMgSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIg
eworY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIDogcHVibGljIE5ldHdvcmtQcm9jZXNzU3Vw
cGxlbWVudCwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDdXN0b21Qcm90b2NvbE1hbmFnZXIpOwogcHVibGljOgogICAgIGV4cGxpY2l0IEN1
c3RvbVByb3RvY29sTWFuYWdlcihDaGlsZFByb2Nlc3MqKTsKIAogICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBzdXBwbGVtZW50TmFtZSgpOwogCi0gICAgQ2hpbGRQcm9jZXNzKiBjaGlsZFByb2Nlc3Mo
KSBjb25zdCB7IHJldHVybiBtX2NoaWxkUHJvY2VzczsgfQotCiAgICAgdm9pZCByZWdpc3RlclNj
aGVtZShjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWUoY29uc3QgU3Ry
aW5nJik7CiAgICAgYm9vbCBzdXBwb3J0c1NjaGVtZShjb25zdCBTdHJpbmcmKTsKLSAgICAKKwog
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHZvaWQgYWRkQ3VzdG9tUHJvdG9jb2woV0tDdXN0b21Q
cm90b2NvbCAqKTsKLSAgICB2b2lkIHJlbW92ZUN1c3RvbVByb3RvY29sKFdLQ3VzdG9tUHJvdG9j
b2wgKik7Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICB2b2lkIHJlZ2lzdGVyUHJvdG9j
b2xDbGFzcyhOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICopOworICAgIHR5cGVkZWYgUmV0YWlu
UHRyPFdLQ3VzdG9tUHJvdG9jb2w+IEN1c3RvbVByb3RvY29sOwogI2VuZGlmCisjaWYgVVNFKFNP
VVApCisgICAgc3RydWN0IFdlYlNvdXBSZXF1ZXN0QXN5bmNEYXRhIHsKKyAgICAgICAgV2ViU291
cFJlcXVlc3RBc3luY0RhdGEoR1JlZlB0cjxHVGFzaz4mJiwgV2ViS2l0U291cFJlcXVlc3RHZW5l
cmljKik7CisgICAgICAgIH5XZWJTb3VwUmVxdWVzdEFzeW5jRGF0YSgpOworCisgICAgICAgIEdS
ZWZQdHI8R1Rhc2s+IHRhc2s7CisgICAgICAgIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyogcmVx
dWVzdDsKKyAgICAgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IGNhbmNlbGxhYmxlOworICAgICAg
ICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gc3RyZWFtOworICAgIH07CisgICAgdHlwZWRlZiBzdGQ6
OnVuaXF1ZV9wdHI8V2ViU291cFJlcXVlc3RBc3luY0RhdGE+IEN1c3RvbVByb3RvY29sOwogI2Vu
ZGlmCiAKLXByaXZhdGU6Ci0gICAgLy8gQ2hpbGRQcm9jZXNzU3VwcGxlbWVudAotICAgIHZvaWQg
aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uKikgb3ZlcnJpZGU7CisgICAgdWlu
dDY0X3QgYWRkQ3VzdG9tUHJvdG9jb2woQ3VzdG9tUHJvdG9jb2wmJik7CisgICAgdm9pZCByZW1v
dmVDdXN0b21Qcm90b2NvbCh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElEKTsKKyAgICB2b2lkIHN0
YXJ0TG9hZGluZyh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHN0b3BMb2FkaW5nKHVpbnQ2NF90IGN1c3RvbVByb3Rv
Y29sSUQpOwogCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShORVRXT1JLX1NFU1NJT04pCisg
ICAgdm9pZCByZWdpc3RlclByb3RvY29sQ2xhc3MoTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiop
OworI2VuZGlmCisKK3ByaXZhdGU6CiAgICAgLy8gTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50CiAg
ICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
Jikgb3ZlcnJpZGU7CiAKQEAgLTk2LDI2ICsxMTEsMjcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRp
ZEZpbmlzaExvYWRpbmcodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCk7CiAgICAgdm9pZCB3YXNS
ZWRpcmVjdGVkVG9SZXF1ZXN0KHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJl
ZGlyZWN0UmVzcG9uc2UpOwogCisgICAgdm9pZCByZWdpc3RlclByb3RvY29sQ2xhc3MoKTsKKwog
ICAgIENoaWxkUHJvY2VzcyogbV9jaGlsZFByb2Nlc3M7Ci0gICAgUmVmPFdvcmtRdWV1ZT4gbV9t
ZXNzYWdlUXVldWU7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIEN1c3RvbVByb3Rv
Y29sPiBDdXN0b21Qcm90b2NvbE1hcDsKKyAgICBDdXN0b21Qcm90b2NvbE1hcCBtX2N1c3RvbVBy
b3RvY29sTWFwOworICAgIExvY2sgbV9jdXN0b21Qcm90b2NvbE1hcE11dGV4OwogCiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFz
aD4gbV9yZWdpc3RlcmVkU2NoZW1lczsKICAgICBMb2NrIG1fcmVnaXN0ZXJlZFNjaGVtZXNNdXRl
eDsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgUmV0YWluUHRyPFdLQ3VzdG9tUHJv
dG9jb2w+PiBDdXN0b21Qcm90b2NvbE1hcDsKLSAgICBDdXN0b21Qcm90b2NvbE1hcCBtX2N1c3Rv
bVByb3RvY29sTWFwOwotICAgIExvY2sgbV9jdXN0b21Qcm90b2NvbE1hcE11dGV4OwotICAgIAog
ICAgIC8vIFdLQ3VzdG9tUHJvdG9jb2wgb2JqZWN0cyBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBt
X2N1c3RvbVByb3RvY29sTWFwIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KICAgICAvLyBXZSByZXR1
cm4gYSBSZXRhaW5QdHIgaGVyZSBiZWNhdXNlIGl0IGlzIHVuc2FmZSB0byByZXR1cm4gYSByYXcg
cG9pbnRlciBzaW5jZSB0aGUgb2JqZWN0IG1pZ2h0IGltbWVkaWF0ZWx5IGJlIGRlc3Ryb3llZCBm
cm9tIGEgZGlmZmVyZW50IHRocmVhZC4KICAgICBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbD4g
cHJvdG9jb2xGb3JJRCh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElEKTsKLSNlbHNlCi0gICAgLy8g
RklYTUU6IE1vdmUgbWFjIHNwZWNpZmljIGNvZGUgdG8gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1w
bC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbD4gbV9pbXBs
OworI2VuZGlmCisKKyNpZiBVU0UoU09VUCkKKyAgICBHUmVmUHRyPEdQdHJBcnJheT4gbV9yZWdp
c3RlcmVkU2NoZW1lczsKICNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNl
bmRpZiAvLyBDdXN0b21Qcm90b2NvbE1hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5h
Z2VySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2Nv
bHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZGQ4ZWM4YmM5YTEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdl
ckltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkN1
c3RvbVByb3RvY29sTWFuYWdlckltcGwuaCIKLQotI2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgot
I2luY2x1ZGUgIkN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRl
ICJEYXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0j
aW5jbHVkZSAiV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VFcnJvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYktpdFNvdXBSZXF1
ZXN0R2VuZXJpYy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIHVpbnQ2NF90IGdl
bmVyYXRlQ3VzdG9tUHJvdG9jb2xJRCgpCi17Ci0gICAgc3RhdGljIHVpbnQ2NF90IHVuaXF1ZUN1
c3RvbVByb3RvY29sSUQgPSAwOwotICAgIHJldHVybiArK3VuaXF1ZUN1c3RvbVByb3RvY29sSUQ7
Ci19Ci0KLXN0cnVjdCBXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YSB7Ci0gICAgV2ViU291cFJlcXVl
c3RBc3luY0RhdGEoR1Rhc2sqIHRhc2ssIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyogcmVxdWVz
dEdlbmVyaWMpCi0gICAgICAgIDogdGFzayh0YXNrKQotICAgICAgICAsIHJlcXVlc3QocmVxdWVz
dEdlbmVyaWMpCi0gICAgICAgICwgY2FuY2VsbGFibGUoZ190YXNrX2dldF9jYW5jZWxsYWJsZSh0
YXNrKSkKLSAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBzdHJ1Y3QgY29udGFpbnMgYSBudWxsIHJl
cXVlc3QsIGl0IGlzIGJlY2F1c2UgdGhlIHJlcXVlc3QgZmFpbGVkLgotICAgICAgICBnX29iamVj
dF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKHJlcXVlc3QpLCByZWludGVycHJldF9jYXN0PHZv
aWQqKj4oJnJlcXVlc3QpKTsKLSAgICB9Ci0KLSAgICB+V2ViU291cFJlcXVlc3RBc3luY0RhdGEo
KQotICAgIHsKLSAgICAgICAgaWYgKHJlcXVlc3QpCi0gICAgICAgICAgICBnX29iamVjdF9yZW1v
dmVfd2Vha19wb2ludGVyKEdfT0JKRUNUKHJlcXVlc3QpLCByZWludGVycHJldF9jYXN0PHZvaWQq
Kj4oJnJlcXVlc3QpKTsKLSAgICB9Ci0KLSAgICBib29sIHJlcXVlc3RGYWlsZWQoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGNhbmNlbGxhYmxlLmdl
dCgpKSB8fCAhcmVxdWVzdDsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPEdUYXNrPiByZWxlYXNlVGFz
aygpCi0gICAgewotICAgICAgICBHVGFzayogcmV0dXJuVmFsdWUgPSB0YXNrOwotICAgICAgICB0
YXNrID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGFkb3B0R1JlZihyZXR1cm5WYWx1ZSk7Ci0g
ICAgfQotCi0gICAgR1Rhc2sqIHRhc2s7Ci0gICAgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljKiBy
ZXF1ZXN0OwotICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJsZTsKLSAgICBHUmVm
UHRyPEdJbnB1dFN0cmVhbT4gc3RyZWFtOwotfTsKLQotQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1w
bDo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbChDaGlsZFByb2Nlc3MqIGNoaWxkUHJvY2VzcykK
LSAgICA6IG1fY2hpbGRQcm9jZXNzKGNoaWxkUHJvY2VzcykKLSAgICAsIG1fc2NoZW1lcyhhZG9w
dEdSZWYoZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5jKGdfZnJlZSkpKQotewotfQotCi1D
dXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsOjp+Q3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbCgpCi17
Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6cmVnaXN0ZXJTY2hlbWUoY29u
c3QgU3RyaW5nJiBzY2hlbWUpCi17Ci0gICAgaWYgKG1fc2NoZW1lcy0+bGVuKQotICAgICAgICBn
X3B0cl9hcnJheV9yZW1vdmVfaW5kZXhfZmFzdChtX3NjaGVtZXMuZ2V0KCksIG1fc2NoZW1lcy0+
bGVuIC0gMSk7Ci0gICAgZ19wdHJfYXJyYXlfYWRkKG1fc2NoZW1lcy5nZXQoKSwgZ19zdHJkdXAo
c2NoZW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBnX3B0cl9hcnJheV9hZGQobV9zY2hlbWVzLmdl
dCgpLCBudWxscHRyKTsKLQotICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gV2ViQ29yZTo6U291
cE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpLnNvdXBTZXNzaW9uKCk7Ci0gICAgU291
cFJlcXVlc3RDbGFzcyogZ2VuZXJpY1JlcXVlc3RDbGFzcyA9IHN0YXRpY19jYXN0PFNvdXBSZXF1
ZXN0Q2xhc3MqPihnX3R5cGVfY2xhc3NfcmVmKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9HRU5F
UklDKSk7Ci0gICAgZ2VuZXJpY1JlcXVlc3RDbGFzcy0+c2NoZW1lcyA9IGNvbnN0X2Nhc3Q8Y29u
c3QgY2hhcioqPihyZWludGVycHJldF9jYXN0PGNoYXIqKj4obV9zY2hlbWVzLT5wZGF0YSkpOwot
ICAgIHN0YXRpY19jYXN0PFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY0NsYXNzKj4oZ190eXBlX2Ns
YXNzX3JlZihXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQykpLT5jbGllbnQgPSB0aGlz
OwotICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVyZV9ieV90eXBlKHNlc3Npb24sIFdFQktJVF9U
WVBFX1NPVVBfUkVRVUVTVF9HRU5FUklDKTsKLX0KLQotYm9vbCBDdXN0b21Qcm90b2NvbE1hbmFn
ZXJJbXBsOjpzdXBwb3J0c1NjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKLXsKLSAgICBpZiAo
c2NoZW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU3RyaW5nIGNT
Y2hlbWUgPSBzY2hlbWUudXRmOCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nj
aGVtZXMtPmxlbjsgKytpKSB7Ci0gICAgICAgIGlmIChjU2NoZW1lID09IHN0YXRpY19jYXN0PGNo
YXIqPihnX3B0cl9hcnJheV9pbmRleChtX3NjaGVtZXMuZ2V0KCksIGkpKSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDdXN0
b21Qcm90b2NvbE1hbmFnZXJJbXBsOjpkaWRGYWlsV2l0aEVycm9yKHVpbnQ2NF90IGN1c3RvbVBy
b3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAgIFdl
YlNvdXBSZXF1ZXN0QXN5bmNEYXRhKiBkYXRhID0gbV9jdXN0b21Qcm90b2NvbE1hcC5nZXQoY3Vz
dG9tUHJvdG9jb2xJRCk7Ci0gICAgQVNTRVJUKGRhdGEpOwotCi0gICAgLy8gRWl0aGVyIHdlIGhh
dmVuJ3Qgc3RhcnRlZCByZWFkaW5nIHRoZSBzdHJlYW0geWV0LCBpbiB3aGljaCBjYXNlIHdlIG5l
ZWQgdG8gY29tcGxldGUgdGhlCi0gICAgLy8gdGFzayBmaXJzdCwgb3Igd2UgZmFpbGVkIHJlYWRp
bmcgaXQgYW5kIHRoZSB0YXNrIHdhcyBhbHJlYWR5IGNvbXBsZXRlZCBieSBkaWRMb2FkRGF0YSgp
LgotICAgIEFTU0VSVCghZGF0YS0+c3RyZWFtIHx8ICFkYXRhLT50YXNrKTsKLQotICAgIGlmICgh
ZGF0YS0+c3RyZWFtKSB7Ci0gICAgICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBkYXRhLT5yZWxl
YXNlVGFzaygpOwotICAgICAgICBBU1NFUlQodGFzay5nZXQoKSk7Ci0gICAgICAgIGdfdGFza19y
ZXR1cm5fbmV3X2Vycm9yKHRhc2suZ2V0KCksIGdfcXVhcmtfZnJvbV9zdHJpbmcoZXJyb3IuZG9t
YWluKCkudXRmOCgpLmRhdGEoKSksCi0gICAgICAgICAgICBlcnJvci5lcnJvckNvZGUoKSwgIiVz
IiwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbURpZEZhaWxXaXRoRXJyb3Io
V0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0oZGF0YS0+c3RyZWFtLmdldCgpKSwgZXJy
b3IpOwotCi0gICAgbV9jdXN0b21Qcm90b2NvbE1hcC5yZW1vdmUoY3VzdG9tUHJvdG9jb2xJRCk7
Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6ZGlkTG9hZERhdGEodWludDY0
X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhUmVmZXJl
bmNlKQotewotICAgIFdlYlNvdXBSZXF1ZXN0QXN5bmNEYXRhKiBkYXRhID0gbV9jdXN0b21Qcm90
b2NvbE1hcC5nZXQoY3VzdG9tUHJvdG9jb2xJRCk7Ci0gICAgLy8gVGhlIGRhdGEgbWlnaHQgaGF2
ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcmVxdWVzdCBtYXAgaWYgYSBwcmV2aW91cyBjaHVuayBm
YWlsZWQKLSAgICAvLyBhbmQgYSBuZXcgbWVzc2FnZSB3YXMgc2VudCBieSB0aGUgVUkgcHJvY2Vz
cyBiZWZvcmUgYmVpbmcgbm90aWZpZWQgYWJvdXQgdGhlIGZhaWx1cmUuCi0gICAgaWYgKCFkYXRh
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWRhdGEtPnN0cmVhbSkgewotICAgICAgICBH
UmVmUHRyPEdUYXNrPiB0YXNrID0gZGF0YS0+cmVsZWFzZVRhc2soKTsKLSAgICAgICAgQVNTRVJU
KHRhc2suZ2V0KCkpOwotCi0gICAgICAgIGdvZmZzZXQgc291cENvbnRlbnRMZW5ndGggPSBzb3Vw
X3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoKFNPVVBfUkVRVUVTVChnX3Rhc2tfZ2V0X3NvdXJj
ZV9vYmplY3QodGFzay5nZXQoKSkpKTsKLSAgICAgICAgdWludDY0X3QgY29udGVudExlbmd0aCA9
IHNvdXBDb250ZW50TGVuZ3RoID09IC0xID8gMCA6IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihzb3Vw
Q29udGVudExlbmd0aCk7Ci0gICAgICAgIGlmICghZGF0YVJlZmVyZW5jZS5zaXplKCkpIHsKLSAg
ICAgICAgICAgIC8vIEVtcHR5IHJlcGx5LCBqdXN0IGNyZWF0ZSBhbmQgZW1wdHkgR01lbW9yeUlu
cHV0U3RyZWFtLgotICAgICAgICAgICAgZGF0YS0+c3RyZWFtID0gZ19tZW1vcnlfaW5wdXRfc3Ry
ZWFtX25ldygpOwotICAgICAgICB9IGVsc2UgaWYgKGRhdGFSZWZlcmVuY2Uuc2l6ZSgpID09IGNv
bnRlbnRMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIFdlIGRvbid0IGV4cGVjdCBtb3JlIGRhdGEs
IHNvIHdlIGNhbiBqdXN0IGNyZWF0ZSBhIEdNZW1vcnlJbnB1dFN0cmVhbSB3aXRoIGFsbCB0aGUg
ZGF0YS4KLSAgICAgICAgICAgIGRhdGEtPnN0cmVhbSA9IGdfbWVtb3J5X2lucHV0X3N0cmVhbV9u
ZXdfZnJvbV9kYXRhKGdfbWVtZHVwKGRhdGFSZWZlcmVuY2UuZGF0YSgpLCBkYXRhUmVmZXJlbmNl
LnNpemUoKSksIGNvbnRlbnRMZW5ndGgsIGdfZnJlZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBXZSBleHBlY3QgbW9yZSBkYXRhIGNodW5rcyBmcm9tIHRoZSBVSSBwcm9jZXNz
LgotICAgICAgICAgICAgZGF0YS0+c3RyZWFtID0gd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVh
bU5ldyhjb250ZW50TGVuZ3RoKTsKLSAgICAgICAgICAgIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRT
dHJlYW1BZGREYXRhKFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKGRhdGEtPnN0cmVh
bS5nZXQoKSksIGRhdGFSZWZlcmVuY2UuZGF0YSgpLCBkYXRhUmVmZXJlbmNlLnNpemUoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZ190YXNrX3JldHVybl9wb2ludGVyKHRhc2suZ2V0KCksIGRhdGEt
PnN0cmVhbS5nZXQoKSwgZ19vYmplY3RfdW5yZWYpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKGRhdGEtPnJlcXVlc3RGYWlsZWQoKSkgewotICAgICAgICAvLyBSZXNvdXJjZVJl
cXVlc3QgZmFpbGVkIG9yIGl0IHdhcyBjYW5jZWxsZWQuIEl0IGRvZXNuJ3QgbWF0dGVyIGhlcmUg
dGhlIGVycm9yIG9yIGlmIGl0IHdhcyBjYW5jZWxsZWQsCi0gICAgICAgIC8vIGJlY2F1c2UgdGhh
dCdzIGFscmVhZHkgaGFuZGxlZCBieSB0aGUgcmVzb3VyY2UgaGFuZGxlIGNsaWVudCwgd2UganVz
dCB3YW50IHRvIG5vdGlmeSB0aGUgVUkgcHJvY2VzcwotICAgICAgICAvLyB0byBzdG9wIHJlYWRp
bmcgZGF0YSBmcm9tIHRoZSB1c2VyIGlucHV0IHN0cmVhbS4gSWYgVUkgcHJvY2VzcyBhbHJlYWR5
IHNlbnQgYWxsIHRoZSBkYXRhIHdlIHNpbXBseQotICAgICAgICAvLyBmaW5pc2ggc2lsZW50bHku
Ci0gICAgICAgIGlmICghd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKFdFQktJ
VF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKGRhdGEtPnN0cmVhbS5nZXQoKSkpKQotICAgICAg
ICAgICAgbV9jaGlsZFByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5OjpTdG9wTG9hZGluZyhjdXN0b21Qcm90b2NvbElEKSwgMCk7Ci0KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1BZGREYXRhKFdF
QktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKGRhdGEtPnN0cmVhbS5nZXQoKSksIGRhdGFS
ZWZlcmVuY2UuZGF0YSgpLCBkYXRhUmVmZXJlbmNlLnNpemUoKSk7Ci19Ci0KLXZvaWQgQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VySW1wbDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IGN1c3RvbVBy
b3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewot
ICAgIFdlYlNvdXBSZXF1ZXN0QXN5bmNEYXRhKiBkYXRhID0gbV9jdXN0b21Qcm90b2NvbE1hcC5n
ZXQoY3VzdG9tUHJvdG9jb2xJRCk7Ci0gICAgLy8gVGhlIGRhdGEgbWlnaHQgaGF2ZSBiZWVuIHJl
bW92ZWQgZnJvbSB0aGUgcmVxdWVzdCBtYXAgaWYgYW4gZXJyb3IgaGFwcGVuZWQgZXZlbiBiZWZv
cmUgdGhpcyBwb2ludC4KLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChkYXRhLT50YXNrKTsKLQotICAgIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyogcmVxdWVz
dCA9IFdFQktJVF9TT1VQX1JFUVVFU1RfR0VORVJJQyhnX3Rhc2tfZ2V0X3NvdXJjZV9vYmplY3Qo
ZGF0YS0+dGFzaykpOwotICAgIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NldENvbnRlbnRMZW5n
dGgocmVxdWVzdCwgcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkgPyByZXNwb25zZS5l
eHBlY3RlZENvbnRlbnRMZW5ndGgoKSA6IC0xKTsKLSAgICB3ZWJraXRTb3VwUmVxdWVzdEdlbmVy
aWNTZXRDb250ZW50VHlwZShyZXF1ZXN0LCAhcmVzcG9uc2UubWltZVR5cGUoKS5pc0VtcHR5KCkg
PyByZXNwb25zZS5taW1lVHlwZSgpLnV0ZjgoKS5kYXRhKCkgOiAwKTsKLX0KLQotdm9pZCBDdXN0
b21Qcm90b2NvbE1hbmFnZXJJbXBsOjpkaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IGN1c3RvbVBy
b3RvY29sSUQpCi17Ci0gICAgQVNTRVJUKG1fY3VzdG9tUHJvdG9jb2xNYXAuY29udGFpbnMoY3Vz
dG9tUHJvdG9jb2xJRCkpOwotICAgIG1fY3VzdG9tUHJvdG9jb2xNYXAucmVtb3ZlKGN1c3RvbVBy
b3RvY29sSUQpOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6OnN0YXJ0KEdU
YXNrKiB0YXNrKQotewotICAgIHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQgPSBnZW5lcmF0ZUN1
c3RvbVByb3RvY29sSUQoKTsKLSAgICBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJlcXVlc3Qg
PSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUMoZ190YXNrX2dldF9zb3VyY2Vfb2JqZWN0KHRh
c2spKTsKLSAgICBtX2N1c3RvbVByb3RvY29sTWFwLnNldChjdXN0b21Qcm90b2NvbElELCBzdGQ6
Om1ha2VfdW5pcXVlPFdlYlNvdXBSZXF1ZXN0QXN5bmNEYXRhPih0YXNrLCByZXF1ZXN0KSk7Ci0K
LSAgICBtX2NoaWxkUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHk6OlN0YXJ0TG9hZGluZyhjdXN0b21Qcm90b2NvbElELCAqd2Via2l0U291cFJlcXVlc3RH
ZW5lcmljR2V0UmVxdWVzdChyZXF1ZXN0KSksIDApOwotfQotCi1HSW5wdXRTdHJlYW0qIEN1c3Rv
bVByb3RvY29sTWFuYWdlckltcGw6OmZpbmlzaChHVGFzayogdGFzaywgR0Vycm9yKiogZXJyb3Ip
Ci17Ci0gICAgZ3BvaW50ZXIgaW5wdXRTdHJlYW0gPSBnX3Rhc2tfcHJvcGFnYXRlX3BvaW50ZXIo
dGFzaywgZXJyb3IpOwotICAgIHJldHVybiBpbnB1dFN0cmVhbSA/IEdfSU5QVVRfU1RSRUFNKGlu
cHV0U3RyZWFtKSA6IDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VySW1wbC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQ3Vz
dG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0NjMzYTMxOTg3YS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VySW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEN1c3RvbVByb3RvY29sTWFuYWdl
ckltcGxfaAotI2RlZmluZSBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsX2gKLQotI2luY2x1ZGUg
PFdlYkNvcmUvV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgRGF0YVJlZmVyZW5j
ZTsKLX0gLy8gbmFtZXNwYWNlIElQQwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBSZXNv
dXJjZUVycm9yOwotY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENoaWxkUHJvY2VzczsKLXN0cnVjdCBX
ZWJTb3VwUmVxdWVzdEFzeW5jRGF0YTsKLQotY2xhc3MgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1w
bCA6IHB1YmxpYyBXZWJDb3JlOjpXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNDbGllbnQgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEN1c3RvbVByb3RvY29sTWFuYWdlckltcGwpOwotcHVibGlj
OgotICAgIGV4cGxpY2l0IEN1c3RvbVByb3RvY29sTWFuYWdlckltcGwoQ2hpbGRQcm9jZXNzKik7
Ci0gICAgfkN1c3RvbVByb3RvY29sTWFuYWdlckltcGwoKTsKLQotICAgIHZvaWQgcmVnaXN0ZXJT
Y2hlbWUoY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBzdXBwb3J0c1NjaGVtZShjb25zdCBTdHJp
bmcmKTsKLQotICAgIHZvaWQgZGlkRmFpbFdpdGhFcnJvcih1aW50NjRfdCBjdXN0b21Qcm90b2Nv
bElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7Ci0gICAgdm9pZCBkaWRMb2FkRGF0
YSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsK
LSAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQpOwotCi1wcml2YXRlOgotICAgIHZvaWQgc3Rh
cnQoR1Rhc2sqKSBmaW5hbDsKLSAgICBHSW5wdXRTdHJlYW0qIGZpbmlzaChHVGFzayosIEdFcnJv
cioqKSBmaW5hbDsKLQotICAgIENoaWxkUHJvY2VzcyogbV9jaGlsZFByb2Nlc3M7Ci0gICAgR1Jl
ZlB0cjxHUHRyQXJyYXk+IG1fc2NoZW1lczsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBzdGQ6OnVu
aXF1ZV9wdHI8V2ViU291cFJlcXVlc3RBc3luY0RhdGE+PiBtX2N1c3RvbVByb3RvY29sTWFwOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBDdXN0b21Qcm90b2NvbE1h
bmFnZXJJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0N1
c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyU291cC5jcHAKaW5kZXggNzJmN2Y3MDhiOTkuLmM4NzUzNTE4MzYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9D
dXN0b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNw
cApAQCAtMjAsNDEgKzIwLDc3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyLmgiCiAKLSNpbmNsdWRlICJDaGlsZFByb2Nlc3MuaCIKLSNpbmNs
dWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsLmgiCiAjaW5jbHVkZSAiQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKKyNp
bmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKKyNp
bmNsdWRlICJXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Tb3VwTmV0d29ya1Nlc3Npb24u
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5oPgorI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLWNvbnN0IGNoYXIqIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6
c3VwcGxlbWVudE5hbWUoKQotewotICAgIHJldHVybiAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIjsK
LX0KIAotQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpDdXN0b21Qcm90b2NvbE1hbmFnZXIoQ2hpbGRQ
cm9jZXNzKiBjaGlsZFByb2Nlc3MpCi0gICAgOiBtX2NoaWxkUHJvY2VzcyhjaGlsZFByb2Nlc3Mp
Ci0gICAgLCBtX21lc3NhZ2VRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktp
dC5DdXN0b21Qcm90b2NvbE1hbmFnZXIiKSkKLSAgICAsIG1faW1wbChzdGQ6Om1ha2VfdW5pcXVl
PEN1c3RvbVByb3RvY29sTWFuYWdlckltcGw+KGNoaWxkUHJvY2VzcykpCitDdXN0b21Qcm90b2Nv
bE1hbmFnZXI6OldlYlNvdXBSZXF1ZXN0QXN5bmNEYXRhOjpXZWJTb3VwUmVxdWVzdEFzeW5jRGF0
YShHUmVmUHRyPEdUYXNrPiYmIHJlcXVlc3RUYXNrLCBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMq
IHJlcXVlc3RHZW5lcmljKQorICAgIDogdGFzayhXVEZNb3ZlKHJlcXVlc3RUYXNrKSkKKyAgICAs
IHJlcXVlc3QocmVxdWVzdEdlbmVyaWMpCisgICAgLCBjYW5jZWxsYWJsZShnX3Rhc2tfZ2V0X2Nh
bmNlbGxhYmxlKHRhc2suZ2V0KCkpKQogeworICAgIC8vIElmIHRoZSBzdHJ1Y3QgY29udGFpbnMg
YSBudWxsIHJlcXVlc3QsIGl0IGlzIGJlY2F1c2UgdGhlIHJlcXVlc3QgZmFpbGVkLgorICAgIGdf
b2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QocmVxdWVzdCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPigmcmVxdWVzdCkpOwogfQogCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6
aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKQorQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyOjpXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YTo6fldlYlNvdXBSZXF1ZXN0
QXN5bmNEYXRhKCkKIHsKLSAgICBjb25uZWN0aW9uLT5hZGRXb3JrUXVldWVNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX21lc3NhZ2VRdWV1ZS5nZXQoKSwgdGhpcyk7CisgICAgaWYgKHJlcXVlc3QpCisgICAgICAg
IGdfb2JqZWN0X3JlbW92ZV93ZWFrX3BvaW50ZXIoR19PQkpFQ1QocmVxdWVzdCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCoqPigmcmVxdWVzdCkpOwogfQogCi12b2lkIEN1c3RvbVByb3RvY29sTWFu
YWdlcjo6aW5pdGlhbGl6ZShjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYg
cGFyYW1ldGVycykKK2NsYXNzIEN1c3RvbVByb3RvY29sUmVxdWVzdENsaWVudCBmaW5hbCA6IHB1
YmxpYyBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNDbGllbnQgeworcHVibGljOgorICAgIHN0YXRp
YyBDdXN0b21Qcm90b2NvbFJlcXVlc3RDbGllbnQmIHNpbmdsZXRvbigpCisgICAgeworICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q3VzdG9tUHJvdG9jb2xSZXF1ZXN0Q2xpZW50PiBjbGll
bnQ7CisgICAgICAgIHJldHVybiBjbGllbnQ7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQg
c3RhcnRSZXF1ZXN0KEdSZWZQdHI8R1Rhc2s+JiYgdGFzaykgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyogcmVxdWVzdCA9IFdFQktJVF9TT1VQX1JFUVVF
U1RfR0VORVJJQyhnX3Rhc2tfZ2V0X3NvdXJjZV9vYmplY3QodGFzay5nZXQoKSkpOworICAgICAg
ICBhdXRvKiBjdXN0b21Qcm90b2NvbE1hbmFnZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9u
KCkuc3VwcGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCk7CisgICAgICAgIGlmICghY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8g
Y3VzdG9tUHJvdG9jb2xJRCA9IGN1c3RvbVByb3RvY29sTWFuYWdlci0+YWRkQ3VzdG9tUHJvdG9j
b2woc3RkOjptYWtlX3VuaXF1ZTxDdXN0b21Qcm90b2NvbE1hbmFnZXI6OldlYlNvdXBSZXF1ZXN0
QXN5bmNEYXRhPihXVEZNb3ZlKHRhc2spLCByZXF1ZXN0KSk7CisgICAgICAgIGN1c3RvbVByb3Rv
Y29sTWFuYWdlci0+c3RhcnRMb2FkaW5nKGN1c3RvbVByb3RvY29sSUQsIHdlYmtpdFNvdXBSZXF1
ZXN0R2VuZXJpY0dldFJlcXVlc3QocmVxdWVzdCkpOworICAgIH0KK307CisKK3ZvaWQgQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyOjpyZWdpc3RlclByb3RvY29sQ2xhc3MoKQogewotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVBy
b3RvY29scy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVnaXN0ZXJTY2hlbWUocGFyYW1ldGVycy51
cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29sc1tpXSk7CisgICAgc3RhdGljX2Nh
c3Q8V2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xhc3MqPihnX3R5cGVfY2xhc3NfcmVmKFdFQktJ
VF9UWVBFX1NPVVBfUkVRVUVTVF9HRU5FUklDKSktPmNsaWVudCA9ICZDdXN0b21Qcm90b2NvbFJl
cXVlc3RDbGllbnQ6OnNpbmdsZXRvbigpOwogfQogCiB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdl
cjo6cmVnaXN0ZXJTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiB7Ci0gICAgbV9pbXBsLT5y
ZWdpc3RlclNjaGVtZShzY2hlbWUpOworICAgIGlmICghbV9yZWdpc3RlcmVkU2NoZW1lcykKKyAg
ICAgICAgbV9yZWdpc3RlcmVkU2NoZW1lcyA9IGFkb3B0R1JlZihnX3B0cl9hcnJheV9uZXdfd2l0
aF9mcmVlX2Z1bmMoZ19mcmVlKSk7CisKKyAgICBpZiAobV9yZWdpc3RlcmVkU2NoZW1lcy0+bGVu
KQorICAgICAgICBnX3B0cl9hcnJheV9yZW1vdmVfaW5kZXhfZmFzdChtX3JlZ2lzdGVyZWRTY2hl
bWVzLmdldCgpLCBtX3JlZ2lzdGVyZWRTY2hlbWVzLT5sZW4gLSAxKTsKKyAgICBnX3B0cl9hcnJh
eV9hZGQobV9yZWdpc3RlcmVkU2NoZW1lcy5nZXQoKSwgZ19zdHJkdXAoc2NoZW1lLnV0ZjgoKS5k
YXRhKCkpKTsKKyAgICBnX3B0cl9hcnJheV9hZGQobV9yZWdpc3RlcmVkU2NoZW1lcy5nZXQoKSwg
bnVsbHB0cik7CisKKyAgICBhdXRvKiBnZW5lcmljUmVxdWVzdENsYXNzID0gc3RhdGljX2Nhc3Q8
U291cFJlcXVlc3RDbGFzcyo+KGdfdHlwZV9jbGFzc19yZWYoV0VCS0lUX1RZUEVfU09VUF9SRVFV
RVNUX0dFTkVSSUMpKTsKKyAgICBnZW5lcmljUmVxdWVzdENsYXNzLT5zY2hlbWVzID0gY29uc3Rf
Y2FzdDxjb25zdCBjaGFyKio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihtX3JlZ2lzdGVyZWRT
Y2hlbWVzLT5wZGF0YSkpOworICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVyZV9ieV90eXBlKFNv
dXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5zb3VwU2Vzc2lvbigpLCBXRUJLSVRf
VFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQyk7CiB9CiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5h
Z2VyOjp1bnJlZ2lzdGVyU2NoZW1lKGNvbnN0IFN0cmluZyYpCkBAIC02NCwzMCArMTAwLDEwMiBA
QCB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6dW5yZWdpc3RlclNjaGVtZShjb25zdCBTdHJp
bmcmKQogCiBib29sIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6c3VwcG9ydHNTY2hlbWUoY29uc3Qg
U3RyaW5nJiBzY2hlbWUpCiB7Ci0gICAgcmV0dXJuIG1faW1wbC0+c3VwcG9ydHNTY2hlbWUoc2No
ZW1lKTsKKyAgICBpZiAoc2NoZW1lLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBDU3RyaW5nIGNTY2hlbWUgPSBzY2hlbWUudXRmOCgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3JlZ2lzdGVyZWRTY2hlbWVzLT5sZW47ICsraSkgeworICAgICAgICBpZiAo
Y1NjaGVtZSA9PSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19wdHJfYXJyYXlfaW5kZXgobV9yZWdpc3Rl
cmVkU2NoZW1lcy5nZXQoKSwgaSkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6ZGlk
RmFpbFdpdGhFcnJvcih1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZUVycm9yJiBlcnJvcikKK3ZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpkaWRGYWls
V2l0aEVycm9yKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yKQogewotICAgIG1faW1wbC0+ZGlkRmFpbFdpdGhFcnJvcihjdXN0b21Qcm90b2NvbElE
LCBlcnJvcik7CisgICAgYXV0byogZGF0YSA9IG1fY3VzdG9tUHJvdG9jb2xNYXAuZ2V0KGN1c3Rv
bVByb3RvY29sSUQpOworICAgIEFTU0VSVChkYXRhKTsKKworICAgIC8vIEVpdGhlciB3ZSBoYXZl
bid0IHN0YXJ0ZWQgcmVhZGluZyB0aGUgc3RyZWFtIHlldCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVk
IHRvIGNvbXBsZXRlIHRoZQorICAgIC8vIHRhc2sgZmlyc3QsIG9yIHdlIGZhaWxlZCByZWFkaW5n
IGl0IGFuZCB0aGUgdGFzayB3YXMgYWxyZWFkeSBjb21wbGV0ZWQgYnkgZGlkTG9hZERhdGEoKS4K
KyAgICBBU1NFUlQoIWRhdGEtPnN0cmVhbSB8fCAhZGF0YS0+dGFzayk7CisKKyAgICBpZiAoIWRh
dGEtPnN0cmVhbSkgeworICAgICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gc3RkOjpleGNoYW5n
ZShkYXRhLT50YXNrLCBudWxscHRyKTsKKyAgICAgICAgQVNTRVJUKHRhc2suZ2V0KCkpOworICAg
ICAgICBnX3Rhc2tfcmV0dXJuX25ld19lcnJvcih0YXNrLmdldCgpLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKGVycm9yLmRvbWFpbigpLnV0ZjgoKS5kYXRhKCkpLAorICAgICAgICAgICAgZXJyb3IuZXJy
b3JDb2RlKCksICIlcyIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgfSBlbHNlCisgICAgICAgIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1EaWRG
YWlsV2l0aEVycm9yKFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKGRhdGEtPnN0cmVh
bS5nZXQoKSksIGVycm9yKTsKKworICAgIHJlbW92ZUN1c3RvbVByb3RvY29sKGN1c3RvbVByb3Rv
Y29sSUQpOwogfQogCiB2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6ZGlkTG9hZERhdGEodWlu
dDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhUmVm
ZXJlbmNlKQogewotICAgIG1faW1wbC0+ZGlkTG9hZERhdGEoY3VzdG9tUHJvdG9jb2xJRCwgZGF0
YVJlZmVyZW5jZSk7CisgICAgYXV0byogZGF0YSA9IG1fY3VzdG9tUHJvdG9jb2xNYXAuZ2V0KGN1
c3RvbVByb3RvY29sSUQpOworICAgIC8vIFRoZSBkYXRhIG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVk
IGZyb20gdGhlIHJlcXVlc3QgbWFwIGlmIGEgcHJldmlvdXMgY2h1bmsgZmFpbGVkCisgICAgLy8g
YW5kIGEgbmV3IG1lc3NhZ2Ugd2FzIHNlbnQgYnkgdGhlIFVJIHByb2Nlc3MgYmVmb3JlIGJlaW5n
IG5vdGlmaWVkIGFib3V0IHRoZSBmYWlsdXJlLgorICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFkYXRhLT5zdHJlYW0pIHsKKyAgICAgICAgR1JlZlB0cjxHVGFzaz4g
dGFzayA9IHN0ZDo6ZXhjaGFuZ2UoZGF0YS0+dGFzaywgbnVsbHB0cik7CisgICAgICAgIEFTU0VS
VCh0YXNrLmdldCgpKTsKKworICAgICAgICBnb2Zmc2V0IHNvdXBDb250ZW50TGVuZ3RoID0gc291
cF9yZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0aChTT1VQX1JFUVVFU1QoZ190YXNrX2dldF9zb3Vy
Y2Vfb2JqZWN0KHRhc2suZ2V0KCkpKSk7CisgICAgICAgIHVpbnQ2NF90IGNvbnRlbnRMZW5ndGgg
PSBzb3VwQ29udGVudExlbmd0aCA9PSAtMSA/IDAgOiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc291
cENvbnRlbnRMZW5ndGgpOworICAgICAgICBpZiAoIWRhdGFSZWZlcmVuY2Uuc2l6ZSgpKSB7Cisg
ICAgICAgICAgICAvLyBFbXB0eSByZXBseSwganVzdCBjcmVhdGUgYW5kIGVtcHR5IEdNZW1vcnlJ
bnB1dFN0cmVhbS4KKyAgICAgICAgICAgIGRhdGEtPnN0cmVhbSA9IGdfbWVtb3J5X2lucHV0X3N0
cmVhbV9uZXcoKTsKKyAgICAgICAgfSBlbHNlIGlmIChkYXRhUmVmZXJlbmNlLnNpemUoKSA9PSBj
b250ZW50TGVuZ3RoKSB7CisgICAgICAgICAgICAvLyBXZSBkb24ndCBleHBlY3QgbW9yZSBkYXRh
LCBzbyB3ZSBjYW4ganVzdCBjcmVhdGUgYSBHTWVtb3J5SW5wdXRTdHJlYW0gd2l0aCBhbGwgdGhl
IGRhdGEuCisgICAgICAgICAgICBkYXRhLT5zdHJlYW0gPSBnX21lbW9yeV9pbnB1dF9zdHJlYW1f
bmV3X2Zyb21fZGF0YShnX21lbWR1cChkYXRhUmVmZXJlbmNlLmRhdGEoKSwgZGF0YVJlZmVyZW5j
ZS5zaXplKCkpLCBjb250ZW50TGVuZ3RoLCBnX2ZyZWUpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gV2UgZXhwZWN0IG1vcmUgZGF0YSBjaHVua3MgZnJvbSB0aGUgVUkgcHJvY2Vz
cy4KKyAgICAgICAgICAgIGRhdGEtPnN0cmVhbSA9IHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW1OZXcoY29udGVudExlbmd0aCk7CisgICAgICAgICAgICB3ZWJraXRTb3VwUmVxdWVzdElucHV0
U3RyZWFtQWRkRGF0YShXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTShkYXRhLT5zdHJl
YW0uZ2V0KCkpLCBkYXRhUmVmZXJlbmNlLmRhdGEoKSwgZGF0YVJlZmVyZW5jZS5zaXplKCkpOwor
ICAgICAgICB9CisgICAgICAgIGdfdGFza19yZXR1cm5fcG9pbnRlcih0YXNrLmdldCgpLCBkYXRh
LT5zdHJlYW0uZ2V0KCksIGdfb2JqZWN0X3VucmVmKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChkYXRhLT5jYW5jZWxsYWJsZS5n
ZXQoKSkgfHwgIWRhdGEtPnJlcXVlc3QpIHsKKyAgICAgICAgLy8gUmVzb3VyY2VSZXF1ZXN0IGZh
aWxlZCBvciBpdCB3YXMgY2FuY2VsbGVkLiBJdCBkb2Vzbid0IG1hdHRlciBoZXJlIHRoZSBlcnJv
ciBvciBpZiBpdCB3YXMgY2FuY2VsbGVkLAorICAgICAgICAvLyBiZWNhdXNlIHRoYXQncyBhbHJl
YWR5IGhhbmRsZWQgYnkgdGhlIHJlc291cmNlIGhhbmRsZSBjbGllbnQsIHdlIGp1c3Qgd2FudCB0
byBub3RpZnkgdGhlIFVJIHByb2Nlc3MKKyAgICAgICAgLy8gdG8gc3RvcCByZWFkaW5nIGRhdGEg
ZnJvbSB0aGUgdXNlciBpbnB1dCBzdHJlYW0uIElmIFVJIHByb2Nlc3MgYWxyZWFkeSBzZW50IGFs
bCB0aGUgZGF0YSB3ZSBzaW1wbHkKKyAgICAgICAgLy8gZmluaXNoIHNpbGVudGx5LgorICAgICAg
ICBpZiAoIXdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5pc2hlZChXRUJLSVRfU09VUF9S
RVFVRVNUX0lOUFVUX1NUUkVBTShkYXRhLT5zdHJlYW0uZ2V0KCkpKSkKKyAgICAgICAgICAgIHN0
b3BMb2FkaW5nKGN1c3RvbVByb3RvY29sSUQpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQWRkRGF0YShXRUJLSVRfU09VUF9SRVFV
RVNUX0lOUFVUX1NUUkVBTShkYXRhLT5zdHJlYW0uZ2V0KCkpLCBkYXRhUmVmZXJlbmNlLmRhdGEo
KSwgZGF0YVJlZmVyZW5jZS5zaXplKCkpOwogfQogCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCB1aW50MzJfdCkKK3ZvaWQgQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3QgY3VzdG9tUHJvdG9j
b2xJRCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIHVpbnQzMl90KQogewotICAg
IG1faW1wbC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGN1c3RvbVByb3RvY29sSUQsIHJlc3BvbnNlKTsK
KyAgICBhdXRvKiBkYXRhID0gbV9jdXN0b21Qcm90b2NvbE1hcC5nZXQoY3VzdG9tUHJvdG9jb2xJ
RCk7CisgICAgLy8gVGhlIGRhdGEgbWlnaHQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcmVx
dWVzdCBtYXAgaWYgYW4gZXJyb3IgaGFwcGVuZWQgZXZlbiBiZWZvcmUgdGhpcyBwb2ludC4KKyAg
ICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChkYXRhLT50YXNrKTsK
KworICAgIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyogcmVxdWVzdCA9IFdFQktJVF9TT1VQX1JF
UVVFU1RfR0VORVJJQyhnX3Rhc2tfZ2V0X3NvdXJjZV9vYmplY3QoZGF0YS0+dGFzay5nZXQoKSkp
OworICAgIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NldENvbnRlbnRMZW5ndGgocmVxdWVzdCwg
cmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkgPyByZXNwb25zZS5leHBlY3RlZENvbnRl
bnRMZW5ndGgoKSA6IC0xKTsKKyAgICB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZXRDb250ZW50
VHlwZShyZXF1ZXN0LCAhcmVzcG9uc2UubWltZVR5cGUoKS5pc0VtcHR5KCkgPyByZXNwb25zZS5t
aW1lVHlwZSgpLnV0ZjgoKS5kYXRhKCkgOiAwKTsKIH0KIAogdm9pZCBDdXN0b21Qcm90b2NvbE1h
bmFnZXI6OmRpZEZpbmlzaExvYWRpbmcodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCkKIHsKLSAg
ICBtX2ltcGwtPmRpZEZpbmlzaExvYWRpbmcoY3VzdG9tUHJvdG9jb2xJRCk7CisgICAgQVNTRVJU
KG1fY3VzdG9tUHJvdG9jb2xNYXAuY29udGFpbnMoY3VzdG9tUHJvdG9jb2xJRCkpOworICAgIHJl
bW92ZUN1c3RvbVByb3RvY29sKGN1c3RvbVByb3RvY29sSUQpOwogfQogCi12b2lkIEN1c3RvbVBy
b3RvY29sTWFuYWdlcjo6d2FzUmVkaXJlY3RlZFRvUmVxdWVzdCh1aW50NjRfdCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYp
Cit2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6d2FzUmVkaXJlY3RlZFRvUmVxdWVzdCh1aW50
NjRfdCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXgg
OTMyZTkxMWIxZmYuLmU3NDg1NDU1MDZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAt
MSw3ICsxLDYgQEAKIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIERhdGFiYXNlUHJv
Y2Vzcy9lZmwvRGF0YWJhc2VQcm9jZXNzTWFpbkVmbC5jcHAKIAotICAgIE5ldHdvcmtQcm9jZXNz
L0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlckltcGwuY3BwCiAgICAg
TmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
U291cC5jcHAKIAogICAgIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9lZmwvRG93bmxvYWRTb3Vw
RXJyb3JzRWZsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21h
a2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA0ODM4NDc4MzE0OS4u
ODdhNTU5YTgxZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0yOCw3ICsyOCw2IEBA
IHNldChXZWJLaXQyX1VTRV9QUkVGSVhfSEVBREVSIE9OKQogbGlzdChBUFBFTkQgV2ViS2l0Ml9T
T1VSQ0VTCiAgICAgRGF0YWJhc2VQcm9jZXNzL2d0ay9EYXRhYmFzZVByb2Nlc3NNYWluR3RrLmNw
cAogCi0gICAgTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VySW1wbC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291
cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNwcAogCiAgICAgTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL2d0ay9Eb3dubG9hZFNvdXBFcnJvcnNHdGsuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzY0ZmNkNmFiNTguLjM3
MzY4OTRlOTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xMDkwLDYgKzEwOTAsNyBAQAogCQk1QzE0MjcxMTFDMjNGODlFMDBE
NDExODMgLyogRG93bmxvYWRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1QzE0MjcwRDFDMjNGODg1MDBENDExODMgLyogRG93bmxvYWRJT1MubW0g
Ki87IH07CiAJCTVDMTQyNzEyMUMyM0Y4OUUwMEQ0MTE4MyAvKiBEb3dubG9hZE1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQyNzBGMUMyM0Y4
OTkwMEQ0MTE4MyAvKiBEb3dubG9hZE1hYy5tbSAqLzsgfTsKIAkJNUMxNDI3MTMxQzIzRjg5RTAw
RDQxMTgzIC8qIERvd25sb2FkQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1QzE0MjcwOTFDMjNGODY5MDBENDExODMgLyogRG93bmxvYWRDb2Nv
YS5tbSAqLzsgfTsKKwkJNUMxNDI3MTgxQzIzRjhCNzAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29s
TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1QzE0MjcxNDFDMjNGOEIwMDBENDExODMgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcCAq
LzsgfTsKIAkJNUMxNDI3MTgxQzIzRjhCNzAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29sTWFuYWdl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMxNDI3
MTQxQzIzRjhCMDAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29sTWFuYWdlci5oICovOyB9OwogCQk1
QzE0MjcxRDFDMjNGOENGMDBENDExODMgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzE0MjcxQjFD
MjNGOENDMDBENDExODMgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0gKi87IH07CiAJ
CTVDMjBDQjlEMUJCMERDRkEwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMyMENCOUIxQkIwRENE
MjAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EubW0gKi87IH07CkBAIC0zMjI0LDYgKzMy
MjUsNyBAQAogCQk1QzE0MjcwOTFDMjNGODY5MDBENDExODMgLyogRG93bmxvYWRDb2NvYS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IERvd25sb2FkQ29jb2EubW07
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvY29jb2EvRG93bmxvYWRDb2NvYS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMxNDI3MEQxQzIzRjg4NTAwRDQxMTgzIC8q
IERvd25sb2FkSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
RG93bmxvYWRJT1MubW07IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvaW9zL0Rvd25s
b2FkSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzE0MjcwRjFDMjNGODk5
MDBENDExODMgLyogRG93bmxvYWRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBEb3dubG9hZE1hYy5tbTsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fk
cy9tYWMvRG93bmxvYWRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDMTQy
NzE0MUMyM0Y4QjAwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcDsg
cGF0aCA9IE5ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFn
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzE0MjcxNDFDMjNGOEIwMDBE
NDExODMgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEN1c3RvbVByb3RvY29sTWFuYWdlci5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
Q3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1QzE0MjcxNTFDMjNGOEIwMDBENDExODMgLyogQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEN1c3RvbVByb3RvY29s
TWFuYWdlci5tZXNzYWdlcy5pbjsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29s
cy9DdXN0b21Qcm90b2NvbE1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTVDMTQyNzFCMUMyM0Y4Q0MwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEN1c3Rv
bVByb3RvY29sTWFuYWdlckNvY29hLm1tOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJv
dG9jb2xzL0NvY29hL0N1c3RvbVByb3RvY29sTWFuYWdlckNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTkyMiw2ICs1OTI0LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCiAJCQkJNUMxNDI3MUExQzIzRjhCRjAwRDQxMTgzIC8qIENvY29hICov
LAorCQkJCTVDMTQyNzE0MUMyM0Y4QjAwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXIu
Y3BwICovLAogCQkJCTVDMTQyNzE0MUMyM0Y4QjAwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1h
bmFnZXIuaCAqLywKIAkJCQk1QzE0MjcxNTFDMjNGOEIwMDBENDExODMgLyogQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyLm1lc3NhZ2VzLmluICovLAogCQkJKTsKQEAgLTkyODYsNiArOTI4OSw3IEBACiAJ
CQkJNTEwNkQ3QzIxOEJEQkU3MzAwMEFCMTY2IC8qIENvbnRleHRNZW51Q29udGV4dERhdGEuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDMzgzMTAxNzIxMjQ0MDAwOEEyRkMzIC8qIENvb2tpZVN0
b3JhZ2VTaGltLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjg3OEI2MTYxMzM0MjhEQzAwNjg4OEU5
IC8qIENvcnJlY3Rpb25QYW5lbC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTVDMTQyNzFEMUMyM0Y4
Q0YwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNUMxNDI3MUQxQzIzRjhDRjAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29sTWFuYWdlckNvY29h
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk4NEY1ODgxNjRCQTA5NTAwNEJDMEM2IC8qIEN1c3Rv
bVByb3RvY29sTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQky
OUFEMzA5NjE2NEI0QzkzMDA3MkRFQTkgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNYWMu
bW0gaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298119</attachid>
            <date>2017-01-05 12:00:13 -0800</date>
            <delta_ts>2017-01-05 13:28:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165082-20170105115845.patch</filename>
            <type>text/plain</type>
            <size>51566</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMDM2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE3LTAxLTA1ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbU09VUF0gTmV0
d29yayBwcm9jZXNzIGNyYXNoIGluIFdlYktpdDo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6
ZGlkRmFpbFdpdGhFcnJvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1MDgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4K
KworICAgICAgICBTaW1wbGlmaWVkIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY0NsaWVudC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMu
Y3BwOgorICAgICAgICAod2Via2l0U291cFJlcXVlc3RHZW5lcmljU2VuZEFzeW5jKToKKyAgICAg
ICAgKHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NlbmRGaW5pc2gpOgorICAgICAgICAod2Via2l0
U291cFJlcXVlc3RHZW5lcmljR2V0UmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5oOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNDbGllbnQuaDoKKwogMjAxNy0wMS0w
NSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEZvcm0gdmFsaWRh
dGlvbjogQWxpZ24gZW1haWwgdmFsaWRhdGlvbiB3aXRoIHRoZSBsYXRlc3QgSFRNTCBzcGVjaWZp
Y2F0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvV2ViS2l0
U291cFJlcXVlc3RHZW5lcmljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLmNwcAkocmV2aXNpb24g
MjEwMzYyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1dlYktpdFNv
dXBSZXF1ZXN0R2VuZXJpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE1ICs1MCwxNCBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZW5kCiB7CiAgICAgV2ViS2l0U291
cFJlcXVlc3RHZW5lcmljQ2xpZW50KiBjbGllbnQgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVS
SUNfR0VUX0NMQVNTKHJlcXVlc3QpLT5jbGllbnQ7CiAgICAgQVNTRVJUKGNsaWVudCk7Ci0gICAg
Y2xpZW50LT5zdGFydChnX3Rhc2tfbmV3KHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywg
dXNlckRhdGEpKTsKKyAgICBjbGllbnQtPnN0YXJ0UmVxdWVzdChhZG9wdEdSZWYoZ190YXNrX25l
dyhyZXF1ZXN0LCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSkpOwogfQogCiBzdGF0
aWMgR0lucHV0U3RyZWFtKiB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZW5kRmluaXNoKFNvdXBS
ZXF1ZXN0KiByZXF1ZXN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCiB7
CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ190YXNrX2lzX3ZhbGlkKHJlc3VsdCwgcmVxdWVz
dCksIG51bGxwdHIpOwotICAgIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY0NsaWVudCogY2xpZW50
ID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDX0dFVF9DTEFTUyhyZXF1ZXN0KS0+Y2xpZW50
OwotICAgIEFTU0VSVChjbGllbnQpOwotICAgIHJldHVybiBjbGllbnQtPmZpbmlzaChHX1RBU0so
cmVzdWx0KSwgZXJyb3IpOworICAgIGF1dG8qIGlucHV0U3RyZWFtID0gZ190YXNrX3Byb3BhZ2F0
ZV9wb2ludGVyKEdfVEFTSyhyZXN1bHQpLCBlcnJvcik7CisgICAgcmV0dXJuIGlucHV0U3RyZWFt
ID8gR19JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0pIDogbnVsbHB0cjsKIH0KIAogc3RhdGljIGdv
ZmZzZXQgd2Via2l0U291cFJlcXVlc3RHZW5lcmljR2V0Q29udGVudExlbmd0aChTb3VwUmVxdWVz
dCogcmVxdWVzdCkKQEAgLTEwMCw3ICs5OSw3IEBAIHZvaWQgd2Via2l0U291cFJlcXVlc3RHZW5l
cmljU2V0UmVxdWVzdCgKICAgICByZXF1ZXN0LT5wcml2LT5yZXNvdXJjZVJlcXVlc3QgPSByZXNv
dXJjZVJlcXVlc3Q7CiB9CiAKLWNvbnN0IFJlc291cmNlUmVxdWVzdCogd2Via2l0U291cFJlcXVl
c3RHZW5lcmljR2V0UmVxdWVzdChXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJlcXVlc3QpCitj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY0dldFJlcXVlc3Qo
V2ViS2l0U291cFJlcXVlc3RHZW5lcmljKiByZXF1ZXN0KQogewotICAgIHJldHVybiAmcmVxdWVz
dC0+cHJpdi0+cmVzb3VyY2VSZXF1ZXN0OworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5yZXNv
dXJjZVJlcXVlc3Q7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5oCShyZXZp
c2lvbiAyMTAzNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvV2Vi
S2l0U291cFJlcXVlc3RHZW5lcmljLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAg
R1R5cGUgd2Via2l0X3NvdXBfcmVxdWVzdF9nZW5lcmljX2dldF90eQogdm9pZCB3ZWJraXRTb3Vw
UmVxdWVzdEdlbmVyaWNTZXRDb250ZW50TGVuZ3RoKFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyos
IGdvZmZzZXQgY29udGVudExlbmd0aCk7CiB2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1Nl
dENvbnRlbnRUeXBlKFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyosIGNvbnN0IGNoYXIqIG1pbWVU
eXBlKTsKIHZvaWQgd2Via2l0U291cFJlcXVlc3RHZW5lcmljU2V0UmVxdWVzdChXZWJLaXRTb3Vw
UmVxdWVzdEdlbmVyaWMqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKLWNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCogd2Via2l0U291cFJlcXVlc3RHZW5lcmljR2V0UmVx
dWVzdChXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqKTsKK2NvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgd2Via2l0U291cFJlcXVlc3RHZW5lcmljR2V0UmVxdWVzdChXZWJLaXRTb3VwUmVx
dWVzdEdlbmVyaWMqKTsKIAogR19FTkRfREVDTFMKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY0NsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9XZWJLaXRTb3Vw
UmVxdWVzdEdlbmVyaWNDbGllbnQuaAkocmV2aXNpb24gMjEwMzYyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY0NsaWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNywyMSArMTcsMTggQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xpZW50
X2gKLSNkZWZpbmUgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xpZW50X2gKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgogCi10eXBlZGVmIHN0cnVjdCBfR0Vy
cm9yIEdFcnJvcjsKLXR5cGVkZWYgc3RydWN0IF9HSW5wdXRTdHJlYW0gR0lucHV0U3RyZWFtOwog
dHlwZWRlZiBzdHJ1Y3QgX0dUYXNrIEdUYXNrOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY0NsaWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVh
bCB2b2lkIHN0YXJ0KEdUYXNrKikgPSAwOwotICAgIHZpcnR1YWwgR0lucHV0U3RyZWFtKiBmaW5p
c2goR1Rhc2sqLCBHRXJyb3IqKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFJlcXVlc3Qo
R1JlZlB0cjxHVGFzaz4mJikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYgLy8gV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xpZW50X2gKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIxMDM2NikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE3LTAxLTA1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbU09VUF0gTmV0d29yayBwcm9jZXNzIGNy
YXNoIGluIFdlYktpdDo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6ZGlkRmFpbFdpdGhFcnJv
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MDgy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBDdXN0
b21Qcm90b2NvbE1hbmFnZXIgdXNlcyBhIFdvcmtxdWV1ZSB0byByZWNlaXZlIHRoZSBJUEMgbWVz
c2FnZXMgc2luY2UgcjE0OTE5NC4gVGhlbiB3ZSBhZGRlZCB0aGUgU291cAorICAgICAgICBpbXBs
ZW1lbnRhdGlvbiBhZG9wdGluZyB0aGF0IGFwcHJvYWNoLCBidXQgd2l0aG91dCBtYWtpbmcgb3Vy
IGltcGxlbWVudGF0aW9uIHRocmVhZCBzYWZlLiBUaGUgY3Jhc2ggaGFwcGVucworICAgICAgICBi
ZWNhdXNlIHRoZSBDdXN0b21Qcm90b2NvbE1hbmFnZXIgaW1wbGVtZW50YXRpb24gaXMgdXNlZCBi
eSB0d28gdGhyZWFkcyBhdCB0aGUgc2FtZSB0aW1lLCB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAg
YmVjYXVzZSBvZiBhIHBpbmcgbG9hZCAocHJvYmFibHkgY2F1c2VkIGJ5IGFuIGltYWdlIGxvYWQg
aW4gdGhlIHVubG9hZCBoYW5kbGVyLCBJIGhhdmVuJ3QgYmVlbiBhYmxlIHRvCisgICAgICAgIHJl
cHJvZHVjZSB0aGUgY3Jhc2gpIGFuZCB0aGUgd29yayBxdWV1ZSB0aHJlYWQuIFRoZSByZWFzb25z
IHRvIG1ha2UgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIHVzZSBhIFdvcmtRdWV1ZQorICAgICAgICBh
cmUgbm8gbG9uZ2VyIHZhbGlkIGJlY2F1c2UgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIGlzIG5vdyBv
bmx5IHVzZWQgaW4gdGhlIG5ldHdvcmsgcHJvY2VzcyBhbmQgc3luYyBsb2FkcyBkb24ndAorICAg
ICAgICB1c2UgYW55IG5lc3RlZCBydW4gbG9vcCwgdGhleSBhcmUganVzdCBhbiBJUEMgc3luYyBt
ZXNzYWdlLiBTbyB0aGlzIHBhdGNoIG1ha2VzIEN1c3RvbVByb3RvY29sTWFuYWdlciBhIG5vcm1h
bAorICAgICAgICBtZXNzYWdlIHJlY2VpdmVyIGFnYWluIHRvIGVuc3VyZSBtZXNzYWdlcyBhcmUg
aGFuZGxlZCBpbiB0aGUgbWFpbiB0aHJlYWQuIEl0IGFsc28gYWRkcyB0aGUgY29tbW9uIGltcGxl
bWVudGF0aW9uCisgICAgICAgIHRvIGEgbmV3IEN1c3RvbVByb3RvY29sTWFuYWdlci5jcHAgZmls
ZSBzaGFyZWQgYnkgQ29jb2EgYW5kIFNvdXAgYmFzZWQgcG9ydHMuCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDogQWRkIEN1c3RvbVByb3RvY29sTWFuYWdlci5jcHAuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0NvY29hL0N1c3RvbVByb3RvY29sTWFuYWdlckNv
Y29hLm1tOgorICAgICAgICAoLVtXS0N1c3RvbVByb3RvY29sIGluaXRXaXRoUmVxdWVzdDpjYWNo
ZWRSZXNwb25zZTpjbGllbnQ6XSk6IFVzZSBuZXcgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIEFQSS4K
KyAgICAgICAgKC1bV0tDdXN0b21Qcm90b2NvbCBzdGFydExvYWRpbmddKTogRGl0dG8uCisgICAg
ICAgICgtW1dLQ3VzdG9tUHJvdG9jb2wgc3RvcExvYWRpbmddKTogRGl0dG8uCisgICAgICAgIChX
ZWJLaXQ6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6cmVnaXN0ZXJQcm90b2NvbENsYXNzKTogUmVn
aXN0ZXIgdGhlIE5TVVJMUHJvdG9jb2wgY2xhc3Mgd2hlbiBub3QgdXNpbmcgdGhlCisgICAgICAg
IG5ldHdvcmsgc2Vzc2lvbi4KKyAgICAgICAgKFdlYktpdDo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
OjpkaWRGYWlsV2l0aEVycm9yKTogcmVtb3ZlQ3VzdG9tUHJvdG9jb2wgbm93IHJlY2VpdmVzIGFu
IElELgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmRpZEZpbmlzaExv
YWRpbmcpOiBEaXR0by4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMv
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OmdlbmVy
YXRlQ3VzdG9tUHJvdG9jb2xJRCk6IE1vdmVkIGZyb20gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29j
b2EubW0gYW5kIEN1c3RvbVByb3RvY29sTWFuYWdlclNvdXAuY3BwLgorICAgICAgICAoV2ViS2l0
OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnN1cHBsZW1lbnROYW1lKTogRGl0dG8uCisgICAgICAg
IChXZWJLaXQ6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKTog
QWxzbyByZW1vdmVzIHRoZSB3b3JrIHF1ZXVlIGluaXRpYWxpemF0aW9uLgorICAgICAgICAoV2Vi
S2l0OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmluaXRpYWxpemUpOiBDb3BpZWQgYW5kIG1vZGVy
bml6ZWQgdGhlIGxvb3AuCisgICAgICAgIChXZWJLaXQ6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6
YWRkQ3VzdG9tUHJvdG9jb2wpOiBDb3BpZWQgZnJvbSBDdXN0b21Qcm90b2NvbE1hbmFnZXJDb2Nv
YS5tbS4KKyAgICAgICAgKFdlYktpdDo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpyZW1vdmVDdXN0
b21Qcm90b2NvbCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFn
ZXI6OnN0YXJ0TG9hZGluZyk6IFNlbmQgdGhlIFN0YXJ0TG9hZGluZyBtZXNzYWdlIHRvIHRoZSBw
cm94eS4KKyAgICAgICAgKFdlYktpdDo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpzdG9wTG9hZGlu
Zyk6IFNlbmQgdGhlIFN0b3BMb2FkaW5nIG1lc3NhZ2UgdG8gdGhlIHByb3h5LgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIuaDoK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90
b2NvbE1hbmFnZXJJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9D
dXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsLmg6IFJlbW92ZWQu
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJv
dG9jb2xNYW5hZ2VyU291cC5jcHA6IE1vdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBmcm9tCisgICAg
ICAgIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGwgYW5kIHVwZGF0ZWQgdG8gdGhlIG5ldyBDdXN0
b21Qcm90b2NvbE1hbmFnZXIgQVBJLgorICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2NvbE1h
bmFnZXI6OldlYlNvdXBSZXF1ZXN0QXN5bmNEYXRhOjpXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YSk6
CisgICAgICAgIChXZWJLaXQ6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6V2ViU291cFJlcXVlc3RB
c3luY0RhdGE6On5XZWJTb3VwUmVxdWVzdEFzeW5jRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkN1
c3RvbVByb3RvY29sTWFuYWdlcjo6cmVnaXN0ZXJQcm90b2NvbENsYXNzKToKKyAgICAgICAgKFdl
YktpdDo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpyZWdpc3RlclNjaGVtZSk6CisgICAgICAgIChX
ZWJLaXQ6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6c3VwcG9ydHNTY2hlbWUpOgorICAgICAgICAo
V2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmRpZEZhaWxXaXRoRXJyb3IpOgorICAgICAg
ICAoV2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmRpZExvYWREYXRhKToKKyAgICAgICAg
KFdlYktpdDo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAg
ICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmRpZEZpbmlzaExvYWRpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6Ondhc1JlZGlyZWN0ZWRUb1Jl
cXVlc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29j
b2EubW06CisgICAgICAgIChXZWJLaXQ6Omdsb2JhbEN1c3RvbVByb3RvY29sTWFuYWdlcik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmRlZmF1bHRTZXNzaW9uKToKKyAg
ICAgICAgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIGlzIG5vIGxvbmdlciByZWZjb3VudGVkLCBzbyBq
dXN0IHBhc3MgYSBwb2ludGVyLgorICAgICAgICBBIHN0YXRpYyBwb2ludGVyIGhhcyB0aGUgc2Ft
ZSBsaWZldGltZSBhcyB0aGUgTmV0d29ya1Byb2Nlc3Mgb2JqZWN0IGluIHRoZSBOZXR3b3JrUHJv
Y2VzcywKKyAgICAgICAgYW5kIGluIHRoZSBXZWJQcm9jZXNzIGl0IHdpbGwgcmVtYWluIG51bGxw
dHIsIGp1c3QgbGlrZSBpdCB1c2VkIHRvLgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgor
ICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKwogMjAxNy0wMS0wNSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBh
cHBsZS5jb20+CiAKICAgICAgICAgVXNlIFdURjo6RnVuY3Rpb24gaW5zdGVhZCBvZiBzdGQ6OmZ1
bmN0aW9uIGluIG5ldHdvcmsgY2FjaGUgY29kZQpJbmRleDogU291cmNlL1dlYktpdDIvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDIxMDM2MikKKysrIFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC05Myw2ICs5Myw4IEBAIGlmIChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF8zRCkK
IGVuZGlmICgpCiAKIHNldChOZXR3b3JrUHJvY2Vzc19DT01NT05fU09VUkNFUworICAgIE5ldHdv
cmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIuY3BwCisKICAg
ICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKICAgICBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0RhdGFUYXNrQmxvYi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNt
YWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCShyZXZp
c2lvbiAyMTAzNjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDYgQEAKIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAg
IERhdGFiYXNlUHJvY2Vzcy9lZmwvRGF0YWJhc2VQcm9jZXNzTWFpbkVmbC5jcHAKIAotICAgIE5l
dHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlcklt
cGwuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJv
dG9jb2xNYW5hZ2VyU291cC5jcHAKIAogICAgIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9lZmwv
RG93bmxvYWRTb3VwRXJyb3JzRWZsLmNwcApJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm1H
VEsuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UJ
KHJldmlzaW9uIDIxMDM2MikKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBAIHNldChXZWJLaXQyX1VTRV9QUkVGSVhfSEVB
REVSIE9OKQogbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgRGF0YWJhc2VQcm9jZXNz
L2d0ay9EYXRhYmFzZVByb2Nlc3NNYWluR3RrLmNwcAogCi0gICAgTmV0d29ya1Byb2Nlc3MvQ3Vz
dG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbC5jcHAKICAgICBOZXR3
b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJTb3Vw
LmNwcAogCiAgICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL2d0ay9Eb3dubG9hZFNvdXBFcnJv
cnNHdGsuY3BwCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90
b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0
b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyLmgiCisKKyNpbmNsdWRlICJDaGlsZFByb2Nlc3MuaCIKKyNpbmNsdWRlICJDdXN0b21Q
cm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMg
dWludDY0X3QgZ2VuZXJhdGVDdXN0b21Qcm90b2NvbElEKCkKK3sKKyAgICBzdGF0aWMgdWludDY0
X3QgdW5pcXVlQ3VzdG9tUHJvdG9jb2xJRCA9IDA7CisgICAgcmV0dXJuICsrdW5pcXVlQ3VzdG9t
UHJvdG9jb2xJRDsKK30KKworY29uc3QgY2hhciogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpzdXBw
bGVtZW50TmFtZSgpCit7CisgICAgcmV0dXJuICJDdXN0b21Qcm90b2NvbE1hbmFnZXIiOworfQor
CitDdXN0b21Qcm90b2NvbE1hbmFnZXI6OkN1c3RvbVByb3RvY29sTWFuYWdlcihDaGlsZFByb2Nl
c3MqIGNoaWxkUHJvY2VzcykKKyAgICA6IG1fY2hpbGRQcm9jZXNzKGNoaWxkUHJvY2VzcykKK3sK
KyAgICBtX2NoaWxkUHJvY2Vzcy0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpDdXN0b21Q
cm90b2NvbE1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworfQorCit2b2lk
IEN1c3RvbVByb3RvY29sTWFuYWdlcjo6aW5pdGlhbGl6ZShjb25zdCBOZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICByZWdpc3RlclByb3RvY29sQ2xh
c3MoKTsKKworICAgIGZvciAoY29uc3QgYXV0byYgc2NoZW1lIDogcGFyYW1ldGVycy51cmxTY2hl
bWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scykKKyAgICAgICAgcmVnaXN0ZXJTY2hlbWUo
c2NoZW1lKTsKK30KKwordWludDY0X3QgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjphZGRDdXN0b21Q
cm90b2NvbChDdXN0b21Qcm90b2NvbCYmIGN1c3RvbVByb3RvY29sKQoreworICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fY3VzdG9tUHJvdG9jb2xNYXBNdXRleCk7CisgICAgYXV0byBjdXN0b21Qcm90
b2NvbElEID0gZ2VuZXJhdGVDdXN0b21Qcm90b2NvbElEKCk7CisgICAgbV9jdXN0b21Qcm90b2Nv
bE1hcC5hZGQoY3VzdG9tUHJvdG9jb2xJRCwgV1RGTW92ZShjdXN0b21Qcm90b2NvbCkpOworICAg
IHJldHVybiBjdXN0b21Qcm90b2NvbElEOworfQorCit2b2lkIEN1c3RvbVByb3RvY29sTWFuYWdl
cjo6cmVtb3ZlQ3VzdG9tUHJvdG9jb2wodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCkKK3sKKyAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2N1c3RvbVByb3RvY29sTWFwTXV0ZXgpOworICAgIG1fY3Vz
dG9tUHJvdG9jb2xNYXAucmVtb3ZlKGN1c3RvbVByb3RvY29sSUQpOworfQorCit2b2lkIEN1c3Rv
bVByb3RvY29sTWFuYWdlcjo6c3RhcnRMb2FkaW5nKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBtX2NoaWxk
UHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OlN0YXJ0
TG9hZGluZyhjdXN0b21Qcm90b2NvbElELCByZXF1ZXN0KSk7Cit9CisKK3ZvaWQgQ3VzdG9tUHJv
dG9jb2xNYW5hZ2VyOjpzdG9wTG9hZGluZyh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElEKQorewor
ICAgIG1fY2hpbGRQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1hbmFnZXJQ
cm94eTo6U3RvcExvYWRpbmcoY3VzdG9tUHJvdG9jb2xJRCksIDApOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0N1c3RvbVBy
b3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
LmgJKHJldmlzaW9uIDIxMDM2MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0N1
c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsMjYgKzIzLDI5IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmbmRlZiBDdXN0b21Qcm90b2NvbE1hbmFnZXJfaAotI2RlZmluZSBDdXN0b21Qcm90b2Nv
bE1hbmFnZXJfaAorI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5j
bHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NTdXBwbGVt
ZW50LmgiCi0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShD
T0NPQSkKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiBPQkpDX0NMQVNTIE5TVVJMU2Vzc2lv
bkNvbmZpZ3VyYXRpb247CiBPQkpDX0NMQVNTIFdLQ3VzdG9tUHJvdG9jb2w7Ci0jZWxzZQotI2lu
Y2x1ZGUgIkN1c3RvbVByb3RvY29sTWFuYWdlckltcGwuaCIKICNlbmRpZgogCisjaWYgVVNFKFNP
VVApCisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBfR0Nh
bmNlbGxhYmxlIEdDYW5jZWxsYWJsZTsKK3R5cGVkZWYgc3RydWN0IF9HSW5wdXRTdHJlYW0gR0lu
cHV0U3RyZWFtOwordHlwZWRlZiBzdHJ1Y3QgX0dUYXNrIEdUYXNrOwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWM7CisjZW5k
aWYKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBEYXRhUmVmZXJlbmNlOwpAQCAtNTksMzEgKzYy
LDQzIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQ2hpbGRQcm9jZXNzOwogc3RydWN0IE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwogCi1jbGFzcyBDdXN0b21Qcm90b2NvbE1h
bmFnZXIgOiBwdWJsaWMgTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50LCBwdWJsaWMgSVBDOjpDb25u
ZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyIDogcHVibGljIE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudCwgcHVibGljIElQQzo6TWVz
c2FnZVJlY2VpdmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXN0b21Qcm90b2NvbE1h
bmFnZXIpOwogcHVibGljOgogICAgIGV4cGxpY2l0IEN1c3RvbVByb3RvY29sTWFuYWdlcihDaGls
ZFByb2Nlc3MqKTsKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwog
Ci0gICAgQ2hpbGRQcm9jZXNzKiBjaGlsZFByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2NoaWxk
UHJvY2VzczsgfQotCiAgICAgdm9pZCByZWdpc3RlclNjaGVtZShjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIHVucmVnaXN0ZXJTY2hlbWUoY29uc3QgU3RyaW5nJik7CiAgICAgYm9vbCBzdXBwb3J0
c1NjaGVtZShjb25zdCBTdHJpbmcmKTsKLSAgICAKKwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAg
IHZvaWQgYWRkQ3VzdG9tUHJvdG9jb2woV0tDdXN0b21Qcm90b2NvbCAqKTsKLSAgICB2b2lkIHJl
bW92ZUN1c3RvbVByb3RvY29sKFdLQ3VzdG9tUHJvdG9jb2wgKik7Ci0jaWYgVVNFKE5FVFdPUktf
U0VTU0lPTikKLSAgICB2b2lkIHJlZ2lzdGVyUHJvdG9jb2xDbGFzcyhOU1VSTFNlc3Npb25Db25m
aWd1cmF0aW9uICopOworICAgIHR5cGVkZWYgUmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2w+IEN1
c3RvbVByb3RvY29sOwogI2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAgc3RydWN0IFdlYlNvdXBS
ZXF1ZXN0QXN5bmNEYXRhIHsKKyAgICAgICAgV2ViU291cFJlcXVlc3RBc3luY0RhdGEoR1JlZlB0
cjxHVGFzaz4mJiwgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljKik7CisgICAgICAgIH5XZWJTb3Vw
UmVxdWVzdEFzeW5jRGF0YSgpOworCisgICAgICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2s7CisgICAg
ICAgIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyogcmVxdWVzdDsKKyAgICAgICAgR1JlZlB0cjxH
Q2FuY2VsbGFibGU+IGNhbmNlbGxhYmxlOworICAgICAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4g
c3RyZWFtOworICAgIH07CisgICAgdHlwZWRlZiBzdGQ6OnVuaXF1ZV9wdHI8V2ViU291cFJlcXVl
c3RBc3luY0RhdGE+IEN1c3RvbVByb3RvY29sOwogI2VuZGlmCiAKLXByaXZhdGU6Ci0gICAgLy8g
Q2hpbGRQcm9jZXNzU3VwcGxlbWVudAotICAgIHZvaWQgaW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBD
OjpDb25uZWN0aW9uKikgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgYWRkQ3VzdG9tUHJvdG9jb2wo
Q3VzdG9tUHJvdG9jb2wmJik7CisgICAgdm9pZCByZW1vdmVDdXN0b21Qcm90b2NvbCh1aW50NjRf
dCBjdXN0b21Qcm90b2NvbElEKTsKKyAgICB2b2lkIHN0YXJ0TG9hZGluZyh1aW50NjRfdCBjdXN0
b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lk
IHN0b3BMb2FkaW5nKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQpOwogCisjaWYgUExBVEZPUk0o
Q09DT0EpICYmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgdm9pZCByZWdpc3RlclByb3RvY29s
Q2xhc3MoTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiopOworI2VuZGlmCisKK3ByaXZhdGU6CiAg
ICAgLy8gTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50CiAgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJikgb3ZlcnJpZGU7CiAKQEAgLTk2LDI2
ICsxMTEsMjcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcodWludDY0X3Qg
Y3VzdG9tUHJvdG9jb2xJRCk7CiAgICAgdm9pZCB3YXNSZWRpcmVjdGVkVG9SZXF1ZXN0KHVpbnQ2
NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogCisgICAg
dm9pZCByZWdpc3RlclByb3RvY29sQ2xhc3MoKTsKKwogICAgIENoaWxkUHJvY2VzcyogbV9jaGls
ZFByb2Nlc3M7Ci0gICAgUmVmPFdvcmtRdWV1ZT4gbV9tZXNzYWdlUXVldWU7CisKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8dWludDY0X3QsIEN1c3RvbVByb3RvY29sPiBDdXN0b21Qcm90b2NvbE1hcDsK
KyAgICBDdXN0b21Qcm90b2NvbE1hcCBtX2N1c3RvbVByb3RvY29sTWFwOworICAgIExvY2sgbV9j
dXN0b21Qcm90b2NvbE1hcE11dGV4OwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgSGFzaFNl
dDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9yZWdpc3RlcmVkU2NoZW1lczsK
ICAgICBMb2NrIG1fcmVnaXN0ZXJlZFNjaGVtZXNNdXRleDsKIAotICAgIHR5cGVkZWYgSGFzaE1h
cDx1aW50NjRfdCwgUmV0YWluUHRyPFdLQ3VzdG9tUHJvdG9jb2w+PiBDdXN0b21Qcm90b2NvbE1h
cDsKLSAgICBDdXN0b21Qcm90b2NvbE1hcCBtX2N1c3RvbVByb3RvY29sTWFwOwotICAgIExvY2sg
bV9jdXN0b21Qcm90b2NvbE1hcE11dGV4OwotICAgIAogICAgIC8vIFdLQ3VzdG9tUHJvdG9jb2wg
b2JqZWN0cyBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBtX2N1c3RvbVByb3RvY29sTWFwIGZyb20g
bXVsdGlwbGUgdGhyZWFkcy4KICAgICAvLyBXZSByZXR1cm4gYSBSZXRhaW5QdHIgaGVyZSBiZWNh
dXNlIGl0IGlzIHVuc2FmZSB0byByZXR1cm4gYSByYXcgcG9pbnRlciBzaW5jZSB0aGUgb2JqZWN0
IG1pZ2h0IGltbWVkaWF0ZWx5IGJlIGRlc3Ryb3llZCBmcm9tIGEgZGlmZmVyZW50IHRocmVhZC4K
ICAgICBSZXRhaW5QdHI8V0tDdXN0b21Qcm90b2NvbD4gcHJvdG9jb2xGb3JJRCh1aW50NjRfdCBj
dXN0b21Qcm90b2NvbElEKTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IE1vdmUgbWFjIHNwZWNpZmlj
IGNvZGUgdG8gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbD4gbV9pbXBsOworI2VuZGlmCisKKyNpZiBVU0UoU09V
UCkKKyAgICBHUmVmUHRyPEdQdHJBcnJheT4gbV9yZWdpc3RlcmVkU2NoZW1lczsKICNlbmRpZgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvLyBDdXN0b21Qcm90b2NvbE1h
bmFnZXJfaApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9j
b2xzL0NvY29hL0N1c3RvbVByb3RvY29sTWFuYWdlckNvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9Db2NvYS9DdXN0b21Q
cm90b2NvbE1hbmFnZXJDb2NvYS5tbQkocmV2aXNpb24gMjEwMzYyKQorKysgU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0NvY29hL0N1c3RvbVByb3RvY29sTWFu
YWdlckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsOSBAQAogI2ltcG9ydCAi
Y29uZmlnLmgiCiAjaW1wb3J0ICJDdXN0b21Qcm90b2NvbE1hbmFnZXIuaCIKIAotI2ltcG9ydCAi
Q2hpbGRQcm9jZXNzLmgiCiAjaW1wb3J0ICJDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5o
IgotI2ltcG9ydCAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2ltcG9y
dCAiRGF0YVJlZmVyZW5jZS5oIgogI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3MuaCIKLSNpbXBvcnQg
Ik5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW1wb3J0ICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIK
ICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxTZXNzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05T
VVJMQ29ubmVjdGlvblNQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9VUkwuaD4KQEAgLTQ0LDE2ICsz
OSw2IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1zdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVDdXN0b21Qcm90b2NvbElEKCkKLXsKLSAgICBzdGF0
aWMgdWludDY0X3QgdW5pcXVlQ3VzdG9tUHJvdG9jb2xJRCA9IDA7Ci0gICAgcmV0dXJuICsrdW5p
cXVlQ3VzdG9tUHJvdG9jb2xJRDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KIEBpbnRl
cmZhY2UgV0tDdXN0b21Qcm90b2NvbCA6IE5TVVJMUHJvdG9jb2wgewogQHByaXZhdGUKICAgICB1
aW50NjRfdCBfY3VzdG9tUHJvdG9jb2xJRDsKQEAgLTg5LDExICs3NCwxMSBAQCAtIChpZClpbml0
V2l0aFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlCiAgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0
aFJlcXVlc3Q6cmVxdWVzdCBjYWNoZWRSZXNwb25zZTpjYWNoZWRSZXNwb25zZSBjbGllbnQ6Y2xp
ZW50XTsKICAgICBpZiAoIXNlbGYpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgX2N1
c3RvbVByb3RvY29sSUQgPSBnZW5lcmF0ZUN1c3RvbVByb3RvY29sSUQoKTsKLSAgICBfaW5pdGlh
bGl6YXRpb25SdW5Mb29wID0gQ0ZSdW5Mb29wR2V0Q3VycmVudCgpOworCiAgICAgaWYgKGF1dG8q
IGN1c3RvbVByb3RvY29sTWFuYWdlciA9IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBw
bGVtZW50PEN1c3RvbVByb3RvY29sTWFuYWdlcj4oKSkKLSAgICAgICAgY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyLT5hZGRDdXN0b21Qcm90b2NvbChzZWxmKTsKKyAgICAgICAgX2N1c3RvbVByb3RvY29s
SUQgPSBjdXN0b21Qcm90b2NvbE1hbmFnZXItPmFkZEN1c3RvbVByb3RvY29sKHNlbGYpOworICAg
IF9pbml0aWFsaXphdGlvblJ1bkxvb3AgPSBDRlJ1bkxvb3BHZXRDdXJyZW50KCk7CisKICAgICBy
ZXR1cm4gc2VsZjsKIH0KIApAQCAtMTA1LDE0ICs5MCwxNCBAQCAtIChDRlJ1bkxvb3BSZWYpaW5p
dGlhbGl6YXRpb25SdW5Mb29wCiAtICh2b2lkKXN0YXJ0TG9hZGluZwogewogICAgIGlmIChhdXRv
KiBjdXN0b21Qcm90b2NvbE1hbmFnZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuc3Vw
cGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCkpCi0gICAgICAgIGN1c3RvbVByb3RvY29s
TWFuYWdlci0+Y2hpbGRQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFu
YWdlclByb3h5OjpTdGFydExvYWRpbmcoc2VsZi5jdXN0b21Qcm90b2NvbElELCBbc2VsZiByZXF1
ZXN0XSksIDApOworICAgICAgICBjdXN0b21Qcm90b2NvbE1hbmFnZXItPnN0YXJ0TG9hZGluZyhz
ZWxmLmN1c3RvbVByb3RvY29sSUQsIFtzZWxmIHJlcXVlc3RdKTsKIH0KIAogLSAodm9pZClzdG9w
TG9hZGluZwogewogICAgIGlmIChhdXRvKiBjdXN0b21Qcm90b2NvbE1hbmFnZXIgPSBOZXR3b3Jr
UHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCkp
IHsKLSAgICAgICAgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyLT5jaGlsZFByb2Nlc3MoKS0+c2VuZChN
ZXNzYWdlczo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OlN0b3BMb2FkaW5nKHNlbGYuY3Vz
dG9tUHJvdG9jb2xJRCksIDApOwotICAgICAgICBjdXN0b21Qcm90b2NvbE1hbmFnZXItPnJlbW92
ZUN1c3RvbVByb3RvY29sKHNlbGYpOworICAgICAgICBjdXN0b21Qcm90b2NvbE1hbmFnZXItPnN0
b3BMb2FkaW5nKHNlbGYuY3VzdG9tUHJvdG9jb2xJRCk7CisgICAgICAgIGN1c3RvbVByb3RvY29s
TWFuYWdlci0+cmVtb3ZlQ3VzdG9tUHJvdG9jb2woc2VsZi5jdXN0b21Qcm90b2NvbElEKTsKICAg
ICB9CiB9CiAKQEAgLTEyMCw0NSArMTA1LDExIEBAIC0gKHZvaWQpc3RvcExvYWRpbmcKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLWNvbnN0IGNoYXIqIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6c3Vw
cGxlbWVudE5hbWUoKQotewotICAgIHJldHVybiAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIjsKLX0K
LQotQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpDdXN0b21Qcm90b2NvbE1hbmFnZXIoQ2hpbGRQcm9j
ZXNzKiBjaGlsZFByb2Nlc3MpCi0gICAgOiBtX2NoaWxkUHJvY2VzcyhjaGlsZFByb2Nlc3MpCi0g
ICAgLCBtX21lc3NhZ2VRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5D
dXN0b21Qcm90b2NvbE1hbmFnZXIiKSkKLXsKLSAgICBXZWJDb3JlOjpVVEY4RW5jb2RpbmcoKTsK
LX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmluaXRpYWxpemVDb25uZWN0aW9uKElQ
Qzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbikKLXsKLSAgICBjb25uZWN0aW9uLT5hZGRXb3JrUXVl
dWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBtX21lc3NhZ2VRdWV1ZS5nZXQoKSwgdGhpcyk7Ci19Ci0KLXZvaWQg
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjppbml0aWFsaXplKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQordm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6
OnJlZ2lzdGVyUHJvdG9jb2xDbGFzcygpCiB7CiAjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAg
ICAgW05TVVJMUHJvdG9jb2wgcmVnaXN0ZXJDbGFzczpbV0tDdXN0b21Qcm90b2NvbCBjbGFzc11d
OwogI2VuZGlmCi0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMudXJsU2No
ZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJl
Z2lzdGVyU2NoZW1lKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90
b2NvbHNbaV0pOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6YWRkQ3VzdG9tUHJv
dG9jb2woV0tDdXN0b21Qcm90b2NvbCAqY3VzdG9tUHJvdG9jb2wpCi17Ci0gICAgQVNTRVJUKGN1
c3RvbVByb3RvY29sKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2N1c3RvbVByb3RvY29sTWFw
TXV0ZXgpOwotICAgIG1fY3VzdG9tUHJvdG9jb2xNYXAuYWRkKGN1c3RvbVByb3RvY29sLmN1c3Rv
bVByb3RvY29sSUQsIGN1c3RvbVByb3RvY29sKTsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1h
bmFnZXI6OnJlbW92ZUN1c3RvbVByb3RvY29sKFdLQ3VzdG9tUHJvdG9jb2wgKmN1c3RvbVByb3Rv
Y29sKQotewotICAgIEFTU0VSVChjdXN0b21Qcm90b2NvbCk7Ci0gICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9jdXN0b21Qcm90b2NvbE1hcE11dGV4KTsKLSAgICBtX2N1c3RvbVByb3RvY29sTWFwLnJl
bW92ZShjdXN0b21Qcm90b2NvbC5jdXN0b21Qcm90b2NvbElEKTsKIH0KIAogI2lmIFVTRShORVRX
T1JLX1NFU1NJT04pCkBAIC0xNzQsNyArMTI1LDcgQEAgdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFn
ZXI6OnJlZ2lzdGVyU2NoZQogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcmVnaXN0ZXJlZFNjaGVt
ZXNNdXRleCk7CiAgICAgbV9yZWdpc3RlcmVkU2NoZW1lcy5hZGQoc2NoZW1lKTsKIH0KLSAgICAK
Kwogdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnVucmVnaXN0ZXJTY2hlbWUoY29uc3QgU3Ry
aW5nJiBzY2hlbWUpCiB7CiAgICAgQVNTRVJUKCFzY2hlbWUuaXNOdWxsKCkpOwpAQCAtMjEwLDcg
KzE2MSw3IEBAICAgICBpZiAoIXByb3RvY29sKQogICAgICAgICBbW3Byb3RvY29sIGNsaWVudF0g
VVJMUHJvdG9jb2w6cHJvdG9jb2wuZ2V0KCkgZGlkRmFpbFdpdGhFcnJvcjpuc0Vycm9yLmdldCgp
XTsKICAgICB9KTsKIAotICAgIHJlbW92ZUN1c3RvbVByb3RvY29sKHByb3RvY29sLmdldCgpKTsK
KyAgICByZW1vdmVDdXN0b21Qcm90b2NvbChjdXN0b21Qcm90b2NvbElEKTsKIH0KIAogdm9pZCBD
dXN0b21Qcm90b2NvbE1hbmFnZXI6OmRpZExvYWREYXRhKHVpbnQ2NF90IGN1c3RvbVByb3RvY29s
SUQsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKQEAgLTI0OSw3ICsyMDAsNyBAQCAg
ICAgaWYgKCFwcm90b2NvbCkKICAgICAgICAgW1twcm90b2NvbCBjbGllbnRdIFVSTFByb3RvY29s
RGlkRmluaXNoTG9hZGluZzpwcm90b2NvbC5nZXQoKV07CiAgICAgfSk7CiAKLSAgICByZW1vdmVD
dXN0b21Qcm90b2NvbChwcm90b2NvbC5nZXQoKSk7CisgICAgcmVtb3ZlQ3VzdG9tUHJvdG9jb2wo
Y3VzdG9tUHJvdG9jb2xJRCk7CiB9CiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjp3YXNS
ZWRpcmVjdGVkVG9SZXF1ZXN0KHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYgcmVkaXJlY3RSZXNwb25zZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlckltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29s
cy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlckltcGwuY3BwCShyZXZpc2lvbiAyMTAzNjIpCisr
KyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0
b21Qcm90b2NvbE1hbmFnZXJJbXBsLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDIxMiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsLmgiCi0KLSNpbmNsdWRlICJD
aGlsZFByb2Nlc3MuaCIKLSNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1lc3Nh
Z2VzLmgiCi0jaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uaCIK
LSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlUmVxdWVzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvU291cE5ldHdvcmtTZXNzaW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0
YXRpYyB1aW50NjRfdCBnZW5lcmF0ZUN1c3RvbVByb3RvY29sSUQoKQotewotICAgIHN0YXRpYyB1
aW50NjRfdCB1bmlxdWVDdXN0b21Qcm90b2NvbElEID0gMDsKLSAgICByZXR1cm4gKyt1bmlxdWVD
dXN0b21Qcm90b2NvbElEOwotfQotCi1zdHJ1Y3QgV2ViU291cFJlcXVlc3RBc3luY0RhdGEgewot
ICAgIFdlYlNvdXBSZXF1ZXN0QXN5bmNEYXRhKEdUYXNrKiB0YXNrLCBXZWJLaXRTb3VwUmVxdWVz
dEdlbmVyaWMqIHJlcXVlc3RHZW5lcmljKQotICAgICAgICA6IHRhc2sodGFzaykKLSAgICAgICAg
LCByZXF1ZXN0KHJlcXVlc3RHZW5lcmljKQotICAgICAgICAsIGNhbmNlbGxhYmxlKGdfdGFza19n
ZXRfY2FuY2VsbGFibGUodGFzaykpCi0gICAgewotICAgICAgICAvLyBJZiB0aGUgc3RydWN0IGNv
bnRhaW5zIGEgbnVsbCByZXF1ZXN0LCBpdCBpcyBiZWNhdXNlIHRoZSByZXF1ZXN0IGZhaWxlZC4K
LSAgICAgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChyZXF1ZXN0KSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZyZXF1ZXN0KSk7Ci0gICAgfQotCi0gICAgfldlYlNvdXBS
ZXF1ZXN0QXN5bmNEYXRhKCkKLSAgICB7Ci0gICAgICAgIGlmIChyZXF1ZXN0KQotICAgICAgICAg
ICAgZ19vYmplY3RfcmVtb3ZlX3dlYWtfcG9pbnRlcihHX09CSkVDVChyZXF1ZXN0KSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZyZXF1ZXN0KSk7Ci0gICAgfQotCi0gICAgYm9vbCByZXF1ZXN0
RmFpbGVkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxl
ZChjYW5jZWxsYWJsZS5nZXQoKSkgfHwgIXJlcXVlc3Q7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxH
VGFzaz4gcmVsZWFzZVRhc2soKQotICAgIHsKLSAgICAgICAgR1Rhc2sqIHJldHVyblZhbHVlID0g
dGFzazsKLSAgICAgICAgdGFzayA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBhZG9wdEdSZWYo
cmV0dXJuVmFsdWUpOwotICAgIH0KLQotICAgIEdUYXNrKiB0YXNrOwotICAgIFdlYktpdFNvdXBS
ZXF1ZXN0R2VuZXJpYyogcmVxdWVzdDsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2Vs
bGFibGU7Ci0gICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IHN0cmVhbTsKLX07Ci0KLUN1c3RvbVBy
b3RvY29sTWFuYWdlckltcGw6OkN1c3RvbVByb3RvY29sTWFuYWdlckltcGwoQ2hpbGRQcm9jZXNz
KiBjaGlsZFByb2Nlc3MpCi0gICAgOiBtX2NoaWxkUHJvY2VzcyhjaGlsZFByb2Nlc3MpCi0gICAg
LCBtX3NjaGVtZXMoYWRvcHRHUmVmKGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyhnX2Zy
ZWUpKSkKLXsKLX0KLQotQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6fkN1c3RvbVByb3RvY29s
TWFuYWdlckltcGwoKQotewotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6OnJl
Z2lzdGVyU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQotewotICAgIGlmIChtX3NjaGVtZXMt
PmxlbikKLSAgICAgICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QobV9zY2hlbWVzLmdl
dCgpLCBtX3NjaGVtZXMtPmxlbiAtIDEpOwotICAgIGdfcHRyX2FycmF5X2FkZChtX3NjaGVtZXMu
Z2V0KCksIGdfc3RyZHVwKHNjaGVtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgZ19wdHJfYXJyYXlf
YWRkKG1fc2NoZW1lcy5nZXQoKSwgbnVsbHB0cik7Ci0KLSAgICBTb3VwU2Vzc2lvbiogc2Vzc2lv
biA9IFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKS5zb3VwU2Vz
c2lvbigpOwotICAgIFNvdXBSZXF1ZXN0Q2xhc3MqIGdlbmVyaWNSZXF1ZXN0Q2xhc3MgPSBzdGF0
aWNfY2FzdDxTb3VwUmVxdWVzdENsYXNzKj4oZ190eXBlX2NsYXNzX3JlZihXRUJLSVRfVFlQRV9T
T1VQX1JFUVVFU1RfR0VORVJJQykpOwotICAgIGdlbmVyaWNSZXF1ZXN0Q2xhc3MtPnNjaGVtZXMg
PSBjb25zdF9jYXN0PGNvbnN0IGNoYXIqKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KG1fc2No
ZW1lcy0+cGRhdGEpKTsKLSAgICBzdGF0aWNfY2FzdDxXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWND
bGFzcyo+KGdfdHlwZV9jbGFzc19yZWYoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0dFTkVSSUMp
KS0+Y2xpZW50ID0gdGhpczsKLSAgICBzb3VwX3Nlc3Npb25fYWRkX2ZlYXR1cmVfYnlfdHlwZShz
ZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQyk7Ci19Ci0KLWJvb2wgQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6c3VwcG9ydHNTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hl
bWUpCi17Ci0gICAgaWYgKHNjaGVtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgQ1N0cmluZyBjU2NoZW1lID0gc2NoZW1lLnV0ZjgoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9zY2hlbWVzLT5sZW47ICsraSkgewotICAgICAgICBpZiAoY1NjaGVtZSA9
PSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19wdHJfYXJyYXlfaW5kZXgobV9zY2hlbWVzLmdldCgpLCBp
KSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6ZGlkRmFpbFdpdGhFcnJvcih1
aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBl
cnJvcikKLXsKLSAgICBXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YSogZGF0YSA9IG1fY3VzdG9tUHJv
dG9jb2xNYXAuZ2V0KGN1c3RvbVByb3RvY29sSUQpOwotICAgIEFTU0VSVChkYXRhKTsKLQotICAg
IC8vIEVpdGhlciB3ZSBoYXZlbid0IHN0YXJ0ZWQgcmVhZGluZyB0aGUgc3RyZWFtIHlldCwgaW4g
d2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGNvbXBsZXRlIHRoZQotICAgIC8vIHRhc2sgZmlyc3QsIG9y
IHdlIGZhaWxlZCByZWFkaW5nIGl0IGFuZCB0aGUgdGFzayB3YXMgYWxyZWFkeSBjb21wbGV0ZWQg
YnkgZGlkTG9hZERhdGEoKS4KLSAgICBBU1NFUlQoIWRhdGEtPnN0cmVhbSB8fCAhZGF0YS0+dGFz
ayk7Ci0KLSAgICBpZiAoIWRhdGEtPnN0cmVhbSkgewotICAgICAgICBHUmVmUHRyPEdUYXNrPiB0
YXNrID0gZGF0YS0+cmVsZWFzZVRhc2soKTsKLSAgICAgICAgQVNTRVJUKHRhc2suZ2V0KCkpOwot
ICAgICAgICBnX3Rhc2tfcmV0dXJuX25ld19lcnJvcih0YXNrLmdldCgpLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKGVycm9yLmRvbWFpbigpLnV0ZjgoKS5kYXRhKCkpLAotICAgICAgICAgICAgZXJyb3Iu
ZXJyb3JDb2RlKCksICIlcyIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRh
dGEoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1E
aWRGYWlsV2l0aEVycm9yKFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKGRhdGEtPnN0
cmVhbS5nZXQoKSksIGVycm9yKTsKLQotICAgIG1fY3VzdG9tUHJvdG9jb2xNYXAucmVtb3ZlKGN1
c3RvbVByb3RvY29sSUQpOwotfQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6OmRp
ZExvYWREYXRhKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IElQQzo6RGF0YVJlZmVy
ZW5jZSYgZGF0YVJlZmVyZW5jZSkKLXsKLSAgICBXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YSogZGF0
YSA9IG1fY3VzdG9tUHJvdG9jb2xNYXAuZ2V0KGN1c3RvbVByb3RvY29sSUQpOwotICAgIC8vIFRo
ZSBkYXRhIG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHJlcXVlc3QgbWFwIGlmIGEg
cHJldmlvdXMgY2h1bmsgZmFpbGVkCi0gICAgLy8gYW5kIGEgbmV3IG1lc3NhZ2Ugd2FzIHNlbnQg
YnkgdGhlIFVJIHByb2Nlc3MgYmVmb3JlIGJlaW5nIG5vdGlmaWVkIGFib3V0IHRoZSBmYWlsdXJl
LgotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFkYXRhLT5zdHJl
YW0pIHsKLSAgICAgICAgR1JlZlB0cjxHVGFzaz4gdGFzayA9IGRhdGEtPnJlbGVhc2VUYXNrKCk7
Ci0gICAgICAgIEFTU0VSVCh0YXNrLmdldCgpKTsKLQotICAgICAgICBnb2Zmc2V0IHNvdXBDb250
ZW50TGVuZ3RoID0gc291cF9yZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0aChTT1VQX1JFUVVFU1Qo
Z190YXNrX2dldF9zb3VyY2Vfb2JqZWN0KHRhc2suZ2V0KCkpKSk7Ci0gICAgICAgIHVpbnQ2NF90
IGNvbnRlbnRMZW5ndGggPSBzb3VwQ29udGVudExlbmd0aCA9PSAtMSA/IDAgOiBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oc291cENvbnRlbnRMZW5ndGgpOwotICAgICAgICBpZiAoIWRhdGFSZWZlcmVu
Y2Uuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAvLyBFbXB0eSByZXBseSwganVzdCBjcmVhdGUgYW5k
IGVtcHR5IEdNZW1vcnlJbnB1dFN0cmVhbS4KLSAgICAgICAgICAgIGRhdGEtPnN0cmVhbSA9IGdf
bWVtb3J5X2lucHV0X3N0cmVhbV9uZXcoKTsKLSAgICAgICAgfSBlbHNlIGlmIChkYXRhUmVmZXJl
bmNlLnNpemUoKSA9PSBjb250ZW50TGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBXZSBkb24ndCBl
eHBlY3QgbW9yZSBkYXRhLCBzbyB3ZSBjYW4ganVzdCBjcmVhdGUgYSBHTWVtb3J5SW5wdXRTdHJl
YW0gd2l0aCBhbGwgdGhlIGRhdGEuCi0gICAgICAgICAgICBkYXRhLT5zdHJlYW0gPSBnX21lbW9y
eV9pbnB1dF9zdHJlYW1fbmV3X2Zyb21fZGF0YShnX21lbWR1cChkYXRhUmVmZXJlbmNlLmRhdGEo
KSwgZGF0YVJlZmVyZW5jZS5zaXplKCkpLCBjb250ZW50TGVuZ3RoLCBnX2ZyZWUpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgZXhwZWN0IG1vcmUgZGF0YSBjaHVua3MgZnJv
bSB0aGUgVUkgcHJvY2Vzcy4KLSAgICAgICAgICAgIGRhdGEtPnN0cmVhbSA9IHdlYmtpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW1OZXcoY29udGVudExlbmd0aCk7Ci0gICAgICAgICAgICB3ZWJraXRT
b3VwUmVxdWVzdElucHV0U3RyZWFtQWRkRGF0YShXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NU
UkVBTShkYXRhLT5zdHJlYW0uZ2V0KCkpLCBkYXRhUmVmZXJlbmNlLmRhdGEoKSwgZGF0YVJlZmVy
ZW5jZS5zaXplKCkpOwotICAgICAgICB9Ci0gICAgICAgIGdfdGFza19yZXR1cm5fcG9pbnRlcih0
YXNrLmdldCgpLCBkYXRhLT5zdHJlYW0uZ2V0KCksIGdfb2JqZWN0X3VucmVmKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkYXRhLT5yZXF1ZXN0RmFpbGVkKCkpIHsKLSAgICAg
ICAgLy8gUmVzb3VyY2VSZXF1ZXN0IGZhaWxlZCBvciBpdCB3YXMgY2FuY2VsbGVkLiBJdCBkb2Vz
bid0IG1hdHRlciBoZXJlIHRoZSBlcnJvciBvciBpZiBpdCB3YXMgY2FuY2VsbGVkLAotICAgICAg
ICAvLyBiZWNhdXNlIHRoYXQncyBhbHJlYWR5IGhhbmRsZWQgYnkgdGhlIHJlc291cmNlIGhhbmRs
ZSBjbGllbnQsIHdlIGp1c3Qgd2FudCB0byBub3RpZnkgdGhlIFVJIHByb2Nlc3MKLSAgICAgICAg
Ly8gdG8gc3RvcCByZWFkaW5nIGRhdGEgZnJvbSB0aGUgdXNlciBpbnB1dCBzdHJlYW0uIElmIFVJ
IHByb2Nlc3MgYWxyZWFkeSBzZW50IGFsbCB0aGUgZGF0YSB3ZSBzaW1wbHkKLSAgICAgICAgLy8g
ZmluaXNoIHNpbGVudGx5LgotICAgICAgICBpZiAoIXdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW1GaW5pc2hlZChXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTShkYXRhLT5zdHJlYW0u
Z2V0KCkpKSkKLSAgICAgICAgICAgIG1fY2hpbGRQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpDdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eTo6U3RvcExvYWRpbmcoY3VzdG9tUHJvdG9jb2xJRCksIDAp
OwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB3ZWJraXRTb3VwUmVxdWVzdElucHV0
U3RyZWFtQWRkRGF0YShXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTShkYXRhLT5zdHJl
YW0uZ2V0KCkpLCBkYXRhUmVmZXJlbmNlLmRhdGEoKSwgZGF0YVJlZmVyZW5jZS5zaXplKCkpOwot
fQotCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGw6OmRpZFJlY2VpdmVSZXNwb25zZSh1
aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKLXsKLSAgICBXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YSogZGF0YSA9IG1fY3Vz
dG9tUHJvdG9jb2xNYXAuZ2V0KGN1c3RvbVByb3RvY29sSUQpOwotICAgIC8vIFRoZSBkYXRhIG1p
Z2h0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHJlcXVlc3QgbWFwIGlmIGFuIGVycm9yIGhh
cHBlbmVkIGV2ZW4gYmVmb3JlIHRoaXMgcG9pbnQuCi0gICAgaWYgKCFkYXRhKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBBU1NFUlQoZGF0YS0+dGFzayk7Ci0KLSAgICBXZWJLaXRTb3VwUmVxdWVz
dEdlbmVyaWMqIHJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUMoZ190YXNrX2dl
dF9zb3VyY2Vfb2JqZWN0KGRhdGEtPnRhc2spKTsKLSAgICB3ZWJraXRTb3VwUmVxdWVzdEdlbmVy
aWNTZXRDb250ZW50TGVuZ3RoKHJlcXVlc3QsIHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0
aCgpID8gcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkgOiAtMSk7Ci0gICAgd2Via2l0
U291cFJlcXVlc3RHZW5lcmljU2V0Q29udGVudFR5cGUocmVxdWVzdCwgIXJlc3BvbnNlLm1pbWVU
eXBlKCkuaXNFbXB0eSgpID8gcmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCkuZGF0YSgpIDogMCk7
Ci19Ci0KLXZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbDo6ZGlkRmluaXNoTG9hZGluZyh1
aW50NjRfdCBjdXN0b21Qcm90b2NvbElEKQotewotICAgIEFTU0VSVChtX2N1c3RvbVByb3RvY29s
TWFwLmNvbnRhaW5zKGN1c3RvbVByb3RvY29sSUQpKTsKLSAgICBtX2N1c3RvbVByb3RvY29sTWFw
LnJlbW92ZShjdXN0b21Qcm90b2NvbElEKTsKLX0KLQotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFn
ZXJJbXBsOjpzdGFydChHVGFzayogdGFzaykKLXsKLSAgICB1aW50NjRfdCBjdXN0b21Qcm90b2Nv
bElEID0gZ2VuZXJhdGVDdXN0b21Qcm90b2NvbElEKCk7Ci0gICAgV2ViS2l0U291cFJlcXVlc3RH
ZW5lcmljKiByZXF1ZXN0ID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDKGdfdGFza19nZXRf
c291cmNlX29iamVjdCh0YXNrKSk7Ci0gICAgbV9jdXN0b21Qcm90b2NvbE1hcC5zZXQoY3VzdG9t
UHJvdG9jb2xJRCwgc3RkOjptYWtlX3VuaXF1ZTxXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YT4odGFz
aywgcmVxdWVzdCkpOwotCi0gICAgbV9jaGlsZFByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OkN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5OjpTdGFydExvYWRpbmcoY3VzdG9tUHJvdG9jb2xJRCwgKndl
YmtpdFNvdXBSZXF1ZXN0R2VuZXJpY0dldFJlcXVlc3QocmVxdWVzdCkpLCAwKTsKLX0KLQotR0lu
cHV0U3RyZWFtKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsOjpmaW5pc2goR1Rhc2sqIHRhc2ss
IEdFcnJvcioqIGVycm9yKQotewotICAgIGdwb2ludGVyIGlucHV0U3RyZWFtID0gZ190YXNrX3By
b3BhZ2F0ZV9wb2ludGVyKHRhc2ssIGVycm9yKTsKLSAgICByZXR1cm4gaW5wdXRTdHJlYW0gPyBH
X0lOUFVUX1NUUkVBTShpbnB1dFN0cmVhbSkgOiAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9z
b3VwL0N1c3RvbVByb3RvY29sTWFuYWdlckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1h
bmFnZXJJbXBsLmgJKHJldmlzaW9uIDIxMDM2MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL0N1c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlckltcGwuaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
SWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2lmbmRlZiBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsX2gKLSNkZWZpbmUg
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbF9oCi0KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYktpdFNv
dXBSZXF1ZXN0R2VuZXJpY0NsaWVudC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5j
bHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIERhdGFSZWZlcmVuY2U7Ci19IC8vIG5hbWVzcGFj
ZSBJUEMKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUmVzb3VyY2VFcnJvcjsKLWNsYXNz
IFJlc291cmNlUmVzcG9uc2U7Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBDaGlsZFByb2Nlc3M7Ci1zdHJ1Y3QgV2ViU291cFJlcXVlc3RBc3lu
Y0RhdGE7Ci0KLWNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGwgOiBwdWJsaWMgV2ViQ29y
ZTo6V2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsKTsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBD
dXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsKENoaWxkUHJvY2VzcyopOwotICAgIH5DdXN0b21Qcm90
b2NvbE1hbmFnZXJJbXBsKCk7Ci0KLSAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lKGNvbnN0IFN0cmlu
ZyYpOwotICAgIGJvb2wgc3VwcG9ydHNTY2hlbWUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICB2b2lk
IGRpZEZhaWxXaXRoRXJyb3IodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciYpOwotICAgIHZvaWQgZGlkTG9hZERhdGEodWludDY0X3QgY3VzdG9t
UHJvdG9jb2xJRCwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7Ci0gICAgdm9pZCBkaWRSZWNl
aXZlUmVzcG9uc2UodWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYpOwotICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBjdXN0
b21Qcm90b2NvbElEKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHN0YXJ0KEdUYXNrKikgZmluYWw7
Ci0gICAgR0lucHV0U3RyZWFtKiBmaW5pc2goR1Rhc2sqLCBHRXJyb3IqKikgZmluYWw7Ci0KLSAg
ICBDaGlsZFByb2Nlc3MqIG1fY2hpbGRQcm9jZXNzOwotICAgIEdSZWZQdHI8R1B0ckFycmF5PiBt
X3NjaGVtZXM7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRyPFdlYlNvdXBS
ZXF1ZXN0QXN5bmNEYXRhPj4gbV9jdXN0b21Qcm90b2NvbE1hcDsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbF9oCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0
b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJT
b3VwLmNwcAkocmV2aXNpb24gMjEwMzYyKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwLDQxICsyMCw3NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkN1c3RvbVByb3RvY29sTWFuYWdlci5oIgogCi0jaW5jbHVkZSAiQ2hpbGRQcm9jZXNz
LmgiCi0jaW5jbHVkZSAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbC5oIgogI2luY2x1ZGUgIkN1
c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgiCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzLmgiCisjaW5jbHVkZSAiV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
RXJyb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU291cE5ldHdv
cmtTZXNzaW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMu
aD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jb25zdCBjaGFyKiBDdXN0b21Qcm90b2Nv
bE1hbmFnZXI6OnN1cHBsZW1lbnROYW1lKCkKLXsKLSAgICByZXR1cm4gIkN1c3RvbVByb3RvY29s
TWFuYWdlciI7Ci19CiAKLUN1c3RvbVByb3RvY29sTWFuYWdlcjo6Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyKENoaWxkUHJvY2VzcyogY2hpbGRQcm9jZXNzKQotICAgIDogbV9jaGlsZFByb2Nlc3MoY2hp
bGRQcm9jZXNzKQotICAgICwgbV9tZXNzYWdlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5h
cHBsZS5XZWJLaXQuQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyIikpCi0gICAgLCBtX2ltcGwoc3RkOjpt
YWtlX3VuaXF1ZTxDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsPihjaGlsZFByb2Nlc3MpKQorQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyOjpXZWJTb3VwUmVxdWVzdEFzeW5jRGF0YTo6V2ViU291cFJlcXVl
c3RBc3luY0RhdGEoR1JlZlB0cjxHVGFzaz4mJiByZXF1ZXN0VGFzaywgV2ViS2l0U291cFJlcXVl
c3RHZW5lcmljKiByZXF1ZXN0R2VuZXJpYykKKyAgICA6IHRhc2soV1RGTW92ZShyZXF1ZXN0VGFz
aykpCisgICAgLCByZXF1ZXN0KHJlcXVlc3RHZW5lcmljKQorICAgICwgY2FuY2VsbGFibGUoZ190
YXNrX2dldF9jYW5jZWxsYWJsZSh0YXNrLmdldCgpKSkKIHsKKyAgICAvLyBJZiB0aGUgc3RydWN0
IGNvbnRhaW5zIGEgbnVsbCByZXF1ZXN0LCBpdCBpcyBiZWNhdXNlIHRoZSByZXF1ZXN0IGZhaWxl
ZC4KKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKHJlcXVlc3QpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJnJlcXVlc3QpKTsKIH0KIAotdm9pZCBDdXN0b21Qcm90b2Nv
bE1hbmFnZXI6OmluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlv
bikKK0N1c3RvbVByb3RvY29sTWFuYWdlcjo6V2ViU291cFJlcXVlc3RBc3luY0RhdGE6On5XZWJT
b3VwUmVxdWVzdEFzeW5jRGF0YSgpCiB7Ci0gICAgY29ubmVjdGlvbi0+YWRkV29ya1F1ZXVlTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9tZXNzYWdlUXVldWUuZ2V0KCksIHRoaXMpOworICAgIGlmIChyZXF1ZXN0
KQorICAgICAgICBnX29iamVjdF9yZW1vdmVfd2Vha19wb2ludGVyKEdfT0JKRUNUKHJlcXVlc3Qp
LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnJlcXVlc3QpKTsKIH0KIAotdm9pZCBDdXN0b21Q
cm90b2NvbE1hbmFnZXI6OmluaXRpYWxpemUoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMpCitjbGFzcyBDdXN0b21Qcm90b2NvbFJlcXVlc3RDbGllbnQg
ZmluYWwgOiBwdWJsaWMgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgQ3VzdG9tUHJvdG9jb2xSZXF1ZXN0Q2xpZW50JiBzaW5nbGV0b24oKQorICAg
IHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEN1c3RvbVByb3RvY29sUmVxdWVzdENs
aWVudD4gY2xpZW50OworICAgICAgICByZXR1cm4gY2xpZW50OworICAgIH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIHN0YXJ0UmVxdWVzdChHUmVmUHRyPEdUYXNrPiYmIHRhc2spIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJlcXVlc3QgPSBXRUJLSVRf
U09VUF9SRVFVRVNUX0dFTkVSSUMoZ190YXNrX2dldF9zb3VyY2Vfb2JqZWN0KHRhc2suZ2V0KCkp
KTsKKyAgICAgICAgYXV0byogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyID0gTmV0d29ya1Byb2Nlc3M6
OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyPigpOworICAgICAg
ICBpZiAoIWN1c3RvbVByb3RvY29sTWFuYWdlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBhdXRvIGN1c3RvbVByb3RvY29sSUQgPSBjdXN0b21Qcm90b2NvbE1hbmFnZXItPmFkZEN1
c3RvbVByb3RvY29sKHN0ZDo6bWFrZV91bmlxdWU8Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpXZWJT
b3VwUmVxdWVzdEFzeW5jRGF0YT4oV1RGTW92ZSh0YXNrKSwgcmVxdWVzdCkpOworICAgICAgICBj
dXN0b21Qcm90b2NvbE1hbmFnZXItPnN0YXJ0TG9hZGluZyhjdXN0b21Qcm90b2NvbElELCB3ZWJr
aXRTb3VwUmVxdWVzdEdlbmVyaWNHZXRSZXF1ZXN0KHJlcXVlc3QpKTsKKyAgICB9Cit9OworCit2
b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6cmVnaXN0ZXJQcm90b2NvbENsYXNzKCkKIHsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRG
b3JDdXN0b21Qcm90b2NvbHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlZ2lzdGVyU2NoZW1lKHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHNbaV0pOworICAg
IHN0YXRpY19jYXN0PFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY0NsYXNzKj4oZ190eXBlX2NsYXNz
X3JlZihXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQykpLT5jbGllbnQgPSAmQ3VzdG9t
UHJvdG9jb2xSZXF1ZXN0Q2xpZW50OjpzaW5nbGV0b24oKTsKIH0KIAogdm9pZCBDdXN0b21Qcm90
b2NvbE1hbmFnZXI6OnJlZ2lzdGVyU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQogewotICAg
IG1faW1wbC0+cmVnaXN0ZXJTY2hlbWUoc2NoZW1lKTsKKyAgICBpZiAoIW1fcmVnaXN0ZXJlZFNj
aGVtZXMpCisgICAgICAgIG1fcmVnaXN0ZXJlZFNjaGVtZXMgPSBhZG9wdEdSZWYoZ19wdHJfYXJy
YXlfbmV3X3dpdGhfZnJlZV9mdW5jKGdfZnJlZSkpOworCisgICAgaWYgKG1fcmVnaXN0ZXJlZFNj
aGVtZXMtPmxlbikKKyAgICAgICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QobV9yZWdp
c3RlcmVkU2NoZW1lcy5nZXQoKSwgbV9yZWdpc3RlcmVkU2NoZW1lcy0+bGVuIC0gMSk7CisgICAg
Z19wdHJfYXJyYXlfYWRkKG1fcmVnaXN0ZXJlZFNjaGVtZXMuZ2V0KCksIGdfc3RyZHVwKHNjaGVt
ZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZ19wdHJfYXJyYXlfYWRkKG1fcmVnaXN0ZXJlZFNjaGVt
ZXMuZ2V0KCksIG51bGxwdHIpOworCisgICAgYXV0byogZ2VuZXJpY1JlcXVlc3RDbGFzcyA9IHN0
YXRpY19jYXN0PFNvdXBSZXF1ZXN0Q2xhc3MqPihnX3R5cGVfY2xhc3NfcmVmKFdFQktJVF9UWVBF
X1NPVVBfUkVRVUVTVF9HRU5FUklDKSk7CisgICAgZ2VuZXJpY1JlcXVlc3RDbGFzcy0+c2NoZW1l
cyA9IGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcioqPihyZWludGVycHJldF9jYXN0PGNoYXIqKj4obV9y
ZWdpc3RlcmVkU2NoZW1lcy0+cGRhdGEpKTsKKyAgICBzb3VwX3Nlc3Npb25fYWRkX2ZlYXR1cmVf
YnlfdHlwZShTb3VwTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkuc291cFNlc3Npb24o
KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0dFTkVSSUMpOwogfQogCiB2b2lkIEN1c3RvbVBy
b3RvY29sTWFuYWdlcjo6dW5yZWdpc3RlclNjaGVtZShjb25zdCBTdHJpbmcmKQpAQCAtNjQsMzAg
KzEwMCwxMDIgQEAgdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OnVucmVnaXN0ZXJTYwogCiBi
b29sIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6c3VwcG9ydHNTY2hlbWUoY29uc3QgU3RyaW5nJiBz
Y2hlbWUpCiB7Ci0gICAgcmV0dXJuIG1faW1wbC0+c3VwcG9ydHNTY2hlbWUoc2NoZW1lKTsKLX0K
KyAgICBpZiAoc2NoZW1lLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLXZvaWQg
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpkaWRGYWlsV2l0aEVycm9yKHVpbnQ2NF90IGN1c3RvbVBy
b3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAgIG1f
aW1wbC0+ZGlkRmFpbFdpdGhFcnJvcihjdXN0b21Qcm90b2NvbElELCBlcnJvcik7CisgICAgQ1N0
cmluZyBjU2NoZW1lID0gc2NoZW1lLnV0ZjgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9yZWdpc3RlcmVkU2NoZW1lcy0+bGVuOyArK2kpIHsKKyAgICAgICAgaWYgKGNTY2hlbWUg
PT0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfcHRyX2FycmF5X2luZGV4KG1fcmVnaXN0ZXJlZFNjaGVt
ZXMuZ2V0KCksIGkpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBDdXN0b21Qcm90b2NvbE1hbmFnZXI6OmRpZExvYWREYXRh
KHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0
YVJlZmVyZW5jZSkKK3ZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpkaWRGYWlsV2l0aEVycm9y
KHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQog
ewotICAgIG1faW1wbC0+ZGlkTG9hZERhdGEoY3VzdG9tUHJvdG9jb2xJRCwgZGF0YVJlZmVyZW5j
ZSk7CisgICAgYXV0byogZGF0YSA9IG1fY3VzdG9tUHJvdG9jb2xNYXAuZ2V0KGN1c3RvbVByb3Rv
Y29sSUQpOworICAgIEFTU0VSVChkYXRhKTsKKworICAgIC8vIEVpdGhlciB3ZSBoYXZlbid0IHN0
YXJ0ZWQgcmVhZGluZyB0aGUgc3RyZWFtIHlldCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGNv
bXBsZXRlIHRoZQorICAgIC8vIHRhc2sgZmlyc3QsIG9yIHdlIGZhaWxlZCByZWFkaW5nIGl0IGFu
ZCB0aGUgdGFzayB3YXMgYWxyZWFkeSBjb21wbGV0ZWQgYnkgZGlkTG9hZERhdGEoKS4KKyAgICBB
U1NFUlQoIWRhdGEtPnN0cmVhbSB8fCAhZGF0YS0+dGFzayk7CisKKyAgICBpZiAoIWRhdGEtPnN0
cmVhbSkgeworICAgICAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gc3RkOjpleGNoYW5nZShkYXRh
LT50YXNrLCBudWxscHRyKTsKKyAgICAgICAgQVNTRVJUKHRhc2suZ2V0KCkpOworICAgICAgICBn
X3Rhc2tfcmV0dXJuX25ld19lcnJvcih0YXNrLmdldCgpLCBnX3F1YXJrX2Zyb21fc3RyaW5nKGVy
cm9yLmRvbWFpbigpLnV0ZjgoKS5kYXRhKCkpLAorICAgICAgICAgICAgZXJyb3IuZXJyb3JDb2Rl
KCksICIlcyIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1EaWRGYWlsV2l0
aEVycm9yKFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKGRhdGEtPnN0cmVhbS5nZXQo
KSksIGVycm9yKTsKKworICAgIHJlbW92ZUN1c3RvbVByb3RvY29sKGN1c3RvbVByb3RvY29sSUQp
OwogfQogCi12b2lkIEN1c3RvbVByb3RvY29sTWFuYWdlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVp
bnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLCB1aW50MzJfdCkKK3ZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpkaWRMb2Fk
RGF0YSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
IGRhdGFSZWZlcmVuY2UpCiB7Ci0gICAgbV9pbXBsLT5kaWRSZWNlaXZlUmVzcG9uc2UoY3VzdG9t
UHJvdG9jb2xJRCwgcmVzcG9uc2UpOworICAgIGF1dG8qIGRhdGEgPSBtX2N1c3RvbVByb3RvY29s
TWFwLmdldChjdXN0b21Qcm90b2NvbElEKTsKKyAgICAvLyBUaGUgZGF0YSBtaWdodCBoYXZlIGJl
ZW4gcmVtb3ZlZCBmcm9tIHRoZSByZXF1ZXN0IG1hcCBpZiBhIHByZXZpb3VzIGNodW5rIGZhaWxl
ZAorICAgIC8vIGFuZCBhIG5ldyBtZXNzYWdlIHdhcyBzZW50IGJ5IHRoZSBVSSBwcm9jZXNzIGJl
Zm9yZSBiZWluZyBub3RpZmllZCBhYm91dCB0aGUgZmFpbHVyZS4KKyAgICBpZiAoIWRhdGEpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghZGF0YS0+c3RyZWFtKSB7CisgICAgICAgIEdSZWZQ
dHI8R1Rhc2s+IHRhc2sgPSBzdGQ6OmV4Y2hhbmdlKGRhdGEtPnRhc2ssIG51bGxwdHIpOworICAg
ICAgICBBU1NFUlQodGFzay5nZXQoKSk7CisKKyAgICAgICAgZ29mZnNldCBzb3VwQ29udGVudExl
bmd0aCA9IHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF9sZW5ndGgoU09VUF9SRVFVRVNUKGdfdGFz
a19nZXRfc291cmNlX29iamVjdCh0YXNrLmdldCgpKSkpOworICAgICAgICB1aW50NjRfdCBjb250
ZW50TGVuZ3RoID0gc291cENvbnRlbnRMZW5ndGggPT0gLTEgPyAwIDogc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHNvdXBDb250ZW50TGVuZ3RoKTsKKyAgICAgICAgaWYgKCFkYXRhUmVmZXJlbmNlLnNp
emUoKSkgeworICAgICAgICAgICAgLy8gRW1wdHkgcmVwbHksIGp1c3QgY3JlYXRlIGFuZCBlbXB0
eSBHTWVtb3J5SW5wdXRTdHJlYW0uCisgICAgICAgICAgICBkYXRhLT5zdHJlYW0gPSBnX21lbW9y
eV9pbnB1dF9zdHJlYW1fbmV3KCk7CisgICAgICAgIH0gZWxzZSBpZiAoZGF0YVJlZmVyZW5jZS5z
aXplKCkgPT0gY29udGVudExlbmd0aCkgeworICAgICAgICAgICAgLy8gV2UgZG9uJ3QgZXhwZWN0
IG1vcmUgZGF0YSwgc28gd2UgY2FuIGp1c3QgY3JlYXRlIGEgR01lbW9yeUlucHV0U3RyZWFtIHdp
dGggYWxsIHRoZSBkYXRhLgorICAgICAgICAgICAgZGF0YS0+c3RyZWFtID0gZ19tZW1vcnlfaW5w
dXRfc3RyZWFtX25ld19mcm9tX2RhdGEoZ19tZW1kdXAoZGF0YVJlZmVyZW5jZS5kYXRhKCksIGRh
dGFSZWZlcmVuY2Uuc2l6ZSgpKSwgY29udGVudExlbmd0aCwgZ19mcmVlKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGV4cGVjdCBtb3JlIGRhdGEgY2h1bmtzIGZyb20gdGhl
IFVJIHByb2Nlc3MuCisgICAgICAgICAgICBkYXRhLT5zdHJlYW0gPSB3ZWJraXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtTmV3KGNvbnRlbnRMZW5ndGgpOworICAgICAgICAgICAgd2Via2l0U291cFJl
cXVlc3RJbnB1dFN0cmVhbUFkZERhdGEoV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0o
ZGF0YS0+c3RyZWFtLmdldCgpKSwgZGF0YVJlZmVyZW5jZS5kYXRhKCksIGRhdGFSZWZlcmVuY2Uu
c2l6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICBnX3Rhc2tfcmV0dXJuX3BvaW50ZXIodGFzay5n
ZXQoKSwgZGF0YS0+c3RyZWFtLmdldCgpLCBnX29iamVjdF91bnJlZik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoZGF0YS0+Y2Fu
Y2VsbGFibGUuZ2V0KCkpIHx8ICFkYXRhLT5yZXF1ZXN0KSB7CisgICAgICAgIC8vIFJlc291cmNl
UmVxdWVzdCBmYWlsZWQgb3IgaXQgd2FzIGNhbmNlbGxlZC4gSXQgZG9lc24ndCBtYXR0ZXIgaGVy
ZSB0aGUgZXJyb3Igb3IgaWYgaXQgd2FzIGNhbmNlbGxlZCwKKyAgICAgICAgLy8gYmVjYXVzZSB0
aGF0J3MgYWxyZWFkeSBoYW5kbGVkIGJ5IHRoZSByZXNvdXJjZSBoYW5kbGUgY2xpZW50LCB3ZSBq
dXN0IHdhbnQgdG8gbm90aWZ5IHRoZSBVSSBwcm9jZXNzCisgICAgICAgIC8vIHRvIHN0b3AgcmVh
ZGluZyBkYXRhIGZyb20gdGhlIHVzZXIgaW5wdXQgc3RyZWFtLiBJZiBVSSBwcm9jZXNzIGFscmVh
ZHkgc2VudCBhbGwgdGhlIGRhdGEgd2Ugc2ltcGx5CisgICAgICAgIC8vIGZpbmlzaCBzaWxlbnRs
eS4KKyAgICAgICAgaWYgKCF3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtRmluaXNoZWQoV0VC
S0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0oZGF0YS0+c3RyZWFtLmdldCgpKSkpCisgICAg
ICAgICAgICBzdG9wTG9hZGluZyhjdXN0b21Qcm90b2NvbElEKTsKKworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUFkZERhdGEoV0VCS0lU
X1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0oZGF0YS0+c3RyZWFtLmdldCgpKSwgZGF0YVJlZmVy
ZW5jZS5kYXRhKCksIGRhdGFSZWZlcmVuY2Uuc2l6ZSgpKTsKK30KKwordm9pZCBDdXN0b21Qcm90
b2NvbE1hbmFnZXI6OmRpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElE
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgdWludDMyX3QpCit7CisgICAgYXV0
byogZGF0YSA9IG1fY3VzdG9tUHJvdG9jb2xNYXAuZ2V0KGN1c3RvbVByb3RvY29sSUQpOworICAg
IC8vIFRoZSBkYXRhIG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHJlcXVlc3QgbWFw
IGlmIGFuIGVycm9yIGhhcHBlbmVkIGV2ZW4gYmVmb3JlIHRoaXMgcG9pbnQuCisgICAgaWYgKCFk
YXRhKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoZGF0YS0+dGFzayk7CisKKyAgICBX
ZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0dF
TkVSSUMoZ190YXNrX2dldF9zb3VyY2Vfb2JqZWN0KGRhdGEtPnRhc2suZ2V0KCkpKTsKKyAgICB3
ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZXRDb250ZW50TGVuZ3RoKHJlcXVlc3QsIHJlc3BvbnNl
LmV4cGVjdGVkQ29udGVudExlbmd0aCgpID8gcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
KCkgOiAtMSk7CisgICAgd2Via2l0U291cFJlcXVlc3RHZW5lcmljU2V0Q29udGVudFR5cGUocmVx
dWVzdCwgIXJlc3BvbnNlLm1pbWVUeXBlKCkuaXNFbXB0eSgpID8gcmVzcG9uc2UubWltZVR5cGUo
KS51dGY4KCkuZGF0YSgpIDogMCk7CiB9CiAKIHZvaWQgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpk
aWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQpCiB7Ci0gICAgbV9pbXBs
LT5kaWRGaW5pc2hMb2FkaW5nKGN1c3RvbVByb3RvY29sSUQpOworICAgIEFTU0VSVChtX2N1c3Rv
bVByb3RvY29sTWFwLmNvbnRhaW5zKGN1c3RvbVByb3RvY29sSUQpKTsKKyAgICByZW1vdmVDdXN0
b21Qcm90b2NvbChjdXN0b21Qcm90b2NvbElEKTsKIH0KIAotdm9pZCBDdXN0b21Qcm90b2NvbE1h
bmFnZXI6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QodWludDY0X3QsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKQordm9pZCBD
dXN0b21Qcm90b2NvbE1hbmFnZXI6Ondhc1JlZGlyZWN0ZWRUb1JlcXVlc3QodWludDY0X3QsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0JKHJldmlzaW9uIDIx
MDM2MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNz
aW9uQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyMCwxMCArMzIwLDEwIEBAIHN0YXRpYyBO
U1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpjb25maWcKICAgICByZXR1cm4gW05TVVJMU2Vzc2lv
bkNvbmZpZ3VyYXRpb24gZGVmYXVsdFNlc3Npb25Db25maWd1cmF0aW9uXTsKIH0KIAotc3RhdGlj
IFJlZlB0cjxDdXN0b21Qcm90b2NvbE1hbmFnZXI+JiBnbG9iYWxDdXN0b21Qcm90b2NvbE1hbmFn
ZXIoKQorc3RhdGljIEN1c3RvbVByb3RvY29sTWFuYWdlciomIGdsb2JhbEN1c3RvbVByb3RvY29s
TWFuYWdlcigpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZlB0cjxDdXN0b21Qcm90
b2NvbE1hbmFnZXI+PiBjdXN0b21Qcm90b2NvbE1hbmFnZXI7Ci0gICAgcmV0dXJuIGN1c3RvbVBy
b3RvY29sTWFuYWdlci5nZXQoKTsKKyAgICBzdGF0aWMgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBj
dXN0b21Qcm90b2NvbE1hbmFnZXIgeyBudWxscHRyIH07CisgICAgcmV0dXJuIGN1c3RvbVByb3Rv
Y29sTWFuYWdlcjsKIH0KIAogc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+JiBnbG9iYWxTb3Vy
Y2VBcHBsaWNhdGlvbkF1ZGl0VG9rZW5EYXRhKCkKQEAgLTM5Niw3ICszOTYsNyBAQCBSZWY8TmV0
d29ya1Nlc3Npb24+IE5ldHdvcmtTZXNzaW9uQ29jb2E6CiBOZXR3b3JrU2Vzc2lvbiYgTmV0d29y
a1Nlc3Npb25Db2NvYTo6ZGVmYXVsdFNlc3Npb24oKQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uID0gJk5ldHdvcmtTZXNz
aW9uQ29jb2E6OmNyZWF0ZShXZWJDb3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwg
Z2xvYmFsQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKCkuZ2V0KCkpLmxlYWtSZWYoKTsKKyAgICBzdGF0
aWMgTmV0d29ya1Nlc3Npb24qIHNlc3Npb24gPSAmTmV0d29ya1Nlc3Npb25Db2NvYTo6Y3JlYXRl
KFdlYkNvcmU6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBnbG9iYWxDdXN0b21Qcm90
b2NvbE1hbmFnZXIoKSkubGVha1JlZigpOwogICAgIHJldHVybiAqc2Vzc2lvbjsKIH0KIApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjEwMzYyKQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTA4LDYgKzExMDgsNyBAQAogCQk1
Q0JDOUI4RDFDNjUyNzlDMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0JDOUI4QjFDNjUyNTcz
MDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gKi87IH07CiAJCTVDQkM5QjhFMUM2
NTJDQTAwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQkM5Qjg5MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3
b3JrRGF0YVRhc2suaCAqLzsgfTsKIAkJNUNFODVCMjAxQzg4RTY0QjAwNzBCRkNFIC8qIFBpbmdM
b2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0U4
NUIxRjFDODhFNjQzMDA3MEJGQ0UgLyogUGluZ0xvYWQuaCAqLzsgfTsKKwkJNUNGRUNCMDQxRTFF
RDFDQzAwRjg4NTA0IC8qIEN1c3RvbVByb3RvY29sTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0ZFQ0IwMzFFMUVEMUM4MDBGODg1MDQg
LyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJNjUwMUJEMUExMkYxMjQzNDAw
RTlGMjQ4IC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjg2RjE3MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRs
ZUluc3BlY3Rvci5jcHAgKi87IH07CiAJCTY1OUM1NTFFMTMwMDA2NDEwMDI1QzBDMiAvKiBJbmpl
Y3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0NkE4MjkxMzAwMDE2NDAwMENFQjFDIC8qIElu
amVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5jcHAgKi87IH07CiAJCTY1Qjg2RjFF
MTJGMTFERTMwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODZGMTgxMkYxMUQ3QjAwQjdERDhBIC8q
IFdLQnVuZGxlSW5zcGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTMyNDUsNiArMzI0Niw3IEBACiAJCTVDQkM5Qjg5MUM2NTI0QTUwMEE4
RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTmV0d29ya0RhdGFUYXNrLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRh
c2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCQzlCOEIxQzY1MjU3MzAwQThG
RENGIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gTmV0d29ya0RhdGFUYXNrQ29jb2EubW07IHBhdGggPSBOZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNUNFODVCMUYxQzg4RTY0MzAwNzBCRkNFIC8qIFBpbmdMb2FkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBpbmdMb2FkLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vz
cy9QaW5nTG9hZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0ZFQ0IwMzFFMUVE
MUM4MDBGODg1MDQgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEN1c3RvbVByb3RvY29sTWFuYWdlci5jcHA7IHBhdGggPSBO
ZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQ0NDJBNTUxNkQ1ODU2NzAwQUMzMzMxIC8q
IFBsdWdpblNlcnZpY2UuZW50aXRsZW1lbnRzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBQbHVnaW5TZXJ2aWNlLmVudGl0
bGVtZW50czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNURBRDczRjExMTZGRjkwQzAw
RUU1Mzk2IC8qIEJhc2VUYXJnZXQueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBw
YXRoID0gQmFzZVRhcmdldC54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NjU0NkE4MjkxMzAwMDE2NDAwMENFQjFDIC8qIEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9h
ZENsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3Rl
ZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNTkyMSw2ICs1OTIzLDcgQEAKIAkJNUMxNDI2RjIxQzIzRjgyRDAwRDQxMTgzIC8q
IEN1c3RvbVByb3RvY29scyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJNUNGRUNCMDMxRTFFRDFDODAwRjg4NTA0IC8qIEN1c3RvbVByb3RvY29sTWFuYWdl
ci5jcHAgKi8sCiAJCQkJNUMxNDI3MUExQzIzRjhCRjAwRDQxMTgzIC8qIENvY29hICovLAogCQkJ
CTVDMTQyNzE0MUMyM0Y4QjAwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXIuaCAqLywK
IAkJCQk1QzE0MjcxNTFDMjNGOEIwMDBENDExODMgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLm1l
c3NhZ2VzLmluICovLApAQCAtOTQ5MCw2ICs5NDkzLDcgQEAKIAkJCQkxQTA0Mzk3NzEyNEQwMzQ4
MDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTBFQzkw
NzEyNEMwQUI4MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUEwRUM5MTAxMjRDMEFGNTAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25u
ZWN0aW9uTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0ZFQ0IwNDFFMUVEMUNDMDBG
ODg1MDQgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
Nzg2NUI5MTZDQUM3MTUwMEFDRTgzQSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXJN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyQkI2RDAxNDExN0I0RDAw
MEYzNUQ0IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBMkQ5MEQzMTI4MUM5NjYwMDFFQjk2MiAvKiBQbHVnaW5Qcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>