<?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>119493</bug_id>
          
          <creation_ts>2013-08-05 13:52:26 -0700</creation_ts>
          <short_desc>(NetworkProcess)  Sync XHRs should load using async ResourceHandles, not ResourceHandle::loadResourceSynchronously</short_desc>
          <delta_ts>2013-09-04 23:16:50 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>ap</cc>
    
    <cc>bshafiei</cc>
    
    <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>914676</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-08-05 13:52:26 -0700</bug_when>
    <thetext>(NetworkProcess)  Sync XHRs should load using async ResourceHandles, not ResourceHandle::loadResourceSynchronously

Currently when any WebProcess does a sync XHR, the NetworkProcess main thread is blocked.  This will free it up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916830</commentid>
    <comment_count>1</comment_count>
      <attachid>208663</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-08-13 11:51:36 -0700</bug_when>
    <thetext>Created attachment 208663
Patch for EWS

I&apos;m getting a lot of &quot;variety&quot; in my layout test results locally, so while I&apos;m trying to sort through that I&apos;d like EWS to take a swipe at this.

There&apos;s probably still unneeded cruft, no Changelog, etc etc.  Just wanna see what the bots say</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916832</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-13 11:54:33 -0700</bug_when>
    <thetext>Attachment 208663 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/network/SynchronousLoaderClient.cpp&apos;, u&apos;Source/WebCore/platform/network/SynchronousLoaderClient.h&apos;, u&apos;Source/WebCore/platform/network/mac/SynchronousLoaderClient.mm&apos;, u&apos;Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h&apos;, u&apos;Source/WebKit2/NetworkProcess/HostRecord.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/HostRecord.h&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkProcess.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.h&apos;, u&apos;Source/WebKit2/NetworkProcess/SchedulableLoader.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/SchedulableLoader.h&apos;, u&apos;Source/WebKit2/NetworkProcess/SyncNetworkResourceLoader.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/SyncNetworkResourceLoader.h&apos;, u&apos;Source/WebKit2/NetworkProcess/SynchronousLoadController.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/SynchronousLoadController.h&apos;, u&apos;Source/WebKit2/NetworkProcess/SynchronousLoadController.mm&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp&apos;]&quot; exit_code: 1
Source/WebKit2/NetworkProcess/SynchronousLoadController.h:26:  #ifndef header guard has wrong style, please use: SynchronousLoadController_h  [build/header_guard] [5]
Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:299:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit2/NetworkProcess/SynchronousLoadController.cpp:60:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit2/NetworkProcess/SynchronousLoadController.cpp:82:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 4 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916931</commentid>
    <comment_count>3</comment_count>
      <attachid>208687</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-08-13 16:09:32 -0700</bug_when>
    <thetext>Created attachment 208687
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916947</commentid>
    <comment_count>4</comment_count>
      <attachid>208687</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-08-13 17:02:25 -0700</bug_when>
    <thetext>Comment on attachment 208687
Patch v1 

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests (Covered by plenty of existing tests).

How did you test what happens with authentication?

We have bug 8342 tracking a request to handle it, but I&apos;m not sure how it should work conceptually, and using an async handle would send auth callbacks. Although using SynchronousLoaderClient should do the right wrong thing I guess.

&gt; Source/WebCore/ChangeLog:13
&gt; +        * platform/network/SynchronousLoaderClient.cpp:

I&apos;m now wondering if this class should be named SynchronousHandleClient.

&gt; Source/WebCore/platform/network/SynchronousLoaderClient.h:50
&gt; +    static ResourceError platformBadSyncXHRResponseError();

&quot;Synchronous&quot;?

But more importantly, the new name is even less clear than the old one. What is so special about sync XHR responses that they deserve their own kind of error? This conflates network response and the mechanism we use to get it.

&gt; Source/WebKit2/ChangeLog:14
&gt; +        The concept is the NetworkResourceLoader is the single loader class that does asynchronous loads, but the existence of a
&gt; +        SynchronousLoadController holds off on constantly messaging back to the WebProcess and instead accumulates the result of the load.

This seems reasonable to me, and I&apos;d like this even more if the class had a descriptive name. SynchronousLoadIPCThrottle? SynchronousLoadResponseAccumulator?

&gt; Source/WebKit2/ChangeLog:95
&gt; +        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
&gt; +        (WebKit::WebPlatformStrategies::loadResourceSynchronously): Short circuit blocked loads without consulting the NetworkProcess.

Why is this necessary? If it&apos;s easy to do, I&apos;d prefer this check to be in NetworkProcess:
- it&apos;s closer to networking knowledge this way;
- that would a light defense against a rogue WebContent process, not allowing it to ever send requests to blocked ports (talking about the bright future where WebContent has no network access);
- there is no performance impact either way, because good guys don&apos;t do this.

&gt; Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp:-105
&gt; -    HashMap&lt;ResourceLoadIdentifier, RefPtr&lt;SyncNetworkResourceLoader&gt;&gt;::iterator syncEnd = m_syncNetworkResourceLoaders.end();
&gt; -    for (HashMap&lt;ResourceLoadIdentifier, RefPtr&lt;SyncNetworkResourceLoader&gt;&gt;::iterator i = m_syncNetworkResourceLoaders.begin(); i != syncEnd; ++i)
&gt; -        i-&gt;value-&gt;abort();

How did you test what happens if WebContent process terminates while a sync request is outstanding? This could be a reasonably common user scenario.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h:53
&gt; -    void scheduleLoader(PassRefPtr&lt;SchedulableLoader&gt;);
&gt; +    void scheduleLoader(PassRefPtr&lt;NetworkResourceLoader&gt;);

Unrelated to this patch, but it&apos;s not right to use PassRefPtr here - all callers just pass a raw pointer, and API contract is that the caller still has the pointer in order to be able to call removeLoader(). So, there is no transfer of ownership in theory or practice.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:137
&gt; +    if (m_synchronousLoadController)
&gt; +        m_synchronousLoadController.clear();

Why is this necessary? We have so much logic that depends on whether the load is sync or async that it seems prudent to retain the knowledge until destruction.

Also, there should be no null check before clear().

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:189
&gt; +    // Only notify the WebProcess of the response for asynchronous loads.

The comment seems unnecessary.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:222
&gt; +    if (m_synchronousLoadController) {

We sometimes check isSynchronous(), and other times m_synchronousLoadController. Is there a rule?

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:249
&gt; +        m_synchronousLoadController-&gt;didFinishLoading();
&gt; +    else
&gt; +        send(Messages::WebResourceLoader::DidFinishResourceLoad(finishTime));

Alternatively, we could have IPC adapters for both sync and async cases, and get rid of if() blocks everywhere.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:276
&gt; +        m_synchronousLoadController-&gt;willSendRequest(handle-&gt;firstRequest(), newRequest);

Hmm, what if we have multiple redirects? Sounds like this should be current, not first.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:304
&gt; +        if (m_synchronousLoadController)
&gt; +            m_synchronousLoadController-&gt;cancel();
&gt; +        else
&gt; +            didFail(m_handle.get(), cancelledError(m_request));

Each instance makes me wish for an &quot;AsynchronousLoadClient&quot; more (not with that name, obviously).

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.h:119
&gt; +    virtual bool isSynchronous() { return m_synchronousLoadController; }

Why is this virtual?

&gt; Source/WebKit2/NetworkProcess/SynchronousLoadController.cpp:36
&gt; +#include &lt;wtf/text/CString.h&gt;

Where is it needed? I can&apos;t see it, or think of a good use for CString in this class.

&gt; Source/WebKit2/NetworkProcess/SynchronousLoadController.h:43
&gt; +
&gt; +

Extra line.

&gt; Source/WebKit2/NetworkProcess/SynchronousLoadController.h:72
&gt; +    OwnPtr&lt;WTF::Vector&lt;uint8_t&gt;&gt; m_responseData;

Please no WTF::

&gt; Source/WebKit2/NetworkProcess/SynchronousLoadController.mm:38
&gt; +void SynchronousLoadController::platformSynthesizeErrorResponse()

I can&apos;t think of a reason why we are doing this for sync responses, but not for async ones. Probably just not thinking hard enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916994</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-08-13 21:22:46 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 208687 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=208687&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        No new tests (Covered by plenty of existing tests).
&gt; 
&gt; How did you test what happens with authentication?
&gt; We have bug 8342 tracking a request to handle it, but I&apos;m not sure how it should work conceptually, and using an async handle would send auth callbacks. Although using SynchronousLoaderClient should do the right wrong thing I guess.

As you guessed, authentication with sync XHRs is busted today, and still busted after this patch.

The difference is that after this patch, it can be made to work!
 
&gt; &gt; Source/WebCore/ChangeLog:13
&gt; &gt; +        * platform/network/SynchronousLoaderClient.cpp:
&gt; 
&gt; I&apos;m now wondering if this class should be named SynchronousHandleClient.

Probably!  Renaming that existing code should be a separate patch.

&gt; 
&gt; &gt; Source/WebCore/platform/network/SynchronousLoaderClient.h:50
&gt; &gt; +    static ResourceError platformBadSyncXHRResponseError();
&gt; 
&gt; &quot;Synchronous&quot;?

Yup.

&gt; But more importantly, the new name is even less clear than the old one. What is so special about sync XHR responses that they deserve their own kind of error? This conflates network response and the mechanism we use to get it.

I think the new name is more specific/precise.  That doesn&apos;t make it more clear.  I&apos;m not sure what would make it more clear.

&gt; &gt; Source/WebKit2/ChangeLog:14
&gt; &gt; +        The concept is the NetworkResourceLoader is the single loader class that does asynchronous loads, but the existence of a
&gt; &gt; +        SynchronousLoadController holds off on constantly messaging back to the WebProcess and instead accumulates the result of the load.
&gt; 
&gt; This seems reasonable to me, and I&apos;d like this even more if the class had a descriptive name. SynchronousLoadIPCThrottle? SynchronousLoadResponseAccumulator?

I kind of like that second one.  I&apos;ll play with it.

&gt; &gt; Source/WebKit2/ChangeLog:95
&gt; &gt; +        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
&gt; &gt; +        (WebKit::WebPlatformStrategies::loadResourceSynchronously): Short circuit blocked loads without consulting the NetworkProcess.
&gt; 
&gt; Why is this necessary? 

Turns out that at least one of the existing Sync XHR layout tests relied on it!

&gt; If it&apos;s easy to do, I&apos;d prefer this check to be in NetworkProcess:
&gt; - it&apos;s closer to networking knowledge this way;
&gt; - that would a light defense against a rogue WebContent process, not allowing it to ever send requests to blocked ports (talking about the bright future where WebContent has no network access);
&gt; - there is no performance impact either way, because good guys don&apos;t do this.

I can make that change.

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp:-105
&gt; &gt; -    HashMap&lt;ResourceLoadIdentifier, RefPtr&lt;SyncNetworkResourceLoader&gt;&gt;::iterator syncEnd = m_syncNetworkResourceLoaders.end();
&gt; &gt; -    for (HashMap&lt;ResourceLoadIdentifier, RefPtr&lt;SyncNetworkResourceLoader&gt;&gt;::iterator i = m_syncNetworkResourceLoaders.begin(); i != syncEnd; ++i)
&gt; &gt; -        i-&gt;value-&gt;abort();
&gt; 
&gt; How did you test what happens if WebContent process terminates while a sync request is outstanding? This could be a reasonably common user scenario.

Sync requests are now no different from async requests in this regard.

Our automated tests don&apos;t cover this type of scenario.

I can test it manually as I follow up on all of this feedback.

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h:53
&gt; &gt; -    void scheduleLoader(PassRefPtr&lt;SchedulableLoader&gt;);
&gt; &gt; +    void scheduleLoader(PassRefPtr&lt;NetworkResourceLoader&gt;);
&gt; 
&gt; Unrelated to this patch, but it&apos;s not right to use PassRefPtr here - all callers just pass a raw pointer, and API contract is that the caller still has the pointer in order to be able to call removeLoader(). So, there is no transfer of ownership in theory or practice.

Agreed.

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:137
&gt; &gt; +    if (m_synchronousLoadController)
&gt; &gt; +        m_synchronousLoadController.clear();
&gt; 
&gt; Why is this necessary? We have so much logic that depends on whether the load is sync or async that it seems prudent to retain the knowledge until destruction.

It is not necessary.  I agree with this.
 
&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:222
&gt; &gt; +    if (m_synchronousLoadController) {
&gt; 
&gt; We sometimes check isSynchronous(), and other times m_synchronousLoadController. Is there a rule?

No.  The cruft is leftover from combining Scheduleable and NetworkResource loaders.  I cleaned it up a little bit but didn&apos;t follow through in the end.

Will do.

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:249
&gt; &gt; +        m_synchronousLoadController-&gt;didFinishLoading();
&gt; &gt; +    else
&gt; &gt; +        send(Messages::WebResourceLoader::DidFinishResourceLoad(finishTime));
&gt; 
&gt; Alternatively, we could have IPC adapters for both sync and async cases, and get rid of if() blocks everywhere.

I considered that, but decided against pursuing it because the &quot;do IPC or not&quot; decision is not the only behavior difference.  Maybe some of the NetworkResourceLoader logic could fit into the async adapter, and that approach would be worth pursuing.  I&apos;ll take a closer look.

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:276
&gt; &gt; +        m_synchronousLoadController-&gt;willSendRequest(handle-&gt;firstRequest(), newRequest);
&gt; 
&gt; Hmm, what if we have multiple redirects? Sounds like this should be current, not first.

I agree with you completely.

I was attempting to maintain current behavior (i.e. WebCore::SynchronousLoaderClient).

Like authentication, this is one of those &quot;It would now be really easy to make this work correctly&quot; cases that probably deserves a followup bug.
 
&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:304
&gt; &gt; +        if (m_synchronousLoadController)
&gt; &gt; +            m_synchronousLoadController-&gt;cancel();
&gt; &gt; +        else
&gt; &gt; +            didFail(m_handle.get(), cancelledError(m_request));
&gt; 
&gt; Each instance makes me wish for an &quot;AsynchronousLoadClient&quot; more (not with that name, obviously).

I think you&apos;re right.

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.h:119
&gt; &gt; +    virtual bool isSynchronous() { return m_synchronousLoadController; }
&gt; 
&gt; Why is this virtual?

Because I suck.

&gt; &gt; Source/WebKit2/NetworkProcess/SynchronousLoadController.cpp:36
&gt; &gt; +#include &lt;wtf/text/CString.h&gt;
&gt; 
&gt; Where is it needed? I can&apos;t see it, or think of a good use for CString in this class.

From debugging printf&apos;s while testing the patch.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/SynchronousLoadController.h:43
&gt; &gt; +
&gt; &gt; +
&gt; 
&gt; Extra line.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/SynchronousLoadController.h:72
&gt; &gt; +    OwnPtr&lt;WTF::Vector&lt;uint8_t&gt;&gt; m_responseData;
&gt; 
&gt; Please no WTF::

Okay.

&gt; &gt; Source/WebKit2/NetworkProcess/SynchronousLoadController.mm:38
&gt; &gt; +void SynchronousLoadController::platformSynthesizeErrorResponse()
&gt; 
&gt; I can&apos;t think of a reason why we are doing this for sync responses, but not for async ones. Probably just not thinking hard enough.

I only surmised this through code archeology, and don&apos;t know if it&apos;s actually a valid concern: It seems the &quot;loadResourceSynchronously&quot; code in the WebProcess demands that there be a response, even if the load actually failed before the response came in.

This may or may not still be important today, but I was hesitant to change it since it&apos;s actually exposed to JS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917628</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-08-15 12:22:32 -0700</bug_when>
    <thetext>Will probably have to skip two tests in WK2 as their results will now be different depending on whether or not the network process is enabled.

This is covered in https://bugs.webkit.org/show_bug.cgi?id=119857</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917639</commentid>
    <comment_count>7</comment_count>
      <attachid>208837</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-08-15 12:33:03 -0700</bug_when>
    <thetext>Created attachment 208837
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917642</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-15 12:35:18 -0700</bug_when>
    <thetext>Attachment 208837 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/platform/wk2/TestExpectations&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/network/SynchronousLoaderClient.cpp&apos;, u&apos;Source/WebCore/platform/network/SynchronousLoaderClient.h&apos;, u&apos;Source/WebCore/platform/network/mac/SynchronousLoaderClient.mm&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.h&apos;, u&apos;Source/WebKit2/NetworkProcess/HostRecord.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/HostRecord.h&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkLoaderClient.h&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkProcess.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.h&apos;, u&apos;Source/WebKit2/NetworkProcess/SchedulableLoader.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/SchedulableLoader.h&apos;, u&apos;Source/WebKit2/NetworkProcess/SyncNetworkResourceLoader.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/SyncNetworkResourceLoader.h&apos;, u&apos;Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.h&apos;, u&apos;Source/WebKit2/NetworkProcess/mac/SynchronousNetworkLoaderClient.mm&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;]&quot; exit_code: 1
Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/NetworkProcess/NetworkLoaderClient.h:49:  The parameter name &quot;request&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/NetworkProcess/NetworkLoaderClient.h:55:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.h:59:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.h:44:  The parameter name &quot;request&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.h:50:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 6 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917669</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-08-15 13:38:38 -0700</bug_when>
    <thetext>Style snafu&apos;s fixed locally</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917756</commentid>
    <comment_count>10</comment_count>
      <attachid>208837</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-08-15 15:52:19 -0700</bug_when>
    <thetext>Comment on attachment 208837
Patch v2

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

Looks great to me.

A few things I don&apos;t quite understand yet, and would like to talk through in person:
- simple-cross-origin-denied-events tests;
- what platformBadSynchronousXHRResponseError means;
- is there anything suspicious with 6+1 handling.

&gt; LayoutTests/platform/wk2/TestExpectations:277
&gt; +# https://webkit.org/b/119857
&gt; +http/tests/xmlhttprequest/simple-cross-origin-denied-events-post-sync.html
&gt; +http/tests/xmlhttprequest/simple-cross-origin-denied-events-sync.html

I think that it&apos;s better to put bug URL on the same line with test path. Not quite sure, but some tools might use that.

&gt; Source/WebKit2/ChangeLog:114
&gt; +2013-08-13  Brady Eidson  &lt;beidson@apple.com&gt;

Duplicate ChangeLog.

&gt; Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.cpp:49
&gt; +    // This message is DispatchMessageEvenWhenWaitingForSyncReply to avoid a situation where the NetworkProcess is deadlocked waiting for 6 connections
&gt; +    // waiting for 6 connections to complete while the WebProcess is waiting for a 7th (Synchronous XHR) to complete.

&quot;waiting for 6 connection&quot; twice.

&gt; Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.cpp:53
&gt; +void AsynchronousNetworkLoaderClient::canAuthenticateAgainstProtectionSpace(NetworkResourceLoader* loader, const WebCore::ProtectionSpace&amp; protectionSpace)

Is there a reason to not be using namespace WebCore in this file?

&gt; Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.cpp:99
&gt; +
&gt; +
&gt; +
&gt; +

Lots of extra blank lines.

&gt; Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.h:50
&gt; +    virtual void willSendRequest(NetworkResourceLoader*, WebCore::ResourceRequest&amp; request, const WebCore::ResourceResponse&amp; redirectResponse) OVERRIDE;
&gt; +    virtual void canAuthenticateAgainstProtectionSpace(NetworkResourceLoader*, const WebCore::ProtectionSpace&amp;) OVERRIDE;
&gt; +    virtual void didReceiveResponse(NetworkResourceLoader*, const WebCore::ResourceResponse&amp;) OVERRIDE;
&gt; +    virtual void didReceiveBuffer(NetworkResourceLoader*, WebCore::SharedBuffer*, int encodedDataLength) OVERRIDE;
&gt; +    virtual void didSendData(NetworkResourceLoader*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) OVERRIDE;
&gt; +    virtual void didFinishLoading(NetworkResourceLoader*, double finishTime) OVERRIDE;
&gt; +    virtual void didFail(NetworkResourceLoader*, const WebCore::ResourceError&amp; error) OVERRIDE;

These should all be private. Other code should never know about this derived class and call its methods (create() returns a pointer to NetworkLoaderClient).

&gt; Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.h:61
&gt; +    virtual ~SynchronousNetworkLoaderClient() OVERRIDE;
&gt; +
&gt; +    virtual void willSendRequest(NetworkResourceLoader*, WebCore::ResourceRequest&amp; proposedRequest, const WebCore::ResourceResponse&amp; redirectResponse) OVERRIDE;
&gt; +    virtual void canAuthenticateAgainstProtectionSpace(NetworkResourceLoader*, const WebCore::ProtectionSpace&amp;) OVERRIDE;
&gt; +    virtual void didReceiveResponse(NetworkResourceLoader*, const WebCore::ResourceResponse&amp;) OVERRIDE;
&gt; +    virtual void didReceiveBuffer(NetworkResourceLoader*, WebCore::SharedBuffer*, int encodedDataLength) OVERRIDE;
&gt; +    virtual void didSendData(NetworkResourceLoader*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) OVERRIDE { }
&gt; +    virtual void didFinishLoading(NetworkResourceLoader*, double finishTime) OVERRIDE;
&gt; +    virtual void didFail(NetworkResourceLoader*, const WebCore::ResourceError&amp; error) OVERRIDE;
&gt; +
&gt; +    virtual bool isSynchronous() OVERRIDE { return true; }

These should all be private too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917787</commentid>
    <comment_count>11</comment_count>
      <attachid>208837</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-08-15 17:50:40 -0700</bug_when>
    <thetext>Comment on attachment 208837
Patch v2

r=me with changes made during in person discussion, plus not skipping the tests, and with changes suggested in prior review, and assuming all tests pass.

&gt; - simple-cross-origin-denied-events tests;

This was an actual bug, and the fix appears to be to delete obsolete code that synthesizes an HTTP response for 401 authentication failures (and also synthesizes more response types just for good measure that turned bad).

It wasn&apos;t actually that we got to CORS checks due to different ordering, but that NetworkProcess was sending a bad response/error pair that confused WebProcess.

&gt; - what platformBadSynchronousXHRResponseError means;

Brady will just rename it back, we don&apos;t feel like thinking about this too much now.

&gt; - is there anything suspicious with 6+1 handling.

Brady says that it works the same as before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917964</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-08-16 08:41:03 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 208837 [details])
&gt; &gt; - is there anything suspicious with 6+1 handling.
&gt; 
&gt; Brady says that it works the same as before.

To clarify further on the record, the 6+1 handling logic is mostly in HostRecord and the Scheduler, and is unchanged by this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917967</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-08-16 08:43:07 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/154183</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924793</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-09-04 23:16:50 -0700</bug_when>
    <thetext>&lt;rdar://problem/14916066&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208663</attachid>
            <date>2013-08-13 11:51:36 -0700</date>
            <delta_ts>2013-08-13 16:09:32 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>87407</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggNDJlZGZkOC4uZjc1NDBiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KQEAgLTM0MCw2ICszNDAsNyBAQCBfX1pON1dlYkNvcmUxNFJlc291cmNlQnVmZmVyQzFF
dgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUJ1ZmZlckMyRXYKIF9fWk43V2ViQ29yZTE0UmVzb3Vy
Y2VCdWZmZXJEMUV2CiBfX1pON1dlYkNvcmUxNFJlc291cmNlQnVmZmVyRDJFdgorX19aTjdXZWJD
b3JlMTRSZXNvdXJjZUhhbmRsZTEyZmlyc3RSZXF1ZXN0RXYKIF9fWk43V2ViQ29yZTE0UmVzb3Vy
Y2VIYW5kbGUyMGZvcmNlQ29udGVudFNuaWZmaW5nRXYKIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VI
YW5kbGUyM2NvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0RVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFCiBf
X1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjVjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlRVAx
OU5TQ2FjaGVkVVJMUmVzcG9uc2UKQEAgLTY5MCw2ICs2OTEsNyBAQCBfX1pON1dlYkNvcmUyMFJl
c291cmNlUmVzcG9uc2VCYXNlMTlzZXRUZXh0RW5jb2RpbmdOYW1lRVJLTjNXVEY2U3RyaW5nRQog
X19aTjdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNlQmFzZTIwc2V0U3VnZ2VzdGVkRmlsZW5hbWVF
UktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlMjRzZXRF
eHBlY3RlZENvbnRlbnRMZW5ndGhFeAogX19aTjdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNlQmFz
ZTZzZXRVUkxFUktOU180S1VSTEUKK19fWk43V2ViQ29yZTIwUmVzb3VyY2VSZXNwb25zZUJhc2VD
MkVSS05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRXhTN19TN18KIF9fWk43V2ViQ29yZTIwUmVzb3Vy
Y2VSZXNwb25zZUJhc2VDMkV2CiBfX1pON1dlYkNvcmUyMFNwYWNlU3BsaXRTdHJpbmdEYXRhRDFF
dgogX19aTjdXZWJDb3JlMjBVc2VyR2VzdHVyZUluZGljYXRvcjdzX3N0YXRlRQpAQCAtNzY3LDYg
Kzc2OSw3IEBAIF9fWk43V2ViQ29yZTIzQXV0aGVudGljYXRpb25DaGFsbGVuZ2UyM3NldEF1dGhl
bnRpY2F0aW9uQ2xpZW50RVBOU18yMEF1dGhlbnRpY2F0CiBfX1pON1dlYkNvcmUyM0F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlQzFFUktOU18xNVByb3RlY3Rpb25TcGFjZUVSS05TXzEwQ3JlZGVudGlh
bEVqUktOU18xNlJlc291cmNlUmVzcG9uc2VFUktOU18xM1Jlc291cmNlRXJyb3JFCiBfX1pON1dl
YkNvcmUyM011dGFibGVTdHlsZVByb3BlcnR5U2V0MjVlbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9u
RXYKIF9fWk43V2ViQ29yZTIzTXV0YWJsZVN0eWxlUHJvcGVydHlTZXREMUV2CitfX1pON1dlYkNv
cmUyM1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50MzFwbGF0Zm9ybUJhZFN5bmNYSFJSZXNwb25zZUVy
cm9yRXYKIF9fWk43V2ViQ29yZTIzY3JlYXRlRnJhZ21lbnRGcm9tTm9kZXNFUE5TXzhEb2N1bWVu
dEVSS04zV1RGNlZlY3RvcklQTlNfNE5vZGVFTG0wRU5TMl8xNUNyYXNoT25PdmVyZmxvd0VFRQog
X19aTjdXZWJDb3JlMjNkYXRhRm9yVVJMQ29tcG9uZW50VHlwZUVQNU5TVVJMbAogX19aTjdXZWJD
b3JlMjNkZWNvZGVIb3N0TmFtZVdpdGhSYW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCkBAIC04MTEs
NiArODE0LDcgQEAgX19aTjdXZWJDb3JlMjdBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2VDMkV2
CiBfX1pON1dlYkNvcmUyN0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbkMxRU4zV1RGMTBQYXNz
UmVmUHRySU5TXzROb2RlRUVFYlJLTlMxXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUyN0RldmljZU9y
aWVudGF0aW9uQ2xpZW50TW9jazE0c2V0T3JpZW50YXRpb25FTjNXVEYxMFBhc3NSZWZQdHJJTlNf
MjFEZXZpY2VPcmllbnRhdGlvbkRhdGFFRUUKIF9fWk43V2ViQ29yZTI3RGV2aWNlT3JpZW50YXRp
b25DbGllbnRNb2NrQzFFdgorX19aTjdXZWJDb3JlMjdwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1
YWxFUktOU180S1VSTEVTMl8KIF9fWk43V2ViQ29yZTI3c3RhcnRPYnNlcnZpbmdDb29raWVDaGFu
Z2VzRVBGdnZFCiBfX1pON1dlYkNvcmUyOERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24xMmFk
ZFVzZXJTaGVldEVOM1dURjEwUGFzc1JlZlB0cklOU18xOFN0eWxlU2hlZXRDb250ZW50c0VFRQog
X19aTjdXZWJDb3JlMjhEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uMTRhZGRBdXRob3JTaGVl
dEVOM1dURjEwUGFzc1JlZlB0cklOU18xOFN0eWxlU2hlZXRDb250ZW50c0VFRQpAQCAtMTgzMSw2
ICsxODM1LDcgQEAgX19aTjdXZWJDb3JlMTBGbG9hdFBvaW50QzFFUks4X05TUG9pbnQKIF9fWk43
V2ViQ29yZTEwaGFuZEN1cnNvckV2CiBfX1pON1dlYkNvcmUxMUNhY2hlZEltYWdlNWltYWdlRXYK
IF9fWk43V2ViQ29yZTExZ2xvYmFsUG9pbnRFUks4X05TUG9pbnRQOE5TV2luZG93CitfX1pON1dl
YkNvcmUxMXBvcnRBbGxvd2VkRVJLTlNfNEtVUkxFCiBfX1pON1dlYkNvcmUxMXRvVXNlclNwYWNl
RVJLN19OU1JlY3RQOE5TV2luZG93CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjEwbW91c2VN
b3ZlZEVQN05TRXZlbnQKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTB3aGVlbEV2ZW50RVA3
TlNFdmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGU3YzQ0NjM0Li44OTUxNmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01Mzk1LDcgKzUzOTUsNyBAQAog
CQlFMTgwODEwRjE2RkNFQ0RGMDBCODBEMDcgLyogV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxl
Z2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4
MDgxMEQxNkZDRUNERjAwQjgwRDA3IC8qIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUu
aCAqLzsgfTsKIAkJRTE4MDgxMTIxNkZDRjQyRjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVy
Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxODA4MTEwMTZGQ0Y0MkUwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAg
Ki87IH07CiAJCUUxODA4MTE2MTZGQ0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNs
aWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
ODA4MTE0MTZGQ0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5tbSAqLzsg
fTsKLQkJRTE4MDgxMTcxNkZDRjlDQjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTgwODEx
NTE2RkNGOUNCMDBCODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaCAqLzsgfTsKKwkJ
RTE4MDgxMTcxNkZDRjlDQjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTgwODExNTE2RkNG
OUNCMDBCODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTgyNTY4RjBFRjJCMDJEMDA5MzMy
NDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMTgyNTY4RDBFRjJCMDJEMDA5MzMyNDIgLyogSlNXb3JrZXJH
bG9iYWxTY29wZS5jcHAgKi87IH07CiAJCUUxODI1NjkwMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dv
cmtlckdsb2JhbFNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTgyNTY4RTBFRjJCMDJEMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZS5o
ICovOyB9OwogCQlFMTgyNThBQzBFRjNDRDcwMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29w
ZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTgyNThBQjBFRjNDRDcwMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5j
cHAgKi87IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5
bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwCmluZGV4IDE2NDMxYjAuLjY5YzM5NGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2Fk
ZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hy
b25vdXNMb2FkZXJDbGllbnQuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIHZvaWQgU3luY2hyb25vdXNM
b2FkZXJDbGllbnQ6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBSZXNv
dXJjZVJlCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX2Vycm9yLmlzTnVsbCgpKTsK
LSAgICBtX2Vycm9yID0gcGxhdGZvcm1CYWRSZXNwb25zZUVycm9yKCk7CisgICAgbV9lcnJvciA9
IHBsYXRmb3JtQmFkU3luY1hIUlJlc3BvbnNlRXJyb3IoKTsKICAgICBtX2lzRG9uZSA9IHRydWU7
CiAgICAgcmVxdWVzdCA9IDA7CiB9CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgU3luY2hyb25vdXNM
b2FkZXJDbGllbnQ6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9y
JiBlcnJvCiB9CiAKICNpZiBVU0UoQ0ZORVRXT1JLKQotUmVzb3VyY2VFcnJvciBTeW5jaHJvbm91
c0xvYWRlckNsaWVudDo6cGxhdGZvcm1CYWRSZXNwb25zZUVycm9yKCkKK1Jlc291cmNlRXJyb3Ig
U3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OnBsYXRmb3JtQmFkU3luY1hIUlJlc3BvbnNlRXJyb3Io
KQogewogICAgIFJldGFpblB0cjxDRkVycm9yUmVmPiBjZkVycm9yID0gYWRvcHRDRihDRkVycm9y
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRkVycm9yRG9tYWluQ0ZOZXR3b3JrLCBrQ0ZV
UkxFcnJvckJhZFNlcnZlclJlc3BvbnNlLCAwKSk7CiAgICAgcmV0dXJuIGNmRXJyb3IuZ2V0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3Vz
TG9hZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9u
b3VzTG9hZGVyQ2xpZW50LmgKaW5kZXggYTI0YjEyNy4uNGM4YzY0MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGll
bnQuaApAQCAtNDcsNiArNDcsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgUmVzb3VyY2VFcnJvciYg
ZXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9CiAgICAgYm9vbCBpc0RvbmUoKSB7IHJl
dHVybiBtX2lzRG9uZTsgfQogCisgICAgc3RhdGljIFJlc291cmNlRXJyb3IgcGxhdGZvcm1CYWRT
eW5jWEhSUmVzcG9uc2VFcnJvcigpOworCiBwcml2YXRlOgogICAgIFN5bmNocm9ub3VzTG9hZGVy
Q2xpZW50KCkKICAgICAgICAgOiBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMoZmFsc2UpCkBAIC02
NSw4ICs2Nyw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBQcm90ZWN0aW9uU3Bh
Y2UmKSBPVkVSUklERTsKICNlbmRpZgogCi0gICAgUmVzb3VyY2VFcnJvciBwbGF0Zm9ybUJhZFJl
c3BvbnNlRXJyb3IoKTsKLQogICAgIGJvb2wgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwogICAg
IFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICBWZWN0b3I8Y2hhcj4gbV9kYXRhOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvU3luY2hyb25v
dXNMb2FkZXJDbGllbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9T
eW5jaHJvbm91c0xvYWRlckNsaWVudC5tbQppbmRleCAwMTQ0YmQ5Li4yNzk5MjlhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9TeW5jaHJvbm91c0xvYWRl
ckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9TeW5j
aHJvbm91c0xvYWRlckNsaWVudC5tbQpAQCAtMzksNyArMzksNyBAQCB2b2lkIFN5bmNocm9ub3Vz
TG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUmVzb3VyY2VI
YW5kbGUqLAogfQogCiAjaWYgIVVTRShDRk5FVFdPUkspCi1SZXNvdXJjZUVycm9yIFN5bmNocm9u
b3VzTG9hZGVyQ2xpZW50OjpwbGF0Zm9ybUJhZFJlc3BvbnNlRXJyb3IoKQorUmVzb3VyY2VFcnJv
ciBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6cGxhdGZvcm1CYWRTeW5jWEhSUmVzcG9uc2VFcnJv
cigpCiB7CiAgICAgUmV0YWluUHRyPE5TRXJyb3I+IGVycm9yID0gYWRvcHROUyhbW05TRXJyb3Ig
YWxsb2NdIGluaXRXaXRoRG9tYWluOk5TVVJMRXJyb3JEb21haW4gY29kZTpOU1VSTEVycm9yQmFk
U2VydmVyUmVzcG9uc2UgdXNlckluZm86bmlsXSk7CiAgICAgcmV0dXJuIGVycm9yLmdldCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVJl
c291cmNlSGFuZGxlQXNPcGVyYXRpb25RdWV1ZURlbGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VIYW5kbGVBc09wZXJhdGlvblF1ZXVl
RGVsZWdhdGUuaAppbmRleCBlZmZhMmRmLi4zMGY5ZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlUmVzb3VyY2VIYW5kbGVBc09wZXJhdGlv
blF1ZXVlRGVsZWdhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21h
Yy9XZWJDb3JlUmVzb3VyY2VIYW5kbGVBc09wZXJhdGlvblF1ZXVlRGVsZWdhdGUuaApAQCAtNDMs
NiArNDMsNyBAQCBjbGFzcyBSZXNvdXJjZUhhbmRsZTsKICAgICBSZXRhaW5QdHI8TlNVUkxSZXF1
ZXN0PiBtX3JlcXVlc3RSZXN1bHQ7CiAgICAgUmV0YWluUHRyPE5TQ2FjaGVkVVJMUmVzcG9uc2U+
IG1fY2FjaGVkUmVzcG9uc2VSZXN1bHQ7CiAgICAgQk9PTCBtX2Jvb2xSZXN1bHQ7CisgICAgQk9P
TCBtX3JldHVybmVkTmlsRnJvbVdpbGxTZW5kUmVxdWVzdDsKIH0KIAogLSAoaWQpaW5pdFdpdGhI
YW5kbGU6KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiloYW5kbGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuY3BwCmluZGV4IGU3Y2UzNGIuLjM1MjQ4ZjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuY3BwCkBAIC0zMiw3
ICszMiw2IEBACiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaCIKICNp
bmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiTmV0d29y
a1Jlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5o
IgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9D
RVNTKQpAQCAtNTYsNyArNTUsNyBAQCBIb3N0UmVjb3JkOjp+SG9zdFJlY29yZCgpCiAjZW5kaWYK
IH0KIAotdm9pZCBIb3N0UmVjb3JkOjpzY2hlZHVsZVJlc291cmNlTG9hZGVyKFBhc3NSZWZQdHI8
U2NoZWR1bGFibGVMb2FkZXI+IGxvYWRlcikKK3ZvaWQgSG9zdFJlY29yZDo6c2NoZWR1bGVSZXNv
dXJjZUxvYWRlcihQYXNzUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKQEAgLTY4LDcgKzY3LDcgQEAgdm9pZCBIb3N0
UmVjb3JkOjpzY2hlZHVsZVJlc291cmNlTG9hZGVyKFBhc3NSZWZQdHI8U2NoZWR1bGFibGVMb2Fk
ZXI+IGxvYWRlcikKICAgICAgICAgbV9sb2FkZXJzUGVuZGluZ1tsb2FkZXItPnByaW9yaXR5KCld
LmFwcGVuZChsb2FkZXIpOwogfQogCi12b2lkIEhvc3RSZWNvcmQ6OmFkZExvYWRlckluUHJvZ3Jl
c3MoU2NoZWR1bGFibGVMb2FkZXIqIGxvYWRlcikKK3ZvaWQgSG9zdFJlY29yZDo6YWRkTG9hZGVy
SW5Qcm9ncmVzcyhOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlcikKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCkBAIC03Niw3ICs3NSw3IEBAIHZvaWQgSG9zdFJlY29yZDo6YWRk
TG9hZGVySW5Qcm9ncmVzcyhTY2hlZHVsYWJsZUxvYWRlciogbG9hZGVyKQogICAgIGxvYWRlci0+
c2V0SG9zdFJlY29yZCh0aGlzKTsKIH0KIAotaW5saW5lIGJvb2wgcmVtb3ZlTG9hZGVyRnJvbVF1
ZXVlKFNjaGVkdWxhYmxlTG9hZGVyKiBsb2FkZXIsIExvYWRlclF1ZXVlJiBxdWV1ZSkKK2lubGlu
ZSBib29sIHJlbW92ZUxvYWRlckZyb21RdWV1ZShOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRl
ciwgTG9hZGVyUXVldWUmIHF1ZXVlKQogewogICAgIExvYWRlclF1ZXVlOjppdGVyYXRvciBlbmQg
PSBxdWV1ZS5lbmQoKTsKICAgICBmb3IgKExvYWRlclF1ZXVlOjppdGVyYXRvciBpdCA9IHF1ZXVl
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtODksMTQgKzg4LDE0IEBAIGlubGluZSBi
b29sIHJlbW92ZUxvYWRlckZyb21RdWV1ZShTY2hlZHVsYWJsZUxvYWRlciogbG9hZGVyLCBMb2Fk
ZXJRdWV1ZSYgcXVldWUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEhvc3RSZWNvcmQ6
OnJlbW92ZUxvYWRlcihTY2hlZHVsYWJsZUxvYWRlciogbG9hZGVyKQordm9pZCBIb3N0UmVjb3Jk
OjpyZW1vdmVMb2FkZXIoTmV0d29ya1Jlc291cmNlTG9hZGVyKiBsb2FkZXIpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IER1
ZSB0byBJUEMgcmFjZSBjb25kaXRpb25zLCBpdCdzIHBvc3NpYmxlIHRoaXMgSG9zdFJlY29yZCB3
aWxsIGJlIGFza2VkIHRvIHJlbW92ZSB0aGUgc2FtZSBsb2FkZXIgdHdpY2UuCiAgICAgLy8gSXQg
d291bGQgYmUgbmljZSB0byBrbm93IHRoZSBsb2FkZXIgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVk
IGFuZCB0cmVhdCBpdCBhcyBhIG5vLW9wLgogCi0gICAgU2NoZWR1bGFibGVMb2FkZXJTZXQ6Oml0
ZXJhdG9yIGkgPSBtX2xvYWRlcnNJblByb2dyZXNzLmZpbmQobG9hZGVyKTsKKyAgICBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXJTZXQ6Oml0ZXJhdG9yIGkgPSBtX2xvYWRlcnNJblByb2dyZXNzLmZpbmQo
bG9hZGVyKTsKICAgICBpZiAoaSAhPSBtX2xvYWRlcnNJblByb2dyZXNzLmVuZCgpKSB7CiAgICAg
ICAgIGktPmdldCgpLT5zZXRIb3N0UmVjb3JkKDApOwogICAgICAgICBtX2xvYWRlcnNJblByb2dy
ZXNzLnJlbW92ZShpKTsKQEAgLTE2MCw3ICsxNTksNyBAQCB2b2lkIEhvc3RSZWNvcmQ6OnNlcnZl
UGVuZGluZ1JlcXVlc3RzRm9yUXVldWUoTG9hZGVyUXVldWUmIHF1ZXVlLCBSZXNvdXJjZUxvYWRQ
cgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgd2hpbGUgKCFxdWV1ZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgUmVmUHRyPFNjaGVkdWxhYmxlTG9hZGVyPiBsb2FkZXIgPSBxdWV1ZS5maXJzdCgp
OworICAgICAgICBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBxdWV1ZS5m
aXJzdCgpOwogICAgICAgICBBU1NFUlQobG9hZGVyLT5ob3N0UmVjb3JkKCkgPT0gdGhpcyk7CiAK
ICAgICAgICAgLy8gVGhpcyByZXF1ZXN0IG1pZ2h0IGJlIGZyb20gV2ViUHJvY2VzcyB3ZSd2ZSBs
b3N0IG91ciBjb25uZWN0aW9uIHRvLgpAQCAtMTkzLDcgKzE5Miw3IEBAIHZvaWQgSG9zdFJlY29y
ZDo6c2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9y
aXR5KQogICAgICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0ZvclF1ZXVlKG1fbG9hZGVyc1BlbmRp
bmdbcHJpb3JpdHldLCAoUmVzb3VyY2VMb2FkUHJpb3JpdHkpcHJpb3JpdHkpOwogfQogCi1ib29s
IEhvc3RSZWNvcmQ6OmxpbWl0c1JlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5
LCBTY2hlZHVsYWJsZUxvYWRlciogbG9hZGVyKSBjb25zdAorYm9vbCBIb3N0UmVjb3JkOjpsaW1p
dHNSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSwgTmV0d29ya1Jlc291cmNl
TG9hZGVyKiBsb2FkZXIpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxvYWRlcik7CiAgICAgQVNTRVJU
KGxvYWRlci0+Y29ubmVjdGlvblRvV2ViUHJvY2VzcygpKTsKQEAgLTIxMyw4ICsyMTIsOCBAQCBi
b29sIEhvc3RSZWNvcmQ6OmxpbWl0c1JlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9y
aXR5LCBTY2hlZHVsYWJsZUxvYWRlcgogICAgIGlmIChtX2xvYWRlcnNJblByb2dyZXNzLnNpemUo
KSA+IG1fbWF4UmVxdWVzdHNJbkZsaWdodCkgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLy8g
SWYgd2UgaGF2ZSBtb3JlIGxvYWRlcnMgaW4gcHJvZ3Jlc3MgdGhhbiB3ZSBzaG91bGQsIGF0IGxl
YXN0IG9uZSBvZiB0aGVtIGhhZCBiZXR0ZXIgYmUgc3luY2hyb25vdXMuCi0gICAgICAgIFNjaGVk
dWxhYmxlTG9hZGVyU2V0OjppdGVyYXRvciBpID0gbV9sb2FkZXJzSW5Qcm9ncmVzcy5iZWdpbigp
OwotICAgICAgICBTY2hlZHVsYWJsZUxvYWRlclNldDo6aXRlcmF0b3IgZW5kID0gbV9sb2FkZXJz
SW5Qcm9ncmVzcy5lbmQoKTsKKyAgICAgICAgTmV0d29ya1Jlc291cmNlTG9hZGVyU2V0OjppdGVy
YXRvciBpID0gbV9sb2FkZXJzSW5Qcm9ncmVzcy5iZWdpbigpOworICAgICAgICBOZXR3b3JrUmVz
b3VyY2VMb2FkZXJTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fbG9hZGVyc0luUHJvZ3Jlc3MuZW5kKCk7
CiAgICAgICAgIGZvciAoOyBpICE9IGVuZDsgKytpKSB7CiAgICAgICAgICAgICBpZiAoaS0+Z2V0
KCktPmlzU3luY2hyb25vdXMoKSkKICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuaCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuaAppbmRleCAwNTgyMDg5Li43ZTE4YzNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmgKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvSG9zdFJlY29yZC5oCkBAIC0zNywxMCAr
MzcsOCBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjsKLWNsYXNzIFNjaGVkdWxhYmxlTG9hZGVyOwotY2xhc3MgU3luY05ldHdvcmtSZXNvdXJjZUxv
YWRlcjsKIAotdHlwZWRlZiBEZXF1ZTxSZWZQdHI8U2NoZWR1bGFibGVMb2FkZXI+PiBMb2FkZXJR
dWV1ZTsKK3R5cGVkZWYgRGVxdWU8UmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4+IExvYWRl
clF1ZXVlOwogdHlwZWRlZiB1aW50NjRfdCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyOwogCiBjbGFz
cyBIb3N0UmVjb3JkIDogcHVibGljIFJlZkNvdW50ZWQ8SG9zdFJlY29yZD4gewpAQCAtNTQsOSAr
NTIsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9CiAgICAgCi0gICAgdm9pZCBzY2hlZHVsZVJlc291cmNlTG9hZGVyKFBh
c3NSZWZQdHI8U2NoZWR1bGFibGVMb2FkZXI+KTsKLSAgICB2b2lkIGFkZExvYWRlckluUHJvZ3Jl
c3MoU2NoZWR1bGFibGVMb2FkZXIqKTsKLSAgICB2b2lkIHJlbW92ZUxvYWRlcihTY2hlZHVsYWJs
ZUxvYWRlciopOworICAgIHZvaWQgc2NoZWR1bGVSZXNvdXJjZUxvYWRlcihQYXNzUmVmUHRyPE5l
dHdvcmtSZXNvdXJjZUxvYWRlcj4pOworICAgIHZvaWQgYWRkTG9hZGVySW5Qcm9ncmVzcyhOZXR3
b3JrUmVzb3VyY2VMb2FkZXIqKTsKKyAgICB2b2lkIHJlbW92ZUxvYWRlcihOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIqKTsKICAgICBib29sIGhhc1JlcXVlc3RzKCkgY29uc3Q7CiAgICAgdm9pZCBzZXJ2
ZVBlbmRpbmdSZXF1ZXN0cyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSk7CiAKQEAgLTY3
LDEzICs2NSwxMyBAQCBwcml2YXRlOgogICAgIEhvc3RSZWNvcmQoY29uc3QgU3RyaW5nJiBuYW1l
LCBpbnQgbWF4UmVxdWVzdHNJbkZsaWdodCk7CiAKICAgICB2b2lkIHNlcnZlUGVuZGluZ1JlcXVl
c3RzRm9yUXVldWUoTG9hZGVyUXVldWUmLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSk7
Ci0gICAgYm9vbCBsaW1pdHNSZXF1ZXN0cyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSwg
U2NoZWR1bGFibGVMb2FkZXIqKSBjb25zdDsKKyAgICBib29sIGxpbWl0c1JlcXVlc3RzKFdlYkNv
cmU6OlJlc291cmNlTG9hZFByaW9yaXR5LCBOZXR3b3JrUmVzb3VyY2VMb2FkZXIqKSBjb25zdDsK
IAogICAgIExvYWRlclF1ZXVlIG1fbG9hZGVyc1BlbmRpbmdbV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
UHJpb3JpdHlIaWdoZXN0ICsgMV07CiAgICAgTG9hZGVyUXVldWUgbV9zeW5jTG9hZGVyc1BlbmRp
bmc7CiAKLSAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFNjaGVkdWxhYmxlTG9hZGVyPj4gU2No
ZWR1bGFibGVMb2FkZXJTZXQ7Ci0gICAgU2NoZWR1bGFibGVMb2FkZXJTZXQgbV9sb2FkZXJzSW5Q
cm9ncmVzczsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRl
cj4+IE5ldHdvcmtSZXNvdXJjZUxvYWRlclNldDsKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXJT
ZXQgbV9sb2FkZXJzSW5Qcm9ncmVzczsKIAogICAgIGNvbnN0IFN0cmluZyBtX25hbWU7CiAgICAg
aW50IG1fbWF4UmVxdWVzdHNJbkZsaWdodDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApp
bmRleCBiMjE4MTU0Li43ZTRlMDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBA
IC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCiAjaW5j
bHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJSZW1vdGVO
ZXR3b3JraW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0Jsb2JEYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0
Zm9ybUNvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXJPcHRpb25z
Lmg+CkBAIC0xMDAsMTAgKzk5LDYgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6ZGlkQ2xvc2UoQ29yZUlQQzo6Q29ubmVjdGlvbiopCiAgICAgZm9yIChIYXNoTWFwPFJlc291
cmNlTG9hZElkZW50aWZpZXIsIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+Pjo6aXRlcmF0
b3IgaSA9IG1fbmV0d29ya1Jlc291cmNlTG9hZGVycy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQog
ICAgICAgICBpLT52YWx1ZS0+YWJvcnQoKTsKIAotICAgIEhhc2hNYXA8UmVzb3VyY2VMb2FkSWRl
bnRpZmllciwgUmVmUHRyPFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI+Pjo6aXRlcmF0b3Igc3lu
Y0VuZCA9IG1fc3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNo
TWFwPFJlc291cmNlTG9hZElkZW50aWZpZXIsIFJlZlB0cjxTeW5jTmV0d29ya1Jlc291cmNlTG9h
ZGVyPj46Oml0ZXJhdG9yIGkgPSBtX3N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXJzLmJlZ2luKCk7
IGkgIT0gc3luY0VuZDsgKytpKQotICAgICAgICBpLT52YWx1ZS0+YWJvcnQoKTsKLQogICAgIE5l
dHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NEaWRDbG9z
ZSh0aGlzKTsKIAogICAgIG1fbmV0d29ya1Jlc291cmNlTG9hZGVycy5jbGVhcigpOwpAQCAtMTI0
LDE2ICsxMTksMTQgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2NoZWR1
bGVSZXNvdXJjZUxvYWQoY29uc3QgTmV0d29ya1Jlc291cmNlTG8KIAogdm9pZCBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6cGVyZm9ybVN5bmNocm9ub3VzTG9hZChjb25zdCBOZXR3b3Jr
UmVzb3VyY2VMb2FkUGFyYW1ldGVycyYgbG9hZFBhcmFtZXRlcnMsIFBhc3NSZWZQdHI8TWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2Fk
OjpEZWxheWVkUmVwbHk+IHJlcGx5KQogewotICAgIFJlZlB0cjxTeW5jTmV0d29ya1Jlc291cmNl
TG9hZGVyPiBsb2FkZXIgPSBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjcmVhdGUobG9hZFBh
cmFtZXRlcnMsIHRoaXMsIHJlcGx5KTsKLSAgICBtX3N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXJz
LmFkZChsb2FkUGFyYW1ldGVycy5pZGVudGlmaWVyLCBsb2FkZXIpOworICAgIFJlZlB0cjxOZXR3
b3JrUmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y3JlYXRl
KGxvYWRQYXJhbWV0ZXJzLCB0aGlzLCByZXBseSk7CisgICAgbV9uZXR3b3JrUmVzb3VyY2VMb2Fk
ZXJzLmFkZChsb2FkUGFyYW1ldGVycy5pZGVudGlmaWVyLCBsb2FkZXIpOwogICAgIE5ldHdvcmtQ
cm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkuc2NoZWR1bGVM
b2FkZXIobG9hZGVyLmdldCgpKTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6cmVtb3ZlTG9hZElkZW50aWZpZXIoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlm
aWVyKQogewotICAgIFJlZlB0cjxTY2hlZHVsYWJsZUxvYWRlcj4gbG9hZGVyID0gbV9uZXR3b3Jr
UmVzb3VyY2VMb2FkZXJzLnRha2UoaWRlbnRpZmllcik7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAg
ICAgIGxvYWRlciA9IG1fc3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcnMudGFrZShpZGVudGlmaWVy
KTsKKyAgICBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBtX25ldHdvcmtS
ZXNvdXJjZUxvYWRlcnMudGFrZShpZGVudGlmaWVyKTsKIAogICAgIC8vIEl0J3MgcG9zc2libGUg
d2UgaGF2ZSBubyBsb2FkZXIgZm9yIHRoaXMgaWRlbnRpZmllciBpZiB0aGUgTmV0d29ya1Byb2Nl
c3MgY3Jhc2hlZCBhbmQgdGhpcyB3YXMgYSByZXNwYXduZWQgTmV0d29ya1Byb2Nlc3MuCiAgICAg
aWYgKCFsb2FkZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCBlNjMyMTU4Li5mMDYx
MzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTkzLDcgKzkzLDYgQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8Q29yZUlQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwogCiAgICAg
SGFzaE1hcDxSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9h
ZGVyPj4gbV9uZXR3b3JrUmVzb3VyY2VMb2FkZXJzOwotICAgIEhhc2hNYXA8UmVzb3VyY2VMb2Fk
SWRlbnRpZmllciwgUmVmUHRyPFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI+PiBtX3N5bmNOZXR3
b3JrUmVzb3VyY2VMb2FkZXJzOwogCiAgICAgYm9vbCBtX3NlcmlhbExvYWRpbmdFbmFibGVkOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNw
cAppbmRleCA2YWYxNWRiLi45MGY4OTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0zNyw4ICszNyw4IEBACiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHlN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUg
IlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiU2NoZWR1bGFibGVMb2FkZXIu
aCIKICNpbmNsdWRlICJTdGF0aXN0aWNzRGF0YS5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZXNz
YWdlcy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlci5jcHAKaW5kZXggOWFlYmNjNi4uOTE4Njk3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
ci5jcHAKQEAgLTYsNyArNiw2IEBACiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNs
dWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtS
ZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIlN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIK
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIApAQCAtMzcsNyArMzYsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnJlcXVlc3RUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPE5ldHdvcmtSZXNvdQogICAgIHNlcnZl
UGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
cjo6c2NoZWR1bGVMb2FkZXIoUGFzc1JlZlB0cjxTY2hlZHVsYWJsZUxvYWRlcj4gbG9hZGVyKQor
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWRlcihQYXNzUmVm
UHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKQogewogICAgIFJlc291cmNlTG9hZFBy
aW9yaXR5IHByaW9yaXR5ID0gbG9hZGVyLT5wcmlvcml0eSgpOwogICAgIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0ID0gbG9hZGVyLT5yZXF1ZXN0KCk7CkBAIC03NSw3ICs3
NCw3IEBAIEhvc3RSZWNvcmQqIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Omhvc3RGb3JV
UkwoY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBDCiAgICAgcmV0dXJuIGhvc3Q7CiB9CiAKLXZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlTG9hZGVyKFNjaGVkdWxhYmxl
TG9hZGVyKiBsb2FkZXIpCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92
ZUxvYWRlcihOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlcikKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChsb2FkZXIpOwpAQCAtOTMsNyArOTIsNyBAQCB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZUxvYWRlcihTY2hlZHVsYWJsZUxv
YWRlciogbG9hZGVyKQogICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKIH0KIAot
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZWNlaXZlZFJlZGlyZWN0KFNjaGVk
dWxhYmxlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHJlZGlyZWN0VVJMKQor
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZWNlaXZlZFJlZGlyZWN0KE5ldHdv
cmtSZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBXZWJDb3JlOjpLVVJMJiByZWRpcmVjdFVS
TCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhOZXR3b3JrU2NoZWR1
bGluZywgIihOZXR3b3JrUHJvY2VzcykgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVj
ZWl2ZWRSZWRpcmVjdCBsb2FkZXIgb3JpZ2luYWxseSBmb3IgJyVzJyByZWRpcmVjdGVkIHRvICcl
cyciLCBsb2FkZXItPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCByZWRp
cmVjdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKQEAgLTE0OCw3ICsxNDcsNyBAQCB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZVNjaGVkdWxlZExvYWRlcnModm9p
ZCogY29udGV4dCkKIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmVT
Y2hlZHVsZWRMb2FkZXJzKCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPFNjaGVkdWxhYmxlTG9hZGVy
Pj4gbG9hZGVyc1RvUmVtb3ZlOworICAgIFZlY3RvcjxSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9h
ZGVyPj4gbG9hZGVyc1RvUmVtb3ZlOwogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fbG9hZGVyc1RvUmVtb3ZlTXV0ZXgpOwogICAgICAgICBsb2FkZXJzVG9SZW1vdmUgPSBtX2xv
YWRlcnNUb1JlbW92ZTsKQEAgLTE2MCw3ICsxNTksNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnJlbW92ZVNjaGVkdWxlZExvYWRlcnMoKQogICAgICAgICByZW1vdmVMb2Fk
ZXIobG9hZGVyc1RvUmVtb3ZlW2ldLmdldCgpKTsKIH0KIAotdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpzY2hlZHVsZVJlbW92ZUxvYWRlcihTY2hlZHVsYWJsZUxvYWRlciogbG9h
ZGVyKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVJlbW92ZUxv
YWRlcihOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlcikKIHsKICAgICBNdXRleExvY2tlciBs
b2NrZXIobV9sb2FkZXJzVG9SZW1vdmVNdXRleCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmgKaW5kZXggZGZlNzEwMi4uZmI0MTAyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaApAQCAt
NDEsNyArNDEsNyBAQCBjbGFzcyBLVVJMOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEhv
c3RSZWNvcmQ7Ci1jbGFzcyBTY2hlZHVsYWJsZUxvYWRlcjsKK2NsYXNzIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjsKIAogY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlciB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcik7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTAsMTUgKzUwLDE1IEBAIHB1YmxpYzoKICAgICBOZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAgICAgCiAgICAgLy8gQWRkcyB0aGUgcmVxdWVzdCB0
byB0aGUgcXVldWUgZm9yIGl0cyBob3N0LgotICAgIHZvaWQgc2NoZWR1bGVMb2FkZXIoUGFzc1Jl
ZlB0cjxTY2hlZHVsYWJsZUxvYWRlcj4pOworICAgIHZvaWQgc2NoZWR1bGVMb2FkZXIoUGFzc1Jl
ZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+KTsKIAogICAgIC8vIENhbGxlZCBieSB0aGUgV2Vi
UHJvY2VzcyB3aGVuIGEgUmVzb3VyY2VMb2FkZXIgaXMgYmVpbmcgY2xlYW5lZCB1cC4KLSAgICB2
b2lkIHJlbW92ZUxvYWRlcihTY2hlZHVsYWJsZUxvYWRlciopOworICAgIHZvaWQgcmVtb3ZlTG9h
ZGVyKE5ldHdvcmtSZXNvdXJjZUxvYWRlciopOwogCiAgICAgLy8gQ2FsbGVkIHdpdGhpbiB0aGUg
TmV0d29ya1Byb2Nlc3Mgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCB3aGVuIGEgcmVzb3VyY2UgbG9h
ZCBoYXMgZmluaXNoZWQuCi0gICAgdm9pZCBzY2hlZHVsZVJlbW92ZUxvYWRlcihTY2hlZHVsYWJs
ZUxvYWRlciopOworICAgIHZvaWQgc2NoZWR1bGVSZW1vdmVMb2FkZXIoTmV0d29ya1Jlc291cmNl
TG9hZGVyKik7CiAKLSAgICB2b2lkIHJlY2VpdmVkUmVkaXJlY3QoU2NoZWR1bGFibGVMb2FkZXIq
LCBjb25zdCBXZWJDb3JlOjpLVVJMJiByZWRpcmVjdFVSTCk7CisgICAgdm9pZCByZWNlaXZlZFJl
ZGlyZWN0KE5ldHdvcmtSZXNvdXJjZUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHJlZGly
ZWN0VVJMKTsKICAgICB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKFdlYkNvcmU6OlJlc291cmNl
TG9hZFByaW9yaXR5ID0gV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93KTsKIAog
ICAgIC8vIEZvciBOZXR3b3JrUHJvY2VzcyBzdGF0aXN0aWNzIHJlcG9ydGluZy4KQEAgLTg2LDgg
Kzg2LDggQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SG9z
dFJlY29yZD4sIFN0cmluZ0hhc2g+IEhvc3RNYXA7CiAgICAgSG9zdE1hcCBtX2hvc3RzOwogCi0g
ICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxTY2hlZHVsYWJsZUxvYWRlcj4+IFNjaGVkdWxhYmxl
TG9hZGVyU2V0OwotICAgIFNjaGVkdWxhYmxlTG9hZGVyU2V0IG1fbG9hZGVyczsKKyAgICB0eXBl
ZGVmIEhhc2hTZXQ8UmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4+IE5ldHdvcmtSZXNvdXJj
ZUxvYWRlclNldDsKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXJTZXQgbV9sb2FkZXJzOwogCiAg
ICAgUmVmUHRyPEhvc3RSZWNvcmQ+IG1fbm9uSFRUUFByb3RvY29sSG9zdDsKIApAQCAtOTYsNyAr
OTYsNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlRpbWVyPE5ldHdvcmtSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI+IG1fcmVxdWVzdFRpbWVyOwogICAgIAogICAgIE11dGV4IG1fbG9hZGVyc1RvUmVt
b3ZlTXV0ZXg7Ci0gICAgVmVjdG9yPFJlZlB0cjxTY2hlZHVsYWJsZUxvYWRlcj4+IG1fbG9hZGVy
c1RvUmVtb3ZlOworICAgIFZlY3RvcjxSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPj4gbV9s
b2FkZXJzVG9SZW1vdmU7CiAKICAgICB1bnNpZ25lZCBtX21heFJlcXVlc3RzSW5GbGlnaHRQZXJI
b3N0OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDVhZDEyZDMuLjg4ZjNkZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVy
LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5o
IgogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5j
bHVkZSAiTmV0d29ya0Jsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIgpAQCAtMzksNiArNDAsNyBAQAogI2lu
Y2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlUmVz
b3VyY2UuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlICJTeW5jaHJvbm91
c0xvYWRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAj
aW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdl
cy5oIgpAQCAtNTIsMTggKzU0LDYzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotTmV0d29ya1Jlc291cmNlTG9hZGVyOjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIGxvYWRQYXJhbWV0ZXJz
LCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVjdGlvbikKLSAgICA6IFNjaGVk
dWxhYmxlTG9hZGVyKGxvYWRQYXJhbWV0ZXJzLCBjb25uZWN0aW9uKQotICAgICwgbV9ieXRlc1Jl
Y2VpdmVkKDApCitOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcihj
b25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVycywgTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24sIFBhc3NSZWZQdHI8TWVzc2FnZXM6Ok5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxh
eWVkUmVwbHk+IHJlcGx5KQorICAgIDogbV9ieXRlc1JlY2VpdmVkKDApCiAgICAgLCBtX2hhbmRs
ZUNvbnZlcnRlZFRvRG93bmxvYWQoZmFsc2UpCisgICAgLCBtX3dhc0Fib3J0ZWQoZmFsc2UpCisg
ICAgLCBtX2lkZW50aWZpZXIocGFyYW1ldGVycy5pZGVudGlmaWVyKQorICAgICwgbV93ZWJQYWdl
SUQocGFyYW1ldGVycy53ZWJQYWdlSUQpCisgICAgLCBtX3dlYkZyYW1lSUQocGFyYW1ldGVycy53
ZWJGcmFtZUlEKQorICAgICwgbV9yZXF1ZXN0KHBhcmFtZXRlcnMucmVxdWVzdCkKKyAgICAsIG1f
cHJpb3JpdHkocGFyYW1ldGVycy5wcmlvcml0eSkKKyAgICAsIG1fY29udGVudFNuaWZmaW5nUG9s
aWN5KHBhcmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5KQorICAgICwgbV9hbGxvd1N0b3Jl
ZENyZWRlbnRpYWxzKHBhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscykKKyAgICAsIG1f
Y2xpZW50Q3JlZGVudGlhbFBvbGljeShwYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kp
CisgICAgLCBtX2luUHJpdmF0ZUJyb3dzaW5nTW9kZShwYXJhbWV0ZXJzLmluUHJpdmF0ZUJyb3dz
aW5nTW9kZSkKKyAgICAsIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVj
dChwYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCisg
ICAgLCBtX2lzTG9hZGluZ01haW5SZXNvdXJjZShwYXJhbWV0ZXJzLmlzTWFpblJlc291cmNlKQor
ICAgICwgbV9zYW5kYm94RXh0ZW5zaW9uc0FyZUNvbnN1bWVkKGZhbHNlKQorICAgICwgbV9jb25u
ZWN0aW9uKGNvbm5lY3Rpb24pCiB7CisgICAgLy8gRWl0aGVyIHRoaXMgbG9hZGVyIGhhcyBib3Ro
IGEgd2ViUGFnZUlEIGFuZCB3ZWJGcmFtZUlELCBvciBpdCBpcyBub3QgYWxsb3dlZCB0byBhc2sg
dGhlIGNsaWVudCBmb3IgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMuCisgICAgLy8gRklYTUU6
IFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgdGhlIGV4aXN0ZW5jZSBvZiBFbXB0eUZyYW1l
TG9hZGVyQ2xpZW50IGluIFdlYkNvcmUuCisgICAgLy8gICAgICAgIE9uY2UgYnVnIDExNjIzMyBp
cyByZXNvbHZlZCwgdGhpcyBBU1NFUlQgY2FuIGp1c3QgYmUgIm1fd2ViUGFnZUlEICYmIG1fd2Vi
RnJhbWVJRCIKKyAgICBBU1NFUlQoKG1fd2ViUGFnZUlEICYmIG1fd2ViRnJhbWVJRCkgfHwgbV9j
bGllbnRDcmVkZW50aWFsUG9saWN5ID09IERvTm90QXNrQ2xpZW50Rm9yQW55Q3JlZGVudGlhbHMp
OworCisgICAgZm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0gcGFyYW1ldGVycy5yZXF1ZXN0Qm9k
eVNhbmRib3hFeHRlbnNpb25zLnNpemUoKTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgaWYg
KFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBleHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGUocGFyYW1ldGVycy5yZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zW2ldKSkKKyAgICAg
ICAgICAgIG1fcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9ucy5hcHBlbmQoZXh0ZW5zaW9uKTsK
KyAgICB9CisKKyNpZiBFTkFCTEUoQkxPQikKKyAgICBpZiAobV9yZXF1ZXN0Lmh0dHBCb2R5KCkp
IHsKKyAgICAgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4mIGVsZW1lbnRzID0gbV9y
ZXF1ZXN0Lmh0dHBCb2R5KCktPmVsZW1lbnRzKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
LCBjb3VudCA9IGVsZW1lbnRzLnNpemUoKTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAg
IGlmIChlbGVtZW50c1tpXS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjplbmNvZGVkQmxvYikg
eworICAgICAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IGJsb2JF
bGVtZW50RXh0ZW5zaW9ucyA9IE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLnNhbmRib3hF
eHRlbnNpb25zKGVsZW1lbnRzW2ldLm1fdXJsKTsKKyAgICAgICAgICAgICAgICBtX3JlcXVlc3RC
b2R5U2FuZGJveEV4dGVuc2lvbnMuYXBwZW5kVmVjdG9yKGJsb2JFbGVtZW50RXh0ZW5zaW9ucyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9yZXF1ZXN0LnVy
bCgpLnByb3RvY29sSXMoImJsb2IiKSkgeworICAgICAgICBBU1NFUlQoIVNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZShwYXJhbWV0ZXJzLnJlc291cmNlU2FuZGJveEV4dGVuc2lvbikpOworICAgICAg
ICBtX3Jlc291cmNlU2FuZGJveEV4dGVuc2lvbnMgPSBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFy
ZWQoKS5zYW5kYm94RXh0ZW5zaW9ucyhtX3JlcXVlc3QudXJsKCkpOworICAgIH0gZWxzZQorI2Vu
ZGlmCisgICAgaWYgKFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiByZXNvdXJjZVNhbmRib3hFeHRl
bnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUocGFyYW1ldGVycy5yZXNvdXJjZVNhbmRi
b3hFeHRlbnNpb24pKQorICAgICAgICBtX3Jlc291cmNlU2FuZGJveEV4dGVuc2lvbnMuYXBwZW5k
KHJlc291cmNlU2FuZGJveEV4dGVuc2lvbik7CisKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIGlmIChyZXBseSkKKyAgICAgICAgbV9zeW5jaHJvbm91c0xvYWRDb250cm9sbGVyID0g
U3luY2hyb25vdXNMb2FkQ29udHJvbGxlcjo6Y3JlYXRlKG1fcmVxdWVzdCwgcmVwbHkpOwogfQog
CiBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6On5OZXR3b3JrUmVzb3VyY2VMb2FkZXIoKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2hhbmRsZSk7CisgICAgQVNT
RVJUKCFtX2hvc3RSZWNvcmQpOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3Rh
cnQoKQpAQCAtNzQsMTcgKzEyMSwyMCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3Rh
cnQoKQogICAgIHJlZigpOwogICAgIAogICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IENy
ZWF0ZSBSZW1vdGVOZXR3b3JraW5nQ29udGV4dCB3aXRoIGFjdHVhbCBzZXR0aW5ncy4KLSAgICBt
X25ldHdvcmtpbmdDb250ZXh0ID0gUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmNyZWF0ZShmYWxz
ZSwgZmFsc2UsIGluUHJpdmF0ZUJyb3dzaW5nTW9kZSgpLCBzaG91bGRDbGVhclJlZmVycmVyT25I
VFRQU1RvSFRUUFJlZGlyZWN0KCkpOworICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSBSZW1vdGVO
ZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZhbHNlLCBmYWxzZSwgbV9pblByaXZhdGVCcm93c2lu
Z01vZGUsIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CiAKICAg
ICBjb25zdW1lU2FuZGJveEV4dGVuc2lvbnMoKTsKIAogICAgIC8vIEZJWE1FIChOZXR3b3JrUHJv
Y2Vzcyk6IFBhc3MgYW4gYWN0dWFsIHZhbHVlIGZvciBkZWZlcnNMb2FkaW5nCi0gICAgbV9oYW5k
bGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKG1fbmV0d29ya2luZ0NvbnRleHQuZ2V0KCksIHJl
cXVlc3QoKSwgdGhpcywgZmFsc2UgLyogZGVmZXJzTG9hZGluZyAqLywgY29udGVudFNuaWZmaW5n
UG9saWN5KCkgPT0gU25pZmZDb250ZW50KTsKKyAgICBtX2hhbmRsZSA9IFJlc291cmNlSGFuZGxl
OjpjcmVhdGUobV9uZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgbV9yZXF1ZXN0LCB0aGlzLCBmYWxz
ZSAvKiBkZWZlcnNMb2FkaW5nICovLCBtX2NvbnRlbnRTbmlmZmluZ1BvbGljeSA9PSBTbmlmZkNv
bnRlbnQpOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2xlYW51cCgpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAKKyAgICBpZiAobV9zeW5jaHJvbm91c0xv
YWRDb250cm9sbGVyKQorICAgICAgICBtX3N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIuY2xlYXIo
KTsKIAogICAgIGludmFsaWRhdGVTYW5kYm94RXh0ZW5zaW9ucygpOwogCkBAIC0xMjAsNiArMTcw
LDggQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0KCkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCisgICAgbV93YXNBYm9ydGVkID0gdHJ1ZTsKKwogICAgIGlmICht
X2hhbmRsZSAmJiAhbV9oYW5kbGVDb252ZXJ0ZWRUb0Rvd25sb2FkKQogICAgICAgICBtX2hhbmRs
ZS0+Y2FuY2VsKCk7CiAKQEAgLTEzNCwxNiArMTg2LDE5IEBAIHZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBj
b25zCiAgICAgaWYgKEZvcm1EYXRhKiBmb3JtRGF0YSA9IHJlcXVlc3QoKS5odHRwQm9keSgpKQog
ICAgICAgICBmb3JtRGF0YS0+cmVtb3ZlR2VuZXJhdGVkRmlsZXNJZk5lZWRlZCgpOwogCi0gICAg
c2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkUmVj
ZWl2ZVJlc3BvbnNlV2l0aENlcnRpZmljYXRlSW5mbyhyZXNwb25zZSwgUGxhdGZvcm1DZXJ0aWZp
Y2F0ZUluZm8ocmVzcG9uc2UpLCBpc0xvYWRpbmdNYWluUmVzb3VyY2UoKSkpOworICAgIC8vIE9u
bHkgbm90aWZ5IHRoZSBXZWJQcm9jZXNzIG9mIHRoZSByZXNwb25zZSBmb3IgYXN5bmNocm9ub3Vz
IGxvYWRzLgorICAgIGlmICghaXNTeW5jaHJvbm91cygpKQorICAgICAgICBzZW5kQWJvcnRpbmdP
bkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzcG9uc2VX
aXRoQ2VydGlmaWNhdGVJbmZvKHJlc3BvbnNlLCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyhyZXNw
b25zZSksIG1faXNMb2FkaW5nTWFpblJlc291cmNlKSk7CisgICAgZWxzZQorICAgICAgICBtX3N5
bmNocm9ub3VzTG9hZENvbnRyb2xsZXItPmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CiAK
ICAgICAvLyBtX2hhbmRsZSB3aWxsIGJlIDAgaWYgdGhlIHJlcXVlc3QgZ290IGFib3J0ZWQgYWJv
dmUuCiAgICAgaWYgKCFtX2hhbmRsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFpc0xv
YWRpbmdNYWluUmVzb3VyY2UoKSkgewotICAgICAgICAvLyBGb3IgbWFpbiByZXNvdXJjZXMsIHRo
ZSB3ZWIgcHJvY2VzcyBpcyByZXNwb25zaWJsZSBmb3Igc2VuZGluZyBiYWNrIGEgTmV0d29ya1Jl
c291cmNlTG9hZGVyOjpDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBtZXNzYWdlLgorICAgIC8v
IEZvciBtYWluIHJlc291cmNlcywgdGhlIHdlYiBwcm9jZXNzIGlzIHJlc3BvbnNpYmxlIGZvciBz
ZW5kaW5nIGJhY2sgYSBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OkNvbnRpbnVlRGlkUmVjZWl2ZVJl
c3BvbnNlIG1lc3NhZ2UuCisgICAgaWYgKCFtX2lzTG9hZGluZ01haW5SZXNvdXJjZSkKICAgICAg
ICAgbV9oYW5kbGUtPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci0gICAgfQogfQogCiB2
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpCkBA
IC0xNjIsNiArMjE3LDEzIEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZl
QnVmZmVyKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFBhc3NSZWZQdHI8CiAgICAgCiAgICAgbV9i
eXRlc1JlY2VpdmVkICs9IGJ1ZmZlci0+c2l6ZSgpOwogICAgIAorICAgIC8vIFN5bmNocm9ub3Vz
IGxvYWRzIGFjY3VtdWxhdGUgYWxsIGRhdGEgdW50aWwgdGhlIGxvYWQgaXMgY29tcGxldGUsIGFu
ZCBkb24ndCBuZWVkIHRvIGRvIGFueSBhZGRpdGlvbmFsIHdvcmsKKyAgICAvLyBlYWNoIHRpbWUg
YSBidWZmZXIgaXMgcmVjZWl2ZWQuCisgICAgaWYgKG1fc3luY2hyb25vdXNMb2FkQ29udHJvbGxl
cikgeworICAgICAgICBtX3N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXItPmRpZFJlY2VpdmVCdWZm
ZXIoYnVmZmVyLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICNpZiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICBTaGFyZWFibGVSZXNvdXJj
ZTo6SGFuZGxlIHNoYXJlYWJsZVJlc291cmNlSGFuZGxlOwogICAgIHRyeUdldFNoYXJlYWJsZUhh
bmRsZUZyb21TaGFyZWRCdWZmZXIoc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUsIGJ1ZmZlci5nZXQo
KSk7CkBAIC0xODEsOSArMjQzLDEwIEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRG
aW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGRvdWJsZSBmaW5pCiB7CiAgICAg
QVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7CiAKLSAgICAvLyBGSVhN
RSAoTmV0d29ya1Byb2Nlc3MpOiBGb3IgdGhlIG1lbW9yeSBjYWNoZSB3ZSdsbCBuZWVkIHRvIHVw
ZGF0ZSB0aGUgZmluaXNoZWQgc3RhdHVzIG9mIHRoZSBjYWNoZWQgcmVzb3VyY2UgaGVyZS4KLSAg
ICAvLyBTdWNoIGJvb2trZWVwaW5nIHdpbGwgbmVlZCB0byBiZSB0aHJlYWQgc2FmZSwgYXMgdGhp
cyBjYWxsYmFjayBpcyBoYXBwZW5pbmcgb24gYSBiYWNrZ3JvdW5kIHRocmVhZC4KLSAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkRmluaXNoUmVzb3VyY2VMb2FkKGZpbmlz
aFRpbWUpKTsKKyAgICBpZiAobV9zeW5jaHJvbm91c0xvYWRDb250cm9sbGVyKQorICAgICAgICBt
X3N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXItPmRpZEZpbmlzaExvYWRpbmcoKTsKKyAgICBlbHNl
CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRGaW5pc2hSZXNv
dXJjZUxvYWQoZmluaXNoVGltZSkpOwogICAgIAogICAgIGNsZWFudXAoKTsKIH0KQEAgLTE5Miw5
ICsyNTUsMTEgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwoUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VFcnJvciYKIHsKICAgICBBU1NFUlRfVU5VU0VE
KGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKIAotICAgIC8vIEZJWE1FIChOZXR3b3JrUHJv
Y2Vzcyk6IEZvciB0aGUgbWVtb3J5IGNhY2hlIHdlJ2xsIG5lZWQgdG8gdXBkYXRlIHRoZSBmaW5p
c2hlZCBzdGF0dXMgb2YgdGhlIGNhY2hlZCByZXNvdXJjZSBoZXJlLgotICAgIC8vIFN1Y2ggYm9v
a2tlZXBpbmcgd2lsbCBuZWVkIHRvIGJlIHRocmVhZCBzYWZlLCBhcyB0aGlzIGNhbGxiYWNrIGlz
IGhhcHBlbmluZyBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgotICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlJlc291cmNlTG9hZGVyOjpEaWRGYWlsUmVzb3VyY2VMb2FkKGVycm9yKSk7CisgICAgaWYgKG1f
c3luY2hyb25vdXNMb2FkQ29udHJvbGxlcikKKyAgICAgICAgbV9zeW5jaHJvbm91c0xvYWRDb250
cm9sbGVyLT5kaWRGYWlsV2l0aEVycm9yKGVycm9yKTsKKyAgICBlbHNlCisgICAgICAgIHNlbmQo
TWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRGYWlsUmVzb3VyY2VMb2FkKGVycm9yKSk7
CisgICAgCiAgICAgY2xlYW51cCgpOwogfQogCkBAIC0yMDYsNiArMjcxLDEyIEBAIHZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3RBc3luYyhSZXNvdXJjZUhhbmRsZSog
aGFuZGxlLCBjb25zdCBSCiAgICAgQVNTRVJUKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpKTsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCisgICAgaWYgKG1fc3luY2hyb25vdXNMb2Fk
Q29udHJvbGxlcikgeworICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdCA9IHJlcXVl
c3Q7CisgICAgICAgIG1fc3luY2hyb25vdXNMb2FkQ29udHJvbGxlci0+d2lsbFNlbmRSZXF1ZXN0
KGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCksIG5ld1JlcXVlc3QpOworICAgICAgICBjb250aW51ZVdp
bGxTZW5kUmVxdWVzdChuZXdSZXF1ZXN0KTsKKyAgICB9CisgICAgCiAgICAgbV9zdWdnZXN0ZWRS
ZXF1ZXN0Rm9yV2lsbFNlbmRSZXF1ZXN0ID0gcmVxdWVzdDsKIAogICAgIC8vIFRoaXMgbWVzc2Fn
ZSBpcyBEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkgdG8gYXZvaWQg
YSBzaXR1YXRpb24gd2hlcmUgdGhlIE5ldHdvcmtQcm9jZXNzIGlzIGRlYWRsb2NrZWQgd2FpdGlu
ZyBmb3IgNiBjb25uZWN0aW9ucwpAQCAtMjE4LDkgKzI4OSwyMSBAQCB2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiBuZXdSZQogICAgIG1fc3VnZ2VzdGVkUmVxdWVzdEZvcldpbGxTZW5kUmVxdWVzdC51cGRhdGVG
cm9tRGVsZWdhdGVQcmVzZXJ2aW5nT2xkSFRUUEJvZHkobmV3UmVxdWVzdC5uc1VSTFJlcXVlc3Qo
RG9Ob3RVcGRhdGVIVFRQQm9keSkpOwogCiAgICAgUnVuTG9vcDo6bWFpbigpLT5kaXNwYXRjaChi
aW5kKCZOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZWNlaXZlZFJlZGlyZWN0LCAmTmV0
d29ya1Byb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKSwgdGhp
cywgbV9zdWdnZXN0ZWRSZXF1ZXN0Rm9yV2lsbFNlbmRSZXF1ZXN0LnVybCgpKSk7Ci0gICAgbV9o
YW5kbGUtPmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KG1fc3VnZ2VzdGVkUmVxdWVzdEZvcldpbGxT
ZW5kUmVxdWVzdCk7CiAKKyAgICBtX3JlcXVlc3QgPSBtX3N1Z2dlc3RlZFJlcXVlc3RGb3JXaWxs
U2VuZFJlcXVlc3Q7CiAgICAgbV9zdWdnZXN0ZWRSZXF1ZXN0Rm9yV2lsbFNlbmRSZXF1ZXN0ID0g
UmVzb3VyY2VSZXF1ZXN0KCk7CisKKyAgICBtX2hhbmRsZS0+Y29udGludWVXaWxsU2VuZFJlcXVl
c3QobV9yZXF1ZXN0KTsKKworICAgIGlmIChtX3JlcXVlc3QuaXNOdWxsKCkpCisgICAgeworICAg
ICAgICBtX2hhbmRsZS0+Y2FuY2VsKCk7CisgICAgICAgIAorICAgICAgICBpZiAobV9zeW5jaHJv
bm91c0xvYWRDb250cm9sbGVyKQorICAgICAgICAgICAgbV9zeW5jaHJvbm91c0xvYWRDb250cm9s
bGVyLT5jYW5jZWwoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGlkRmFpbChtX2hhbmRs
ZS5nZXQoKSwgY2FuY2VsbGVkRXJyb3IobV9yZXF1ZXN0KSk7CisgICAgfQogfQogCiB2b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKQpAQCAtMjM3
LDcgKzMyMCw4IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRTZW5kRGF0YShSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCB1bnNpZ25lZCBsb25nIGxvCiB7CiAgICAgQVNTRVJUX1VOVVNF
RChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7CiAKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJS
ZXNvdXJjZUxvYWRlcjo6RGlkU2VuZERhdGEoYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQp
KTsKKyAgICBpZiAoIW1fc3luY2hyb25vdXNMb2FkQ29udHJvbGxlcikKKyAgICAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFNlbmREYXRhKGJ5dGVzU2VudCwgdG90YWxC
eXRlc1RvQmVTZW50KSk7CiB9CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3YXNCbG9j
a2VkKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCkBAIC0yNjMsNyArMzQ3LDcgQEAgYm9vbCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFJlc291cmNlSGFu
ZGxlKiBoYW5kbGUpCiAKICAgICAvLyBXZSBzdGlsbCBuZWVkIHRoaXMgc3luYyB2ZXJzaW9uLCBi
ZWNhdXNlIFJlc291cmNlSGFuZGxlIGl0c2VsZiB1c2VzIGl0IGludGVybmFsbHksIGV2ZW4gd2hl
biB0aGUgZGVsZWdhdGUgdXNlcyBhbiBhc3luYyBvbmUuCiAKLSAgICByZXR1cm4gYWxsb3dTdG9y
ZWRDcmVkZW50aWFscygpID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisgICAgcmV0dXJuIG1f
YWxsb3dTdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwogfQogCiB2
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2VBc3lu
YyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQpAQCAtMjgwLDEyICszNjQsMTIgQEAgdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNv
dXJjZUhhbmRsZSogaGEKICAgICAvLyBGSVhNRSAoaHR0cDovL3dlYmtpdC5vcmcvYi8xMTUyOTEp
OiBTaW5jZSB3ZSBnbyBzdHJhaWdodCB0byB0aGUgVUkgcHJvY2VzcyBmb3IgYXV0aGVudGljYXRp
b24gd2UgZG9uJ3QgZ2V0IFdlYkNvcmUncwogICAgIC8vIGNyb3NzLW9yaWdpbiBjaGVjayBiZWZv
cmUgYXNraW5nIHRoZSBjbGllbnQgZm9yIGNyZWRlbnRpYWxzLgogICAgIC8vIFRoZXJlZm9yZSB3
ZSBhcmUgdG9vIHBlcm1pc3NpdmUgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIENsaWVudENyZWRlbnRp
YWxQb2xpY3kgaXMgRG9Ob3RBc2tDbGllbnRGb3JDcm9zc09yaWdpbkNyZWRlbnRpYWxzLgotICAg
IGlmIChjbGllbnRDcmVkZW50aWFsUG9saWN5KCkgPT0gRG9Ob3RBc2tDbGllbnRGb3JBbnlDcmVk
ZW50aWFscykgeworICAgIGlmIChtX2NsaWVudENyZWRlbnRpYWxQb2xpY3kgPT0gRG9Ob3RBc2tD
bGllbnRGb3JBbnlDcmVkZW50aWFscykgewogICAgICAgICBjaGFsbGVuZ2UuYXV0aGVudGljYXRp
b25DbGllbnQoKS0+cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNo
YWxsZW5nZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBOZXR3b3JrUHJvY2Vzczo6
c2hhcmVkKCkuYXV0aGVudGljYXRpb25NYW5hZ2VyKCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKHdlYlBhZ2VJRCgpLCB3ZWJGcmFtZUlEKCksIGNoYWxsZW5nZSk7CisgICAgTmV0
d29ya1Byb2Nlc3M6OnNoYXJlZCgpLmF1dGhlbnRpY2F0aW9uTWFuYWdlcigpLmRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShtX3dlYlBhZ2VJRCwgbV93ZWJGcmFtZUlELCBjaGFsbGVu
Z2UpOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ2FuY2VsQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKQEAgLTMwMSw5ICszODUsMzAgQEAgQ29yZUlQQzo6Q29u
bmVjdGlvbiogTmV0d29ya1Jlc291cmNlTG9hZGVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigp
CiAgICAgcmV0dXJuIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKS0+Y29ubmVjdGlvbigpOwogfQog
Ci11aW50NjRfdCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEKCkKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjb25zdW1lU2FuZGJveEV4dGVuc2lv
bnMoKQogewotICAgIHJldHVybiBpZGVudGlmaWVyKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDAs
IGNvdW50ID0gbV9yZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zLnNpemUoKTsgaSA8IGNvdW50
OyArK2kpCisgICAgICAgIG1fcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uc1tpXS0+Y29uc3Vt
ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0gbV9yZXNvdXJjZVNhbmRib3hF
eHRlbnNpb25zLnNpemUoKTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIG1fcmVzb3VyY2VTYW5k
Ym94RXh0ZW5zaW9uc1tpXS0+Y29uc3VtZSgpOworCisgICAgbV9zYW5kYm94RXh0ZW5zaW9uc0Fy
ZUNvbnN1bWVkID0gdHJ1ZTsKK30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmludmFs
aWRhdGVTYW5kYm94RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKG1fc2FuZGJveEV4dGVuc2lvbnNB
cmVDb25zdW1lZCkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBtX3JlcXVl
c3RCb2R5U2FuZGJveEV4dGVuc2lvbnMuc2l6ZSgpOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAg
ICAgIG1fcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uc1tpXS0+cmV2b2tlKCk7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IG1fcmVzb3VyY2VTYW5kYm94RXh0ZW5zaW9ucy5z
aXplKCk7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgbV9yZXNvdXJjZVNhbmRib3hFeHRl
bnNpb25zW2ldLT5yZXZva2UoKTsKKyAgICB9CisKKyAgICBtX3JlcXVlc3RCb2R5U2FuZGJveEV4
dGVuc2lvbnMuY2xlYXIoKTsKKyAgICBtX3Jlc291cmNlU2FuZGJveEV4dGVuc2lvbnMuY2xlYXIo
KTsKKworICAgIG1fc2FuZGJveEV4dGVuc2lvbnNBcmVDb25zdW1lZCA9IGZhbHNlOwogfQogCiAj
aWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKQEAgLTMxNCw2ICs0MTksMTQg
QEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2VBc3luYyhSZXNvdXJjZUgKIAogICAgIC8vIFRoaXMgbWVzc2FnZSBpcyBEaXNw
YXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkgdG8gYXZvaWQgYSBzaXR1YXRp
b24gd2hlcmUgdGhlIE5ldHdvcmtQcm9jZXNzIGlzIGRlYWRsb2NrZWQKICAgICAvLyB3YWl0aW5n
IGZvciA2IGNvbm5lY3Rpb25zIHRvIGNvbXBsZXRlIHdoaWxlIHRoZSBXZWJQcm9jZXNzIGlzIHdh
aXRpbmcgZm9yIGEgN3RoIHRvIGNvbXBsZXRlLgorCisgICAgaWYgKG1fc3luY2hyb25vdXNMb2Fk
Q29udHJvbGxlcikgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzayB0aGUgV2ViUHJv
Y2VzcyBsaWtlIHRoZSBhc3luY2hyb25vdXMgY2FzZSBiZWxvdyBkb2VzLgorICAgICAgICAvLyBU
aGlzIGlzIGN1cnJlbnRseSBpbXBvc3NpYmxlIGFzIHRoZSBXZWJQcm9jZXNzIGlzIGJsb2NrZWQg
d2FpdGluZyBvbiB0aGlzIHN5bmNocm9ub3VzIGxvYWQuCisgICAgICAgIGNvbnRpbnVlQ2FuQXV0
aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSh0cnVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VM
b2FkZXI6OkNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UocHJvdGVjdGlvblNw
YWNlKSwgQ29yZUlQQzo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Jlc291cmNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuaAppbmRleCA3OThjY2NmLi4yYzFjYmIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaApAQCAt
MjgsMTEgKzI4LDE1IEBACiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogCisjaW5jbHVk
ZSAiSG9zdFJlY29yZC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKLSNpbmNsdWRlICJT
Y2hlZHVsYWJsZUxvYWRlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VIYW5kbGVDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlTG9hZGVyT3B0aW9ucy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KIAogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2UqIENGQ2FjaGVk
VVJMUmVzcG9uc2VSZWY7CiAKQEAgLTQ1LDIyICs0OSwzNCBAQCBjbGFzcyBSZXNvdXJjZVJlcXVl
c3Q7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M7CitjbGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczsKIGNsYXNzIFJlbW90
ZU5ldHdvcmtpbmdDb250ZXh0OworY2xhc3MgU2FuZGJveEV4dGVuc2lvbjsKK2NsYXNzIFN5bmNo
cm9ub3VzTG9hZENvbnRyb2xsZXI7CiAKLWNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlciA6IHB1
YmxpYyBTY2hlZHVsYWJsZUxvYWRlciwgcHVibGljIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xp
ZW50LCBwdWJsaWMgQ29yZUlQQzo6TWVzc2FnZVNlbmRlciB7CitjbGFzcyBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+LCBwdWJs
aWMgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQsIHB1YmxpYyBDb3JlSVBDOjpNZXNzYWdl
U2VuZGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRl
cj4gY3JlYXRlKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
LCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVjdGlvbikKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmV0d29ya1Jlc291cmNlTG9hZGVyKHBhcmFtZXRlcnMs
IGNvbm5lY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIocGFyYW1ldGVycywgY29ubmVjdGlvbiwgbnVsbHB0cikpOwogICAgIH0KICAgICAK
KyAgICBzdGF0aWMgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gY3JlYXRlKGNvbnN0IE5l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyogY29ubmVjdGlvbiwgUGFzc1JlZlB0cjxNZXNzYWdlczo6TmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OkRlbGF5ZWRSZXBs
eT4gcmVwbHkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5ldHdvcmtSZXNv
dXJjZUxvYWRlcihwYXJhbWV0ZXJzLCBjb25uZWN0aW9uLCByZXBseSkpOworICAgIH0gICAgCiAg
ICAgfk5ldHdvcmtSZXNvdXJjZUxvYWRlcigpOwogCisgICAgTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MqIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2Nvbm5l
Y3Rpb24uZ2V0KCk7IH0KKworICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5IHByaW9y
aXR5KCkgeyByZXR1cm4gbV9wcmlvcml0eTsgfQorICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCgpIHsgcmV0dXJuIG1fcmVxdWVzdDsgfQorCiAgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlLmdldCgpOyB9CiAgICAg
dm9pZCBkaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCgpOwogCi0gICAgdmlydHVhbCB2b2lkIHN0
YXJ0KCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGFib3J0KCkgT1ZFUlJJREU7CisgICAg
dm9pZCBzdGFydCgpOworICAgIHZvaWQgYWJvcnQoKTsKIAogICAgIC8vIFJlc291cmNlSGFuZGxl
Q2xpZW50IG1ldGhvZHMKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0QXN5bmMoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSBPVkVSUklE
RTsKQEAgLTEwMCwxMiArMTE2LDE3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCB0cnlHZXRT
aGFyZWFibGVIYW5kbGVGcm9tQ0ZVUkxDYWNoZWRSZXNwb25zZShTaGFyZWFibGVSZXNvdXJjZTo6
SGFuZGxlJiwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZik7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwg
Ym9vbCBpc1N5bmNocm9ub3VzKCkgeyByZXR1cm4gbV9zeW5jaHJvbm91c0xvYWRDb250cm9sbGVy
OyB9CisKKyAgICB2b2lkIHNldEhvc3RSZWNvcmQoSG9zdFJlY29yZCogaG9zdFJlY29yZCkgeyBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX2hvc3RSZWNvcmQgPSBob3N0UmVjb3JkOyB9CisgICAg
SG9zdFJlY29yZCogaG9zdFJlY29yZCgpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsg
cmV0dXJuIG1faG9zdFJlY29yZC5nZXQoKTsgfQorCiBwcml2YXRlOgotICAgIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcihjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYsIE5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzKik7CisgICAgTmV0d29ya1Jlc291cmNlTG9hZGVyKGNvbnN0
IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiwgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MqLCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6RGVsYXllZFJlcGx5Pik7CiAKICAgICAvLyBDb3Jl
SVBDOjpNZXNzYWdlU2VuZGVyCiAgICAgdmlydHVhbCBDb3JlSVBDOjpDb25uZWN0aW9uKiBtZXNz
YWdlU2VuZGVyQ29ubmVjdGlvbigpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdWludDY0X3QgbWVz
c2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHVpbnQ2NF90
IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgT1ZFUlJJREUgeyByZXR1cm4gbV9pZGVudGlm
aWVyOyB9CiAKICAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCk7CiAgICAgdm9pZCBjb250aW51ZURpZFJlY2Vp
dmVSZXNwb25zZSgpOwpAQCAtMTE5LDYgKzE0MCw5IEBAIHByaXZhdGU6CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBib29sIHNlbmRBYm9ydGluZ09uRmFpbHVyZShjb25zdCBVJiBtZXNzYWdl
LCB1bnNpZ25lZCBtZXNzYWdlU2VuZEZsYWdzID0gMCk7CiAKKyAgICB2b2lkIGNvbnN1bWVTYW5k
Ym94RXh0ZW5zaW9ucygpOworICAgIHZvaWQgaW52YWxpZGF0ZVNhbmRib3hFeHRlbnNpb25zKCk7
CisKICAgICBSZWZQdHI8UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ+IG1fbmV0d29ya2luZ0NvbnRl
eHQ7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBtX2hhbmRsZTsKIApAQCAt
MTI4LDYgKzE1MiwyOCBAQCBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1fYnl0ZXNSZWNlaXZlZDsK
IAogICAgIGJvb2wgbV9oYW5kbGVDb252ZXJ0ZWRUb0Rvd25sb2FkOworICAgIGJvb2wgbV93YXNB
Ym9ydGVkOworICAgIE93blB0cjxTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyPiBtX3N5bmNocm9u
b3VzTG9hZENvbnRyb2xsZXI7CisKKyAgICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIG1faWRlbnRp
ZmllcjsKKyAgICB1aW50NjRfdCBtX3dlYlBhZ2VJRDsKKyAgICB1aW50NjRfdCBtX3dlYkZyYW1l
SUQ7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdDsKKyAgICBXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRQcmlvcml0eSBtX3ByaW9yaXR5OworICAgIFdlYkNvcmU6OkNvbnRlbnRT
bmlmZmluZ1BvbGljeSBtX2NvbnRlbnRTbmlmZmluZ1BvbGljeTsKKyAgICBXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFscyBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisgICAgV2ViQ29yZTo6Q2xp
ZW50Q3JlZGVudGlhbFBvbGljeSBtX2NsaWVudENyZWRlbnRpYWxQb2xpY3k7CisgICAgYm9vbCBt
X2luUHJpdmF0ZUJyb3dzaW5nTW9kZTsKKyAgICBib29sIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9u
SFRUUFNUb0hUVFBSZWRpcmVjdDsKKyAgICBib29sIG1faXNMb2FkaW5nTWFpblJlc291cmNlOwor
CisgICAgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gbV9yZXF1ZXN0Qm9keVNhbmRi
b3hFeHRlbnNpb25zOworICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IG1fcmVz
b3VyY2VTYW5kYm94RXh0ZW5zaW9uczsKKyAgICBib29sIG1fc2FuZGJveEV4dGVuc2lvbnNBcmVD
b25zdW1lZDsKKworICAgIFJlZlB0cjxOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9j
b25uZWN0aW9uOworICAgIAorICAgIFJlZlB0cjxIb3N0UmVjb3JkPiBtX2hvc3RSZWNvcmQ7CiAK
ICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICBzdGF0aWMg
dm9pZCB0cnlHZXRTaGFyZWFibGVIYW5kbGVGcm9tU2hhcmVkQnVmZmVyKFNoYXJlYWJsZVJlc291
cmNlOjpIYW5kbGUmLCBXZWJDb3JlOjpTaGFyZWRCdWZmZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL1NjaGVkdWxhYmxlTG9hZGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL1NjaGVkdWxhYmxlTG9hZGVyLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYWU3YjIwMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9TY2hlZHVsYWJsZUxvYWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
Y2hlZHVsYWJsZUxvYWRlci5oIgotCi0jaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLQotI2lu
Y2x1ZGUgIk5ldHdvcmtCbG9iUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJz
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Gb3JtRGF0YS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVNjaGVkdWxhYmxlTG9hZGVyOjpTY2hlZHVs
YWJsZUxvYWRlcihjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVy
cywgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24pCi0gICAgOiBtX2lk
ZW50aWZpZXIocGFyYW1ldGVycy5pZGVudGlmaWVyKQotICAgICwgbV93ZWJQYWdlSUQocGFyYW1l
dGVycy53ZWJQYWdlSUQpCi0gICAgLCBtX3dlYkZyYW1lSUQocGFyYW1ldGVycy53ZWJGcmFtZUlE
KQotICAgICwgbV9yZXF1ZXN0KHBhcmFtZXRlcnMucmVxdWVzdCkKLSAgICAsIG1fcHJpb3JpdHko
cGFyYW1ldGVycy5wcmlvcml0eSkKLSAgICAsIG1fY29udGVudFNuaWZmaW5nUG9saWN5KHBhcmFt
ZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5KQotICAgICwgbV9hbGxvd1N0b3JlZENyZWRlbnRp
YWxzKHBhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscykKLSAgICAsIG1fY2xpZW50Q3Jl
ZGVudGlhbFBvbGljeShwYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kpCi0gICAgLCBt
X2luUHJpdmF0ZUJyb3dzaW5nTW9kZShwYXJhbWV0ZXJzLmluUHJpdmF0ZUJyb3dzaW5nTW9kZSkK
LSAgICAsIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdChwYXJhbWV0
ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCi0gICAgLCBtX2lz
TG9hZGluZ01haW5SZXNvdXJjZShwYXJhbWV0ZXJzLmlzTWFpblJlc291cmNlKQotICAgICwgbV9z
YW5kYm94RXh0ZW5zaW9uc0FyZUNvbnN1bWVkKGZhbHNlKQotICAgICwgbV9jb25uZWN0aW9uKGNv
bm5lY3Rpb24pCi17Ci0gICAgLy8gRWl0aGVyIHRoaXMgbG9hZGVyIGhhcyBib3RoIGEgd2ViUGFn
ZUlEIGFuZCB3ZWJGcmFtZUlELCBvciBpdCBpcyBub3QgYWxsb3dlZCB0byBhc2sgdGhlIGNsaWVu
dCBmb3IgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMuCi0gICAgLy8gRklYTUU6IFRoaXMgaXMg
bmVjZXNzYXJ5IGJlY2F1c2Ugb2YgdGhlIGV4aXN0ZW5jZSBvZiBFbXB0eUZyYW1lTG9hZGVyQ2xp
ZW50IGluIFdlYkNvcmUuCi0gICAgLy8gICAgICAgIE9uY2UgYnVnIDExNjIzMyBpcyByZXNvbHZl
ZCwgdGhpcyBBU1NFUlQgY2FuIGp1c3QgYmUgIm1fd2ViUGFnZUlEICYmIG1fd2ViRnJhbWVJRCIK
LSAgICBBU1NFUlQoKG1fd2ViUGFnZUlEICYmIG1fd2ViRnJhbWVJRCkgfHwgbV9jbGllbnRDcmVk
ZW50aWFsUG9saWN5ID09IERvTm90QXNrQ2xpZW50Rm9yQW55Q3JlZGVudGlhbHMpOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0gcGFyYW1ldGVycy5yZXF1ZXN0Qm9keVNhbmRib3hF
eHRlbnNpb25zLnNpemUoKTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxT
YW5kYm94RXh0ZW5zaW9uPiBleHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUocGFy
YW1ldGVycy5yZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zW2ldKSkKLSAgICAgICAgICAgIG1f
cmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9ucy5hcHBlbmQoZXh0ZW5zaW9uKTsKLSAgICB9Ci0K
LSNpZiBFTkFCTEUoQkxPQikKLSAgICBpZiAobV9yZXF1ZXN0Lmh0dHBCb2R5KCkpIHsKLSAgICAg
ICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4mIGVsZW1lbnRzID0gbV9yZXF1ZXN0Lmh0
dHBCb2R5KCktPmVsZW1lbnRzKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9
IGVsZW1lbnRzLnNpemUoKTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChlbGVt
ZW50c1tpXS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjplbmNvZGVkQmxvYikgewotICAgICAg
ICAgICAgICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IGJsb2JFbGVtZW50RXh0
ZW5zaW9ucyA9IE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLnNhbmRib3hFeHRlbnNpb25z
KGVsZW1lbnRzW2ldLm1fdXJsKTsKLSAgICAgICAgICAgICAgICBtX3JlcXVlc3RCb2R5U2FuZGJv
eEV4dGVuc2lvbnMuYXBwZW5kVmVjdG9yKGJsb2JFbGVtZW50RXh0ZW5zaW9ucyk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9yZXF1ZXN0LnVybCgpLnByb3Rv
Y29sSXMoImJsb2IiKSkgewotICAgICAgICBBU1NFUlQoIVNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZShwYXJhbWV0ZXJzLnJlc291cmNlU2FuZGJveEV4dGVuc2lvbikpOwotICAgICAgICBtX3Jlc291
cmNlU2FuZGJveEV4dGVuc2lvbnMgPSBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQoKS5zYW5k
Ym94RXh0ZW5zaW9ucyhtX3JlcXVlc3QudXJsKCkpOwotICAgIH0gZWxzZQotI2VuZGlmCi0gICAg
aWYgKFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiByZXNvdXJjZVNhbmRib3hFeHRlbnNpb24gPSBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUocGFyYW1ldGVycy5yZXNvdXJjZVNhbmRib3hFeHRlbnNp
b24pKQotICAgICAgICBtX3Jlc291cmNlU2FuZGJveEV4dGVuc2lvbnMuYXBwZW5kKHJlc291cmNl
U2FuZGJveEV4dGVuc2lvbik7Ci19Ci0KLVNjaGVkdWxhYmxlTG9hZGVyOjp+U2NoZWR1bGFibGVM
b2FkZXIoKQotewotICAgIEFTU0VSVCghbV9ob3N0UmVjb3JkKTsKLX0KLQotdm9pZCBTY2hlZHVs
YWJsZUxvYWRlcjo6Y29uc3VtZVNhbmRib3hFeHRlbnNpb25zKCkKLXsKLSAgICBmb3IgKHNpemVf
dCBpID0gMCwgY291bnQgPSBtX3JlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnMuc2l6ZSgpOyBp
IDwgY291bnQ7ICsraSkKLSAgICAgICAgbV9yZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zW2ld
LT5jb25zdW1lKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBtX3Jlc291cmNl
U2FuZGJveEV4dGVuc2lvbnMuc2l6ZSgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgbV9yZXNv
dXJjZVNhbmRib3hFeHRlbnNpb25zW2ldLT5jb25zdW1lKCk7Ci0KLSAgICBtX3NhbmRib3hFeHRl
bnNpb25zQXJlQ29uc3VtZWQgPSB0cnVlOwotfQotCi12b2lkIFNjaGVkdWxhYmxlTG9hZGVyOjpp
bnZhbGlkYXRlU2FuZGJveEV4dGVuc2lvbnMoKQotewotICAgIGlmIChtX3NhbmRib3hFeHRlbnNp
b25zQXJlQ29uc3VtZWQpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0gbV9y
ZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zLnNpemUoKTsgaSA8IGNvdW50OyArK2kpCi0gICAg
ICAgICAgICBtX3JlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnNbaV0tPnJldm9rZSgpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBtX3Jlc291cmNlU2FuZGJveEV4dGVuc2lv
bnMuc2l6ZSgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgIG1fcmVzb3VyY2VTYW5kYm94
RXh0ZW5zaW9uc1tpXS0+cmV2b2tlKCk7Ci0gICAgfQotCi0gICAgbV9yZXF1ZXN0Qm9keVNhbmRi
b3hFeHRlbnNpb25zLmNsZWFyKCk7Ci0gICAgbV9yZXNvdXJjZVNhbmRib3hFeHRlbnNpb25zLmNs
ZWFyKCk7Ci0KLSAgICBtX3NhbmRib3hFeHRlbnNpb25zQXJlQ29uc3VtZWQgPSBmYWxzZTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU2NoZWR1bGFi
bGVMb2FkZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL1NjaGVkdWxhYmxlTG9h
ZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxZmY1ZTUuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU2NoZWR1bGFibGVMb2FkZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTY2hlZHVs
YWJsZUxvYWRlcl9oCi0jZGVmaW5lIFNjaGVkdWxhYmxlTG9hZGVyX2gKLQotI2luY2x1ZGUgIkhv
c3RSZWNvcmQuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyT3B0aW9ucy5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi0jaWYgRU5BQkxFKE5FVFdP
UktfUFJPQ0VTUykKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIE5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOwotY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM7Ci1j
bGFzcyBTYW5kYm94RXh0ZW5zaW9uOwotCi1jbGFzcyBTY2hlZHVsYWJsZUxvYWRlciA6IHB1Ymxp
YyBSZWZDb3VudGVkPFNjaGVkdWxhYmxlTG9hZGVyPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
U2NoZWR1bGFibGVMb2FkZXIoKTsKLQotICAgIFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRp
ZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQotICAgIHVpbnQ2NF90IHdlYlBh
Z2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUGFnZUlEOyB9Ci0gICAgdWludDY0X3Qgd2ViRnJh
bWVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViRnJhbWVJRDsgfQotICAgIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdDsgfQot
ICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KCkgY29uc3QgeyByZXR1
cm4gbV9wcmlvcml0eTsgfQotICAgIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBjb250
ZW50U25pZmZpbmdQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRTbmlmZmluZ1BvbGlj
eTsgfQotICAgIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIGFsbG93U3RvcmVkQ3JlZGVudGlh
bHMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7IH0KLSAgICBXZWJD
b3JlOjpDbGllbnRDcmVkZW50aWFsUG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3koKSBjb25z
dCB7IHJldHVybiBtX2NsaWVudENyZWRlbnRpYWxQb2xpY3k7IH0KLSAgICBib29sIGluUHJpdmF0
ZUJyb3dzaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5Qcml2YXRlQnJvd3NpbmdNb2RlOyB9
Ci0gICAgYm9vbCBpc0xvYWRpbmdNYWluUmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2lzTG9h
ZGluZ01haW5SZXNvdXJjZTsgfQotCi0gICAgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mq
IGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0
KCk7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
YWJvcnQoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTeW5jaHJvbm91cygpIHsgcmV0dXJu
IGZhbHNlOyB9Ci0KLSAgICB2b2lkIHNldEhvc3RSZWNvcmQoSG9zdFJlY29yZCogaG9zdFJlY29y
ZCkgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX2hvc3RSZWNvcmQgPSBob3N0UmVjb3JkOyB9
Ci0gICAgSG9zdFJlY29yZCogaG9zdFJlY29yZCgpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsgcmV0dXJuIG1faG9zdFJlY29yZC5nZXQoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgU2No
ZWR1bGFibGVMb2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmLCBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyopOwotCi0gICAgdm9pZCBjb25zdW1lU2FuZGJveEV4
dGVuc2lvbnMoKTsKLSAgICB2b2lkIGludmFsaWRhdGVTYW5kYm94RXh0ZW5zaW9ucygpOwotCi0g
ICAgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0OyB9Ci0K
LXByaXZhdGU6Ci0gICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBtX2lkZW50aWZpZXI7Ci0gICAg
dWludDY0X3QgbV93ZWJQYWdlSUQ7Ci0gICAgdWludDY0X3QgbV93ZWJGcmFtZUlEOwotICAgIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7Ci0gICAgV2ViQ29yZTo6UmVzb3VyY2VM
b2FkUHJpb3JpdHkgbV9wcmlvcml0eTsKLSAgICBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xp
Y3kgbV9jb250ZW50U25pZmZpbmdQb2xpY3k7Ci0gICAgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlh
bHMgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotICAgIFdlYkNvcmU6OkNsaWVudENyZWRlbnRp
YWxQb2xpY3kgbV9jbGllbnRDcmVkZW50aWFsUG9saWN5OwotICAgIGJvb2wgbV9pblByaXZhdGVC
cm93c2luZ01vZGU7Ci0gICAgYm9vbCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQ
UmVkaXJlY3Q7Ci0gICAgYm9vbCBtX2lzTG9hZGluZ01haW5SZXNvdXJjZTsKLQotICAgIFZlY3Rv
cjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IG1fcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9u
czsKLSAgICBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBtX3Jlc291cmNlU2FuZGJv
eEV4dGVuc2lvbnM7Ci0gICAgYm9vbCBtX3NhbmRib3hFeHRlbnNpb25zQXJlQ29uc3VtZWQ7Ci0K
LSAgICBSZWZQdHI8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fY29ubmVjdGlvbjsK
LSAgICAKLSAgICBSZWZQdHI8SG9zdFJlY29yZD4gbV9ob3N0UmVjb3JkOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotCi0j
ZW5kaWYgLy8gU2NoZWR1bGFibGVMb2FkZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9TeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJiMDVlZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9TeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgotCi0jaWYgRU5BQkxFKE5F
VFdPUktfUFJPQ0VTUykKLQotI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzcy5oIgotI2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUhhbmRsZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcjo6U3luY05ldHdv
cmtSZXNvdXJjZUxvYWRlcihjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYgcGFy
YW1ldGVycywgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24sIFBhc3NS
ZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3lu
Y2hyb25vdXNMb2FkOjpEZWxheWVkUmVwbHk+IHJlcGx5KQotICAgIDogU2NoZWR1bGFibGVMb2Fk
ZXIocGFyYW1ldGVycywgY29ubmVjdGlvbikKLSAgICAsIG1fZGVsYXllZFJlcGx5KHJlcGx5KQot
ewotfQotCi12b2lkIFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0KCkKLXsKLSAgICAv
LyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBUaGlzIGlzIGNhbGxlZCBvbiB0aGUgTmV0d29ya1By
b2Nlc3MgbWFpbiB0aHJlYWQsIGJsb2NraW5nIGFueSBvdGhlciByZXF1ZXN0cyBmcm9tIGJlaW5n
IHNjaGVkdWxlZC4KLSAgICAvLyBUaGlzIHNob3VsZCBtb3ZlIHRvIGEgYmFja2dyb3VuZCB0aHJl
YWQsIGJ1dCB3ZSdkIGVpdGhlciBuZWVkIHRvIGJlIHN1cmUgdGhhdDoKLSAgICAvLyAgIEEgLSBS
ZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSBpcyBzYWZlIHRvIHJ1biBv
biBhIGJhY2tncm91bmQgdGhyZWFkLgotICAgIC8vICAgQiAtIFdyaXRlIGN1c3RvbSBsb2FkaW5n
IGxvZ2ljIHRoYXQgaXMga25vd24gdG8gYmUgc2FmZSBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgot
ICAgIAotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBSZXNvdXJjZUVycm9yIGVy
cm9yOwotICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7Ci0gICAgVmVjdG9yPGNoYXI+IGRh
dGE7Ci0gICAgCi0gICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogQ3JlYXRlIFJlbW90ZU5l
dHdvcmtpbmdDb250ZXh0IHdpdGggYWN0dWFsIHNldHRpbmdzLgotICAgIFJlZlB0cjxSZW1vdGVO
ZXR3b3JraW5nQ29udGV4dD4gbmV0d29ya2luZ0NvbnRleHQgPSBSZW1vdGVOZXR3b3JraW5nQ29u
dGV4dDo6Y3JlYXRlKGZhbHNlLCBmYWxzZSwgaW5Qcml2YXRlQnJvd3NpbmdNb2RlKCksIHNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKSk7Ci0KLSAgICBjb25zdW1lU2Fu
ZGJveEV4dGVuc2lvbnMoKTsKLQotICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KG5ldHdvcmtpbmdDb250ZXh0LmdldCgpLCByZXF1ZXN0KCksIGFsbG93U3RvcmVk
Q3JlZGVudGlhbHMoKSwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKLQotICAgIGNsZWFudXAoKTsK
LQotICAgIG1fZGVsYXllZFJlcGx5LT5zZW5kKGVycm9yLCByZXNwb25zZSwgQ29yZUlQQzo6RGF0
YVJlZmVyZW5jZSgodWludDhfdCopZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSk7Ci19Ci0KLXZv
aWQgU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQoKQotewotICAgIGNsZWFudXAoKTsK
LX0KLQotdm9pZCBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjbGVhbnVwKCkKLXsKLSAgICBp
bnZhbGlkYXRlU2FuZGJveEV4dGVuc2lvbnMoKTsKLSAgICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVk
KCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpLnNjaGVkdWxlUmVtb3ZlTG9hZGVyKHRo
aXMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9T
eW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9TeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGE2MDkyOWIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
U3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcl9oCi0jZGVm
aW5lIFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXJfaAotCi0jaW5jbHVkZSAiTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgotI2luY2x1ZGUgIlNjaGVkdWxhYmxlTG9hZGVy
LmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotI2lmIEVOQUJMRShORVRXT1JLX1BS
T0NFU1MpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBTeW5jTmV0d29ya1Jlc291cmNl
TG9hZGVyIDogcHVibGljIFNjaGVkdWxhYmxlTG9hZGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyPiBjcmVhdGUoY29uc3QgTmV0d29y
a1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKiBjb25uZWN0aW9uLCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6RGVsYXllZFJlcGx5PiBy
ZXBseSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3luY05ldHdvcmtSZXNv
dXJjZUxvYWRlcihwYXJhbWV0ZXJzLCBjb25uZWN0aW9uLCByZXBseSkpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCBzdGFydCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgp
IE9WRVJSSURFOwotCi0gICAgdmlydHVhbCBib29sIGlzU3luY2hyb25vdXMoKSBPVkVSUklERSB7
IHJldHVybiB0cnVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgU3luY05ldHdvcmtSZXNvdXJjZUxvYWRl
cihjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYsIE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKiwgUGFzc1JlZlB0cjxNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OkRlbGF5ZWRSZXBseT4pOwotICAgIAot
ICAgIHZvaWQgY2xlYW51cCgpOwotICAgIAotICAgIFJlZlB0cjxNZXNzYWdlczo6TmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OkRlbGF5ZWRSZXBs
eT4gbV9kZWxheWVkUmVwbHk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCi0KLSNlbmRpZiAvLyBTeW5jTmV0d29ya1Jlc291
cmNlTG9hZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL1N5
bmNocm9ub3VzTG9hZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvU3luY2hyb25vdXNMb2FkQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZTQwMWQwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL1N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTI4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN5bmNocm9u
b3VzTG9hZENvbnRyb2xsZXIuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKKyNp
bmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1
ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworU3luY2hyb25vdXNMb2FkQ29udHJvbGxlcjo6U3luY2hy
b25vdXNMb2FkQ29udHJvbGxlcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NS
ZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3lu
Y2hyb25vdXNMb2FkOjpEZWxheWVkUmVwbHk+IHJlcGx5KQorICAgIDogbV9vcmlnaW5hbFJlcXVl
c3QocmVxdWVzdCkKKyAgICAsIG1fZGVsYXllZFJlcGx5KHJlcGx5KQoreworICAgIEFTU0VSVCht
X2RlbGF5ZWRSZXBseSk7Cit9CisKK1N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXI6On5TeW5jaHJv
bm91c0xvYWRDb250cm9sbGVyKCkKK3sKKyAgICAvLyBCeSB0aGUgdGltZSBhIFN5bmNocm9ub3Vz
TG9hZENvbnRyb2xsZXIgaXMgYmVpbmcgZGVzdHJveWVkLCBpdCBtdXN0IGFsd2F5cyBoYXZlIHNl
bnQgaXRzIHJlcGx5IHRvIHRoZSBXZWJQcm9jZXNzCisgICAgLy8gb3IgaGF2ZSBpdHMgbV9kZWxh
eWVkUmVwbHkgY2xlYXJlZCBvdXQgYnkgYSBjYWxsIHRvIGFib3J0KCkKKyAgICBBU1NFUlQoIW1f
ZGVsYXllZFJlcGx5KTsKK30KKwordm9pZCBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyOjp3aWxs
U2VuZFJlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCkKK3sKKyAgICAvLyBGSVhNRTogVGhp
cyBuZWVkcyB0byBiZSBmaXhlZCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0IGNvcnJlY3RseSBldmVu
IGZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMuCisgICAgaWYgKHByb3RvY29sSG9zdEFuZFBvcnRB
cmVFcXVhbChvcmlnaW5hbFJlcXVlc3QudXJsKCksIG5ld1JlcXVlc3QudXJsKCkpKQorICAgIHsK
KyAgICAgICAgbV9jdXJyZW50UmVxdWVzdCA9IG5ld1JlcXVlc3Q7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgQVNTRVJUKG1fZXJyb3IuaXNOdWxsKCkpOworICAgIG1fZXJyb3IgPSBTeW5j
aHJvbm91c0xvYWRlckNsaWVudDo6cGxhdGZvcm1CYWRTeW5jWEhSUmVzcG9uc2VFcnJvcigpOwor
CisgICAgbmV3UmVxdWVzdCA9IDA7Cit9CisKK3ZvaWQgU3luY2hyb25vdXNMb2FkQ29udHJvbGxl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQor
eworICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKK30KKwordm9pZCBTeW5jaHJvbm91c0xvYWRD
b250cm9sbGVyOjpkaWRSZWNlaXZlQnVmZmVyKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQoreworICAg
IC8vIEZJWE1FOiBUaGVyZSdzIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGhl
cmUgYnkgcHJlYWxsb2NhdGluZyBhIFNoYXJlZE1lbW9yeSByZWdpb24KKyAgICAvLyBvZiB0aGUg
ZXhwZWN0ZWQgY29udGVudCBsZW5ndGggdG8gYXZvaWQgYSBjb3B5IHdoZW4gd2Ugc2VuZCBpdCB0
byB0aGUgV2ViUHJvY2VzcyBvbiBjb21wbGV0aW9uLgorICAgIC8vIEl0J3MgdW5jbGVhciBpZiB0
aGUgcG90ZW50aWFsIGNvbXBsZXhpdGllcyBvZiB0aGF0IGFwcHJvYWNoIGFyZSB3b3J0aCBpdC4K
KyAgICAKKyAgICBpZiAoIW1fcmVzcG9uc2VEYXRhKQorICAgICAgICAgbV9yZXNwb25zZURhdGEg
PSBhZG9wdFB0cihuZXcgVmVjdG9yPHVpbnQ4X3Q+KTsKKworICAgIG1fcmVzcG9uc2VEYXRhLT5h
cHBlbmQoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKK30KKwordm9pZCBTeW5jaHJv
bm91c0xvYWRDb250cm9sbGVyOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBzZW5kRGVsYXll
ZFJlcGx5KCk7Cit9CisKK3ZvaWQgU3luY2hyb25vdXNMb2FkQ29udHJvbGxlcjo6ZGlkRmFpbFdp
dGhFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBtX2Vycm9yID0gZXJy
b3I7CisgICAgc2VuZERlbGF5ZWRSZXBseSgpOworfQorCit2b2lkIFN5bmNocm9ub3VzTG9hZENv
bnRyb2xsZXI6OmNhbmNlbCgpCit7CisgICAgQVNTRVJUKG1fZGVsYXllZFJlcGx5KTsKKyAgICAK
KyAgICBpZiAobV9lcnJvci5pc051bGwoKSkKKyAgICAgICAgbV9lcnJvciA9IGNhbmNlbGxlZEVy
cm9yKG1fY3VycmVudFJlcXVlc3QpOworICAgIAorICAgIHNlbmREZWxheWVkUmVwbHkoKTsKK30K
KworCit2b2lkIFN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXI6OnNlbmREZWxheWVkUmVwbHkoKQor
eworICAgIEFTU0VSVChtX2RlbGF5ZWRSZXBseSk7CisKKyAgICB1aW50OF90KiBieXRlcyA9IG1f
cmVzcG9uc2VEYXRhID8gbV9yZXNwb25zZURhdGEtPmRhdGEoKSA6IDA7CisgICAgc2l6ZV90IHNp
emUgPSBtX3Jlc3BvbnNlRGF0YSA/IG1fcmVzcG9uc2VEYXRhLT5zaXplKCkgOiAwOworICAgIAor
ICAgIAorICAgIGlmIChtX3Jlc3BvbnNlLmlzTnVsbCgpKSB7CisgICAgICAgIEFTU0VSVCghbV9l
cnJvci5pc051bGwoKSk7CisgICAgICAgIHBsYXRmb3JtU3ludGhlc2l6ZUVycm9yUmVzcG9uc2Uo
KTsKKyAgICB9CisgICAgCisgICAgbV9kZWxheWVkUmVwbHktPnNlbmQobV9lcnJvciwgbV9yZXNw
b25zZSwgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZShieXRlcywgc2l6ZSkpOworICAgIG1fZGVsYXll
ZFJlcGx5ID0gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvU3luY2hyb25vdXNMb2FkQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvU3luY2hyb25vdXNMb2FkQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ODMzN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9TeW5jaHJvbm91c0xvYWRDb250cm9sbGVyLmgKQEAgLTAs
MCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3luY05ldHdvcmtSZXNvdXJjZUxvYWRl
cl9oCisjZGVmaW5lIFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXJfaAorCisjaW5jbHVkZSAiTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VFcnJvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKwor
Y2xhc3MgU3luY2hyb25vdXNMb2FkQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8U3luY2hyb25vdXNMb2FkQ29udHJvbGxlcj4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6RGVs
YXllZFJlcGx5PiByZXBseSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU3lu
Y2hyb25vdXNMb2FkQ29udHJvbGxlcihvcmlnaW5hbFJlcXVlc3QsIHJlcGx5KSk7CisgICAgfQor
ICAgIAorICAgIH5TeW5jaHJvbm91c0xvYWRDb250cm9sbGVyKCk7CisKKyAgICB2b2lkIHdpbGxT
ZW5kUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVS
ZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdm9pZCBkaWRS
ZWNlaXZlQnVmZmVyKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciopOworICAgIHZvaWQgZGlkRmluaXNo
TG9hZGluZygpOworICAgIHZvaWQgZGlkRmFpbFdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yJik7CisgICAgCisgICAgdm9pZCBjYW5jZWwoKTsKKworICAgIHZvaWQgYWJvcnQo
KSB7IG1fZGVsYXllZFJlcGx5ID0gbnVsbHB0cjsgfQorCitwcml2YXRlOgorICAgIFN5bmNocm9u
b3VzTG9hZENvbnRyb2xsZXIoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5h
bFJlcXVlc3QsIFBhc3NSZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxheWVkUmVwbHk+KTsKKworICAgIHZvaWQg
c2VuZERlbGF5ZWRSZXBseSgpOworICAgIHZvaWQgcGxhdGZvcm1TeW50aGVzaXplRXJyb3JSZXNw
b25zZSgpOworCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fb3JpZ2luYWxSZXF1ZXN0
OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX2N1cnJlbnRSZXF1ZXN0OworICAgIFJl
ZlB0cjxNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5j
aHJvbm91c0xvYWQ6OkRlbGF5ZWRSZXBseT4gbV9kZWxheWVkUmVwbHk7CisgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAgIFdlYkNvcmU6OlJlc291cmNlRXJyb3Ig
bV9lcnJvcjsKKyAgICBPd25QdHI8V1RGOjpWZWN0b3I8dWludDhfdD4+IG1fcmVzcG9uc2VEYXRh
OworCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCisKKyNlbmRpZiAvLyBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL1N5bmNocm9ub3VzTG9hZENv
bnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9TeW5jaHJvbm91c0xv
YWRDb250cm9sbGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZGZh
NTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9TeW5j
aHJvbm91c0xvYWRDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3luY2hyb25vdXNMb2FkQ29udHJvbGxlci5o
IgorCisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKworI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBT
eW5jaHJvbm91c0xvYWRDb250cm9sbGVyOjpwbGF0Zm9ybVN5bnRoZXNpemVFcnJvclJlc3BvbnNl
KCkKK3sKKyAgICBtX3Jlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShtX29yaWdpbmFsUmVxdWVz
dC51cmwoKSwgU3RyaW5nKCksIDAsIFN0cmluZygpLCBTdHJpbmcoKSk7CisgICAgaWYgKG1fZXJy
b3IuZG9tYWluKCkgPT0gU3RyaW5nKE5TVVJMRXJyb3JEb21haW4pKQorICAgICAgICBzd2l0Y2gg
KG1fZXJyb3IuZXJyb3JDb2RlKCkpIHsKKyAgICAgICAgY2FzZSBOU1VSTEVycm9yVXNlckNhbmNl
bGxlZEF1dGhlbnRpY2F0aW9uOgorICAgICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCByZWFs
bHkgcmV0dXJuIHRoZSBhY3R1YWwgSFRUUCByZXNwb25zZSwgYnV0IHNlbmRTeW5jaHJvbm91c1Jl
cXVlc3QgZG9lc24ndCBwcm92aWRlIHVzIHdpdGggb25lLgorICAgICAgICAgICAgbV9yZXNwb25z
ZS5zZXRIVFRQU3RhdHVzQ29kZSg0MDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKG1fZXJyb3Iu
ZXJyb3JDb2RlKCkpOworICAgICAgICB9CisgICAgZWxzZQorICAgICAgICBtX3Jlc3BvbnNlLnNl
dEhUVFBTdGF0dXNDb2RlKDQwNCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5YzM4M2UxLi5mYjZiZmI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC00NjMsMTIgKzQ2MywxNSBAQAogCQk1MTJGNThGQTEyQTg4QTU0MDA2Mjk1MzAgLyogV0tDcmVk
ZW50aWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTJGNThGMjEyQTg4QTU0MDA2Mjk1MzAgLyogV0tDcmVkZW50aWFsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEyRjU4RkIxMkE4OEE1NDAwNjI5
NTMwIC8qIFdLUHJvdGVjdGlvblNwYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkY1OEYzMTJBODhBNTQwMDYyOTUzMCAvKiBXS1Byb3RlY3Rp
b25TcGFjZS5jcHAgKi87IH07CiAJCTUxMkY1OEZDMTJBODhBNTQwMDYyOTUzMCAvKiBXS1Byb3Rl
Y3Rpb25TcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTEyRjU4RjQxMkE4OEE1NDAwNjI5NTMwIC8qIFdLUHJvdGVjdGlvblNwYWNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTEyRkVDQUIxN0Iy
RjlBRDAwRkNGOTUwIC8qIFN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJGRUNBQTE3QjJGOUFEMDBGQ0Y5
NTAgLyogU3luY2hyb25vdXNMb2FkQ29udHJvbGxlci5tbSAqLzsgfTsKIAkJNTEzNjE4M0QxNjMx
MjZEQTAwQTk5RERFIC8qIENvbm5lY3Rpb25TdGFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTM2MTgzQjE2MzEyNkRBMDBBOTlEREUgLyogQ29u
bmVjdGlvblN0YWNrLmNwcCAqLzsgfTsKIAkJNTEzNjE4M0UxNjMxMjZEQTAwQTk5RERFIC8qIENv
bm5lY3Rpb25TdGFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTEzNjE4M0MxNjMxMjZEQTAwQTk5RERFIC8qIENvbm5lY3Rpb25TdGFjay5oICovOyB9
OwogCQk1MTNBMTYzQzE2MzA4OEY2MDA1RDdEMjIgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTNBMTYzQTE2MzA4OEY2MDA1RDdEMjIgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTUxM0ExNjNEMTYzMDg4RjYwMDVEN0QyMiAvKiBOZXR3
b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxM0ExNjNCMTYzMDg4RjYwMDVEN0QyMiAvKiBOZXR3b3JrUHJvY2Vz
c1Byb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJNTEzQTE2NEMxNjMwQTlCRjAwNUQ3RDIyIC8qIE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxM0ExNjQ5MTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgKi87IH07CiAJCTUxM0ExNjREMTYzMEE5QkYwMDVE
N0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEzQTE2NEExNjMwQTlCRjAwNUQ3RDIyIC8q
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggKi87IH07CisJCTUxM0ZCOUQ5MTdCMDUw
OEYwMEREQkY0MSAvKiBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxM0ZCOUQ3MTdCMDUwOEYwMEREQkY0
MSAvKiBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJNTEzRkI5REIxN0Iw
NTA4RjAwRERCRjQxIC8qIFN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxM0ZCOUQ4MTdCMDUwOEYwMEREQkY0
MSAvKiBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyLmggKi87IH07CiAJCTUxNEJERUQzMTZDOThF
REQwMEU0RTI1RSAvKiBTdGF0aXN0aWNzUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0QkRFRDIxNkM5OEVERDAwRTRFMjVFIC8qIFN0YXRp
c3RpY3NSZXF1ZXN0LmggKi87IH07CiAJCTUxNTM1NjlDMTI5MUIxRDIwMDA3NDlEQyAvKiBXZWJQ
YWdlQ29udGV4dE1lbnVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE1MzU2OUExMjkxQjFEMjAwMDc0OURDIC8qIFdlYlBhZ2VDb250ZXh0
TWVudUNsaWVudC5jcHAgKi87IH07CiAJCTUxNTM1NjlEMTI5MUIxRDIwMDA3NDlEQyAvKiBXZWJQ
YWdlQ29udGV4dE1lbnVDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNTM1NjlCMTI5MUIxRDIwMDA3NDlEQyAvKiBXZWJQYWdlQ29udGV4dE1l
bnVDbGllbnQuaCAqLzsgfTsKQEAgLTQ4OSw4ICs0OTIsNiBAQAogCQk1MTc5NTU3MTE2Mjg3N0Qy
MDBGQTQzQjYgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQThBNjBGMTYyN0YyQkQwMDBE
OTBFOSAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oICovOyB9OwogCQk1MTdD
RjBFMzE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNz
YWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk1MTdDRjBFNDE2M0E0ODZDMDBDMjk1MEUgLyogTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0NGMEUyMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oICovOyB9OwotCQk1MTgxNUI5RjE2QTYyMjIxMDA1
NDUwMUYgLyogU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgxNUI5RDE2QTYyMjIxMDA1NDUwMUYgLyog
U3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgKi87IH07Ci0JCTUxODE1QkEwMTZBNjIyMjEw
MDU0NTAxRiAvKiBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgxNUI5RTE2QTYyMjIxMDA1NDUwMUYgLyog
U3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5oICovOyB9OwogCQk1MTgyOURBNTE2MzdDNzBDMDAw
OTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgyOURBMzE2MzdDNzBDMDAwOTUzRDYg
LyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgKi87IH07CiAJCTUxODI5REE2MTYz
N0M3MEMwMDA5NTNENiAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgyOURBNDE2MzdDNzBDMDAw
OTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oICovOyB9OwogCQk1MTgzNDU5
MjEzNDUzMkU5MDA5MkI2OTYgLyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODM0NTkwMTM0NTMyRTgwMDky
QjY5NiAvKiBXZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwICovOyB9OwpAQCAtNTE0LDggKzUxNSw2
IEBACiAJCTUxOEU4RjBCMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4RThGMDIxNkIy
MDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFuYWdlci5jcHAgKi87IH07CiAJCTUxOEU4RjBDMTZC
MjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEU4RjAzMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3du
bG9hZE1hbmFnZXIuaCAqLzsgfTsKIAkJNTE4RThGMEQxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25s
b2FkTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE4RThGMDUxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFjLm1tICovOyB9OwotCQk1MTlC
NEZGNDE2QTlFQTk3MDA2Njg3NEQgLyogU2NoZWR1bGFibGVMb2FkZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5QjRGRjIxNkE5RUE5NzAwNjY4
NzREIC8qIFNjaGVkdWxhYmxlTG9hZGVyLmNwcCAqLzsgfTsKLQkJNTE5QjRGRjUxNkE5RUE5NzAw
NjY4NzREIC8qIFNjaGVkdWxhYmxlTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTlCNEZGMzE2QTlFQTk3MDA2Njg3NEQgLyogU2NoZWR1bGFi
bGVMb2FkZXIuaCAqLzsgfTsKIAkJNTFBNEQ1QTkxNkNBQzRGRjAwMEU2MTVFIC8qIFN0YXRpc3Rp
Y3NSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxQTRENUE4MTZDQUM0RkYwMDBFNjE1RSAvKiBTdGF0aXN0aWNzUmVxdWVzdC5jcHAgKi87
IH07CiAJCTUxQTU1NUY1MTI4QzZDNDcwMDlBQkNFQyAvKiBXS0NvbnRleHRNZW51SXRlbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE1NTVGMzEy
OEM2QzQ3MDA5QUJDRUMgLyogV0tDb250ZXh0TWVudUl0ZW0uY3BwICovOyB9OwogCQk1MUE1NTVG
NjEyOEM2QzQ3MDA5QUJDRUMgLyogV0tDb250ZXh0TWVudUl0ZW0uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTU1NUY0MTI4QzZDNDcwMDlBQkNFQyAv
KiBXS0NvbnRleHRNZW51SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xOTM5LDYgKzE5MzgsNyBAQAogCQk1MTJGNThGMjEyQTg4QTU0MDA2
Mjk1MzAgLyogV0tDcmVkZW50aWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdLQ3JlZGVudGlhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTJGNThGMzEy
QTg4QTU0MDA2Mjk1MzAgLyogV0tQcm90ZWN0aW9uU3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0tQcm90ZWN0aW9uU3BhY2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTJGNThGNDEyQTg4QTU0MDA2Mjk1MzAgLyogV0tQcm90ZWN0aW9u
U3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQcm90ZWN0aW9uU3Bh
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEyRkVDQUExN0IyRjlBRDAwRkNG
OTUwIC8qIFN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyLm1tOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3MvU3luY2hyb25vdXNMb2FkQ29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9
IFNPVVJDRV9ST09UOyB9OwogCQk1MTM2MTgzQjE2MzEyNkRBMDBBOTlEREUgLyogQ29ubmVjdGlv
blN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbm5lY3Rp
b25TdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMzYxODNDMTYzMTI2
REEwMEE5OURERSAvKiBDb25uZWN0aW9uU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29ubmVjdGlvblN0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxM0ExNjNBMTYzMDg4RjYwMDVEN0QyMiAvKiBOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtQ
cm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTk0Niw2ICsxOTQ2LDggQEAKIAkJNTEzQTE2NDkxNjMwQTlCRjAwNUQ3RDIyIC8qIE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDsgcGF0aCA9IE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEzQTE2NEExNjMwQTlCRjAwNUQ3RDIyIC8qIE5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MTNBMTY0QjE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW47IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTEzRkI5RDcxN0IwNTA4RjAwRERCRjQxIC8qIFN5bmNocm9ub3VzTG9hZENvbnRy
b2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3luY2hyb25v
dXNMb2FkQ29udHJvbGxlci5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9TeW5jaHJvbm91c0xv
YWRDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEzRkI5RDgx
N0IwNTA4RjAwRERCRjQxIC8qIFN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3luY2hyb25vdXNMb2FkQ29udHJvbGxlci5oOyBwYXRo
ID0gTmV0d29ya1Byb2Nlc3MvU3luY2hyb25vdXNMb2FkQ29udHJvbGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTRCREVEMjE2Qzk4RUREMDBFNEUyNUUgLyogU3RhdGlzdGlj
c1JlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGlzdGljc1Jl
cXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1MzU2OUExMjkxQjFEMjAw
MDc0OURDIC8qIFdlYlBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTUzNTY5QjEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFn
ZUNvbnRleHRNZW51Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlBhZ2VDb250ZXh0TWVudUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTk1OSw4ICsxOTYxLDYgQEAKIAkJNTE3QTMzQjQxMzBCMzA4QzAwRjgwQ0I1IC8qIFdLQXBwbGlj
YXRpb25DYWNoZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tB
cHBsaWNhdGlvbkNhY2hlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTdDRjBFMTE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxN0NGMEUyMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb25NZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1MTgxNUI5RDE2QTYyMjIxMDA1NDUwMUYgLyogU3luY05ldHdvcmtSZXNvdXJjZUxvYWRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTeW5jTmV0d29ya1Jl
c291cmNlTG9hZGVyLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL1N5bmNOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTgxNUI5RTE2QTYy
MjIxMDA1NDUwMUYgLyogU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmg7IHBhdGggPSBO
ZXR3b3JrUHJvY2Vzcy9TeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxODI5REEzMTYzN0M3MEMwMDA5NTNENiAvKiBOZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxODI5REE0MTYzN0M3MEMwMDA5NTNENiAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE4MzQ1OTAxMzQ1
MzJFODAwOTJCNjk2IC8qIFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk4Niw4ICsxOTg2LDYgQEAKIAkJNTE4RThGMDIxNkIy
MDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBEb3dubG9hZE1hbmFnZXIuY3BwOyBwYXRoID0gRG93bmxvYWRzL0Rv
d25sb2FkTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxOEU4RjAz
MTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRG93bmxvYWRNYW5hZ2VyLmg7IHBhdGggPSBEb3dubG9hZHMvRG93bmxv
YWRNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxOEU4RjA1MTZCMjA5
MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IERvd25sb2FkTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MTlCNEZGMjE2QTlFQTk3MDA2Njg3NEQgLyogU2NoZWR1bGFibGVMb2FkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU2NoZWR1bGFibGVMb2FkZXIuY3BwOyBw
YXRoID0gTmV0d29ya1Byb2Nlc3MvU2NoZWR1bGFibGVMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MTlCNEZGMzE2QTlFQTk3MDA2Njg3NEQgLyogU2NoZWR1bGFibGVM
b2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2NoZWR1bGFibGVMb2Fk
ZXIuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL1NjaGVkdWxhYmxlTG9hZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQTRENUE4MTZDQUM0RkYwMDBFNjE1RSAvKiBTdGF0aXN0
aWNzUmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGF0
aXN0aWNzUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQTU1NUYz
MTI4QzZDNDcwMDlBQkNFQyAvKiBXS0NvbnRleHRNZW51SXRlbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS0NvbnRleHRNZW51SXRlbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxQTU1NUY0MTI4QzZDNDcwMDlBQkNFQyAvKiBXS0NvbnRleHRN
ZW51SXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRleHRNZW51
SXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzY1MywxMCArMzY1MSw4IEBA
CiAJCQkJRTE1MjU1MTcxNzAxMDlGQjAwM0Q3QURCIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlci5t
ZXNzYWdlcy5pbiAqLywKIAkJCQk1MTgyOURBMzE2MzdDNzBDMDAwOTUzRDYgLyogTmV0d29ya1Jl
c291cmNlTG9hZFNjaGVkdWxlci5jcHAgKi8sCiAJCQkJNTE4MjlEQTQxNjM3QzcwQzAwMDk1M0Q2
IC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCAqLywKLQkJCQk1MTlCNEZGMjE2QTlF
QTk3MDA2Njg3NEQgLyogU2NoZWR1bGFibGVMb2FkZXIuY3BwICovLAotCQkJCTUxOUI0RkYzMTZB
OUVBOTcwMDY2ODc0RCAvKiBTY2hlZHVsYWJsZUxvYWRlci5oICovLAotCQkJCTUxODE1QjlEMTZB
NjIyMjEwMDU0NTAxRiAvKiBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcCAqLywKLQkJCQk1
MTgxNUI5RTE2QTYyMjIxMDA1NDUwMUYgLyogU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5oICov
LAorCQkJCTUxM0ZCOUQ3MTdCMDUwOEYwMEREQkY0MSAvKiBTeW5jaHJvbm91c0xvYWRDb250cm9s
bGVyLmNwcCAqLywKKwkJCQk1MTNGQjlEODE3QjA1MDhGMDBEREJGNDEgLyogU3luY2hyb25vdXNM
b2FkQ29udHJvbGxlci5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBOZXR3b3JrUHJvY2VzczsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zNjcyLDYgKzM2NjgsNyBAQAogCQkJCTUxMkMw
NjhGMTYzOTBFNjkwMEFCQjkxMSAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyTWFjLm1t
ICovLAogCQkJCUUxQjc4NDcwMTYzRjI0NjkwMDA3QjY5MiAvKiBSZW1vdGVOZXR3b3JraW5nQ29u
dGV4dC5oICovLAogCQkJCUUxQjc4NDcyMTYzRjI1M0UwMDA3QjY5MiAvKiBSZW1vdGVOZXR3b3Jr
aW5nQ29udGV4dC5tbSAqLywKKwkJCQk1MTJGRUNBQTE3QjJGOUFEMDBGQ0Y5NTAgLyogU3luY2hy
b25vdXNMb2FkQ29udHJvbGxlci5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gbWFjOwogCQkJcGF0
aCA9IE5ldHdvcmtQcm9jZXNzL21hYzsKQEAgLTU0OTMsNyArNTQ5MCw2IEBACiAJCQkJQkMyRDAy
MTcxMkFDNDFDQjAwRTczMkEzIC8qIFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQUFCNEE4RDEyOTZGMEEyMDAyMzk1MkYgLyogU2FuZGJveEV4dGVuc2lv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFNTUyQzUxNkFFMDY1RjAwNEVENjUzIC8qIFNhbmRi
b3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxOUI0RkY1
MTZBOUVBOTcwMDY2ODc0RCAvKiBTY2hlZHVsYWJsZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTFEMTMwNTQxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXF1ZXN0RGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTFEMTMwNTYxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXNwb25z
ZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNzkwODhGMTY5QkFBNkEwMDY5MDRDNyAvKiBT
ZWNJdGVtU2hpbS5oIGluIEhlYWRlcnMgKi8sCkBAIC01NTA4LDYgKzU1MDQsNyBAQAogCQkJCTFB
MjRCRUQ1MTIwODk0RDEwMEZCQjA1OSAvKiBTaGFyZWRNZW1vcnkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUxRURGREFFMTYyODg5M0IwMDM5RUNEQSAvKiBTaGFyZWRXb3JrZXJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUVERkUxMzE2MjhDRkJEMDAzOUVD
REEgLyogU2hhcmVkV29ya2VyUHJvY2Vzc01hbmFnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUx
M0ZCOURCMTdCMDUwOEYwMEREQkY0MSAvKiBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMUVERkRCNjE2MjhBRDczMDAzOUVDREEgLyogU2hhcmVkV29ya2Vy
UHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUVERkRCQTE2MjhCMDQ1MDAz
OUVDREEgLyogU2hhcmVkV29ya2VyUHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MUVERkRCODE2MjhBRDczMDAzOUVDREEgLyogU2hhcmVkV29ya2VyUHJvY2Vzc1Byb3h5TWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNTUyMCw3ICs1NTE3LDYgQEAKIAkJCQkxQUIzMUE5NzE2
QkM2ODgxMDBGNkRCQzkgLyogU3RvcmFnZU1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUExM0JFQjQxNjM1QTlDODAwRjE5QzAzIC8qIFN0cmluZ1JlZmVyZW5jZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMjk2QkQ4NUQxNTAxOUJDMzAwNzFGNDI0IC8qIFN0cmluZ1V0aWxpdGll
cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE4MTVCQTAxNkE2MjIyMTAwNTQ1MDFGIC8qIFN5bmNO
ZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQTQxN0NCMTJDMDBD
Q0EwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMVFRNDE3Q0Ix
MkMwMENDQTAwMkJFNjdCIC8qIFRleHRDaGVja2VyQ29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUE1RTREQTQxMkQzQkQzRDAwOTlBMkJCIC8qIFRleHRDaGVja2VyU3RhdGUuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjc2MSw3ICs2NzU3LDYgQEAKIAkJCQlCQzExMUIwOTExMkY1RTNDMDAz
MzdCQUIgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUFC
NEFBQTEyOTZGMTU0MDAyMzk1MkYgLyogU2FuZGJveEV4dGVuc2lvbk1hYy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUUxRTU1MkM0MTZBRTA2NUYwMDRFRDY1MyAvKiBTYW5kYm94SW5pdGlhbGlhdGlv
blBhcmFtZXRlcnNNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQk1MTlCNEZGNDE2QTlFQTk3MDA2
Njg3NEQgLyogU2NoZWR1bGFibGVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFEMTMw
NTMxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXF1ZXN0RGF0YS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MUQxMzA1NTEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0YS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTc5MDg4RDE2OUJBQTYyMDA2OTA0QzcgLyogU2VjSXRl
bVNoaW0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02Nzk0LDcgKzY3ODksNiBAQAogCQkJCTFBNDRC
OTU3MTZCNzM3QUEwMEI3QkJEOCAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQTEzQkVCMzE2MzVBOUM4MDBGMTlDMDMgLyogU3RyaW5nUmVmZXJlbmNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTI5NkJEODVFMTUwMTlCQzMwMDcxRjQyNCAvKiBTdHJpbmdV
dGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKLQkJCQk1MTgxNUI5RjE2QTYyMjIxMDA1NDUwMUYg
LyogU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxWlo0
MTdFRjEyQzAwRDg3MDAyQkU2N0IgLyogVGV4dENoZWNrZXJDb21wbGV0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBQTQxN0VGMTJDMDBEODcwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlck1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTFBQUYyNjM4MTQ2ODdDMzkwMDRBMUU4QSAvKiBUaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbSBpbiBTb3VyY2VzICovLApAQCAtNjg2OCw2ICs2ODYy
LDcgQEAKIAkJCQlCQ0U0Njk1NTEyMTRFNkNCMDAwQjk4RUIgLyogV2ViRm9ybVN1Ym1pc3Npb25M
aXN0ZW5lclByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTExQUREMTEyRjVCOTMwMDMz
N0JBQiAvKiBXZWJGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0U0Njk3OTEyMTRGMkI0
MDAwQjk4RUIgLyogV2ViRnJhbWVMaXN0ZW5lclByb3h5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTUxMkZFQ0FCMTdCMkY5QUQwMEZDRjk1MCAvKiBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxMTFBNUYxMTJGNEZCQjAwMzM3QkFCIC8qIFdlYkZyYW1l
TG9hZGVyQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTFGMkNBMTIxQjY3OUEwMEVC
RjdFOCAvKiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNCOUY2QTExMTIzQTg0QjAwQTEzN0UwIC8qIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTY5NjMsNiArNjk1OCw3IEBACiAJCQkJMzc2MDg4MUUxNTA0
MTNFOTAwRkM4MkM3IC8qIFdlYlJlbmRlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MTIxNzQ2NDE2NEMyMTM3MDAzN0E1QzEgLyogV2ViUmVzb3VyY2VCdWZmZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzMzNjc2MkYxMzBDOTk5ODAwNkM5REUyIC8qIFdlYlJlc291cmNlQ2FjaGVN
YW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxM0ZCOUQ5MTdCMDUwOEYwMEREQkY0MSAv
KiBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzRjlE
NUI5MTMxMkYxRUUwMDBENjgzRiAvKiBXZWJSZXNvdXJjZUNhY2hlTWFuYWdlckNGTmV0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTMzMzY3NjU1MTMwQzlFQ0EwMDZDOURFMiAvKiBXZWJSZXNvdXJj
ZUNhY2hlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMzM2
NzYzNTEzMEM5OUIyMDA2QzlERTIgLyogV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAppbmRleCAw
OThiODE4Li4wNjZhMzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCkBA
IC0yMzIsNiArMjMyLDEyIEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0CiAgICAgICAgIExvYWRl
clN0cmF0ZWd5Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnRleHQsIHJlc291cmNlTG9h
ZElkZW50aWZpZXIsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBjbGllbnRDcmVkZW50aWFs
UG9saWN5LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQor
ICAgIAorICAgIC8vIERvbid0IGJvdGhlciBjb25zdWx0aW5nIHRoZSBOZXR3b3JrUHJvY2VzcyBp
ZiB0aGlzIHJlcXVlc3QgaXMgdG8gYSBibG9ja2VkIHBvcnQuCisgICAgaWYgKCFwb3J0QWxsb3dl
ZChyZXF1ZXN0LnVybCgpKSkgeworICAgICAgICBlcnJvciA9IGNvbnRleHQtPmJsb2NrZWRFcnJv
cihyZXF1ZXN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIENvcmVJUEM6OkRhdGFS
ZWZlcmVuY2UgZGF0YVJlZmVyZW5jZTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208687</attachid>
            <date>2013-08-13 16:09:32 -0700</date>
            <delta_ts>2013-08-15 12:33:03 -0700</delta_ts>
            <desc>Patch v1 </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>93546</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0OWJiM2FhLi4xNWU4YjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIg
QEAKKzIwMTMtMDgtMTMgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIChOZXR3b3JrUHJvY2VzcykgIFN5bmMgWEhScyBzaG91bGQgbG9hZCB1c2luZyBhc3luYyBS
ZXNvdXJjZUhhbmRsZXMsIG5vdCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5
NDkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIChDb3ZlcmVkIGJ5IHBsZW50eSBvZiBleGlzdGluZyB0ZXN0cykuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVy
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Ojp3
aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25vdXNMb2FkZXJDbGll
bnQ6OnBsYXRmb3JtQmFkU3luY1hIUlJlc3BvbnNlRXJyb3IpOiBSZW5hbWVkIGZyb20gcGxhdGZv
cm1CYWRSZXNwb25zZUVycm9yKCkKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9u
b3VzTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvU3luY2hy
b25vdXNMb2FkZXJDbGllbnQubW06CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91c0xvYWRl
ckNsaWVudDo6cGxhdGZvcm1CYWRTeW5jWEhSUmVzcG9uc2VFcnJvcik6CisKIDIwMTMtMDgtMTMg
IHBlYXZvQG91dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5jb20+CiAKICAgICAgICAgW0N1cmxd
IFBvc3NpYmxlIGluZmluaXRlIGxvb3Agd2hpbGUgZG93bmxvYWRpbmcuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCmluZGV4IDQyZWRmZDguLmY3NTQwYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0zNDAs
NiArMzQwLDcgQEAgX19aTjdXZWJDb3JlMTRSZXNvdXJjZUJ1ZmZlckMxRXYKIF9fWk43V2ViQ29y
ZTE0UmVzb3VyY2VCdWZmZXJDMkV2CiBfX1pON1dlYkNvcmUxNFJlc291cmNlQnVmZmVyRDFFdgog
X19aTjdXZWJDb3JlMTRSZXNvdXJjZUJ1ZmZlckQyRXYKK19fWk43V2ViQ29yZTE0UmVzb3VyY2VI
YW5kbGUxMmZpcnN0UmVxdWVzdEV2CiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjBmb3Jj
ZUNvbnRlbnRTbmlmZmluZ0V2CiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjNjb250aW51
ZVdpbGxTZW5kUmVxdWVzdEVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RQogX19aTjdXZWJDb3JlMTRS
ZXNvdXJjZUhhbmRsZTI1Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZUVQMTlOU0NhY2hlZFVSTFJl
c3BvbnNlCkBAIC02OTAsNiArNjkxLDcgQEAgX19aTjdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNl
QmFzZTE5c2V0VGV4dEVuY29kaW5nTmFtZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTIw
UmVzb3VyY2VSZXNwb25zZUJhc2UyMHNldFN1Z2dlc3RlZEZpbGVuYW1lRVJLTjNXVEY2U3RyaW5n
RQogX19aTjdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNlQmFzZTI0c2V0RXhwZWN0ZWRDb250ZW50
TGVuZ3RoRXgKIF9fWk43V2ViQ29yZTIwUmVzb3VyY2VSZXNwb25zZUJhc2U2c2V0VVJMRVJLTlNf
NEtVUkxFCitfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlQzJFUktOU180S1VSTEVS
S04zV1RGNlN0cmluZ0V4UzdfUzdfCiBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNl
QzJFdgogX19aTjdXZWJDb3JlMjBTcGFjZVNwbGl0U3RyaW5nRGF0YUQxRXYKIF9fWk43V2ViQ29y
ZTIwVXNlckdlc3R1cmVJbmRpY2F0b3I3c19zdGF0ZUUKQEAgLTc2Nyw2ICs3NjksNyBAQCBfX1pO
N1dlYkNvcmUyM0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlMjNzZXRBdXRoZW50aWNhdGlvbkNsaWVu
dEVQTlNfMjBBdXRoZW50aWNhdAogX19aTjdXZWJDb3JlMjNBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZUMxRVJLTlNfMTVQcm90ZWN0aW9uU3BhY2VFUktOU18xMENyZWRlbnRpYWxFalJLTlNfMTZSZXNv
dXJjZVJlc3BvbnNlRVJLTlNfMTNSZXNvdXJjZUVycm9yRQogX19aTjdXZWJDb3JlMjNNdXRhYmxl
U3R5bGVQcm9wZXJ0eVNldDI1ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbkV2CiBfX1pON1dlYkNv
cmUyM011dGFibGVTdHlsZVByb3BlcnR5U2V0RDFFdgorX19aTjdXZWJDb3JlMjNTeW5jaHJvbm91
c0xvYWRlckNsaWVudDMxcGxhdGZvcm1CYWRTeW5jWEhSUmVzcG9uc2VFcnJvckV2CiBfX1pON1dl
YkNvcmUyM2NyZWF0ZUZyYWdtZW50RnJvbU5vZGVzRVBOU184RG9jdW1lbnRFUktOM1dURjZWZWN0
b3JJUE5TXzROb2RlRUxtMEVOUzJfMTVDcmFzaE9uT3ZlcmZsb3dFRUUKIF9fWk43V2ViQ29yZTIz
ZGF0YUZvclVSTENvbXBvbmVudFR5cGVFUDVOU1VSTGwKIF9fWk43V2ViQ29yZTIzZGVjb2RlSG9z
dE5hbWVXaXRoUmFuZ2VFUDhOU1N0cmluZzhfTlNSYW5nZQpAQCAtODExLDYgKzgxNCw3IEBAIF9f
Wk43V2ViQ29yZTI3QXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlQzJFdgogX19aTjdXZWJDb3Jl
MjdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25DMUVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9k
ZUVFRWJSS05TMV82U3RyaW5nRQogX19aTjdXZWJDb3JlMjdEZXZpY2VPcmllbnRhdGlvbkNsaWVu
dE1vY2sxNHNldE9yaWVudGF0aW9uRU4zV1RGMTBQYXNzUmVmUHRySU5TXzIxRGV2aWNlT3JpZW50
YXRpb25EYXRhRUVFCiBfX1pON1dlYkNvcmUyN0RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9ja0Mx
RXYKK19fWk43V2ViQ29yZTI3cHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsRVJLTlNfNEtVUkxF
UzJfCiBfX1pON1dlYkNvcmUyN3N0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlc0VQRnZ2RQogX19a
TjdXZWJDb3JlMjhEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uMTJhZGRVc2VyU2hlZXRFTjNX
VEYxMFBhc3NSZWZQdHJJTlNfMThTdHlsZVNoZWV0Q29udGVudHNFRUUKIF9fWk43V2ViQ29yZTI4
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjE0YWRkQXV0aG9yU2hlZXRFTjNXVEYxMFBhc3NS
ZWZQdHJJTlNfMThTdHlsZVNoZWV0Q29udGVudHNFRUUKQEAgLTE4MzEsNiArMTgzNSw3IEBAIF9f
Wk43V2ViQ29yZTEwRmxvYXRQb2ludEMxRVJLOF9OU1BvaW50CiBfX1pON1dlYkNvcmUxMGhhbmRD
dXJzb3JFdgogX19aTjdXZWJDb3JlMTFDYWNoZWRJbWFnZTVpbWFnZUV2CiBfX1pON1dlYkNvcmUx
MWdsb2JhbFBvaW50RVJLOF9OU1BvaW50UDhOU1dpbmRvdworX19aTjdXZWJDb3JlMTFwb3J0QWxs
b3dlZEVSS05TXzRLVVJMRQogX19aTjdXZWJDb3JlMTF0b1VzZXJTcGFjZUVSSzdfTlNSZWN0UDhO
U1dpbmRvdwogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxMG1vdXNlTW92ZWRFUDdOU0V2ZW50
CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjEwd2hlZWxFdmVudEVQN05TRXZlbnQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBl
N2M0NDYzNC4uODk1MTZmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTM5NSw3ICs1Mzk1LDcgQEAKIAkJRTE4MDgxMEYxNkZD
RUNERjAwQjgwRDA3IC8qIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxODA4MTBEMTZGQ0VDREYw
MEI4MEQwNyAvKiBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlLmggKi87IH07CiAJCUUx
ODA4MTEyMTZGQ0Y0MkYwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTgwODExMDE2RkNG
NDJFMDBCODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwICovOyB9OwogCQlFMTgw
ODExNjE2RkNGOUNCMDBCODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTgwODExNDE2RkNGOUNC
MDBCODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQubW0gKi87IH07Ci0JCUUxODA4MTE3
MTZGQ0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4MDgxMTUxNkZDRjlDQjAwQjgw
RDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmggKi87IH07CisJCUUxODA4MTE3MTZGQ0Y5
Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4MDgxMTUxNkZDRjlDQjAwQjgwRDA3IC8q
IFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE4MjU2OEYwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29ya2Vy
R2xvYmFsU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTE4MjU2OEQwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29ya2VyR2xvYmFsU2NvcGUuY3Bw
ICovOyB9OwogCQlFMTgyNTY5MDBFRjJCMDJEMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29w
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4MjU2
OEUwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29ya2VyR2xvYmFsU2NvcGUuaCAqLzsgfTsKIAkJRTE4
MjU4QUMwRUYzQ0Q3MDAwOTMzMjQyIC8qIEpTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4MjU4QUIwRUYz
Q0Q3MDAwOTMzMjQyIC8qIEpTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwICovOyB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRl
ckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3Vz
TG9hZGVyQ2xpZW50LmNwcAppbmRleCAxNjQzMWIwLi42OWMzOTRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xp
ZW50LmNwcApAQCAtNDcsNyArNDcsNyBAQCB2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Ojp3
aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgUmVzb3VyY2VSZQogICAgICAg
ICByZXR1cm47CiAKICAgICBBU1NFUlQobV9lcnJvci5pc051bGwoKSk7Ci0gICAgbV9lcnJvciA9
IHBsYXRmb3JtQmFkUmVzcG9uc2VFcnJvcigpOworICAgIG1fZXJyb3IgPSBwbGF0Zm9ybUJhZFN5
bmNYSFJSZXNwb25zZUVycm9yKCk7CiAgICAgbV9pc0RvbmUgPSB0cnVlOwogICAgIHJlcXVlc3Qg
PSAwOwogfQpAQCAtOTgsNyArOTgsNyBAQCB2b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Ojpk
aWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJybwogfQogCiAj
aWYgVVNFKENGTkVUV09SSykKLVJlc291cmNlRXJyb3IgU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6
OnBsYXRmb3JtQmFkUmVzcG9uc2VFcnJvcigpCitSZXNvdXJjZUVycm9yIFN5bmNocm9ub3VzTG9h
ZGVyQ2xpZW50OjpwbGF0Zm9ybUJhZFN5bmNYSFJSZXNwb25zZUVycm9yKCkKIHsKICAgICBSZXRh
aW5QdHI8Q0ZFcnJvclJlZj4gY2ZFcnJvciA9IGFkb3B0Q0YoQ0ZFcnJvckNyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBrQ0ZFcnJvckRvbWFpbkNGTmV0d29yaywga0NGVVJMRXJyb3JCYWRTZXJ2
ZXJSZXNwb25zZSwgMCkpOwogICAgIHJldHVybiBjZkVycm9yLmdldCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVu
dC5oCmluZGV4IGEyNGIxMjcuLjRjOGM2NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgKQEAgLTQ3LDYg
KzQ3LDggQEAgcHVibGljOgogICAgIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKCkgY29uc3Qg
eyByZXR1cm4gbV9lcnJvcjsgfQogICAgIGJvb2wgaXNEb25lKCkgeyByZXR1cm4gbV9pc0RvbmU7
IH0KIAorICAgIHN0YXRpYyBSZXNvdXJjZUVycm9yIHBsYXRmb3JtQmFkU3luY1hIUlJlc3BvbnNl
RXJyb3IoKTsKKwogcHJpdmF0ZToKICAgICBTeW5jaHJvbm91c0xvYWRlckNsaWVudCgpCiAgICAg
ICAgIDogbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKGZhbHNlKQpAQCAtNjUsOCArNjcsNiBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlv
blNwYWNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUHJvdGVjdGlvblNwYWNlJikgT1ZFUlJJREU7
CiAjZW5kaWYKIAotICAgIFJlc291cmNlRXJyb3IgcGxhdGZvcm1CYWRSZXNwb25zZUVycm9yKCk7
Ci0KICAgICBib29sIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKICAgICBSZXNvdXJjZVJlc3Bv
bnNlIG1fcmVzcG9uc2U7CiAgICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvU3luY2hyb25vdXNMb2Fk
ZXJDbGllbnQubW0KaW5kZXggMDE0NGJkOS4uMjc5OTI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvU3luY2hyb25vdXNMb2FkZXJDbGllbnQubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvU3luY2hyb25vdXNMb2FkZXJD
bGllbnQubW0KQEAgLTM5LDcgKzM5LDcgQEAgdm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiwKIH0KIAog
I2lmICFVU0UoQ0ZORVRXT1JLKQotUmVzb3VyY2VFcnJvciBTeW5jaHJvbm91c0xvYWRlckNsaWVu
dDo6cGxhdGZvcm1CYWRSZXNwb25zZUVycm9yKCkKK1Jlc291cmNlRXJyb3IgU3luY2hyb25vdXNM
b2FkZXJDbGllbnQ6OnBsYXRmb3JtQmFkU3luY1hIUlJlc3BvbnNlRXJyb3IoKQogewogICAgIFJl
dGFpblB0cjxOU0Vycm9yPiBlcnJvciA9IGFkb3B0TlMoW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0
aERvbWFpbjpOU1VSTEVycm9yRG9tYWluIGNvZGU6TlNVUkxFcnJvckJhZFNlcnZlclJlc3BvbnNl
IHVzZXJJbmZvOm5pbF0pOwogICAgIHJldHVybiBlcnJvci5nZXQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBl
MWFkMjdmLi5hMmRjOGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTkgQEAKKzIwMTMtMDgtMTMg
IEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIChOZXR3b3JrUHJv
Y2VzcykgIFN5bmMgWEhScyBzaG91bGQgbG9hZCB1c2luZyBhc3luYyBSZXNvdXJjZUhhbmRsZXMs
IG5vdCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5NDkzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIHRo
ZSBmb2xsb3dpbmc6CisgICAgICAgICAgLSBDb25zb2xpZGF0ZXMgU2NoZWR1bGFibGVMb2FkZXIg
YW5kIE5ldHdvcmtSZXNvdXJjZUxvYWRlciBpbnRvIG9uZSBjbGFzcy4KKyAgICAgICAgICAtIFJl
bW92ZXMgU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci4KKyAgICAgICAgICAtIEFkZHMgYSBsaWdo
dHdlaWdodCAiU3luY2hyb25vdXNMb2FkQ29udHJvbGxlciIgdGhhdCAtIHdoZW4gcHJlc2VudCAt
IHN1YnRseSBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiBOZXR3b3JrUmVzb3VyY2VMb2FkZXIKKwor
ICAgICAgICBUaGUgY29uY2VwdCBpcyB0aGUgTmV0d29ya1Jlc291cmNlTG9hZGVyIGlzIHRoZSBz
aW5nbGUgbG9hZGVyIGNsYXNzIHRoYXQgZG9lcyBhc3luY2hyb25vdXMgbG9hZHMsIGJ1dCB0aGUg
ZXhpc3RlbmNlIG9mIGEKKyAgICAgICAgU3luY2hyb25vdXNMb2FkQ29udHJvbGxlciBob2xkcyBv
ZmYgb24gY29uc3RhbnRseSBtZXNzYWdpbmcgYmFjayB0byB0aGUgV2ViUHJvY2VzcyBhbmQgaW5z
dGVhZCBhY2N1bXVsYXRlcyB0aGUgcmVzdWx0IG9mIHRoZSBsb2FkLgorCisgICAgICAgIFRoZW4g
d2hlbiB0aGUgbG9hZCBpcyBjb21wbGV0ZSwgdGhlIERlbGF5ZWRSZXBseSBmb3IgdGhlIHN5bmNo
cm9ub3VzIFhIUiBpcyBtYWRlLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvU2NoZWR1bGFi
bGVMb2FkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1NjaGVkdWxh
YmxlTG9hZGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvU3luY05ldHdv
cmtSZXNvdXJjZUxvYWRlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
U3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOiBSZW1vdmVkLgorCisgICAgICAgIFVwZGF0ZSBj
bGFzc2VzIHRoYXQgdXNlZCB0byBwb2ludCB0byB0aGUgIlNjaGVkdWxlYWJsZUxvYWRlciIgYmFz
ZSBjbGFzcyB0byBob2xkIHBvaW50ZXJzIHRvIE5ldHdvcmtSZXNvdXJjZUxvYWRlcnMsIGluc3Rl
YWQ6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvSG9zdFJlY29yZC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Okhvc3RSZWNvcmQ6OnNjaGVkdWxlUmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAoV2Vi
S2l0OjpIb3N0UmVjb3JkOjphZGRMb2FkZXJJblByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6
cmVtb3ZlTG9hZGVyRnJvbVF1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6SG9zdFJlY29yZDo6cmVt
b3ZlTG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6SG9zdFJlY29yZDo6c2VydmVQZW5kaW5nUmVx
dWVzdHNGb3JRdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6Okhvc3RSZWNvcmQ6OmxpbWl0c1JlcXVl
c3RzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmg6CisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRDbG9zZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpwZXJmb3JtU3lu
Y2hyb25vdXNMb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OnJlbW92ZUxvYWRJZGVudGlmaWVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmVMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZWNlaXZlZFJlZGlyZWN0KToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlU2NoZWR1bGVkTG9h
ZGVycyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNj
aGVkdWxlUmVtb3ZlTG9hZGVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmg6CisKKyAgICAgICAgQ29uc29saWRhdGUgdGhlIFNjaGVkdWxl
YWJsZUxvYWRlciBhbmQgTmV0d29ya1Jlc291cmNlTG9hZGVyIGxvZ2ljIGFsbCBpbnRvIHRoaXMg
b25lIGNsYXNzOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6TmV0d29ya1Jl
c291cmNlTG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp+
TmV0d29ya1Jlc291cmNlTG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNl
TG9hZGVyOjpzdGFydCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
Y2xlYW51cCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNw
b25zZUFzeW5jKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRS
ZWNlaXZlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpk
aWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVy
OjpkaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxs
U2VuZFJlcXVlc3RBc3luYyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OmRpZFNlbmREYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291
cmNlTG9hZGVyOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpjb25zdW1lU2FuZGJv
eEV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Omlu
dmFsaWRhdGVTYW5kYm94RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnByaW9yaXR5KToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpyZXF1ZXN0KToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjppc1N5bmNocm9ub3VzKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzZXRIb3N0UmVjb3JkKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpob3N0UmVjb3JkKToKKworICAgICAgICBMaWdodHdl
aWdodCBjbGFzcyBvd25lZCBieSBOZXR3b3JrUmVzb3VyY2VMb2FkZXIgd2hpY2gsIHdoZW4gcHJl
c2VudCwgYWNjdW11bGF0ZXMgbG9hZCByZXN1bHRzIGZvciBhIHN5bmNocm9ub3VzIHJlc3BvbnNl
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U3luY2hyb25vdXNMb2FkQ29udHJvbGxlcjo6U3lu
Y2hyb25vdXNMb2FkQ29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OlN5bmNocm9ub3VzTG9h
ZENvbnRyb2xsZXI6On5TeW5jaHJvbm91c0xvYWRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktp
dDo6U3luY2hyb25vdXNMb2FkQ29udHJvbGxlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAg
KFdlYktpdDo6U3luY2hyb25vdXNMb2FkQ29udHJvbGxlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToK
KyAgICAgICAgKFdlYktpdDo6U3luY2hyb25vdXNMb2FkQ29udHJvbGxlcjo6ZGlkUmVjZWl2ZUJ1
ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXI6OmRpZEZp
bmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpTeW5jaHJvbm91c0xvYWRDb250cm9sbGVy
OjpkaWRGYWlsV2l0aEVycm9yKToKKyAgICAgICAgKFdlYktpdDo6U3luY2hyb25vdXNMb2FkQ29u
dHJvbGxlcjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6U3luY2hyb25vdXNMb2FkQ29udHJv
bGxlcjo6c2VuZERlbGF5ZWRSZXBseSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvU3luY2hy
b25vdXNMb2FkQ29udHJvbGxlci5oOiAKKyAgICAgICAgKFdlYktpdDo6U3luY2hyb25vdXNMb2Fk
Q29udHJvbGxlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6U3luY2hyb25vdXNMb2FkQ29u
dHJvbGxlcjo6YWJvcnQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1N5bmNocm9ub3VzTG9h
ZENvbnRyb2xsZXIubW06IAorICAgICAgICAoV2ViS2l0OjpTeW5jaHJvbm91c0xvYWRDb250cm9s
bGVyOjpwbGF0Zm9ybVN5bnRoZXNpemVFcnJvclJlc3BvbnNlKToKKworICAgICAgICAqIFdlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTogU2hvcnQg
Y2lyY3VpdCBibG9ja2VkIGxvYWRzIHdpdGhvdXQgY29uc3VsdGluZyB0aGUgTmV0d29ya1Byb2Nl
c3MuCisKIDIwMTMtMDgtMTIgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBGaXhlZCBhbiBvZmYtYnktKHNpemVvZihjaGFyKikgLSAxKSBidWcuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuY3BwCmluZGV4IGU3Y2UzNGIuLjM1MjQ4
ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuY3BwCkBA
IC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMu
aCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiU3luY05ldHdvcmtSZXNvdXJjZUxv
YWRlci5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKICNpZiBFTkFCTEUoTkVUV09S
S19QUk9DRVNTKQpAQCAtNTYsNyArNTUsNyBAQCBIb3N0UmVjb3JkOjp+SG9zdFJlY29yZCgpCiAj
ZW5kaWYKIH0KIAotdm9pZCBIb3N0UmVjb3JkOjpzY2hlZHVsZVJlc291cmNlTG9hZGVyKFBhc3NS
ZWZQdHI8U2NoZWR1bGFibGVMb2FkZXI+IGxvYWRlcikKK3ZvaWQgSG9zdFJlY29yZDo6c2NoZWR1
bGVSZXNvdXJjZUxvYWRlcihQYXNzUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVy
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKQEAgLTY4LDcgKzY3LDcgQEAgdm9p
ZCBIb3N0UmVjb3JkOjpzY2hlZHVsZVJlc291cmNlTG9hZGVyKFBhc3NSZWZQdHI8U2NoZWR1bGFi
bGVMb2FkZXI+IGxvYWRlcikKICAgICAgICAgbV9sb2FkZXJzUGVuZGluZ1tsb2FkZXItPnByaW9y
aXR5KCldLmFwcGVuZChsb2FkZXIpOwogfQogCi12b2lkIEhvc3RSZWNvcmQ6OmFkZExvYWRlcklu
UHJvZ3Jlc3MoU2NoZWR1bGFibGVMb2FkZXIqIGxvYWRlcikKK3ZvaWQgSG9zdFJlY29yZDo6YWRk
TG9hZGVySW5Qcm9ncmVzcyhOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlcikKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC03Niw3ICs3NSw3IEBAIHZvaWQgSG9zdFJlY29y
ZDo6YWRkTG9hZGVySW5Qcm9ncmVzcyhTY2hlZHVsYWJsZUxvYWRlciogbG9hZGVyKQogICAgIGxv
YWRlci0+c2V0SG9zdFJlY29yZCh0aGlzKTsKIH0KIAotaW5saW5lIGJvb2wgcmVtb3ZlTG9hZGVy
RnJvbVF1ZXVlKFNjaGVkdWxhYmxlTG9hZGVyKiBsb2FkZXIsIExvYWRlclF1ZXVlJiBxdWV1ZSkK
K2lubGluZSBib29sIHJlbW92ZUxvYWRlckZyb21RdWV1ZShOZXR3b3JrUmVzb3VyY2VMb2FkZXIq
IGxvYWRlciwgTG9hZGVyUXVldWUmIHF1ZXVlKQogewogICAgIExvYWRlclF1ZXVlOjppdGVyYXRv
ciBlbmQgPSBxdWV1ZS5lbmQoKTsKICAgICBmb3IgKExvYWRlclF1ZXVlOjppdGVyYXRvciBpdCA9
IHF1ZXVlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtODksMTQgKzg4LDE0IEBAIGlu
bGluZSBib29sIHJlbW92ZUxvYWRlckZyb21RdWV1ZShTY2hlZHVsYWJsZUxvYWRlciogbG9hZGVy
LCBMb2FkZXJRdWV1ZSYgcXVldWUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEhvc3RS
ZWNvcmQ6OnJlbW92ZUxvYWRlcihTY2hlZHVsYWJsZUxvYWRlciogbG9hZGVyKQordm9pZCBIb3N0
UmVjb3JkOjpyZW1vdmVMb2FkZXIoTmV0d29ya1Jlc291cmNlTG9hZGVyKiBsb2FkZXIpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vz
cyk6IER1ZSB0byBJUEMgcmFjZSBjb25kaXRpb25zLCBpdCdzIHBvc3NpYmxlIHRoaXMgSG9zdFJl
Y29yZCB3aWxsIGJlIGFza2VkIHRvIHJlbW92ZSB0aGUgc2FtZSBsb2FkZXIgdHdpY2UuCiAgICAg
Ly8gSXQgd291bGQgYmUgbmljZSB0byBrbm93IHRoZSBsb2FkZXIgaGFzIGFscmVhZHkgYmVlbiBy
ZW1vdmVkIGFuZCB0cmVhdCBpdCBhcyBhIG5vLW9wLgogCi0gICAgU2NoZWR1bGFibGVMb2FkZXJT
ZXQ6Oml0ZXJhdG9yIGkgPSBtX2xvYWRlcnNJblByb2dyZXNzLmZpbmQobG9hZGVyKTsKKyAgICBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXJTZXQ6Oml0ZXJhdG9yIGkgPSBtX2xvYWRlcnNJblByb2dyZXNz
LmZpbmQobG9hZGVyKTsKICAgICBpZiAoaSAhPSBtX2xvYWRlcnNJblByb2dyZXNzLmVuZCgpKSB7
CiAgICAgICAgIGktPmdldCgpLT5zZXRIb3N0UmVjb3JkKDApOwogICAgICAgICBtX2xvYWRlcnNJ
blByb2dyZXNzLnJlbW92ZShpKTsKQEAgLTE2MCw3ICsxNTksNyBAQCB2b2lkIEhvc3RSZWNvcmQ6
OnNlcnZlUGVuZGluZ1JlcXVlc3RzRm9yUXVldWUoTG9hZGVyUXVldWUmIHF1ZXVlLCBSZXNvdXJj
ZUxvYWRQcgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgd2hpbGUgKCFxdWV1ZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgUmVmUHRyPFNjaGVkdWxhYmxlTG9hZGVyPiBsb2FkZXIgPSBxdWV1ZS5m
aXJzdCgpOworICAgICAgICBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBx
dWV1ZS5maXJzdCgpOwogICAgICAgICBBU1NFUlQobG9hZGVyLT5ob3N0UmVjb3JkKCkgPT0gdGhp
cyk7CiAKICAgICAgICAgLy8gVGhpcyByZXF1ZXN0IG1pZ2h0IGJlIGZyb20gV2ViUHJvY2VzcyB3
ZSd2ZSBsb3N0IG91ciBjb25uZWN0aW9uIHRvLgpAQCAtMTkzLDcgKzE5Miw3IEBAIHZvaWQgSG9z
dFJlY29yZDo6c2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11
bVByaW9yaXR5KQogICAgICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0ZvclF1ZXVlKG1fbG9hZGVy
c1BlbmRpbmdbcHJpb3JpdHldLCAoUmVzb3VyY2VMb2FkUHJpb3JpdHkpcHJpb3JpdHkpOwogfQog
Ci1ib29sIEhvc3RSZWNvcmQ6OmxpbWl0c1JlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5IHBy
aW9yaXR5LCBTY2hlZHVsYWJsZUxvYWRlciogbG9hZGVyKSBjb25zdAorYm9vbCBIb3N0UmVjb3Jk
OjpsaW1pdHNSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSwgTmV0d29ya1Jl
c291cmNlTG9hZGVyKiBsb2FkZXIpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxvYWRlcik7CiAgICAg
QVNTRVJUKGxvYWRlci0+Y29ubmVjdGlvblRvV2ViUHJvY2VzcygpKTsKQEAgLTIxMyw4ICsyMTIs
OCBAQCBib29sIEhvc3RSZWNvcmQ6OmxpbWl0c1JlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5
IHByaW9yaXR5LCBTY2hlZHVsYWJsZUxvYWRlcgogICAgIGlmIChtX2xvYWRlcnNJblByb2dyZXNz
LnNpemUoKSA+IG1fbWF4UmVxdWVzdHNJbkZsaWdodCkgewogI2lmbmRlZiBOREVCVUcKICAgICAg
ICAgLy8gSWYgd2UgaGF2ZSBtb3JlIGxvYWRlcnMgaW4gcHJvZ3Jlc3MgdGhhbiB3ZSBzaG91bGQs
IGF0IGxlYXN0IG9uZSBvZiB0aGVtIGhhZCBiZXR0ZXIgYmUgc3luY2hyb25vdXMuCi0gICAgICAg
IFNjaGVkdWxhYmxlTG9hZGVyU2V0OjppdGVyYXRvciBpID0gbV9sb2FkZXJzSW5Qcm9ncmVzcy5i
ZWdpbigpOwotICAgICAgICBTY2hlZHVsYWJsZUxvYWRlclNldDo6aXRlcmF0b3IgZW5kID0gbV9s
b2FkZXJzSW5Qcm9ncmVzcy5lbmQoKTsKKyAgICAgICAgTmV0d29ya1Jlc291cmNlTG9hZGVyU2V0
OjppdGVyYXRvciBpID0gbV9sb2FkZXJzSW5Qcm9ncmVzcy5iZWdpbigpOworICAgICAgICBOZXR3
b3JrUmVzb3VyY2VMb2FkZXJTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fbG9hZGVyc0luUHJvZ3Jlc3Mu
ZW5kKCk7CiAgICAgICAgIGZvciAoOyBpICE9IGVuZDsgKytpKSB7CiAgICAgICAgICAgICBpZiAo
aS0+Z2V0KCktPmlzU3luY2hyb25vdXMoKSkKICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuaCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuaAppbmRleCAwNTgyMDg5Li43ZTE4
YzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3Jk
LmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvSG9zdFJlY29yZC5oCkBAIC0z
NywxMCArMzcsOCBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjsKLWNsYXNzIFNjaGVkdWxhYmxlTG9hZGVyOwotY2xhc3MgU3luY05ldHdvcmtSZXNv
dXJjZUxvYWRlcjsKIAotdHlwZWRlZiBEZXF1ZTxSZWZQdHI8U2NoZWR1bGFibGVMb2FkZXI+PiBM
b2FkZXJRdWV1ZTsKK3R5cGVkZWYgRGVxdWU8UmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4+
IExvYWRlclF1ZXVlOwogdHlwZWRlZiB1aW50NjRfdCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyOwog
CiBjbGFzcyBIb3N0UmVjb3JkIDogcHVibGljIFJlZkNvdW50ZWQ8SG9zdFJlY29yZD4gewpAQCAt
NTQsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgCi0gICAgdm9pZCBzY2hlZHVsZVJlc291cmNlTG9h
ZGVyKFBhc3NSZWZQdHI8U2NoZWR1bGFibGVMb2FkZXI+KTsKLSAgICB2b2lkIGFkZExvYWRlcklu
UHJvZ3Jlc3MoU2NoZWR1bGFibGVMb2FkZXIqKTsKLSAgICB2b2lkIHJlbW92ZUxvYWRlcihTY2hl
ZHVsYWJsZUxvYWRlciopOworICAgIHZvaWQgc2NoZWR1bGVSZXNvdXJjZUxvYWRlcihQYXNzUmVm
UHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4pOworICAgIHZvaWQgYWRkTG9hZGVySW5Qcm9ncmVz
cyhOZXR3b3JrUmVzb3VyY2VMb2FkZXIqKTsKKyAgICB2b2lkIHJlbW92ZUxvYWRlcihOZXR3b3Jr
UmVzb3VyY2VMb2FkZXIqKTsKICAgICBib29sIGhhc1JlcXVlc3RzKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSk7CiAK
QEAgLTY3LDEzICs2NSwxMyBAQCBwcml2YXRlOgogICAgIEhvc3RSZWNvcmQoY29uc3QgU3RyaW5n
JiBuYW1lLCBpbnQgbWF4UmVxdWVzdHNJbkZsaWdodCk7CiAKICAgICB2b2lkIHNlcnZlUGVuZGlu
Z1JlcXVlc3RzRm9yUXVldWUoTG9hZGVyUXVldWUmLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlv
cml0eSk7Ci0gICAgYm9vbCBsaW1pdHNSZXF1ZXN0cyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlv
cml0eSwgU2NoZWR1bGFibGVMb2FkZXIqKSBjb25zdDsKKyAgICBib29sIGxpbWl0c1JlcXVlc3Rz
KFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5LCBOZXR3b3JrUmVzb3VyY2VMb2FkZXIqKSBj
b25zdDsKIAogICAgIExvYWRlclF1ZXVlIG1fbG9hZGVyc1BlbmRpbmdbV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkUHJpb3JpdHlIaWdoZXN0ICsgMV07CiAgICAgTG9hZGVyUXVldWUgbV9zeW5jTG9hZGVy
c1BlbmRpbmc7CiAKLSAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFNjaGVkdWxhYmxlTG9hZGVy
Pj4gU2NoZWR1bGFibGVMb2FkZXJTZXQ7Ci0gICAgU2NoZWR1bGFibGVMb2FkZXJTZXQgbV9sb2Fk
ZXJzSW5Qcm9ncmVzczsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcj4+IE5ldHdvcmtSZXNvdXJjZUxvYWRlclNldDsKKyAgICBOZXR3b3JrUmVzb3VyY2VM
b2FkZXJTZXQgbV9sb2FkZXJzSW5Qcm9ncmVzczsKIAogICAgIGNvbnN0IFN0cmluZyBtX25hbWU7
CiAgICAgaW50IG1fbWF4UmVxdWVzdHNJbkZsaWdodDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcAppbmRleCBiMjE4MTU0Li43ZTRlMDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyLmgi
CiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJS
ZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlN5bmNOZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Jsb2JEYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXJP
cHRpb25zLmg+CkBAIC0xMDAsMTAgKzk5LDYgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6ZGlkQ2xvc2UoQ29yZUlQQzo6Q29ubmVjdGlvbiopCiAgICAgZm9yIChIYXNoTWFw
PFJlc291cmNlTG9hZElkZW50aWZpZXIsIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+Pjo6
aXRlcmF0b3IgaSA9IG1fbmV0d29ya1Jlc291cmNlTG9hZGVycy5iZWdpbigpOyBpICE9IGVuZDsg
KytpKQogICAgICAgICBpLT52YWx1ZS0+YWJvcnQoKTsKIAotICAgIEhhc2hNYXA8UmVzb3VyY2VM
b2FkSWRlbnRpZmllciwgUmVmUHRyPFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI+Pjo6aXRlcmF0
b3Igc3luY0VuZCA9IG1fc3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcnMuZW5kKCk7Ci0gICAgZm9y
IChIYXNoTWFwPFJlc291cmNlTG9hZElkZW50aWZpZXIsIFJlZlB0cjxTeW5jTmV0d29ya1Jlc291
cmNlTG9hZGVyPj46Oml0ZXJhdG9yIGkgPSBtX3N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXJzLmJl
Z2luKCk7IGkgIT0gc3luY0VuZDsgKytpKQotICAgICAgICBpLT52YWx1ZS0+YWJvcnQoKTsKLQog
ICAgIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NE
aWRDbG9zZSh0aGlzKTsKIAogICAgIG1fbmV0d29ya1Jlc291cmNlTG9hZGVycy5jbGVhcigpOwpA
QCAtMTI0LDE2ICsxMTksMTQgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
c2NoZWR1bGVSZXNvdXJjZUxvYWQoY29uc3QgTmV0d29ya1Jlc291cmNlTG8KIAogdm9pZCBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cGVyZm9ybVN5bmNocm9ub3VzTG9hZChjb25zdCBO
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYgbG9hZFBhcmFtZXRlcnMsIFBhc3NSZWZQdHI8
TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25v
dXNMb2FkOjpEZWxheWVkUmVwbHk+IHJlcGx5KQogewotICAgIFJlZlB0cjxTeW5jTmV0d29ya1Jl
c291cmNlTG9hZGVyPiBsb2FkZXIgPSBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjcmVhdGUo
bG9hZFBhcmFtZXRlcnMsIHRoaXMsIHJlcGx5KTsKLSAgICBtX3N5bmNOZXR3b3JrUmVzb3VyY2VM
b2FkZXJzLmFkZChsb2FkUGFyYW1ldGVycy5pZGVudGlmaWVyLCBsb2FkZXIpOworICAgIFJlZlB0
cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
Y3JlYXRlKGxvYWRQYXJhbWV0ZXJzLCB0aGlzLCByZXBseSk7CisgICAgbV9uZXR3b3JrUmVzb3Vy
Y2VMb2FkZXJzLmFkZChsb2FkUGFyYW1ldGVycy5pZGVudGlmaWVyLCBsb2FkZXIpOwogICAgIE5l
dHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkuc2No
ZWR1bGVMb2FkZXIobG9hZGVyLmdldCgpKTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6cmVtb3ZlTG9hZElkZW50aWZpZXIoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBp
ZGVudGlmaWVyKQogewotICAgIFJlZlB0cjxTY2hlZHVsYWJsZUxvYWRlcj4gbG9hZGVyID0gbV9u
ZXR3b3JrUmVzb3VyY2VMb2FkZXJzLnRha2UoaWRlbnRpZmllcik7Ci0gICAgaWYgKCFsb2FkZXIp
Ci0gICAgICAgIGxvYWRlciA9IG1fc3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcnMudGFrZShpZGVu
dGlmaWVyKTsKKyAgICBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBtX25l
dHdvcmtSZXNvdXJjZUxvYWRlcnMudGFrZShpZGVudGlmaWVyKTsKIAogICAgIC8vIEl0J3MgcG9z
c2libGUgd2UgaGF2ZSBubyBsb2FkZXIgZm9yIHRoaXMgaWRlbnRpZmllciBpZiB0aGUgTmV0d29y
a1Byb2Nlc3MgY3Jhc2hlZCBhbmQgdGhpcyB3YXMgYSByZXNwYXduZWQgTmV0d29ya1Byb2Nlc3Mu
CiAgICAgaWYgKCFsb2FkZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCBlNjMyMTU4
Li5mMDYxMzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTkzLDcgKzkzLDYgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8Q29yZUlQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwog
CiAgICAgSGFzaE1hcDxSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBSZWZQdHI8TmV0d29ya1Jlc291
cmNlTG9hZGVyPj4gbV9uZXR3b3JrUmVzb3VyY2VMb2FkZXJzOwotICAgIEhhc2hNYXA8UmVzb3Vy
Y2VMb2FkSWRlbnRpZmllciwgUmVmUHRyPFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI+PiBtX3N5
bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXJzOwogCiAgICAgYm9vbCBtX3NlcmlhbExvYWRpbmdFbmFi
bGVkOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcAppbmRleCA2YWYxNWRiLi45MGY4OTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0zNyw4ICszNyw4IEBACiAjaW5j
bHVkZSAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJOZXR3
b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNz
UHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiU2NoZWR1bGFibGVM
b2FkZXIuaCIKICNpbmNsdWRlICJTdGF0aXN0aWNzRGF0YS5oIgogI2luY2x1ZGUgIldlYkNvbnRl
eHRNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXIuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZFNjaGVkdWxlci5jcHAKaW5kZXggOWFlYmNjNi4uOTE4Njk3YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlci5jcHAKQEAgLTYsNyArNiw2IEBACiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIK
ICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIk5l
dHdvcmtSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIlN5bmNOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KIApAQCAtMzcsNyArMzYsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnJlcXVlc3RUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPE5ldHdvcmtSZXNvdQogICAg
IHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlcjo6c2NoZWR1bGVMb2FkZXIoUGFzc1JlZlB0cjxTY2hlZHVsYWJsZUxvYWRlcj4gbG9h
ZGVyKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWRlcihQ
YXNzUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKQogewogICAgIFJlc291cmNl
TG9hZFByaW9yaXR5IHByaW9yaXR5ID0gbG9hZGVyLT5wcmlvcml0eSgpOwogICAgIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0ID0gbG9hZGVyLT5yZXF1ZXN0KCk7CkBAIC03
NSw3ICs3NCw3IEBAIEhvc3RSZWNvcmQqIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Omhv
c3RGb3JVUkwoY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBDCiAgICAgcmV0dXJuIGhvc3Q7CiB9
CiAKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlTG9hZGVyKFNjaGVk
dWxhYmxlTG9hZGVyKiBsb2FkZXIpCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnJlbW92ZUxvYWRlcihOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlcikKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChsb2FkZXIpOwpAQCAtOTMsNyArOTIsNyBA
QCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZUxvYWRlcihTY2hlZHVs
YWJsZUxvYWRlciogbG9hZGVyKQogICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsK
IH0KIAotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZWNlaXZlZFJlZGlyZWN0
KFNjaGVkdWxhYmxlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHJlZGlyZWN0
VVJMKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZWNlaXZlZFJlZGlyZWN0
KE5ldHdvcmtSZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBXZWJDb3JlOjpLVVJMJiByZWRp
cmVjdFVSTCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhOZXR3b3Jr
U2NoZWR1bGluZywgIihOZXR3b3JrUHJvY2VzcykgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
cjo6cmVjZWl2ZWRSZWRpcmVjdCBsb2FkZXIgb3JpZ2luYWxseSBmb3IgJyVzJyByZWRpcmVjdGVk
IHRvICclcyciLCBsb2FkZXItPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCByZWRpcmVjdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKQEAgLTE0OCw3ICsxNDcsNyBA
QCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZVNjaGVkdWxlZExvYWRl
cnModm9pZCogY29udGV4dCkKIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpy
ZW1vdmVTY2hlZHVsZWRMb2FkZXJzKCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPFNjaGVkdWxhYmxl
TG9hZGVyPj4gbG9hZGVyc1RvUmVtb3ZlOworICAgIFZlY3RvcjxSZWZQdHI8TmV0d29ya1Jlc291
cmNlTG9hZGVyPj4gbG9hZGVyc1RvUmVtb3ZlOwogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fbG9hZGVyc1RvUmVtb3ZlTXV0ZXgpOwogICAgICAgICBsb2FkZXJzVG9SZW1vdmUg
PSBtX2xvYWRlcnNUb1JlbW92ZTsKQEAgLTE2MCw3ICsxNTksNyBAQCB2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZVNjaGVkdWxlZExvYWRlcnMoKQogICAgICAgICByZW1v
dmVMb2FkZXIobG9hZGVyc1RvUmVtb3ZlW2ldLmdldCgpKTsKIH0KIAotdm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVJlbW92ZUxvYWRlcihTY2hlZHVsYWJsZUxvYWRl
ciogbG9hZGVyKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVJl
bW92ZUxvYWRlcihOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlcikKIHsKICAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9sb2FkZXJzVG9SZW1vdmVNdXRleCk7CiAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmgKaW5kZXggZGZlNzEwMi4uZmI0MTAyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aApAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBLVVJMOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNs
YXNzIEhvc3RSZWNvcmQ7Ci1jbGFzcyBTY2hlZHVsYWJsZUxvYWRlcjsKK2NsYXNzIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjsKIAogY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcik7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTAsMTUgKzUwLDE1IEBAIHB1YmxpYzoKICAgICBO
ZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAgICAgCiAgICAgLy8gQWRkcyB0aGUgcmVx
dWVzdCB0byB0aGUgcXVldWUgZm9yIGl0cyBob3N0LgotICAgIHZvaWQgc2NoZWR1bGVMb2FkZXIo
UGFzc1JlZlB0cjxTY2hlZHVsYWJsZUxvYWRlcj4pOworICAgIHZvaWQgc2NoZWR1bGVMb2FkZXIo
UGFzc1JlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+KTsKIAogICAgIC8vIENhbGxlZCBieSB0
aGUgV2ViUHJvY2VzcyB3aGVuIGEgUmVzb3VyY2VMb2FkZXIgaXMgYmVpbmcgY2xlYW5lZCB1cC4K
LSAgICB2b2lkIHJlbW92ZUxvYWRlcihTY2hlZHVsYWJsZUxvYWRlciopOworICAgIHZvaWQgcmVt
b3ZlTG9hZGVyKE5ldHdvcmtSZXNvdXJjZUxvYWRlciopOwogCiAgICAgLy8gQ2FsbGVkIHdpdGhp
biB0aGUgTmV0d29ya1Byb2Nlc3Mgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCB3aGVuIGEgcmVzb3Vy
Y2UgbG9hZCBoYXMgZmluaXNoZWQuCi0gICAgdm9pZCBzY2hlZHVsZVJlbW92ZUxvYWRlcihTY2hl
ZHVsYWJsZUxvYWRlciopOworICAgIHZvaWQgc2NoZWR1bGVSZW1vdmVMb2FkZXIoTmV0d29ya1Jl
c291cmNlTG9hZGVyKik7CiAKLSAgICB2b2lkIHJlY2VpdmVkUmVkaXJlY3QoU2NoZWR1bGFibGVM
b2FkZXIqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiByZWRpcmVjdFVSTCk7CisgICAgdm9pZCByZWNl
aXZlZFJlZGlyZWN0KE5ldHdvcmtSZXNvdXJjZUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OktVUkwm
IHJlZGlyZWN0VVJMKTsKICAgICB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKFdlYkNvcmU6OlJl
c291cmNlTG9hZFByaW9yaXR5ID0gV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93
KTsKIAogICAgIC8vIEZvciBOZXR3b3JrUHJvY2VzcyBzdGF0aXN0aWNzIHJlcG9ydGluZy4KQEAg
LTg2LDggKzg2LDggQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQ
dHI8SG9zdFJlY29yZD4sIFN0cmluZ0hhc2g+IEhvc3RNYXA7CiAgICAgSG9zdE1hcCBtX2hvc3Rz
OwogCi0gICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxTY2hlZHVsYWJsZUxvYWRlcj4+IFNjaGVk
dWxhYmxlTG9hZGVyU2V0OwotICAgIFNjaGVkdWxhYmxlTG9hZGVyU2V0IG1fbG9hZGVyczsKKyAg
ICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4+IE5ldHdvcmtS
ZXNvdXJjZUxvYWRlclNldDsKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXJTZXQgbV9sb2FkZXJz
OwogCiAgICAgUmVmUHRyPEhvc3RSZWNvcmQ+IG1fbm9uSFRUUFByb3RvY29sSG9zdDsKIApAQCAt
OTYsNyArOTYsNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlRpbWVyPE5ldHdvcmtSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI+IG1fcmVxdWVzdFRpbWVyOwogICAgIAogICAgIE11dGV4IG1fbG9hZGVy
c1RvUmVtb3ZlTXV0ZXg7Ci0gICAgVmVjdG9yPFJlZlB0cjxTY2hlZHVsYWJsZUxvYWRlcj4+IG1f
bG9hZGVyc1RvUmVtb3ZlOworICAgIFZlY3RvcjxSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVy
Pj4gbV9sb2FkZXJzVG9SZW1vdmU7CiAKICAgICB1bnNpZ25lZCBtX21heFJlcXVlc3RzSW5GbGln
aHRQZXJIb3N0OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDVhZDEyZDMuLjA0YWYyOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZGVyLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFu
YWdlci5oIgogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiTmV0d29ya0Jsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNs
dWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIgpAQCAtMzksNiArNDAsNyBA
QAogI2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2hhcmVh
YmxlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlICJTeW5j
aHJvbm91c0xvYWRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkZXJN
ZXNzYWdlcy5oIgpAQCAtNTIsMTggKzU0LDYzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotTmV0d29ya1Jlc291cmNlTG9hZGVyOjpOZXR3b3JrUmVz
b3VyY2VMb2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIGxvYWRQYXJh
bWV0ZXJzLCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVjdGlvbikKLSAgICA6
IFNjaGVkdWxhYmxlTG9hZGVyKGxvYWRQYXJhbWV0ZXJzLCBjb25uZWN0aW9uKQotICAgICwgbV9i
eXRlc1JlY2VpdmVkKDApCitOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxv
YWRlcihjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVycywgTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24sIFBhc3NSZWZQdHI8TWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2Fk
OjpEZWxheWVkUmVwbHk+IHJlcGx5KQorICAgIDogbV9ieXRlc1JlY2VpdmVkKDApCiAgICAgLCBt
X2hhbmRsZUNvbnZlcnRlZFRvRG93bmxvYWQoZmFsc2UpCisgICAgLCBtX3dhc0Fib3J0ZWQoZmFs
c2UpCisgICAgLCBtX2lkZW50aWZpZXIocGFyYW1ldGVycy5pZGVudGlmaWVyKQorICAgICwgbV93
ZWJQYWdlSUQocGFyYW1ldGVycy53ZWJQYWdlSUQpCisgICAgLCBtX3dlYkZyYW1lSUQocGFyYW1l
dGVycy53ZWJGcmFtZUlEKQorICAgICwgbV9yZXF1ZXN0KHBhcmFtZXRlcnMucmVxdWVzdCkKKyAg
ICAsIG1fcHJpb3JpdHkocGFyYW1ldGVycy5wcmlvcml0eSkKKyAgICAsIG1fY29udGVudFNuaWZm
aW5nUG9saWN5KHBhcmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5KQorICAgICwgbV9hbGxv
d1N0b3JlZENyZWRlbnRpYWxzKHBhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscykKKyAg
ICAsIG1fY2xpZW50Q3JlZGVudGlhbFBvbGljeShwYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQ
b2xpY3kpCisgICAgLCBtX2luUHJpdmF0ZUJyb3dzaW5nTW9kZShwYXJhbWV0ZXJzLmluUHJpdmF0
ZUJyb3dzaW5nTW9kZSkKKyAgICAsIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBS
ZWRpcmVjdChwYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJl
Y3QpCisgICAgLCBtX2lzTG9hZGluZ01haW5SZXNvdXJjZShwYXJhbWV0ZXJzLmlzTWFpblJlc291
cmNlKQorICAgICwgbV9zYW5kYm94RXh0ZW5zaW9uc0FyZUNvbnN1bWVkKGZhbHNlKQorICAgICwg
bV9jb25uZWN0aW9uKGNvbm5lY3Rpb24pCiB7CisgICAgLy8gRWl0aGVyIHRoaXMgbG9hZGVyIGhh
cyBib3RoIGEgd2ViUGFnZUlEIGFuZCB3ZWJGcmFtZUlELCBvciBpdCBpcyBub3QgYWxsb3dlZCB0
byBhc2sgdGhlIGNsaWVudCBmb3IgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMuCisgICAgLy8g
RklYTUU6IFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgdGhlIGV4aXN0ZW5jZSBvZiBFbXB0
eUZyYW1lTG9hZGVyQ2xpZW50IGluIFdlYkNvcmUuCisgICAgLy8gICAgICAgIE9uY2UgYnVnIDEx
NjIzMyBpcyByZXNvbHZlZCwgdGhpcyBBU1NFUlQgY2FuIGp1c3QgYmUgIm1fd2ViUGFnZUlEICYm
IG1fd2ViRnJhbWVJRCIKKyAgICBBU1NFUlQoKG1fd2ViUGFnZUlEICYmIG1fd2ViRnJhbWVJRCkg
fHwgbV9jbGllbnRDcmVkZW50aWFsUG9saWN5ID09IERvTm90QXNrQ2xpZW50Rm9yQW55Q3JlZGVu
dGlhbHMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0gcGFyYW1ldGVycy5yZXF1
ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zLnNpemUoKTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAg
ICAgaWYgKFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBleHRlbnNpb24gPSBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGUocGFyYW1ldGVycy5yZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zW2ldKSkK
KyAgICAgICAgICAgIG1fcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9ucy5hcHBlbmQoZXh0ZW5z
aW9uKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoQkxPQikKKyAgICBpZiAobV9yZXF1ZXN0Lmh0dHBC
b2R5KCkpIHsKKyAgICAgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4mIGVsZW1lbnRz
ID0gbV9yZXF1ZXN0Lmh0dHBCb2R5KCktPmVsZW1lbnRzKCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwLCBjb3VudCA9IGVsZW1lbnRzLnNpemUoKTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChlbGVtZW50c1tpXS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjplbmNvZGVk
QmxvYikgeworICAgICAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+
IGJsb2JFbGVtZW50RXh0ZW5zaW9ucyA9IE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLnNh
bmRib3hFeHRlbnNpb25zKGVsZW1lbnRzW2ldLm1fdXJsKTsKKyAgICAgICAgICAgICAgICBtX3Jl
cXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnMuYXBwZW5kVmVjdG9yKGJsb2JFbGVtZW50RXh0ZW5z
aW9ucyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9yZXF1
ZXN0LnVybCgpLnByb3RvY29sSXMoImJsb2IiKSkgeworICAgICAgICBBU1NFUlQoIVNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZShwYXJhbWV0ZXJzLnJlc291cmNlU2FuZGJveEV4dGVuc2lvbikpOwor
ICAgICAgICBtX3Jlc291cmNlU2FuZGJveEV4dGVuc2lvbnMgPSBOZXR3b3JrQmxvYlJlZ2lzdHJ5
OjpzaGFyZWQoKS5zYW5kYm94RXh0ZW5zaW9ucyhtX3JlcXVlc3QudXJsKCkpOworICAgIH0gZWxz
ZQorI2VuZGlmCisgICAgaWYgKFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiByZXNvdXJjZVNhbmRi
b3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUocGFyYW1ldGVycy5yZXNvdXJj
ZVNhbmRib3hFeHRlbnNpb24pKQorICAgICAgICBtX3Jlc291cmNlU2FuZGJveEV4dGVuc2lvbnMu
YXBwZW5kKHJlc291cmNlU2FuZGJveEV4dGVuc2lvbik7CisKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIGlmIChyZXBseSkKKyAgICAgICAgbV9zeW5jaHJvbm91c0xvYWRDb250cm9s
bGVyID0gU3luY2hyb25vdXNMb2FkQ29udHJvbGxlcjo6Y3JlYXRlKG1fcmVxdWVzdCwgcmVwbHkp
OwogfQogCiBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6On5OZXR3b3JrUmVzb3VyY2VMb2FkZXIoKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2hhbmRsZSk7Cisg
ICAgQVNTRVJUKCFtX2hvc3RSZWNvcmQpOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6c3RhcnQoKQpAQCAtNzQsMTcgKzEyMSwyMCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6c3RhcnQoKQogICAgIHJlZigpOwogICAgIAogICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vz
cyk6IENyZWF0ZSBSZW1vdGVOZXR3b3JraW5nQ29udGV4dCB3aXRoIGFjdHVhbCBzZXR0aW5ncy4K
LSAgICBtX25ldHdvcmtpbmdDb250ZXh0ID0gUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmNyZWF0
ZShmYWxzZSwgZmFsc2UsIGluUHJpdmF0ZUJyb3dzaW5nTW9kZSgpLCBzaG91bGRDbGVhclJlZmVy
cmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KCkpOworICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSBS
ZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZhbHNlLCBmYWxzZSwgbV9pblByaXZhdGVC
cm93c2luZ01vZGUsIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7
CiAKICAgICBjb25zdW1lU2FuZGJveEV4dGVuc2lvbnMoKTsKIAogICAgIC8vIEZJWE1FIChOZXR3
b3JrUHJvY2Vzcyk6IFBhc3MgYW4gYWN0dWFsIHZhbHVlIGZvciBkZWZlcnNMb2FkaW5nCi0gICAg
bV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKG1fbmV0d29ya2luZ0NvbnRleHQuZ2V0
KCksIHJlcXVlc3QoKSwgdGhpcywgZmFsc2UgLyogZGVmZXJzTG9hZGluZyAqLywgY29udGVudFNu
aWZmaW5nUG9saWN5KCkgPT0gU25pZmZDb250ZW50KTsKKyAgICBtX2hhbmRsZSA9IFJlc291cmNl
SGFuZGxlOjpjcmVhdGUobV9uZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgbV9yZXF1ZXN0LCB0aGlz
LCBmYWxzZSAvKiBkZWZlcnNMb2FkaW5nICovLCBtX2NvbnRlbnRTbmlmZmluZ1BvbGljeSA9PSBT
bmlmZkNvbnRlbnQpOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2xlYW51cCgp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAKKyAgICBpZiAobV9zeW5jaHJv
bm91c0xvYWRDb250cm9sbGVyKQorICAgICAgICBtX3N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIu
Y2xlYXIoKTsKIAogICAgIGludmFsaWRhdGVTYW5kYm94RXh0ZW5zaW9ucygpOwogCkBAIC0xMjAs
NiArMTcwLDggQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0KCkKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCisgICAgbV93YXNBYm9ydGVkID0gdHJ1ZTsKKwogICAg
IGlmIChtX2hhbmRsZSAmJiAhbV9oYW5kbGVDb252ZXJ0ZWRUb0Rvd25sb2FkKQogICAgICAgICBt
X2hhbmRsZS0+Y2FuY2VsKCk7CiAKQEAgLTEzNCwxNiArMTg2LDE5IEBAIHZvaWQgTmV0d29ya1Jl
c291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFu
ZGxlLCBjb25zCiAgICAgaWYgKEZvcm1EYXRhKiBmb3JtRGF0YSA9IHJlcXVlc3QoKS5odHRwQm9k
eSgpKQogICAgICAgICBmb3JtRGF0YS0+cmVtb3ZlR2VuZXJhdGVkRmlsZXNJZk5lZWRlZCgpOwog
Ci0gICAgc2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6
RGlkUmVjZWl2ZVJlc3BvbnNlV2l0aENlcnRpZmljYXRlSW5mbyhyZXNwb25zZSwgUGxhdGZvcm1D
ZXJ0aWZpY2F0ZUluZm8ocmVzcG9uc2UpLCBpc0xvYWRpbmdNYWluUmVzb3VyY2UoKSkpOworICAg
IC8vIE9ubHkgbm90aWZ5IHRoZSBXZWJQcm9jZXNzIG9mIHRoZSByZXNwb25zZSBmb3IgYXN5bmNo
cm9ub3VzIGxvYWRzLgorICAgIGlmICghaXNTeW5jaHJvbm91cygpKQorICAgICAgICBzZW5kQWJv
cnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVz
cG9uc2VXaXRoQ2VydGlmaWNhdGVJbmZvKHJlc3BvbnNlLCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5m
byhyZXNwb25zZSksIG1faXNMb2FkaW5nTWFpblJlc291cmNlKSk7CisgICAgZWxzZQorICAgICAg
ICBtX3N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXItPmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25z
ZSk7CiAKICAgICAvLyBtX2hhbmRsZSB3aWxsIGJlIDAgaWYgdGhlIHJlcXVlc3QgZ290IGFib3J0
ZWQgYWJvdmUuCiAgICAgaWYgKCFtX2hhbmRsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFpc0xvYWRpbmdNYWluUmVzb3VyY2UoKSkgewotICAgICAgICAvLyBGb3IgbWFpbiByZXNvdXJj
ZXMsIHRoZSB3ZWIgcHJvY2VzcyBpcyByZXNwb25zaWJsZSBmb3Igc2VuZGluZyBiYWNrIGEgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBtZXNzYWdlLgor
ICAgIC8vIEZvciBtYWluIHJlc291cmNlcywgdGhlIHdlYiBwcm9jZXNzIGlzIHJlc3BvbnNpYmxl
IGZvciBzZW5kaW5nIGJhY2sgYSBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OkNvbnRpbnVlRGlkUmVj
ZWl2ZVJlc3BvbnNlIG1lc3NhZ2UuCisgICAgaWYgKCFtX2lzTG9hZGluZ01haW5SZXNvdXJjZSkK
ICAgICAgICAgbV9oYW5kbGUtPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci0gICAgfQog
fQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBpbnQgZW5jb2RlZERhdGFMZW5n
dGgpCkBAIC0xNjIsNiArMjE3LDEzIEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRS
ZWNlaXZlQnVmZmVyKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFBhc3NSZWZQdHI8CiAgICAgCiAg
ICAgbV9ieXRlc1JlY2VpdmVkICs9IGJ1ZmZlci0+c2l6ZSgpOwogICAgIAorICAgIC8vIFN5bmNo
cm9ub3VzIGxvYWRzIGFjY3VtdWxhdGUgYWxsIGRhdGEgdW50aWwgdGhlIGxvYWQgaXMgY29tcGxl
dGUsIGFuZCBkb24ndCBuZWVkIHRvIGRvIGFueSBhZGRpdGlvbmFsIHdvcmsKKyAgICAvLyBlYWNo
IHRpbWUgYSBidWZmZXIgaXMgcmVjZWl2ZWQuCisgICAgaWYgKG1fc3luY2hyb25vdXNMb2FkQ29u
dHJvbGxlcikgeworICAgICAgICBtX3N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXItPmRpZFJlY2Vp
dmVCdWZmZXIoYnVmZmVyLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICNp
ZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICBTaGFyZWFibGVS
ZXNvdXJjZTo6SGFuZGxlIHNoYXJlYWJsZVJlc291cmNlSGFuZGxlOwogICAgIHRyeUdldFNoYXJl
YWJsZUhhbmRsZUZyb21TaGFyZWRCdWZmZXIoc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUsIGJ1ZmZl
ci5nZXQoKSk7CkBAIC0xODEsOSArMjQzLDEwIEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGRvdWJsZSBmaW5pCiB7
CiAgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7CiAKLSAgICAv
LyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBGb3IgdGhlIG1lbW9yeSBjYWNoZSB3ZSdsbCBuZWVk
IHRvIHVwZGF0ZSB0aGUgZmluaXNoZWQgc3RhdHVzIG9mIHRoZSBjYWNoZWQgcmVzb3VyY2UgaGVy
ZS4KLSAgICAvLyBTdWNoIGJvb2trZWVwaW5nIHdpbGwgbmVlZCB0byBiZSB0aHJlYWQgc2FmZSwg
YXMgdGhpcyBjYWxsYmFjayBpcyBoYXBwZW5pbmcgb24gYSBiYWNrZ3JvdW5kIHRocmVhZC4KLSAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkRmluaXNoUmVzb3VyY2VMb2Fk
KGZpbmlzaFRpbWUpKTsKKyAgICBpZiAobV9zeW5jaHJvbm91c0xvYWRDb250cm9sbGVyKQorICAg
ICAgICBtX3N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXItPmRpZEZpbmlzaExvYWRpbmcoKTsKKyAg
ICBlbHNlCisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRGaW5p
c2hSZXNvdXJjZUxvYWQoZmluaXNoVGltZSkpOwogICAgIAogICAgIGNsZWFudXAoKTsKIH0KQEAg
LTE5Miw5ICsyNTUsMTEgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwoUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VFcnJvciYKIHsKICAgICBBU1NFUlRf
VU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKIAotICAgIC8vIEZJWE1FIChOZXR3
b3JrUHJvY2Vzcyk6IEZvciB0aGUgbWVtb3J5IGNhY2hlIHdlJ2xsIG5lZWQgdG8gdXBkYXRlIHRo
ZSBmaW5pc2hlZCBzdGF0dXMgb2YgdGhlIGNhY2hlZCByZXNvdXJjZSBoZXJlLgotICAgIC8vIFN1
Y2ggYm9va2tlZXBpbmcgd2lsbCBuZWVkIHRvIGJlIHRocmVhZCBzYWZlLCBhcyB0aGlzIGNhbGxi
YWNrIGlzIGhhcHBlbmluZyBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgotICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRGYWlsUmVzb3VyY2VMb2FkKGVycm9yKSk7CisgICAg
aWYgKG1fc3luY2hyb25vdXNMb2FkQ29udHJvbGxlcikKKyAgICAgICAgbV9zeW5jaHJvbm91c0xv
YWRDb250cm9sbGVyLT5kaWRGYWlsV2l0aEVycm9yKGVycm9yKTsKKyAgICBlbHNlCisgICAgICAg
IHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRGYWlsUmVzb3VyY2VMb2FkKGVy
cm9yKSk7CisgICAgCiAgICAgY2xlYW51cCgpOwogfQogCkBAIC0yMDYsNiArMjcxLDEyIEBAIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3RBc3luYyhSZXNvdXJjZUhh
bmRsZSogaGFuZGxlLCBjb25zdCBSCiAgICAgQVNTRVJUKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVs
bCgpKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCisgICAgaWYgKG1fc3luY2hyb25v
dXNMb2FkQ29udHJvbGxlcikgeworICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdCA9
IHJlcXVlc3Q7CisgICAgICAgIG1fc3luY2hyb25vdXNMb2FkQ29udHJvbGxlci0+d2lsbFNlbmRS
ZXF1ZXN0KGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCksIG5ld1JlcXVlc3QpOworICAgICAgICBjb250
aW51ZVdpbGxTZW5kUmVxdWVzdChuZXdSZXF1ZXN0KTsKKyAgICB9CisgICAgCiAgICAgbV9zdWdn
ZXN0ZWRSZXF1ZXN0Rm9yV2lsbFNlbmRSZXF1ZXN0ID0gcmVxdWVzdDsKIAogICAgIC8vIFRoaXMg
bWVzc2FnZSBpcyBEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkgdG8g
YXZvaWQgYSBzaXR1YXRpb24gd2hlcmUgdGhlIE5ldHdvcmtQcm9jZXNzIGlzIGRlYWRsb2NrZWQg
d2FpdGluZyBmb3IgNiBjb25uZWN0aW9ucwpAQCAtMjE4LDkgKzI4OSwyMCBAQCB2b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiBuZXdSZQogICAgIG1fc3VnZ2VzdGVkUmVxdWVzdEZvcldpbGxTZW5kUmVxdWVzdC51
cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5nT2xkSFRUUEJvZHkobmV3UmVxdWVzdC5uc1VSTFJl
cXVlc3QoRG9Ob3RVcGRhdGVIVFRQQm9keSkpOwogCiAgICAgUnVuTG9vcDo6bWFpbigpLT5kaXNw
YXRjaChiaW5kKCZOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZWNlaXZlZFJlZGlyZWN0
LCAmTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIo
KSwgdGhpcywgbV9zdWdnZXN0ZWRSZXF1ZXN0Rm9yV2lsbFNlbmRSZXF1ZXN0LnVybCgpKSk7Ci0g
ICAgbV9oYW5kbGUtPmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KG1fc3VnZ2VzdGVkUmVxdWVzdEZv
cldpbGxTZW5kUmVxdWVzdCk7CiAKKyAgICBtX3JlcXVlc3QgPSBtX3N1Z2dlc3RlZFJlcXVlc3RG
b3JXaWxsU2VuZFJlcXVlc3Q7CiAgICAgbV9zdWdnZXN0ZWRSZXF1ZXN0Rm9yV2lsbFNlbmRSZXF1
ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KCk7CisKKyAgICBtX2hhbmRsZS0+Y29udGludWVXaWxsU2Vu
ZFJlcXVlc3QobV9yZXF1ZXN0KTsKKworICAgIGlmIChtX3JlcXVlc3QuaXNOdWxsKCkpIHsKKyAg
ICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fc3luY2hy
b25vdXNMb2FkQ29udHJvbGxlcikKKyAgICAgICAgICAgIG1fc3luY2hyb25vdXNMb2FkQ29udHJv
bGxlci0+Y2FuY2VsKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRpZEZhaWwobV9oYW5k
bGUuZ2V0KCksIGNhbmNlbGxlZEVycm9yKG1fcmVxdWVzdCkpOworICAgIH0KIH0KIAogdm9pZCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkKQEAgLTIz
Nyw3ICszMTksOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkU2VuZERhdGEoUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSwgdW5zaWduZWQgbG9uZyBsbwogewogICAgIEFTU0VSVF9VTlVT
RUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwogCi0gICAgc2VuZChNZXNzYWdlczo6V2Vi
UmVzb3VyY2VMb2FkZXI6OkRpZFNlbmREYXRhKGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50
KSk7CisgICAgaWYgKCFtX3N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIpCisgICAgICAgIHNlbmQo
TWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRTZW5kRGF0YShieXRlc1NlbnQsIHRvdGFs
Qnl0ZXNUb0JlU2VudCkpOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2FzQmxv
Y2tlZChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQpAQCAtMjYzLDcgKzM0Niw3IEBAIGJvb2wgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShSZXNvdXJjZUhh
bmRsZSogaGFuZGxlKQogCiAgICAgLy8gV2Ugc3RpbGwgbmVlZCB0aGlzIHN5bmMgdmVyc2lvbiwg
YmVjYXVzZSBSZXNvdXJjZUhhbmRsZSBpdHNlbGYgdXNlcyBpdCBpbnRlcm5hbGx5LCBldmVuIHdo
ZW4gdGhlIGRlbGVnYXRlIHVzZXMgYW4gYXN5bmMgb25lLgogCi0gICAgcmV0dXJuIGFsbG93U3Rv
cmVkQ3JlZGVudGlhbHMoKSA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzOworICAgIHJldHVybiBt
X2FsbG93U3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFsczsKIH0KIAog
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlQXN5
bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKQEAgLTI4MCwxMiArMzYzLDEyIEBAIHZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUmVz
b3VyY2VIYW5kbGUqIGhhCiAgICAgLy8gRklYTUUgKGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1Mjkx
KTogU2luY2Ugd2UgZ28gc3RyYWlnaHQgdG8gdGhlIFVJIHByb2Nlc3MgZm9yIGF1dGhlbnRpY2F0
aW9uIHdlIGRvbid0IGdldCBXZWJDb3JlJ3MKICAgICAvLyBjcm9zcy1vcmlnaW4gY2hlY2sgYmVm
b3JlIGFza2luZyB0aGUgY2xpZW50IGZvciBjcmVkZW50aWFscy4KICAgICAvLyBUaGVyZWZvcmUg
d2UgYXJlIHRvbyBwZXJtaXNzaXZlIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBDbGllbnRDcmVkZW50
aWFsUG9saWN5IGlzIERvTm90QXNrQ2xpZW50Rm9yQ3Jvc3NPcmlnaW5DcmVkZW50aWFscy4KLSAg
ICBpZiAoY2xpZW50Q3JlZGVudGlhbFBvbGljeSgpID09IERvTm90QXNrQ2xpZW50Rm9yQW55Q3Jl
ZGVudGlhbHMpIHsKKyAgICBpZiAobV9jbGllbnRDcmVkZW50aWFsUG9saWN5ID09IERvTm90QXNr
Q2xpZW50Rm9yQW55Q3JlZGVudGlhbHMpIHsKICAgICAgICAgY2hhbGxlbmdlLmF1dGhlbnRpY2F0
aW9uQ2xpZW50KCktPnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChj
aGFsbGVuZ2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTmV0d29ya1Byb2Nlc3M6
OnNoYXJlZCgpLmF1dGhlbnRpY2F0aW9uTWFuYWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSh3ZWJQYWdlSUQoKSwgd2ViRnJhbWVJRCgpLCBjaGFsbGVuZ2UpOworICAgIE5l
dHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5hdXRoZW50aWNhdGlvbk1hbmFnZXIoKS5kaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV93ZWJQYWdlSUQsIG1fd2ViRnJhbWVJRCwgY2hhbGxl
bmdlKTsKIH0KIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZENhbmNlbEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCkBAIC0zMDEsOSArMzg0LDMwIEBAIENvcmVJUEM6OkNv
bm5lY3Rpb24qIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24o
KQogICAgIHJldHVybiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzKCktPmNvbm5lY3Rpb24oKTsKIH0K
IAotdWludDY0X3QgTmV0d29ya1Jlc291cmNlTG9hZGVyOjptZXNzYWdlU2VuZGVyRGVzdGluYXRp
b25JRCgpCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29uc3VtZVNhbmRib3hFeHRlbnNp
b25zKCkKIHsKLSAgICByZXR1cm4gaWRlbnRpZmllcigpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
LCBjb3VudCA9IG1fcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9ucy5zaXplKCk7IGkgPCBjb3Vu
dDsgKytpKQorICAgICAgICBtX3JlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnNbaV0tPmNvbnN1
bWUoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IG1fcmVzb3VyY2VTYW5kYm94
RXh0ZW5zaW9ucy5zaXplKCk7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBtX3Jlc291cmNlU2Fu
ZGJveEV4dGVuc2lvbnNbaV0tPmNvbnN1bWUoKTsKKworICAgIG1fc2FuZGJveEV4dGVuc2lvbnNB
cmVDb25zdW1lZCA9IHRydWU7Cit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjppbnZh
bGlkYXRlU2FuZGJveEV4dGVuc2lvbnMoKQoreworICAgIGlmIChtX3NhbmRib3hFeHRlbnNpb25z
QXJlQ29uc3VtZWQpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0gbV9yZXF1
ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zLnNpemUoKTsgaSA8IGNvdW50OyArK2kpCisgICAgICAg
ICAgICBtX3JlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnNbaV0tPnJldm9rZSgpOworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBtX3Jlc291cmNlU2FuZGJveEV4dGVuc2lvbnMu
c2l6ZSgpOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgIG1fcmVzb3VyY2VTYW5kYm94RXh0
ZW5zaW9uc1tpXS0+cmV2b2tlKCk7CisgICAgfQorCisgICAgbV9yZXF1ZXN0Qm9keVNhbmRib3hF
eHRlbnNpb25zLmNsZWFyKCk7CisgICAgbV9yZXNvdXJjZVNhbmRib3hFeHRlbnNpb25zLmNsZWFy
KCk7CisKKyAgICBtX3NhbmRib3hFeHRlbnNpb25zQXJlQ29uc3VtZWQgPSBmYWxzZTsKIH0KIAog
I2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCkBAIC0zMTQsNiArNDE4LDE0
IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlQXN5bmMoUmVzb3VyY2VICiAKICAgICAvLyBUaGlzIG1lc3NhZ2UgaXMgRGlz
cGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5IHRvIGF2b2lkIGEgc2l0dWF0
aW9uIHdoZXJlIHRoZSBOZXR3b3JrUHJvY2VzcyBpcyBkZWFkbG9ja2VkCiAgICAgLy8gd2FpdGlu
ZyBmb3IgNiBjb25uZWN0aW9ucyB0byBjb21wbGV0ZSB3aGlsZSB0aGUgV2ViUHJvY2VzcyBpcyB3
YWl0aW5nIGZvciBhIDd0aCB0byBjb21wbGV0ZS4KKworICAgIGlmIChtX3N5bmNocm9ub3VzTG9h
ZENvbnRyb2xsZXIpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc2sgdGhlIFdlYlBy
b2Nlc3MgbGlrZSB0aGUgYXN5bmNocm9ub3VzIGNhc2UgYmVsb3cgZG9lcy4KKyAgICAgICAgLy8g
VGhpcyBpcyBjdXJyZW50bHkgaW1wb3NzaWJsZSBhcyB0aGUgV2ViUHJvY2VzcyBpcyBibG9ja2Vk
IHdhaXRpbmcgb24gdGhpcyBzeW5jaHJvbm91cyBsb2FkLgorICAgICAgICBjb250aW51ZUNhbkF1
dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UodHJ1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNl
TG9hZGVyOjpDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rpb25T
cGFjZSksIENvcmVJUEM6OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBs
eSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Jlc291cmNlTG9hZGVyLmgKaW5kZXggNzk4Y2NjZi4uMmMxY2JiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgKKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgKQEAg
LTI4LDExICsyOCwxNSBAQAogCiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKIAorI2luY2x1
ZGUgIkhvc3RSZWNvcmQuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCi0jaW5jbHVkZSAi
U2NoZWR1bGFibGVMb2FkZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUxvYWRlck9wdGlvbnMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAKIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9DRkNhY2hlZFVSTFJlc3BvbnNlKiBDRkNhY2hl
ZFVSTFJlc3BvbnNlUmVmOwogCkBAIC00NSwyMiArNDksMzQgQEAgY2xhc3MgUmVzb3VyY2VSZXF1
ZXN0OwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOworY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM7CiBjbGFzcyBSZW1v
dGVOZXR3b3JraW5nQ29udGV4dDsKK2NsYXNzIFNhbmRib3hFeHRlbnNpb247CitjbGFzcyBTeW5j
aHJvbm91c0xvYWRDb250cm9sbGVyOwogCi1jbGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkZXIgOiBw
dWJsaWMgU2NoZWR1bGFibGVMb2FkZXIsIHB1YmxpYyBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNs
aWVudCwgcHVibGljIENvcmVJUEM6Ok1lc3NhZ2VTZW5kZXIgeworY2xhc3MgTmV0d29ya1Jlc291
cmNlTG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya1Jlc291cmNlTG9hZGVyPiwgcHVi
bGljIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50LCBwdWJsaWMgQ29yZUlQQzo6TWVzc2Fn
ZVNlbmRlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI+IGNyZWF0ZShjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVy
cywgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24pCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5ldHdvcmtSZXNvdXJjZUxvYWRlcihwYXJhbWV0ZXJz
LCBjb25uZWN0aW9uKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmV0d29ya1Jlc291
cmNlTG9hZGVyKHBhcmFtZXRlcnMsIGNvbm5lY3Rpb24sIG51bGxwdHIpKTsKICAgICB9CiAgICAg
CisgICAgc3RhdGljIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShjb25zdCBO
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVycywgTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24sIFBhc3NSZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxheWVkUmVw
bHk+IHJlcGx5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBOZXR3b3JrUmVz
b3VyY2VMb2FkZXIocGFyYW1ldGVycywgY29ubmVjdGlvbiwgcmVwbHkpKTsKKyAgICB9ICAgIAog
ICAgIH5OZXR3b3JrUmVzb3VyY2VMb2FkZXIoKTsKIAorICAgIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25u
ZWN0aW9uLmdldCgpOyB9CisKKyAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlv
cml0eSgpIHsgcmV0dXJuIG1fcHJpb3JpdHk7IH0KKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QoKSB7IHJldHVybiBtX3JlcXVlc3Q7IH0KKwogICAgIFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlKiBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZS5nZXQoKTsgfQogICAg
IHZvaWQgZGlkQ29udmVydEhhbmRsZVRvRG93bmxvYWQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBz
dGFydCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpIE9WRVJSSURFOworICAg
IHZvaWQgc3RhcnQoKTsKKyAgICB2b2lkIGFib3J0KCk7CiAKICAgICAvLyBSZXNvdXJjZUhhbmRs
ZUNsaWVudCBtZXRob2RzCiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdEFzeW5jKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkgT1ZFUlJJ
REU7CkBAIC0xMDAsMTIgKzExNiwxNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgdHJ5R2V0
U2hhcmVhYmxlSGFuZGxlRnJvbUNGVVJMQ2FjaGVkUmVzcG9uc2UoU2hhcmVhYmxlUmVzb3VyY2U6
OkhhbmRsZSYsIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFs
IGJvb2wgaXNTeW5jaHJvbm91cygpIHsgcmV0dXJuIG1fc3luY2hyb25vdXNMb2FkQ29udHJvbGxl
cjsgfQorCisgICAgdm9pZCBzZXRIb3N0UmVjb3JkKEhvc3RSZWNvcmQqIGhvc3RSZWNvcmQpIHsg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsgbV9ob3N0UmVjb3JkID0gaG9zdFJlY29yZDsgfQorICAg
IEhvc3RSZWNvcmQqIGhvc3RSZWNvcmQoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7
IHJldHVybiBtX2hvc3RSZWNvcmQuZ2V0KCk7IH0KKwogcHJpdmF0ZToKLSAgICBOZXR3b3JrUmVz
b3VyY2VMb2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmLCBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyopOworICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRlcihjb25z
dCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYsIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzKiwgUGFzc1JlZlB0cjxNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OkRlbGF5ZWRSZXBseT4pOwogCiAgICAgLy8gQ29y
ZUlQQzo6TWVzc2FnZVNlbmRlcgogICAgIHZpcnR1YWwgQ29yZUlQQzo6Q29ubmVjdGlvbiogbWVz
c2FnZVNlbmRlckNvbm5lY3Rpb24oKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHVpbnQ2NF90IG1l
c3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB1aW50NjRf
dCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIE9WRVJSSURFIHsgcmV0dXJuIG1faWRlbnRp
ZmllcjsgfQogCiAgICAgdm9pZCBjb250aW51ZVdpbGxTZW5kUmVxdWVzdChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QpOwogICAgIHZvaWQgY29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2UoKTsKQEAgLTExOSw2ICsxNDAsOSBAQCBwcml2YXRlOgogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gYm9vbCBzZW5kQWJvcnRpbmdPbkZhaWx1cmUoY29uc3QgVSYgbWVzc2Fn
ZSwgdW5zaWduZWQgbWVzc2FnZVNlbmRGbGFncyA9IDApOwogCisgICAgdm9pZCBjb25zdW1lU2Fu
ZGJveEV4dGVuc2lvbnMoKTsKKyAgICB2b2lkIGludmFsaWRhdGVTYW5kYm94RXh0ZW5zaW9ucygp
OworCiAgICAgUmVmUHRyPFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0PiBtX25ldHdvcmtpbmdDb250
ZXh0OwogICAgIFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gbV9oYW5kbGU7CiAKQEAg
LTEyOCw2ICsxNTIsMjggQEAgcHJpdmF0ZToKICAgICB1aW50NjRfdCBtX2J5dGVzUmVjZWl2ZWQ7
CiAKICAgICBib29sIG1faGFuZGxlQ29udmVydGVkVG9Eb3dubG9hZDsKKyAgICBib29sIG1fd2Fz
QWJvcnRlZDsKKyAgICBPd25QdHI8U3luY2hyb25vdXNMb2FkQ29udHJvbGxlcj4gbV9zeW5jaHJv
bm91c0xvYWRDb250cm9sbGVyOworCisgICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBtX2lkZW50
aWZpZXI7CisgICAgdWludDY0X3QgbV93ZWJQYWdlSUQ7CisgICAgdWludDY0X3QgbV93ZWJGcmFt
ZUlEOworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7CisgICAgV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkgbV9wcmlvcml0eTsKKyAgICBXZWJDb3JlOjpDb250ZW50
U25pZmZpbmdQb2xpY3kgbV9jb250ZW50U25pZmZpbmdQb2xpY3k7CisgICAgV2ViQ29yZTo6U3Rv
cmVkQ3JlZGVudGlhbHMgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOworICAgIFdlYkNvcmU6OkNs
aWVudENyZWRlbnRpYWxQb2xpY3kgbV9jbGllbnRDcmVkZW50aWFsUG9saWN5OworICAgIGJvb2wg
bV9pblByaXZhdGVCcm93c2luZ01vZGU7CisgICAgYm9vbCBtX3Nob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3Q7CisgICAgYm9vbCBtX2lzTG9hZGluZ01haW5SZXNvdXJjZTsK
KworICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IG1fcmVxdWVzdEJvZHlTYW5k
Ym94RXh0ZW5zaW9uczsKKyAgICBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBtX3Jl
c291cmNlU2FuZGJveEV4dGVuc2lvbnM7CisgICAgYm9vbCBtX3NhbmRib3hFeHRlbnNpb25zQXJl
Q29uc3VtZWQ7CisKKyAgICBSZWZQdHI8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1f
Y29ubmVjdGlvbjsKKyAgICAKKyAgICBSZWZQdHI8SG9zdFJlY29yZD4gbV9ob3N0UmVjb3JkOwog
CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAgICAgc3RhdGlj
IHZvaWQgdHJ5R2V0U2hhcmVhYmxlSGFuZGxlRnJvbVNoYXJlZEJ1ZmZlcihTaGFyZWFibGVSZXNv
dXJjZTo6SGFuZGxlJiwgV2ViQ29yZTo6U2hhcmVkQnVmZmVyKik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9TY2hlZHVsYWJsZUxvYWRlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9TY2hlZHVsYWJsZUxvYWRlci5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGFlN2IyMDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvU2NoZWR1bGFibGVMb2FkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
U2NoZWR1bGFibGVMb2FkZXIuaCIKLQotI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCi0KLSNp
bmNsdWRlICJOZXR3b3JrQmxvYlJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuaCIKLSNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVy
cy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRm9ybURhdGEuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1TY2hlZHVsYWJsZUxvYWRlcjo6U2NoZWR1
bGFibGVMb2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMsIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uKQotICAgIDogbV9p
ZGVudGlmaWVyKHBhcmFtZXRlcnMuaWRlbnRpZmllcikKLSAgICAsIG1fd2ViUGFnZUlEKHBhcmFt
ZXRlcnMud2ViUGFnZUlEKQotICAgICwgbV93ZWJGcmFtZUlEKHBhcmFtZXRlcnMud2ViRnJhbWVJ
RCkKLSAgICAsIG1fcmVxdWVzdChwYXJhbWV0ZXJzLnJlcXVlc3QpCi0gICAgLCBtX3ByaW9yaXR5
KHBhcmFtZXRlcnMucHJpb3JpdHkpCi0gICAgLCBtX2NvbnRlbnRTbmlmZmluZ1BvbGljeShwYXJh
bWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSkKLSAgICAsIG1fYWxsb3dTdG9yZWRDcmVkZW50
aWFscyhwYXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3JlZGVudGlhbHMpCi0gICAgLCBtX2NsaWVudENy
ZWRlbnRpYWxQb2xpY3kocGFyYW1ldGVycy5jbGllbnRDcmVkZW50aWFsUG9saWN5KQotICAgICwg
bV9pblByaXZhdGVCcm93c2luZ01vZGUocGFyYW1ldGVycy5pblByaXZhdGVCcm93c2luZ01vZGUp
Ci0gICAgLCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QocGFyYW1l
dGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQotICAgICwgbV9p
c0xvYWRpbmdNYWluUmVzb3VyY2UocGFyYW1ldGVycy5pc01haW5SZXNvdXJjZSkKLSAgICAsIG1f
c2FuZGJveEV4dGVuc2lvbnNBcmVDb25zdW1lZChmYWxzZSkKLSAgICAsIG1fY29ubmVjdGlvbihj
b25uZWN0aW9uKQotewotICAgIC8vIEVpdGhlciB0aGlzIGxvYWRlciBoYXMgYm90aCBhIHdlYlBh
Z2VJRCBhbmQgd2ViRnJhbWVJRCwgb3IgaXQgaXMgbm90IGFsbG93ZWQgdG8gYXNrIHRoZSBjbGll
bnQgZm9yIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzLgotICAgIC8vIEZJWE1FOiBUaGlzIGlz
IG5lY2Vzc2FyeSBiZWNhdXNlIG9mIHRoZSBleGlzdGVuY2Ugb2YgRW1wdHlGcmFtZUxvYWRlckNs
aWVudCBpbiBXZWJDb3JlLgotICAgIC8vICAgICAgICBPbmNlIGJ1ZyAxMTYyMzMgaXMgcmVzb2x2
ZWQsIHRoaXMgQVNTRVJUIGNhbiBqdXN0IGJlICJtX3dlYlBhZ2VJRCAmJiBtX3dlYkZyYW1lSUQi
Ci0gICAgQVNTRVJUKChtX3dlYlBhZ2VJRCAmJiBtX3dlYkZyYW1lSUQpIHx8IG1fY2xpZW50Q3Jl
ZGVudGlhbFBvbGljeSA9PSBEb05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxzKTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IHBhcmFtZXRlcnMucmVxdWVzdEJvZHlTYW5kYm94
RXh0ZW5zaW9ucy5zaXplKCk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChSZWZQdHI8
U2FuZGJveEV4dGVuc2lvbj4gZXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlKHBh
cmFtZXRlcnMucmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uc1tpXSkpCi0gICAgICAgICAgICBt
X3JlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnMuYXBwZW5kKGV4dGVuc2lvbik7Ci0gICAgfQot
Ci0jaWYgRU5BQkxFKEJMT0IpCi0gICAgaWYgKG1fcmVxdWVzdC5odHRwQm9keSgpKSB7Ci0gICAg
ICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+JiBlbGVtZW50cyA9IG1fcmVxdWVzdC5o
dHRwQm9keSgpLT5lbGVtZW50cygpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQg
PSBlbGVtZW50cy5zaXplKCk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoZWxl
bWVudHNbaV0ubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEJsb2IpIHsKLSAgICAg
ICAgICAgICAgICBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBibG9iRWxlbWVudEV4
dGVuc2lvbnMgPSBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQoKS5zYW5kYm94RXh0ZW5zaW9u
cyhlbGVtZW50c1tpXS5tX3VybCk7Ci0gICAgICAgICAgICAgICAgbV9yZXF1ZXN0Qm9keVNhbmRi
b3hFeHRlbnNpb25zLmFwcGVuZFZlY3RvcihibG9iRWxlbWVudEV4dGVuc2lvbnMpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fcmVxdWVzdC51cmwoKS5wcm90
b2NvbElzKCJibG9iIikpIHsKLSAgICAgICAgQVNTRVJUKCFTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGUocGFyYW1ldGVycy5yZXNvdXJjZVNhbmRib3hFeHRlbnNpb24pKTsKLSAgICAgICAgbV9yZXNv
dXJjZVNhbmRib3hFeHRlbnNpb25zID0gTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2hhcmVkKCkuc2Fu
ZGJveEV4dGVuc2lvbnMobV9yZXF1ZXN0LnVybCgpKTsKLSAgICB9IGVsc2UKLSNlbmRpZgotICAg
IGlmIChSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gcmVzb3VyY2VTYW5kYm94RXh0ZW5zaW9uID0g
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlKHBhcmFtZXRlcnMucmVzb3VyY2VTYW5kYm94RXh0ZW5z
aW9uKSkKLSAgICAgICAgbV9yZXNvdXJjZVNhbmRib3hFeHRlbnNpb25zLmFwcGVuZChyZXNvdXJj
ZVNhbmRib3hFeHRlbnNpb24pOwotfQotCi1TY2hlZHVsYWJsZUxvYWRlcjo6flNjaGVkdWxhYmxl
TG9hZGVyKCkKLXsKLSAgICBBU1NFUlQoIW1faG9zdFJlY29yZCk7Ci19Ci0KLXZvaWQgU2NoZWR1
bGFibGVMb2FkZXI6OmNvbnN1bWVTYW5kYm94RXh0ZW5zaW9ucygpCi17Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDAsIGNvdW50ID0gbV9yZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zLnNpemUoKTsg
aSA8IGNvdW50OyArK2kpCi0gICAgICAgIG1fcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uc1tp
XS0+Y29uc3VtZSgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0gbV9yZXNvdXJj
ZVNhbmRib3hFeHRlbnNpb25zLnNpemUoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIG1fcmVz
b3VyY2VTYW5kYm94RXh0ZW5zaW9uc1tpXS0+Y29uc3VtZSgpOwotCi0gICAgbV9zYW5kYm94RXh0
ZW5zaW9uc0FyZUNvbnN1bWVkID0gdHJ1ZTsKLX0KLQotdm9pZCBTY2hlZHVsYWJsZUxvYWRlcjo6
aW52YWxpZGF0ZVNhbmRib3hFeHRlbnNpb25zKCkKLXsKLSAgICBpZiAobV9zYW5kYm94RXh0ZW5z
aW9uc0FyZUNvbnN1bWVkKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IG1f
cmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9ucy5zaXplKCk7IGkgPCBjb3VudDsgKytpKQotICAg
ICAgICAgICAgbV9yZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zW2ldLT5yZXZva2UoKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0gbV9yZXNvdXJjZVNhbmRib3hFeHRlbnNp
b25zLnNpemUoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICBtX3Jlc291cmNlU2FuZGJv
eEV4dGVuc2lvbnNbaV0tPnJldm9rZSgpOwotICAgIH0KLQotICAgIG1fcmVxdWVzdEJvZHlTYW5k
Ym94RXh0ZW5zaW9ucy5jbGVhcigpOwotICAgIG1fcmVzb3VyY2VTYW5kYm94RXh0ZW5zaW9ucy5j
bGVhcigpOwotCi0gICAgbV9zYW5kYm94RXh0ZW5zaW9uc0FyZUNvbnN1bWVkID0gZmFsc2U7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL1NjaGVkdWxh
YmxlTG9hZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9TY2hlZHVsYWJsZUxv
YWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWZmNWU1Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL1NjaGVkdWxhYmxlTG9hZGVyLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU2NoZWR1
bGFibGVMb2FkZXJfaAotI2RlZmluZSBTY2hlZHVsYWJsZUxvYWRlcl9oCi0KLSNpbmNsdWRlICJI
b3N0UmVjb3JkLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgotI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotI2lmIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2VzczsKLWNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOwot
Y2xhc3MgU2FuZGJveEV4dGVuc2lvbjsKLQotY2xhc3MgU2NoZWR1bGFibGVMb2FkZXIgOiBwdWJs
aWMgUmVmQ291bnRlZDxTY2hlZHVsYWJsZUxvYWRlcj4gewotcHVibGljOgotICAgIHZpcnR1YWwg
flNjaGVkdWxhYmxlTG9hZGVyKCk7Ci0KLSAgICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50
aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICB1aW50NjRfdCB3ZWJQ
YWdlSUQoKSBjb25zdCB7IHJldHVybiBtX3dlYlBhZ2VJRDsgfQotICAgIHVpbnQ2NF90IHdlYkZy
YW1lSUQoKSBjb25zdCB7IHJldHVybiBtX3dlYkZyYW1lSUQ7IH0KLSAgICBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX3JlcXVlc3Q7IH0K
LSAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpb3JpdHk7IH0KLSAgICBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgY29u
dGVudFNuaWZmaW5nUG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50U25pZmZpbmdQb2xp
Y3k7IH0KLSAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBhbGxvd1N0b3JlZENyZWRlbnRp
YWxzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOyB9Ci0gICAgV2Vi
Q29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSBjbGllbnRDcmVkZW50aWFsUG9saWN5KCkgY29u
c3QgeyByZXR1cm4gbV9jbGllbnRDcmVkZW50aWFsUG9saWN5OyB9Ci0gICAgYm9vbCBpblByaXZh
dGVCcm93c2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX2luUHJpdmF0ZUJyb3dzaW5nTW9kZTsg
fQotICAgIGJvb2wgaXNMb2FkaW5nTWFpblJlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9pc0xv
YWRpbmdNYWluUmVzb3VyY2U7IH0KLQotICAgIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
KiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdl
dCgpOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGFib3J0KCkgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlzU3luY2hyb25vdXMoKSB7IHJldHVy
biBmYWxzZTsgfQotCi0gICAgdm9pZCBzZXRIb3N0UmVjb3JkKEhvc3RSZWNvcmQqIGhvc3RSZWNv
cmQpIHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgbV9ob3N0UmVjb3JkID0gaG9zdFJlY29yZDsg
fQotICAgIEhvc3RSZWNvcmQqIGhvc3RSZWNvcmQoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJl
YWQoKSk7IHJldHVybiBtX2hvc3RSZWNvcmQuZ2V0KCk7IH0KLQotcHJvdGVjdGVkOgotICAgIFNj
aGVkdWxhYmxlTG9hZGVyKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiwgTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqKTsKLQotICAgIHZvaWQgY29uc3VtZVNhbmRib3hF
eHRlbnNpb25zKCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2FuZGJveEV4dGVuc2lvbnMoKTsKLQot
ICAgIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdDsgfQot
Ci1wcml2YXRlOgotICAgIFJlc291cmNlTG9hZElkZW50aWZpZXIgbV9pZGVudGlmaWVyOwotICAg
IHVpbnQ2NF90IG1fd2ViUGFnZUlEOwotICAgIHVpbnQ2NF90IG1fd2ViRnJhbWVJRDsKLSAgICBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwotICAgIFdlYkNvcmU6OlJlc291cmNl
TG9hZFByaW9yaXR5IG1fcHJpb3JpdHk7Ci0gICAgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9s
aWN5IG1fY29udGVudFNuaWZmaW5nUG9saWN5OwotICAgIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRp
YWxzIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLSAgICBXZWJDb3JlOjpDbGllbnRDcmVkZW50
aWFsUG9saWN5IG1fY2xpZW50Q3JlZGVudGlhbFBvbGljeTsKLSAgICBib29sIG1faW5Qcml2YXRl
QnJvd3NpbmdNb2RlOwotICAgIGJvb2wgbV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRU
UFJlZGlyZWN0OwotICAgIGJvb2wgbV9pc0xvYWRpbmdNYWluUmVzb3VyY2U7Ci0KLSAgICBWZWN0
b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBtX3JlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lv
bnM7Ci0gICAgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gbV9yZXNvdXJjZVNhbmRi
b3hFeHRlbnNpb25zOwotICAgIGJvb2wgbV9zYW5kYm94RXh0ZW5zaW9uc0FyZUNvbnN1bWVkOwot
Ci0gICAgUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2Nvbm5lY3Rpb247
Ci0gICAgCi0gICAgUmVmUHRyPEhvc3RSZWNvcmQ+IG1faG9zdFJlY29yZDsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLQot
I2VuZGlmIC8vIFNjaGVkdWxhYmxlTG9hZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL1N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYjA1ZWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKLQotI2lmIEVOQUJMRShO
RVRXT1JLX1BST0NFU1MpCi0KLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3MuaCIKLSNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VIYW5kbGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KLSNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLVN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OlN5bmNOZXR3
b3JrUmVzb3VyY2VMb2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIHBh
cmFtZXRlcnMsIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uLCBQYXNz
UmVmUHRyPE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5
bmNocm9ub3VzTG9hZDo6RGVsYXllZFJlcGx5PiByZXBseSkKLSAgICA6IFNjaGVkdWxhYmxlTG9h
ZGVyKHBhcmFtZXRlcnMsIGNvbm5lY3Rpb24pCi0gICAgLCBtX2RlbGF5ZWRSZXBseShyZXBseSkK
LXsKLX0KLQotdm9pZCBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCgpCi17Ci0gICAg
Ly8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogVGhpcyBpcyBjYWxsZWQgb24gdGhlIE5ldHdvcmtQ
cm9jZXNzIG1haW4gdGhyZWFkLCBibG9ja2luZyBhbnkgb3RoZXIgcmVxdWVzdHMgZnJvbSBiZWlu
ZyBzY2hlZHVsZWQuCi0gICAgLy8gVGhpcyBzaG91bGQgbW92ZSB0byBhIGJhY2tncm91bmQgdGhy
ZWFkLCBidXQgd2UnZCBlaXRoZXIgbmVlZCB0byBiZSBzdXJlIHRoYXQ6Ci0gICAgLy8gICBBIC0g
UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkgaXMgc2FmZSB0byBydW4g
b24gYSBiYWNrZ3JvdW5kIHRocmVhZC4KLSAgICAvLyAgIEIgLSBXcml0ZSBjdXN0b20gbG9hZGlu
ZyBsb2dpYyB0aGF0IGlzIGtub3duIHRvIGJlIHNhZmUgb24gYSBiYWNrZ3JvdW5kIHRocmVhZC4K
LSAgICAKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgUmVzb3VyY2VFcnJvciBl
cnJvcjsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotICAgIFZlY3RvcjxjaGFyPiBk
YXRhOwotICAgIAotICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IENyZWF0ZSBSZW1vdGVO
ZXR3b3JraW5nQ29udGV4dCB3aXRoIGFjdHVhbCBzZXR0aW5ncy4KLSAgICBSZWZQdHI8UmVtb3Rl
TmV0d29ya2luZ0NvbnRleHQ+IG5ldHdvcmtpbmdDb250ZXh0ID0gUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQ6OmNyZWF0ZShmYWxzZSwgZmFsc2UsIGluUHJpdmF0ZUJyb3dzaW5nTW9kZSgpLCBzaG91
bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KCkpOwotCi0gICAgY29uc3VtZVNh
bmRib3hFeHRlbnNpb25zKCk7Ci0KLSAgICBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShuZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgcmVxdWVzdCgpLCBhbGxvd1N0b3Jl
ZENyZWRlbnRpYWxzKCksIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Ci0KLSAgICBjbGVhbnVwKCk7
Ci0KLSAgICBtX2RlbGF5ZWRSZXBseS0+c2VuZChlcnJvciwgcmVzcG9uc2UsIENvcmVJUEM6OkRh
dGFSZWZlcmVuY2UoKHVpbnQ4X3QqKWRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpOwotfQotCi12
b2lkIFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0KCkKLXsKLSAgICBjbGVhbnVwKCk7
Ci19Ci0KLXZvaWQgU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2xlYW51cCgpCi17Ci0gICAg
aW52YWxpZGF0ZVNhbmRib3hFeHRlbnNpb25zKCk7Ci0gICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJl
ZCgpLm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZVJlbW92ZUxvYWRlcih0
aGlzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVU
V09SS19QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
U3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhNjA5MjliLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L1N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXJfaAotI2Rl
ZmluZSBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyX2gKLQotI2luY2x1ZGUgIk5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJTY2hlZHVsYWJsZUxvYWRl
ci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLSNpZiBFTkFCTEUoTkVUV09SS19Q
Uk9DRVNTKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgU3luY05ldHdvcmtSZXNvdXJj
ZUxvYWRlciA6IHB1YmxpYyBTY2hlZHVsYWJsZUxvYWRlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcj4gY3JlYXRlKGNvbnN0IE5ldHdv
cmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyogY29ubmVjdGlvbiwgUGFzc1JlZlB0cjxNZXNzYWdlczo6TmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OkRlbGF5ZWRSZXBseT4g
cmVwbHkpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN5bmNOZXR3b3JrUmVz
b3VyY2VMb2FkZXIocGFyYW1ldGVycywgY29ubmVjdGlvbiwgcmVwbHkpKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgYWJvcnQo
KSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1N5bmNocm9ub3VzKCkgT1ZFUlJJREUg
eyByZXR1cm4gdHJ1ZTsgfQotCi1wcml2YXRlOgotICAgIFN5bmNOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmLCBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyosIFBhc3NSZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxheWVkUmVwbHk+KTsKLSAgICAK
LSAgICB2b2lkIGNsZWFudXAoKTsKLSAgICAKLSAgICBSZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxheWVkUmVw
bHk+IG1fZGVsYXllZFJlcGx5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotCi0jZW5kaWYgLy8gU3luY05ldHdvcmtSZXNv
dXJjZUxvYWRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9T
eW5jaHJvbm91c0xvYWRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL1N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjRjNjVlODUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9TeW5jaHJvbm91c0xvYWRDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDEy
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTeW5jaHJv
bm91c0xvYWRDb250cm9sbGVyLmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorCisj
aW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldlYkVycm9ycy5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRC
dWZmZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50Lmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXI6OlN5bmNo
cm9ub3VzTG9hZENvbnRyb2xsZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBQYXNz
UmVmUHRyPE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5
bmNocm9ub3VzTG9hZDo6RGVsYXllZFJlcGx5PiByZXBseSkKKyAgICA6IG1fb3JpZ2luYWxSZXF1
ZXN0KHJlcXVlc3QpCisgICAgLCBtX2RlbGF5ZWRSZXBseShyZXBseSkKK3sKKyAgICBBU1NFUlQo
bV9kZWxheWVkUmVwbHkpOworfQorCitTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyOjp+U3luY2hy
b25vdXNMb2FkQ29udHJvbGxlcigpCit7CisgICAgLy8gQnkgdGhlIHRpbWUgYSBTeW5jaHJvbm91
c0xvYWRDb250cm9sbGVyIGlzIGJlaW5nIGRlc3Ryb3llZCwgaXQgbXVzdCBhbHdheXMgaGF2ZSBz
ZW50IGl0cyByZXBseSB0byB0aGUgV2ViUHJvY2Vzcy4KKyAgICBBU1NFUlQoIW1fZGVsYXllZFJl
cGx5KTsKK30KKwordm9pZCBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyOjp3aWxsU2VuZFJlcXVl
c3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0
byBiZSBmaXhlZCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0IGNvcnJlY3RseSBldmVuIGZvciBjcm9z
cy1kb21haW4gcmVxdWVzdHMuCisgICAgaWYgKHByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChv
cmlnaW5hbFJlcXVlc3QudXJsKCksIG5ld1JlcXVlc3QudXJsKCkpKSB7CisgICAgICAgIG1fY3Vy
cmVudFJlcXVlc3QgPSBuZXdSZXF1ZXN0OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFT
U0VSVChtX2Vycm9yLmlzTnVsbCgpKTsKKyAgICBtX2Vycm9yID0gU3luY2hyb25vdXNMb2FkZXJD
bGllbnQ6OnBsYXRmb3JtQmFkU3luY1hIUlJlc3BvbnNlRXJyb3IoKTsKKworICAgIG5ld1JlcXVl
c3QgPSAwOworfQorCit2b2lkIFN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBtX3Jlc3Bv
bnNlID0gcmVzcG9uc2U7Cit9CisKK3ZvaWQgU3luY2hyb25vdXNMb2FkQ29udHJvbGxlcjo6ZGlk
UmVjZWl2ZUJ1ZmZlcihTaGFyZWRCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICAvLyBGSVhNRTogVGhl
cmUncyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBoZXJlIGJ5IHByZWFsbG9j
YXRpbmcgYSBTaGFyZWRNZW1vcnkgcmVnaW9uCisgICAgLy8gb2YgdGhlIGV4cGVjdGVkIGNvbnRl
bnQgbGVuZ3RoIHRvIGF2b2lkIGEgY29weSB3aGVuIHdlIHNlbmQgaXQgdG8gdGhlIFdlYlByb2Nl
c3Mgb24gY29tcGxldGlvbi4KKyAgICAvLyBJdCdzIHVuY2xlYXIgaWYgdGhlIHBvdGVudGlhbCBj
b21wbGV4aXRpZXMgb2YgdGhhdCBhcHByb2FjaCBhcmUgd29ydGggaXQuCisgICAgCisgICAgaWYg
KCFtX3Jlc3BvbnNlRGF0YSkKKyAgICAgICAgbV9yZXNwb25zZURhdGEgPSBhZG9wdFB0cihuZXcg
VmVjdG9yPHVpbnQ4X3Q+KTsKKworICAgIG1fcmVzcG9uc2VEYXRhLT5hcHBlbmQoYnVmZmVyLT5k
YXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKK30KKwordm9pZCBTeW5jaHJvbm91c0xvYWRDb250cm9s
bGVyOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBzZW5kRGVsYXllZFJlcGx5KCk7Cit9CisK
K3ZvaWQgU3luY2hyb25vdXNMb2FkQ29udHJvbGxlcjo6ZGlkRmFpbFdpdGhFcnJvcihjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBtX2Vycm9yID0gZXJyb3I7CisgICAgc2VuZERl
bGF5ZWRSZXBseSgpOworfQorCit2b2lkIFN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXI6OmNhbmNl
bCgpCit7CisgICAgQVNTRVJUKG1fZGVsYXllZFJlcGx5KTsKKyAgICAKKyAgICBpZiAobV9lcnJv
ci5pc051bGwoKSkKKyAgICAgICAgbV9lcnJvciA9IGNhbmNlbGxlZEVycm9yKG1fY3VycmVudFJl
cXVlc3QpOworICAgIAorICAgIHNlbmREZWxheWVkUmVwbHkoKTsKK30KKwordm9pZCBTeW5jaHJv
bm91c0xvYWRDb250cm9sbGVyOjpzZW5kRGVsYXllZFJlcGx5KCkKK3sKKyAgICBBU1NFUlQobV9k
ZWxheWVkUmVwbHkpOworCisgICAgdWludDhfdCogYnl0ZXMgPSBtX3Jlc3BvbnNlRGF0YSA/IG1f
cmVzcG9uc2VEYXRhLT5kYXRhKCkgOiAwOworICAgIHNpemVfdCBzaXplID0gbV9yZXNwb25zZURh
dGEgPyBtX3Jlc3BvbnNlRGF0YS0+c2l6ZSgpIDogMDsKKworICAgIGlmIChtX3Jlc3BvbnNlLmlz
TnVsbCgpKSB7CisgICAgICAgIEFTU0VSVCghbV9lcnJvci5pc051bGwoKSk7CisgICAgICAgIHBs
YXRmb3JtU3ludGhlc2l6ZUVycm9yUmVzcG9uc2UoKTsKKyAgICB9CisKKyAgICBtX2RlbGF5ZWRS
ZXBseS0+c2VuZChtX2Vycm9yLCBtX3Jlc3BvbnNlLCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlKGJ5
dGVzLCBzaXplKSk7CisgICAgbV9kZWxheWVkUmVwbHkgPSBudWxscHRyOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9TeW5jaHJvbm91c0xvYWRDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9TeW5jaHJvbm91c0xvYWRD
b250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiN2MxZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL1N5bmNocm9u
b3VzTG9hZENvbnRyb2xsZXIuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyX2gKKyNkZWZpbmUgU3luY2hyb25vdXNMb2FkQ29u
dHJvbGxlcl9oCisKKyNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3Nh
Z2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9u
c2UuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisjaWYgRU5BQkxFKE5FVFdPUktf
UFJPQ0VTUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU2hhcmVkQnVmZmVyOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworCitjbGFzcyBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTeW5jaHJvbm91c0xvYWRDb250cm9s
bGVyPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVl
c3QsIFBhc3NSZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQ
ZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxheWVkUmVwbHk+IHJlcGx5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyKG9yaWdpbmFs
UmVxdWVzdCwgcmVwbHkpKTsKKyAgICB9CisgICAgCisgICAgflN5bmNocm9ub3VzTG9hZENvbnRy
b2xsZXIoKTsKKworICAgIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVl
c3QpOworICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVCdWZmZXIoV2ViQ29yZTo6U2hhcmVkQnVm
ZmVyKik7CisgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgdm9pZCBkaWRGYWlsV2l0
aEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKKyAgICAKKyAgICB2b2lkIGNh
bmNlbCgpOworCitwcml2YXRlOgorICAgIFN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIFBhc3NSZWZQdHI8TWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNM
b2FkOjpEZWxheWVkUmVwbHk+KTsKKworICAgIHZvaWQgc2VuZERlbGF5ZWRSZXBseSgpOworICAg
IHZvaWQgcGxhdGZvcm1TeW50aGVzaXplRXJyb3JSZXNwb25zZSgpOworCisgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0IG1fb3JpZ2luYWxSZXF1ZXN0OworICAgIFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCBtX2N1cnJlbnRSZXF1ZXN0OworICAgIFJlZlB0cjxNZXNzYWdlczo6TmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OkRlbGF5ZWRSZXBs
eT4gbV9kZWxheWVkUmVwbHk7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3Bv
bnNlOworICAgIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgbV9lcnJvcjsKKyAgICBPd25QdHI8V1RG
OjpWZWN0b3I8dWludDhfdD4+IG1fcmVzcG9uc2VEYXRhOworCit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKKyNlbmRpZiAv
LyBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL1N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9TeW5jaHJvbm91c0xvYWRDb250cm9sbGVyLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MTFiODAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9TeW5jaHJvbm91c0xvYWRDb250cm9sbGVyLm1t
CkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU3luY2hyb25vdXNMb2FkQ29udHJvbGxlci5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktf
UFJPQ0VTUykKKworI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVy
OjpwbGF0Zm9ybVN5bnRoZXNpemVFcnJvclJlc3BvbnNlKCkKK3sKKyAgICBtX3Jlc3BvbnNlID0g
UmVzb3VyY2VSZXNwb25zZShtX29yaWdpbmFsUmVxdWVzdC51cmwoKSwgU3RyaW5nKCksIDAsIFN0
cmluZygpLCBTdHJpbmcoKSk7CisKKyAgICBpZiAobV9lcnJvci5kb21haW4oKSA9PSBTdHJpbmco
TlNVUkxFcnJvckRvbWFpbikpIHsKKyAgICAgICAgc3dpdGNoIChtX2Vycm9yLmVycm9yQ29kZSgp
KSB7CisgICAgICAgIGNhc2UgTlNVUkxFcnJvclVzZXJDYW5jZWxsZWRBdXRoZW50aWNhdGlvbjoK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG1pZ2h0IG5vdCBhY3R1YWxseSBiZSB0aGUgcmVh
bCBIVFRQIHJlc3BvbnNlLCBidXQgd2UgbWlnaHQgbm90IGJlIGFibGUgdG8gZ2V0IHRoZSByZWFs
IEhUVFAgcmVzcG9uc2UuCisgICAgICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2Rl
KDQwMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IG1fcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUobV9lcnJvci5lcnJvckNvZGUoKSk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgbV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSg0
MDQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggOWMzODNlMS4uZmI2YmZiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDYzLDEyICs0NjMsMTUg
QEAKIAkJNTEyRjU4RkExMkE4OEE1NDAwNjI5NTMwIC8qIFdLQ3JlZGVudGlhbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyRjU4RjIxMkE4OEE1NDAw
NjI5NTMwIC8qIFdLQ3JlZGVudGlhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUxMkY1OEZCMTJBODhBNTQwMDYyOTUzMCAvKiBXS1Byb3RlY3Rp
b25TcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTJGNThGMzEyQTg4QTU0MDA2Mjk1MzAgLyogV0tQcm90ZWN0aW9uU3BhY2UuY3BwICovOyB9
OwogCQk1MTJGNThGQzEyQTg4QTU0MDA2Mjk1MzAgLyogV0tQcm90ZWN0aW9uU3BhY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkY1OEY0MTJBODhB
NTQwMDYyOTUzMCAvKiBXS1Byb3RlY3Rpb25TcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxMkZFQ0FCMTdCMkY5QUQwMEZDRjk1MCAvKiBT
eW5jaHJvbm91c0xvYWRDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTEyRkVDQUExN0IyRjlBRDAwRkNGOTUwIC8qIFN5bmNocm9ub3Vz
TG9hZENvbnRyb2xsZXIubW0gKi87IH07CiAJCTUxMzYxODNEMTYzMTI2REEwMEE5OURERSAvKiBD
b25uZWN0aW9uU3RhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTEzNjE4M0IxNjMxMjZEQTAwQTk5RERFIC8qIENvbm5lY3Rpb25TdGFjay5jcHAg
Ki87IH07CiAJCTUxMzYxODNFMTYzMTI2REEwMEE5OURERSAvKiBDb25uZWN0aW9uU3RhY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMzYxODNDMTYz
MTI2REEwMEE5OURERSAvKiBDb25uZWN0aW9uU3RhY2suaCAqLzsgfTsKIAkJNTEzQTE2M0MxNjMw
ODhGNjAwNUQ3RDIyIC8qIE5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEzQTE2M0ExNjMw
ODhGNjAwNUQ3RDIyIC8qIE5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICov
OyB9OwogCQk1MTNBMTYzRDE2MzA4OEY2MDA1RDdEMjIgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTNBMTYzQjE2MzA4OEY2MDA1RDdEMjIgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2VzLmgg
Ki87IH07CiAJCTUxM0ExNjRDMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTNBMTY0OTE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuY3BwICovOyB9OwogCQk1MTNBMTY0RDE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxM0ExNjRBMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oICovOyB9OworCQk1MTNGQjlEOTE3QjA1MDhGMDBEREJGNDEgLyogU3lu
Y2hyb25vdXNMb2FkQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTNGQjlENzE3QjA1MDhGMDBEREJGNDEgLyogU3luY2hyb25vdXNM
b2FkQ29udHJvbGxlci5jcHAgKi87IH07CisJCTUxM0ZCOURCMTdCMDUwOEYwMEREQkY0MSAvKiBT
eW5jaHJvbm91c0xvYWRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTNGQjlEODE3QjA1MDhGMDBEREJGNDEgLyogU3luY2hyb25vdXNM
b2FkQ29udHJvbGxlci5oICovOyB9OwogCQk1MTRCREVEMzE2Qzk4RUREMDBFNEUyNUUgLyogU3Rh
dGlzdGljc1JlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNEJERUQyMTZDOThFREQwMEU0RTI1RSAvKiBTdGF0aXN0aWNzUmVxdWVzdC5oICov
OyB9OwogCQk1MTUzNTY5QzEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFnZUNvbnRleHRNZW51Q2xp
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
NTM1NjlBMTI5MUIxRDIwMDA3NDlEQyAvKiBXZWJQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwICov
OyB9OwogCQk1MTUzNTY5RDEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFnZUNvbnRleHRNZW51Q2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTUz
NTY5QjEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFnZUNvbnRleHRNZW51Q2xpZW50LmggKi87IH07
CkBAIC00ODksOCArNDkyLDYgQEAKIAkJNTE3OTU1NzExNjI4NzdEMjAwRkE0M0I2IC8qIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE4QTYwRjE2MjdGMkJEMDAwRDkwRTkgLyogTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCAqLzsgfTsKIAkJNTE3Q0YwRTMxNjNBNDg2QzAwQzI5
NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdDRjBFMTE2M0E0ODZD
MDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAq
LzsgfTsKIAkJNTE3Q0YwRTQxNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTdDRjBFMjE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
TWVzc2FnZXMuaCAqLzsgfTsKLQkJNTE4MTVCOUYxNkE2MjIyMTAwNTQ1MDFGIC8qIFN5bmNOZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE4MTVCOUQxNkE2MjIyMTAwNTQ1MDFGIC8qIFN5bmNOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwICovOyB9OwotCQk1MTgxNUJBMDE2QTYyMjIxMDA1NDUwMUYgLyogU3luY05l
dHdvcmtSZXNvdXJjZUxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE4MTVCOUUxNkE2MjIyMTAwNTQ1MDFGIC8qIFN5bmNOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuaCAqLzsgfTsKIAkJNTE4MjlEQTUxNjM3QzcwQzAwMDk1M0Q2IC8qIE5ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE4MjlEQTMxNjM3QzcwQzAwMDk1M0Q2IC8qIE5ldHdvcmtSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwICovOyB9OwogCQk1MTgyOURBNjE2MzdDNzBDMDAwOTUzRDYgLyog
TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4MjlEQTQxNjM3QzcwQzAwMDk1M0Q2IC8qIE5ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCAqLzsgfTsKIAkJNTE4MzQ1OTIxMzQ1MzJFOTAwOTJCNjk2
IC8qIFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgzNDU5MDEzNDUzMkU4MDA5MkI2OTYgLyogV2ViSWNvbkRh
dGFiYXNlQ2xpZW50LmNwcCAqLzsgfTsKQEAgLTUxNCw4ICs1MTUsNiBAQAogCQk1MThFOEYwQjE2
QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEU4RjAyMTZCMjA5MzcwMEU5MTQyOSAvKiBE
b3dubG9hZE1hbmFnZXIuY3BwICovOyB9OwogCQk1MThFOEYwQzE2QjIwOTM3MDBFOTE0MjkgLyog
RG93bmxvYWRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MThFOEYwMzE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYW5hZ2VyLmggKi87
IH07CiAJCTUxOEU4RjBEMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEU4RjA1MTZCMjA5Mzcw
MEU5MTQyOSAvKiBEb3dubG9hZE1hYy5tbSAqLzsgfTsKLQkJNTE5QjRGRjQxNkE5RUE5NzAwNjY4
NzREIC8qIFNjaGVkdWxhYmxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxOUI0RkYyMTZBOUVBOTcwMDY2ODc0RCAvKiBTY2hlZHVsYWJs
ZUxvYWRlci5jcHAgKi87IH07Ci0JCTUxOUI0RkY1MTZBOUVBOTcwMDY2ODc0RCAvKiBTY2hlZHVs
YWJsZUxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE5QjRGRjMxNkE5RUE5NzAwNjY4NzREIC8qIFNjaGVkdWxhYmxlTG9hZGVyLmggKi87IH07
CiAJCTUxQTRENUE5MTZDQUM0RkYwMDBFNjE1RSAvKiBTdGF0aXN0aWNzUmVxdWVzdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE0RDVBODE2Q0FD
NEZGMDAwRTYxNUUgLyogU3RhdGlzdGljc1JlcXVlc3QuY3BwICovOyB9OwogCQk1MUE1NTVGNTEy
OEM2QzQ3MDA5QUJDRUMgLyogV0tDb250ZXh0TWVudUl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBNTU1RjMxMjhDNkM0NzAwOUFCQ0VDIC8q
IFdLQ29udGV4dE1lbnVJdGVtLmNwcCAqLzsgfTsKIAkJNTFBNTU1RjYxMjhDNkM0NzAwOUFCQ0VD
IC8qIFdLQ29udGV4dE1lbnVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUE1NTVGNDEyOEM2QzQ3MDA5QUJDRUMgLyogV0tDb250ZXh0TWVudUl0
ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MTkzOSw2ICsxOTM4LDcgQEAKIAkJNTEyRjU4RjIxMkE4OEE1NDAwNjI5NTMwIC8qIFdLQ3JlZGVu
dGlhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NyZWRlbnRpYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyRjU4RjMxMkE4OEE1NDAwNjI5NTMwIC8q
IFdLUHJvdGVjdGlvblNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdLUHJvdGVjdGlvblNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTEyRjU4RjQxMkE4OEE1NDAwNjI5NTMwIC8qIFdLUHJvdGVjdGlvblNwYWNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUHJvdGVjdGlvblNwYWNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUxMkZFQ0FBMTdCMkY5QUQwMEZDRjk1MCAvKiBTeW5jaHJvbm91
c0xvYWRDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1l
ID0gU3luY2hyb25vdXNMb2FkQ29udHJvbGxlci5tbTsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL1N5
bmNocm9ub3VzTG9hZENvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsK
IAkJNTEzNjE4M0IxNjMxMjZEQTAwQTk5RERFIC8qIENvbm5lY3Rpb25TdGFjay5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25uZWN0aW9uU3RhY2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTM2MTgzQzE2MzEyNkRBMDBBOTlEREUgLyogQ29u
bmVjdGlvblN0YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbm5lY3Rp
b25TdGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTNBMTYzQTE2MzA4OEY2
MDA1RDdEMjIgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NDYsNiArMTk0
Niw4IEBACiAJCTUxM0ExNjQ5MTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxM0ExNjRBMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEzQTE2NEIxNjMw
QTlCRjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxM0ZCOUQ3
MTdCMDUwOEYwMEREQkY0MSAvKiBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIu
Y3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvU3luY2hyb25vdXNMb2FkQ29udHJvbGxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxM0ZCOUQ4MTdCMDUwOEYwMEREQkY0MSAv
KiBTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNz
L1N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTE0QkRFRDIxNkM5OEVERDAwRTRFMjVFIC8qIFN0YXRpc3RpY3NSZXF1ZXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpc3RpY3NSZXF1ZXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNTM1NjlBMTI5MUIxRDIwMDA3NDlEQyAvKiBXZWJQYWdl
Q29udGV4dE1lbnVDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViUGFnZUNvbnRleHRNZW51Q2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE1MzU2OUIxMjkxQjFEMjAwMDc0OURDIC8qIFdlYlBhZ2VDb250ZXh0TWVudUNsaWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlQ29udGV4dE1lbnVD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NTksOCArMTk2MSw2IEBA
CiAJCTUxN0EzM0I0MTMwQjMwOEMwMEY4MENCNSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQXBwbGljYXRpb25DYWNoZU1h
bmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3Q0YwRTExNjNBNDg2QzAw
QzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTdD
RjBFMjE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE4MTVCOUQxNkE2
MjIyMTAwNTQ1MDFGIC8qIFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHA7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9TeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE4MTVCOUUxNkE2MjIyMTAwNTQ1MDFGIC8qIFN5
bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvU3lu
Y05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTgyOURBMzE2MzdDNzBDMDAwOTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTgyOURBNDE2
MzdDNzBDMDAwOTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODM0NTkwMTM0NTMyRTgwMDkyQjY5NiAvKiBX
ZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE5ODYsOCArMTk4Niw2IEBACiAJCTUxOEU4RjAyMTZCMjA5MzcwMEU5MTQyOSAvKiBE
b3dubG9hZE1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RG93bmxvYWRNYW5hZ2VyLmNwcDsgcGF0aCA9IERvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MThFOEYwMzE2QjIwOTM3MDBFOTE0Mjkg
LyogRG93bmxvYWRNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERv
d25sb2FkTWFuYWdlci5oOyBwYXRoID0gRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MThFOEYwNTE2QjIwOTM3MDBFOTE0MjkgLyogRG93
bmxvYWRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEb3du
bG9hZE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE5QjRGRjIxNkE5RUE5
NzAwNjY4NzREIC8qIFNjaGVkdWxhYmxlTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFNjaGVkdWxhYmxlTG9hZGVyLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9j
ZXNzL1NjaGVkdWxhYmxlTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTE5QjRGRjMxNkE5RUE5NzAwNjY4NzREIC8qIFNjaGVkdWxhYmxlTG9hZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNjaGVkdWxhYmxlTG9hZGVyLmg7IHBhdGggPSBOZXR3
b3JrUHJvY2Vzcy9TY2hlZHVsYWJsZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MUE0RDVBODE2Q0FDNEZGMDAwRTYxNUUgLyogU3RhdGlzdGljc1JlcXVlc3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhdGlzdGljc1JlcXVlc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUE1NTVGMzEyOEM2QzQ3MDA5QUJDRUMg
LyogV0tDb250ZXh0TWVudUl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV0tDb250ZXh0TWVudUl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MUE1NTVGNDEyOEM2QzQ3MDA5QUJDRUMgLyogV0tDb250ZXh0TWVudUl0ZW0uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZXh0TWVudUl0ZW0uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2NTMsMTAgKzM2NTEsOCBAQAogCQkJCUUxNTI1NTE3MTcw
MTA5RkIwMDNEN0FEQiAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXIubWVzc2FnZXMuaW4gKi8sCiAJ
CQkJNTE4MjlEQTMxNjM3QzcwQzAwMDk1M0Q2IC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIuY3BwICovLAogCQkJCTUxODI5REE0MTYzN0M3MEMwMDA5NTNENiAvKiBOZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmggKi8sCi0JCQkJNTE5QjRGRjIxNkE5RUE5NzAwNjY4NzREIC8qIFNj
aGVkdWxhYmxlTG9hZGVyLmNwcCAqLywKLQkJCQk1MTlCNEZGMzE2QTlFQTk3MDA2Njg3NEQgLyog
U2NoZWR1bGFibGVMb2FkZXIuaCAqLywKLQkJCQk1MTgxNUI5RDE2QTYyMjIxMDA1NDUwMUYgLyog
U3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgKi8sCi0JCQkJNTE4MTVCOUUxNkE2MjIyMTAw
NTQ1MDFGIC8qIFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCAqLywKKwkJCQk1MTNGQjlENzE3
QjA1MDhGMDBEREJGNDEgLyogU3luY2hyb25vdXNMb2FkQ29udHJvbGxlci5jcHAgKi8sCisJCQkJ
NTEzRkI5RDgxN0IwNTA4RjAwRERCRjQxIC8qIFN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIuaCAq
LywKIAkJCSk7CiAJCQluYW1lID0gTmV0d29ya1Byb2Nlc3M7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMzY3Miw2ICszNjY4LDcgQEAKIAkJCQk1MTJDMDY4RjE2MzkwRTY5MDBBQkI5
MTEgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5tbSAqLywKIAkJCQlFMUI3ODQ3
MDE2M0YyNDY5MDAwN0I2OTIgLyogUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCAqLywKIAkJCQlF
MUI3ODQ3MjE2M0YyNTNFMDAwN0I2OTIgLyogUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gKi8s
CisJCQkJNTEyRkVDQUExN0IyRjlBRDAwRkNGOTUwIC8qIFN5bmNocm9ub3VzTG9hZENvbnRyb2xs
ZXIubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IG1hYzsKIAkJCXBhdGggPSBOZXR3b3JrUHJvY2Vz
cy9tYWM7CkBAIC01NDkzLDcgKzU0OTAsNiBAQAogCQkJCUJDMkQwMjE3MTJBQzQxQ0IwMEU3MzJB
MyAvKiBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFB
QjRBOEQxMjk2RjBBMjAwMjM5NTJGIC8qIFNhbmRib3hFeHRlbnNpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUUxRTU1MkM1MTZBRTA2NUYwMDRFRDY1MyAvKiBTYW5kYm94SW5pdGlhbGl6YXRpb25Q
YXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTlCNEZGNTE2QTlFQTk3MDA2Njg3NEQg
LyogU2NoZWR1bGFibGVMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDEzMDU0MTM4MkVB
QzAwMDM1MUVERCAvKiBTZWNJdGVtUmVxdWVzdERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
RDEzMDU2MTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRhLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMTc5MDg4RjE2OUJBQTZBMDA2OTA0QzcgLyogU2VjSXRlbVNoaW0uaCBpbiBI
ZWFkZXJzICovLApAQCAtNTUwOCw2ICs1NTA0LDcgQEAKIAkJCQkxQTI0QkVENTEyMDg5NEQxMDBG
QkIwNTkgLyogU2hhcmVkTWVtb3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUVERkRBRTE2Mjg4
OTNCMDAzOUVDREEgLyogU2hhcmVkV29ya2VyUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTFFREZFMTMxNjI4Q0ZCRDAwMzlFQ0RBIC8qIFNoYXJlZFdvcmtl
clByb2Nlc3NNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTNGQjlEQjE3QjA1MDhGMDBE
REJGNDEgLyogU3luY2hyb25vdXNMb2FkQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTFFREZEQjYxNjI4QUQ3MzAwMzlFQ0RBIC8qIFNoYXJlZFdvcmtlclByb2Nlc3NNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFREZEQkExNjI4QjA0NTAwMzlFQ0RBIC8qIFNoYXJlZFdv
cmtlclByb2Nlc3NQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFREZEQjgxNjI4QUQ3MzAw
MzlFQ0RBIC8qIFNoYXJlZFdvcmtlclByb2Nlc3NQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAq
LywKQEAgLTU1MjAsNyArNTUxNyw2IEBACiAJCQkJMUFCMzFBOTcxNkJDNjg4MTAwRjZEQkM5IC8q
IFN0b3JhZ2VNYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMTNCRUI0MTYz
NUE5QzgwMEYxOUMwMyAvKiBTdHJpbmdSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5
NkJEODVEMTUwMTlCQzMwMDcxRjQyNCAvKiBTdHJpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAotCQkJCTUxODE1QkEwMTZBNjIyMjEwMDU0NTAxRiAvKiBTeW5jTmV0d29ya1Jlc291cmNlTG9h
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUE0MTdDQjEyQzAwQ0NBMDAyQkU2N0IgLyogVGV4
dENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFRUTQxN0NCMTJDMDBDQ0EwMDJCRTY3QiAv
KiBUZXh0Q2hlY2tlckNvbXBsZXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNUU0REE0MTJE
M0JEM0QwMDk5QTJCQiAvKiBUZXh0Q2hlY2tlclN0YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTY3
NjEsNyArNjc1Nyw2IEBACiAJCQkJQkMxMTFCMDkxMTJGNUUzQzAwMzM3QkFCIC8qIFJlc3BvbnNp
dmVuZXNzVGltZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBQjRBQUExMjk2RjE1NDAwMjM5
NTJGIC8qIFNhbmRib3hFeHRlbnNpb25NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMUU1NTJD
NDE2QUUwNjVGMDA0RUQ2NTMgLyogU2FuZGJveEluaXRpYWxpYXRpb25QYXJhbWV0ZXJzTWFjLm1t
IGluIFNvdXJjZXMgKi8sCi0JCQkJNTE5QjRGRjQxNkE5RUE5NzAwNjY4NzREIC8qIFNjaGVkdWxh
YmxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRDEzMDUzMTM4MkVBQzAwMDM1MUVE
RCAvKiBTZWNJdGVtUmVxdWVzdERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFEMTMwNTUx
MzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXNwb25zZURhdGEuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTE3OTA4OEQxNjlCQUE2MjAwNjkwNEM3IC8qIFNlY0l0ZW1TaGltLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNjc5NCw3ICs2Nzg5LDYgQEAKIAkJCQkxQTQ0Qjk1NzE2QjczN0FBMDBCN0JC
RDggLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUExM0JF
QjMxNjM1QTlDODAwRjE5QzAzIC8qIFN0cmluZ1JlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkyOTZCRDg1RTE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0aWVzLm1tIGluIFNv
dXJjZXMgKi8sCi0JCQkJNTE4MTVCOUYxNkE2MjIyMTAwNTQ1MDFGIC8qIFN5bmNOZXR3b3JrUmVz
b3VyY2VMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMVpaNDE3RUYxMkMwMEQ4NzAwMkJF
NjdCIC8qIFRleHRDaGVja2VyQ29tcGxldGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUE0
MTdFRjEyQzAwRDg3MDAyQkU2N0IgLyogVGV4dENoZWNrZXJNYWMubW0gaW4gU291cmNlcyAqLywK
IAkJCQkxQUFGMjYzODE0Njg3QzM5MDA0QTFFOEEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWEubW0gaW4gU291cmNlcyAqLywKQEAgLTY4NjgsNiArNjg2Miw3IEBACiAJCQkJQkNFNDY5
NTUxMjE0RTZDQjAwMEI5OEVCIC8qIFdlYkZvcm1TdWJtaXNzaW9uTGlzdGVuZXJQcm94eS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzExMUFERDExMkY1QjkzMDAzMzdCQUIgLyogV2ViRnJhbWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNDY5NzkxMjE0RjJCNDAwMEI5OEVCIC8qIFdlYkZy
YW1lTGlzdGVuZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTJGRUNBQjE3QjJGOUFE
MDBGQ0Y5NTAgLyogU3luY2hyb25vdXNMb2FkQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUJDMTExQTVGMTEyRjRGQkIwMDMzN0JBQiAvKiBXZWJGcmFtZUxvYWRlckNsaWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzkxRjJDQTEyMUI2NzlBMDBFQkY3RTggLyogV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDQjlGNkExMTEyM0E4NEIw
MEExMzdFMCAvKiBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC02OTYzLDYgKzY5NTgsNyBAQAogCQkJCTM3NjA4ODFFMTUwNDEzRTkwMEZDODJDNyAvKiBX
ZWJSZW5kZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyMTc0NjQxNjRDMjEzNzAw
MzdBNUMxIC8qIFdlYlJlc291cmNlQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzMzY3
NjJGMTMwQzk5OTgwMDZDOURFMiAvKiBXZWJSZXNvdXJjZUNhY2hlTWFuYWdlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1MTNGQjlEOTE3QjA1MDhGMDBEREJGNDEgLyogU3luY2hyb25vdXNMb2Fk
Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzM0Y5RDVCOTEzMTJGMUVFMDAwRDY4
M0YgLyogV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMzM2NzY1NTEzMEM5RUNBMDA2QzlERTIgLyogV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJNZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzMzNjc2MzUxMzBDOTlCMjAwNkM5
REUyIC8qIFdlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKaW5kZXggMDk4YjgxOC4uMDY2YTMwNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApAQCAtMjMyLDYgKzIzMiwxMiBA
QCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dAogICAgICAgICBMb2FkZXJTdHJhdGVneTo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseShjb250ZXh0LCByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCByZXF1
ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgZXJyb3IsIHJl
c3BvbnNlLCBkYXRhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICAKKyAgICAvLyBEb24n
dCBib3RoZXIgY29uc3VsdGluZyB0aGUgTmV0d29ya1Byb2Nlc3MgaWYgdGhpcyByZXF1ZXN0IGlz
IHRvIGEgYmxvY2tlZCBwb3J0LgorICAgIGlmICghcG9ydEFsbG93ZWQocmVxdWVzdC51cmwoKSkp
IHsKKyAgICAgICAgZXJyb3IgPSBjb250ZXh0LT5ibG9ja2VkRXJyb3IocmVxdWVzdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKICAgICBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZl
cmVuY2U7CiAK
</data>
<flag name="review"
          id="230619"
          type_id="1"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208837</attachid>
            <date>2013-08-15 12:33:03 -0700</date>
            <delta_ts>2013-08-15 17:50:40 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>116254</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1MzZjNWRjLi4zZWNjYjIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTMtMDgt
MTUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIChOZXR3b3Jr
UHJvY2VzcykgIFN5bmMgWEhScyBzaG91bGQgbG9hZCB1c2luZyBhc3luYyBSZXNvdXJjZUhhbmRs
ZXMsIG5vdCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5NDkzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93azIv
VGVzdEV4cGVjdGF0aW9uczogRm9yIG5vdywgc2tpcCB0d28gWEhSIHRlc3RzIHRoYXQgYmVoYXZl
IGRpZmZlcmVudGx5IHdoZXRoZXIgeW91J3JlIHVzaW5nIHRoZQorICAgICAgICAgIE5ldHdvcmtQ
cm9jZXNzIG9yIG5vdC4KKwogMjAxMy0wOC0xNSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlv
LnByYWRhQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtHVEtdIFVucmV2aWV3ZWQgZ2FyZGVuaW5n
LiBNb3ZlIE1hYyBzcGVjaWZpYyBleHBlY3RhdGlvbiBmb3IKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2syL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggOGI1YWQ0MS4uZjEzYWMxZiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTI3MSw2ICsyNzEsMTEgQEAgcGx1
Z2lucy9ucHJ1bnRpbWUvZW1iZWQtcHJvcGVydHktaWZyYW1lLWVxdWFsaXR5Lmh0bWwKIAogd2Vi
a2l0Lm9yZy9iLzEwNTk1MiBmYXN0L2xvYWRlci9zdWJtaXQtZm9ybS13aGlsZS1wYXJzaW5nLTIu
aHRtbCBbIFBhc3MgRmFpbHVyZSBdCiAKKyMgW1dLMl0gVHdvIFhIUiB0ZXN0cyByZWxhdGVkIHRv
IGNyb3NzLW9yaWdpbiByZXF1ZXN0cyBmYWxsIHZpY3RpbSB0byBwb3J0IGJsb2NraW5nLgorIyBo
dHRwczovL3dlYmtpdC5vcmcvYi8xMTk4NTcKK2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc2lt
cGxlLWNyb3NzLW9yaWdpbi1kZW5pZWQtZXZlbnRzLXBvc3Qtc3luYy5odG1sCitodHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3NpbXBsZS1jcm9zcy1vcmlnaW4tZGVuaWVkLWV2ZW50cy1zeW5jLmh0
bWwKKwogIyMjIEVORCBPRiAoMSkgQ2xhc3NpZmllZCBmYWlsdXJlcyB3aXRoIGJ1ZyByZXBvcnRz
CiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCBlYThiMTBjLi41MGNmYmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTMtMDgt
MTUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIChOZXR3b3Jr
UHJvY2VzcykgIFN5bmMgWEhScyBzaG91bGQgbG9hZCB1c2luZyBhc3luYyBSZXNvdXJjZUhhbmRs
ZXMsIG5vdCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5NDkzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChD
b3ZlcmVkIGJ5IHBsZW50eSBvZiBleGlzdGluZyB0ZXN0cykuCisKKyAgICAgICAgKiBXZWJDb3Jl
LmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Ojp3aWxsU2VuZFJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OnBsYXRmb3Jt
QmFkU3luY1hIUlJlc3BvbnNlRXJyb3IpOiBSZW5hbWVkIGZyb20gcGxhdGZvcm1CYWRSZXNwb25z
ZUVycm9yKCkKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xp
ZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvU3luY2hyb25vdXNMb2FkZXJD
bGllbnQubW06CisgICAgICAgIChXZWJDb3JlOjpTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6cGxh
dGZvcm1CYWRTeW5jWEhSUmVzcG9uc2VFcnJvcik6CisKIDIwMTMtMDgtMTUgIEFudHRpIEtvaXZp
c3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8x
MTk4MzQ+IFJlbW92ZSBFbGVtZW50U2hhZG93CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IDI0NDE2
MmUuLmM1YWQwNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0xNzEsNiArMTcxLDcgQEAgX19a
TjdXZWJDb3JlMTFnZXRVUkxCeXRlc0VQSzdfX0NGVVJMUk4zV1RGN0NTdHJpbmdFCiBfX1pON1dl
YkNvcmUxMWdldFVSTEJ5dGVzRVBLN19fQ0ZVUkxSTjNXVEY2VmVjdG9ySWNMbTUxMkVOUzNfMTVD
cmFzaE9uT3ZlcmZsb3dFRUUKIF9fWk43V2ViQ29yZTExaUJlYW1DdXJzb3JFdgogX19aTjdXZWJD
b3JlMTFtZW1vcnlDYWNoZUV2CitfX1pON1dlYkNvcmUxMXBvcnRBbGxvd2VkRVJLTlNfNEtVUkxF
CiBfX1pON1dlYkNvcmUxMXN0YXJ0T2ZMaW5lRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCiBfX1pO
N1dlYkNvcmUxMXN0YXJ0T2ZXb3JkRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfOUVXb3JkU2lk
ZUUKIF9fWk43V2ViQ29yZTExd3JpdGVUb0ZpbGVFaVBLY2kKQEAgLTM0MCw2ICszNDEsNyBAQCBf
X1pON1dlYkNvcmUxNFJlc291cmNlQnVmZmVyQzFFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUJ1
ZmZlckMyRXYKIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VCdWZmZXJEMUV2CiBfX1pON1dlYkNvcmUx
NFJlc291cmNlQnVmZmVyRDJFdgorX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTEyZmlyc3RS
ZXF1ZXN0RXYKIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyMGZvcmNlQ29udGVudFNuaWZm
aW5nRXYKIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyM2NvbnRpbnVlV2lsbFNlbmRSZXF1
ZXN0RVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFCiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxl
MjVjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlRVAxOU5TQ2FjaGVkVVJMUmVzcG9uc2UKQEAgLTY5
MSw2ICs2OTMsNyBAQCBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlMjBzZXRTdWdn
ZXN0ZWRGaWxlbmFtZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTIwUmVzb3VyY2VSZXNw
b25zZUJhc2UyNHNldEV4cGVjdGVkQ29udGVudExlbmd0aEV4CiBfX1pON1dlYkNvcmUyMFJlc291
cmNlUmVzcG9uc2VCYXNlNnNldFVSTEVSS05TXzRLVVJMRQogX19aTjdXZWJDb3JlMjBSZXNvdXJj
ZVJlc3BvbnNlQmFzZUMyRXYKK19fWk43V2ViQ29yZTIwUmVzb3VyY2VSZXNwb25zZUJhc2VDMkVS
S05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRXhTN19TN18KIF9fWk43V2ViQ29yZTIwU3BhY2VTcGxp
dFN0cmluZ0RhdGFEMUV2CiBfX1pON1dlYkNvcmUyMFVzZXJHZXN0dXJlSW5kaWNhdG9yN3Nfc3Rh
dGVFCiBfX1pON1dlYkNvcmUyMFVzZXJHZXN0dXJlSW5kaWNhdG9yQzFFTlNfMjZQcm9jZXNzaW5n
VXNlckdlc3R1cmVTdGF0ZUUKQEAgLTc2Nyw2ICs3NzAsNyBAQCBfX1pON1dlYkNvcmUyM0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlMjNzZXRBdXRoZW50aWNhdGlvbkNsaWVudEVQTlNfMjBBdXRoZW50
aWNhdAogX19aTjdXZWJDb3JlMjNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUMxRVJLTlNfMTVQcm90
ZWN0aW9uU3BhY2VFUktOU18xMENyZWRlbnRpYWxFalJLTlNfMTZSZXNvdXJjZVJlc3BvbnNlRVJL
TlNfMTNSZXNvdXJjZUVycm9yRQogX19aTjdXZWJDb3JlMjNNdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dDI1ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbkV2CiBfX1pON1dlYkNvcmUyM011dGFibGVTdHls
ZVByb3BlcnR5U2V0RDFFdgorX19aTjdXZWJDb3JlMjNTeW5jaHJvbm91c0xvYWRlckNsaWVudDM4
cGxhdGZvcm1CYWRTeW5jaHJvbm91c1hIUlJlc3BvbnNlRXJyb3JFdgogX19aTjdXZWJDb3JlMjNj
cmVhdGVGcmFnbWVudEZyb21Ob2Rlc0VQTlNfOERvY3VtZW50RVJLTjNXVEY2VmVjdG9ySVBOU180
Tm9kZUVMbTBFTlMyXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmUyM2RhdGFGb3JV
UkxDb21wb25lbnRUeXBlRVA1TlNVUkxsCiBfX1pON1dlYkNvcmUyM2RlY29kZUhvc3ROYW1lV2l0
aFJhbmdlRVA4TlNTdHJpbmc4X05TUmFuZ2UKQEAgLTgxMSw2ICs4MTUsNyBAQCBfX1pON1dlYkNv
cmUyN0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZUMyRXYKIF9fWk43V2ViQ29yZTI3Q1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uQzFFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUViUktO
UzFfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI3RGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrMTRz
ZXRPcmllbnRhdGlvbkVOM1dURjEwUGFzc1JlZlB0cklOU18yMURldmljZU9yaWVudGF0aW9uRGF0
YUVFRQogX19aTjdXZWJDb3JlMjdEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2tDMUV2CitfX1pO
N1dlYkNvcmUyN3Byb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbEVSS05TXzRLVVJMRVMyXwogX19a
TjdXZWJDb3JlMjdzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXNFUEZ2dkUKIF9fWk43V2ViQ29y
ZTI4RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjEyYWRkVXNlclNoZWV0RU4zV1RGMTBQYXNz
UmVmUHRySU5TXzE4U3R5bGVTaGVldENvbnRlbnRzRUVFCiBfX1pON1dlYkNvcmUyOERvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb24xNGFkZEF1dGhvclNoZWV0RU4zV1RGMTBQYXNzUmVmUHRySU5T
XzE4U3R5bGVTaGVldENvbnRlbnRzRUVFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDc3MzUzYy4uYWIzOTkyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTM5
Nyw3ICs1Mzk3LDcgQEAKIAkJRTE4MDgxMEYxNkZDRUNERjAwQjgwRDA3IC8qIFdlYkNvcmVSZXNv
dXJjZUhhbmRsZUFzRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxODA4MTBEMTZGQ0VDREYwMEI4MEQwNyAvKiBXZWJDb3JlUmVzb3VyY2VI
YW5kbGVBc0RlbGVnYXRlLmggKi87IH07CiAJCUUxODA4MTEyMTZGQ0Y0MkYwMEI4MEQwNyAvKiBT
eW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTgwODExMDE2RkNGNDJFMDBCODBEMDcgLyogU3luY2hyb25vdXNM
b2FkZXJDbGllbnQuY3BwICovOyB9OwogCQlFMTgwODExNjE2RkNGOUNCMDBCODBEMDcgLyogU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMTgwODExNDE2RkNGOUNCMDBCODBEMDcgLyogU3luY2hyb25vdXNMb2Fk
ZXJDbGllbnQubW0gKi87IH07Ci0JCUUxODA4MTE3MTZGQ0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJv
bm91c0xvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTE4MDgxMTUxNkZDRjlDQjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xp
ZW50LmggKi87IH07CisJCUUxODA4MTE3MTZGQ0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xv
YWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTE4MDgxMTUxNkZDRjlDQjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE4MjU2
OEYwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29ya2VyR2xvYmFsU2NvcGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4MjU2OEQwRUYyQjAyRDAwOTMz
MjQyIC8qIEpTV29ya2VyR2xvYmFsU2NvcGUuY3BwICovOyB9OwogCQlFMTgyNTY5MDBFRjJCMDJE
MDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4MjU2OEUwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29y
a2VyR2xvYmFsU2NvcGUuaCAqLzsgfTsKIAkJRTE4MjU4QUMwRUYzQ0Q3MDAwOTMzMjQyIC8qIEpT
V29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTE4MjU4QUIwRUYzQ0Q3MDAwOTMzMjQyIC8qIEpTV29ya2VyR2xv
YmFsU2NvcGVDdXN0b20uY3BwICovOyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAppbmRleCAxNjQz
MWIwLi42YmU2Zjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmNwcApAQCAtNDcsNyArNDcsNyBAQCB2
b2lkIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Ojp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSwgUmVzb3VyY2VSZQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9l
cnJvci5pc051bGwoKSk7Ci0gICAgbV9lcnJvciA9IHBsYXRmb3JtQmFkUmVzcG9uc2VFcnJvcigp
OworICAgIG1fZXJyb3IgPSBwbGF0Zm9ybUJhZFN5bmNocm9ub3VzWEhSUmVzcG9uc2VFcnJvcigp
OwogICAgIG1faXNEb25lID0gdHJ1ZTsKICAgICByZXF1ZXN0ID0gMDsKIH0KQEAgLTk4LDcgKzk4
LDcgQEAgdm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkRmFpbChSZXNvdXJjZUhhbmRs
ZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm8KIH0KIAogI2lmIFVTRShDRk5FVFdPUkspCi1S
ZXNvdXJjZUVycm9yIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpwbGF0Zm9ybUJhZFJlc3BvbnNl
RXJyb3IoKQorUmVzb3VyY2VFcnJvciBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6cGxhdGZvcm1C
YWRTeW5jaHJvbm91c1hIUlJlc3BvbnNlRXJyb3IoKQogewogICAgIFJldGFpblB0cjxDRkVycm9y
UmVmPiBjZkVycm9yID0gYWRvcHRDRihDRkVycm9yQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGtDRkVycm9yRG9tYWluQ0ZOZXR3b3JrLCBrQ0ZVUkxFcnJvckJhZFNlcnZlclJlc3BvbnNlLCAw
KSk7CiAgICAgcmV0dXJuIGNmRXJyb3IuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgKaW5kZXggYTI0
YjEyNy4uMTIxYTQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaApAQCAtNDcsNiArNDcsOCBAQCBwdWJs
aWM6CiAgICAgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vy
cm9yOyB9CiAgICAgYm9vbCBpc0RvbmUoKSB7IHJldHVybiBtX2lzRG9uZTsgfQogCisgICAgc3Rh
dGljIFJlc291cmNlRXJyb3IgcGxhdGZvcm1CYWRTeW5jaHJvbm91c1hIUlJlc3BvbnNlRXJyb3Io
KTsKKwogcHJpdmF0ZToKICAgICBTeW5jaHJvbm91c0xvYWRlckNsaWVudCgpCiAgICAgICAgIDog
bV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKGZhbHNlKQpAQCAtNjUsOCArNjcsNiBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgYm9vbCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
KFJlc291cmNlSGFuZGxlKiwgY29uc3QgUHJvdGVjdGlvblNwYWNlJikgT1ZFUlJJREU7CiAjZW5k
aWYKIAotICAgIFJlc291cmNlRXJyb3IgcGxhdGZvcm1CYWRSZXNwb25zZUVycm9yKCk7Ci0KICAg
ICBib29sIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKICAgICBSZXNvdXJjZVJlc3BvbnNlIG1f
cmVzcG9uc2U7CiAgICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50Lm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvU3luY2hyb25vdXNMb2FkZXJDbGll
bnQubW0KaW5kZXggMDE0NGJkOS4uNmZhMWJiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvU3luY2hyb25vdXNMb2FkZXJDbGllbnQubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvU3luY2hyb25vdXNMb2FkZXJDbGllbnQu
bW0KQEAgLTM5LDcgKzM5LDcgQEAgdm9pZCBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiwKIH0KIAogI2lmICFV
U0UoQ0ZORVRXT1JLKQotUmVzb3VyY2VFcnJvciBTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6cGxh
dGZvcm1CYWRSZXNwb25zZUVycm9yKCkKK1Jlc291cmNlRXJyb3IgU3luY2hyb25vdXNMb2FkZXJD
bGllbnQ6OnBsYXRmb3JtQmFkU3luY2hyb25vdXNYSFJSZXNwb25zZUVycm9yKCkKIHsKICAgICBS
ZXRhaW5QdHI8TlNFcnJvcj4gZXJyb3IgPSBhZG9wdE5TKFtbTlNFcnJvciBhbGxvY10gaW5pdFdp
dGhEb21haW46TlNVUkxFcnJvckRvbWFpbiBjb2RlOk5TVVJMRXJyb3JCYWRTZXJ2ZXJSZXNwb25z
ZSB1c2VySW5mbzpuaWxdKTsKICAgICByZXR1cm4gZXJyb3IuZ2V0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
NjliNzU5Mi4uZGJkMmJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxMiBAQAorMjAxMy0wOC0x
NSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgKE5ldHdvcmtQ
cm9jZXNzKSAgU3luYyBYSFJzIHNob3VsZCBsb2FkIHVzaW5nIGFzeW5jIFJlc291cmNlSGFuZGxl
cywgbm90IFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk0OTMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXMg
dGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAtIENvbnNvbGlkYXRlcyBTY2hlZHVsYWJsZUxvYWRl
ciBhbmQgTmV0d29ya1Jlc291cmNlTG9hZGVyIGludG8gb25lIGNsYXNzLgorICAgICAgICAgIC0g
UmVtb3ZlcyBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLgorICAgICAgICAgIC0gQWRkcyBhIE5l
dHdvcmtMb2FkZXJDbGllbnQgaW50ZXJmYWNlIHRoYXQgY3VzdG9taXplcyBjZXJ0YWluIGJlaGF2
aW9ycyBvZiB0aGUgTmV0d29ya1Jlc291cmNlTG9hZGVyLgorICAgICAgICAgIC0gSW1wbGVtZW50
cyBhIFN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudCBhbmQgQXN5bmNocm9ub3VzTmV0d29y
a0xvYWRlckNsaWVudCBmb3IgdGhlIHR3byBkaWZmZXJlbnQgdHlwZXMgb2YgbG9hZHMuCisKKyAg
ICAgICAgVGhlIEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQgcmVzdWx0cyBpbiBtZXNz
YWdpbmcgYmFjayBwcm9ncmVzcyB0byB0aGUgV2ViUHJvY2VzcyBhcyB0aGUgbG9hZCBwcm9ncmVz
c2VzLgorICAgICAgICBUaGUgU3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50IGFjY3VtdWxh
dGVzIHRoZSByZXNwb25zZSwgZGF0YSwgYW5kIGVycm9yIHRvIGJlIGNvbW11bmljYXRlZCBiYWNr
IHRvIHRoZSBXZWJQcm9jZXNzCisgICAgICAgIG9ubHkgd2hlbiB0aGUgbG9hZCBpcyBjb21wbGV0
ZS4KKworICAgICAgICBVcGRhdGUgc21hbGwgc3dhdGhzIG9mIGNvZGUgdG8gcmVmbGVjdCB0aGF0
IE5ldHdvcmtSZXNvdXJjZUxvYWRlciBpcyB0aGUgT25lIFRydWUgTG9hZGVyICh0bSk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvSG9zdFJlY29yZC5jcHA6CisgICAgICAgIChXZWJLaXQ6Okhv
c3RSZWNvcmQ6OnNjaGVkdWxlUmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpIb3N0
UmVjb3JkOjphZGRMb2FkZXJJblByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6cmVtb3ZlTG9h
ZGVyRnJvbVF1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6SG9zdFJlY29yZDo6cmVtb3ZlTG9hZGVy
KToKKyAgICAgICAgKFdlYktpdDo6SG9zdFJlY29yZDo6c2VydmVQZW5kaW5nUmVxdWVzdHNGb3JR
dWV1ZSk6CisgICAgICAgIChXZWJLaXQ6Okhvc3RSZWNvcmQ6OmxpbWl0c1JlcXVlc3RzKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmg6CisKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRDbG9zZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpwZXJmb3JtU3luY2hyb25vdXNM
b2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJl
bW92ZUxvYWRJZGVudGlmaWVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpzY2hlZHVsZUxvYWRlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnJlbW92ZUxvYWRlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlY2VpdmVkUmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmVTY2hlZHVsZWRMb2FkZXJzKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVS
ZW1vdmVMb2FkZXIpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuaDoKKworICAgICAgICBDb21iaW5lIFNjaGVkdWxlYWJsZUxvYWRlciBhbmQg
TmV0d29ya1Jlc291cmNlTG9hZGVyIGludG8gTmV0d29ya1Jlc291cmNlTG9hZGVyOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVyKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp+TmV0d29ya1Jlc291cmNlTG9h
ZGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjppc1N5bmNocm9u
b3VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNl
QXN5bmMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2Vp
dmVCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZp
bmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRp
ZEZhaWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5k
UmVxdWVzdEFzeW5jKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpj
b250aW51ZVdpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6ZGlkU2VuZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnN1bWVTYW5kYm94RXh0
ZW5zaW9ucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6aW52YWxp
ZGF0ZVNhbmRib3hFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNl
TG9hZGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29ubmVjdGlvblRvV2ViUHJvY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6cHJpb3JpdHkpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmlzTG9hZGluZ01haW5SZXNvdXJjZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2V0SG9zdFJlY29yZCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6aG9zdFJlY29yZCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZEFib3J0aW5nT25GYWlsdXJlKToKKworICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL1NjaGVkdWxhYmxlTG9hZGVyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9TY2hlZHVsYWJsZUxvYWRlci5oOiBSZW1vdmVkLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL1N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIu
aDogUmVtb3ZlZC4KKworICAgICAgICBBZGQgYW4gYWJzdHJhY3QgTmV0d29ya0xvYWRlckNsaWVu
dCB0byBhZGFwdCBhIGxvYWQgdG8gYmUgZWl0aGVyIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91
czoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZGVyQ2xpZW50Lmg6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkZXJDbGllbnQ6On5OZXR3b3JrTG9hZGVyQ2xpZW50KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWRlckNsaWVudDo6aXNTeW5jaHJvbm91cyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkZXJDbGllbnQ6Ok5ldHdvcmtMb2FkZXJDbGllbnQp
OgorCisgICAgICAgIFRoZSBhc3luY2hyb25vdXMgbG9hZGVyIGNsaWVudCwgcHJpbWFyaWx5IHRv
IG1lc3NhZ2UgcHJvZ3Jlc3MgYmFjayB0byB0aGUgV2ViUHJvY2VzcyBhcyBpdCBoYXBwZW5zOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0FzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6QXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNs
aWVudDo6QXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6
OkFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OndpbGxTZW5kUmVxdWVzdCk6CisgICAg
ICAgIChXZWJLaXQ6OkFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OmNhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpBc3luY2hyb25v
dXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2Vi
S2l0OjpBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQnVmZmVyKToK
KyAgICAgICAgKFdlYktpdDo6QXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6ZGlkU2Vu
ZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50
OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6QXN5bmNocm9ub3VzTmV0d29y
a0xvYWRlckNsaWVudDo6ZGlkRmFpbCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQXN5bmNo
cm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpBc3luY2hyb25v
dXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpjcmVhdGUpOgorCisgICAgICAgIFRoZSBzeW5jaHJvbm91
cyBsb2FkZXIgY2xpZW50LCBwcmltYXJpbHkgdG8gYWNjdW11bGF0ZSByZXN1bHRzIG9mIHRoZSBs
b2FkIHRvIHNlbmQgYmFjayB0byB0aGUgV2ViUHJvY2VzcyBhbGwgYXQgb25jZToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9TeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6U3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpTeW5j
aHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpTeW5jaHJvbm91
c05ldHdvcmtMb2FkZXJDbGllbnQ6On5TeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQpOgor
ICAgICAgICAoV2ViS2l0OjpTeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OndpbGxTZW5k
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OlN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVu
dDo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAgIChXZWJL
aXQ6OlN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToK
KyAgICAgICAgKFdlYktpdDo6U3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaWRSZWNl
aXZlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6U3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xp
ZW50OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6U3luY2hyb25vdXNOZXR3
b3JrTG9hZGVyQ2xpZW50OjpkaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6U3luY2hyb25vdXNO
ZXR3b3JrTG9hZGVyQ2xpZW50OjpzZW5kRGVsYXllZFJlcGx5KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9TeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6Y3JlYXRlKToKKworICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL21hYy9TeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQu
bW06IAorICAgICAgICAoV2ViS2l0OjpTeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OnBs
YXRmb3JtU3ludGhlc2l6ZUVycm9yUmVzcG9uc2UpOgorCisgICAgICAgICogV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisyMDEzLTA4LTEzICBCcmFkeSBFaWRzb24gIDxiZWlk
c29uQGFwcGxlLmNvbT4KKworICAgICAgICAoTmV0d29ya1Byb2Nlc3MpICBTeW5jIFhIUnMgc2hv
dWxkIGxvYWQgdXNpbmcgYXN5bmMgUmVzb3VyY2VIYW5kbGVzLCBub3QgUmVzb3VyY2VIYW5kbGU6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExOTQ5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyB0aGUgZm9sbG93aW5nOgorICAgICAg
ICAgIC0gQ29uc29saWRhdGVzIFNjaGVkdWxhYmxlTG9hZGVyIGFuZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXIgaW50byBvbmUgY2xhc3MuCisgICAgICAgICAgLSBSZW1vdmVzIFN5bmNOZXR3b3JrUmVz
b3VyY2VMb2FkZXIuCisgICAgICAgICAgLSBBZGRzIGEgbGlnaHR3ZWlnaHQgIlN5bmNocm9ub3Vz
TG9hZENvbnRyb2xsZXIiIHRoYXQgLSB3aGVuIHByZXNlbnQgLSBzdWJ0bHkgY2hhbmdlcyB0aGUg
YmVoYXZpb3Igb2YgTmV0d29ya1Jlc291cmNlTG9hZGVyCisKKyAgICAgICAgVGhlIGNvbmNlcHQg
aXMgdGhlIE5ldHdvcmtSZXNvdXJjZUxvYWRlciBpcyB0aGUgc2luZ2xlIGxvYWRlciBjbGFzcyB0
aGF0IGRvZXMgYXN5bmNocm9ub3VzIGxvYWRzLCBidXQgdGhlIGV4aXN0ZW5jZSBvZiBhCisgICAg
ICAgIFN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIgaG9sZHMgb2ZmIG9uIGNvbnN0YW50bHkgbWVz
c2FnaW5nIGJhY2sgdG8gdGhlIFdlYlByb2Nlc3MgYW5kIGluc3RlYWQgYWNjdW11bGF0ZXMgdGhl
IHJlc3VsdCBvZiB0aGUgbG9hZC4KKworICAgICAgICBUaGVuIHdoZW4gdGhlIGxvYWQgaXMgY29t
cGxldGUsIHRoZSBEZWxheWVkUmVwbHkgZm9yIHRoZSBzeW5jaHJvbm91cyBYSFIgaXMgbWFkZS4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1NjaGVkdWxhYmxlTG9hZGVyLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9TY2hlZHVsYWJsZUxvYWRlci5oOiBSZW1vdmVk
LgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1N5bmNOZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaDogUmVtb3ZlZC4KKworICAgICAgICBVcGRhdGUgY2xhc3NlcyB0aGF0IHVzZWQgdG8g
cG9pbnQgdG8gdGhlICJTY2hlZHVsZWFibGVMb2FkZXIiIGJhc2UgY2xhc3MgdG8gaG9sZCBwb2lu
dGVycyB0byBOZXR3b3JrUmVzb3VyY2VMb2FkZXJzLCBpbnN0ZWFkOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL0hvc3RSZWNvcmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpIb3N0UmVjb3JkOjpz
Y2hlZHVsZVJlc291cmNlTG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6SG9zdFJlY29yZDo6YWRk
TG9hZGVySW5Qcm9ncmVzcyk6CisgICAgICAgIChXZWJLaXQ6OnJlbW92ZUxvYWRlckZyb21RdWV1
ZSk6CisgICAgICAgIChXZWJLaXQ6Okhvc3RSZWNvcmQ6OnJlbW92ZUxvYWRlcik6CisgICAgICAg
IChXZWJLaXQ6Okhvc3RSZWNvcmQ6OnNlcnZlUGVuZGluZ1JlcXVlc3RzRm9yUXVldWUpOgorICAg
ICAgICAoV2ViS2l0OjpIb3N0UmVjb3JkOjpsaW1pdHNSZXF1ZXN0cyk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvSG9zdFJlY29yZC5oOgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cGVyZm9ybVN5bmNocm9ub3VzTG9hZCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZW1vdmVMb2FkSWRl
bnRpZmllcik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVk
dWxlTG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
cjo6cmVtb3ZlTG9hZGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlcjo6cmVjZWl2ZWRSZWRpcmVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZVNjaGVkdWxlZExvYWRlcnMpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVJlbW92ZUxvYWRlcik6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5o
OgorCisgICAgICAgIENvbnNvbGlkYXRlIHRoZSBTY2hlZHVsZWFibGVMb2FkZXIgYW5kIE5ldHdv
cmtSZXNvdXJjZUxvYWRlciBsb2dpYyBhbGwgaW50byB0aGlzIG9uZSBjbGFzczoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6fk5ldHdvcmtSZXNvdXJjZUxvYWRl
cik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNsZWFudXApOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJ1ZmZlcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0QXN5bmMpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlV2lsbFNlbmRS
ZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRTZW5k
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hvdWxkVXNl
Q3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29uc3VtZVNhbmRib3hFeHRlbnNpb25zKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjppbnZhbGlkYXRlU2FuZGJveEV4dGVu
c2lvbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNl
TG9hZGVyOjpjb25uZWN0aW9uVG9XZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Jlc291cmNlTG9hZGVyOjpwcmlvcml0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6cmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6aXNTeW5jaHJvbm91cyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6c2V0SG9zdFJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6aG9zdFJlY29yZCk6CisKKyAgICAgICAgTGlnaHR3ZWlnaHQgY2xhc3Mgb3duZWQgYnkg
TmV0d29ya1Jlc291cmNlTG9hZGVyIHdoaWNoLCB3aGVuIHByZXNlbnQsIGFjY3VtdWxhdGVzIGxv
YWQgcmVzdWx0cyBmb3IgYSBzeW5jaHJvbm91cyByZXNwb25zZToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9TeW5jaHJvbm91c0xvYWRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OlN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXI6OlN5bmNocm9ub3VzTG9hZENvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViS2l0OjpTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyOjp+U3luY2hy
b25vdXNMb2FkQ29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OlN5bmNocm9ub3VzTG9hZENv
bnRyb2xsZXI6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OlN5bmNocm9ub3Vz
TG9hZENvbnRyb2xsZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OlN5
bmNocm9ub3VzTG9hZENvbnRyb2xsZXI6OmRpZFJlY2VpdmVCdWZmZXIpOgorICAgICAgICAoV2Vi
S2l0OjpTeW5jaHJvbm91c0xvYWRDb250cm9sbGVyOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6U3luY2hyb25vdXNMb2FkQ29udHJvbGxlcjo6ZGlkRmFpbFdpdGhFcnJvcik6
CisgICAgICAgIChXZWJLaXQ6OlN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXI6OmNhbmNlbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXI6OnNlbmREZWxheWVkUmVw
bHkpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1N5bmNocm9ub3VzTG9hZENvbnRyb2xsZXIu
aDogCisgICAgICAgIChXZWJLaXQ6OlN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXI6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OlN5bmNocm9ub3VzTG9hZENvbnRyb2xsZXI6OmFib3J0KToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9TeW5jaHJvbm91c0xvYWRDb250cm9sbGVyLm1tOiAKKyAg
ICAgICAgKFdlYktpdDo6U3luY2hyb25vdXNMb2FkQ29udHJvbGxlcjo6cGxhdGZvcm1TeW50aGVz
aXplRXJyb3JSZXNwb25zZSk6CisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6IFNob3J0IGNpcmN1aXQgYmxvY2tlZCBsb2Fk
cyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIE5ldHdvcmtQcm9jZXNzLgorCiAyMDEzLTA4LTE0ICBE
ZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICA8aHR0cHM6Ly93ZWJraXQu
b3JnL2IvMTE5ODI3PiBBbGxvdyBwcmltYXJ5IHBsdWctaW4gZGV0ZWN0aW9uIHRvIHJ1biBtb3Jl
IHRoYW4gb25jZSBpZiBuZWNlc3NhcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL0FzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA0NDlmYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0FzeW5jaHJvbm91c05ldHdvcmtM
b2FkZXJDbGllbnQuY3BwCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuaCIK
KworI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNlcnRpZmljYXRlSW5mby5oIgorI2luY2x1ZGUg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZGVyTWVz
c2FnZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL3Jlc291cmNlRXJyb3IuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCisj
aWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0FzeW5j
aHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OkFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGll
bnQoKQoreworfQorCit2b2lkIEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OndpbGxT
ZW5kUmVxdWVzdChOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRp
cmVjdFJlc3BvbnNlKQoreworICAgIC8vIFRoaXMgbWVzc2FnZSBpcyBEaXNwYXRjaE1lc3NhZ2VF
dmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkgdG8gYXZvaWQgYSBzaXR1YXRpb24gd2hlcmUgdGhl
IE5ldHdvcmtQcm9jZXNzIGlzIGRlYWRsb2NrZWQgd2FpdGluZyBmb3IgNiBjb25uZWN0aW9ucwor
ICAgIC8vIHdhaXRpbmcgZm9yIDYgY29ubmVjdGlvbnMgdG8gY29tcGxldGUgd2hpbGUgdGhlIFdl
YlByb2Nlc3MgaXMgd2FpdGluZyBmb3IgYSA3dGggKFN5bmNocm9ub3VzIFhIUikgdG8gY29tcGxl
dGUuCisgICAgbG9hZGVyLT5zZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291
cmNlTG9hZGVyOjpXaWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSksIENv
cmVJUEM6OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7Cit9CisK
K3ZvaWQgQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6Y2FuQXV0aGVudGljYXRlQWdh
aW5zdFByb3RlY3Rpb25TcGFjZShOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3Qg
V2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCit7CisgICAgLy8gVGhp
cyBtZXNzYWdlIGlzIERpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSB0
byBhdm9pZCBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgTmV0d29ya1Byb2Nlc3MgaXMgZGVhZGxvY2tl
ZAorICAgIC8vIHdhaXRpbmcgZm9yIDYgY29ubmVjdGlvbnMgdG8gY29tcGxldGUgd2hpbGUgdGhl
IFdlYlByb2Nlc3MgaXMgd2FpdGluZyBmb3IgYSA3dGggKFN5bmNocm9ub3VzIFhIUikgdG8gY29t
cGxldGUuCisgICAgbG9hZGVyLT5zZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJl
c291cmNlTG9hZGVyOjpDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKHByb3Rl
Y3Rpb25TcGFjZSksIENvcmVJUEM6OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5
bmNSZXBseSk7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKE5ldHdvcmtSZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBsb2FkZXItPnNlbmRBYm9y
dGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNw
b25zZVdpdGhDZXJ0aWZpY2F0ZUluZm8ocmVzcG9uc2UsIFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZv
KHJlc3BvbnNlKSwgbG9hZGVyLT5pc0xvYWRpbmdNYWluUmVzb3VyY2UoKSkpOworfQorCit2b2lk
IEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVCdWZmZXIoTmV0d29y
a1Jlc291cmNlTG9hZGVyKiBsb2FkZXIsIFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciogYnVmZmVyLCBp
bnQgZW5jb2RlZERhdGFMZW5ndGgpCit7CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDkwCisgICAgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSBzaGFyZWFibGVSZXNv
dXJjZUhhbmRsZTsKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnRyeUdldFNoYXJlYWJsZUhh
bmRsZUZyb21TaGFyZWRCdWZmZXIoc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUsIGJ1ZmZlcik7Cisg
ICAgaWYgKCFzaGFyZWFibGVSZXNvdXJjZUhhbmRsZS5pc051bGwoKSkgeworICAgICAgICAvLyBT
aW5jZSB3ZSdyZSBkZWxpdmVyaW5nIHRoaXMgcmVzb3VyY2UgYnkgb3Vyc2VsdmVzIGFsbCBhdCBv
bmNlIGFuZCBkb24ndCBuZWVkIGFueW1vcmUgZGF0YSBvciBjYWxsYmFja3MgZnJvbSB0aGUgbmV0
d29yayBsYXllciwgYWJvcnQgdGhlIGxvYWRlci4KKyAgICAgICAgbG9hZGVyLT5hYm9ydCgpOwor
ICAgICAgICBsb2FkZXItPnNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNl
aXZlUmVzb3VyY2Uoc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUsIGN1cnJlbnRUaW1lKCkpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwOTAKKworICAgIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5j
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZl
ci0+c2l6ZSgpKTsKKyAgICBsb2FkZXItPnNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6
V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVEYXRhKGRhdGFSZWZlcmVuY2UsIGVuY29kZWRE
YXRhTGVuZ3RoKSk7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6
ZGlkU2VuZERhdGEoTmV0d29ya1Jlc291cmNlTG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcg
bG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCit7
CisgICAgbG9hZGVyLT5zZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkU2VuZERh
dGEoYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpKTsKK30KKwordm9pZCBBc3luY2hyb25v
dXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaWRGaW5pc2hMb2FkaW5nKE5ldHdvcmtSZXNvdXJjZUxv
YWRlciogbG9hZGVyLCBkb3VibGUgZmluaXNoVGltZSkKK3sKKyAgICBsb2FkZXItPnNlbmQoTWVz
c2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRGaW5pc2hSZXNvdXJjZUxvYWQoZmluaXNoVGlt
ZSkpOworfQorCit2b2lkIEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OmRpZEZhaWwo
TmV0d29ya1Jlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJy
b3ImIGVycm9yKQoreworICAgIGxvYWRlci0+c2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2Fk
ZXI6OkRpZEZhaWxSZXNvdXJjZUxvYWQoZXJyb3IpKTsKK30KKworCisKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xvYWRl
ckNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQXN5bmNocm9ub3VzTmV0
d29ya0xvYWRlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMx
NTExMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9B
c3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50LmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudF9oCisjZGVmaW5l
IEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnRfaAorCisjaW5jbHVkZSAiTmV0d29ya0xv
YWRlckNsaWVudC5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZVJlc291cmNlLmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50IDog
cHVibGljIE5ldHdvcmtMb2FkZXJDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPE5ldHdvcmtMb2FkZXJDbGllbnQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQoKSk7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChOZXR3b3JrUmVzb3VyY2VMb2FkZXIq
LCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKE5ldHdvcmtSZXNvdXJjZUxv
YWRlciosIGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoTmV0d29ya1Jlc291cmNlTG9hZGVyKiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlQnVmZmVyKE5ldHdvcmtSZXNvdXJjZUxvYWRlciosIFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlciosIGludCBlbmNvZGVkRGF0YUxlbmd0aCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGRpZFNlbmREYXRhKE5ldHdvcmtSZXNvdXJjZUxvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9u
ZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKE5ldHdvcmtSZXNvdXJjZUxv
YWRlciosIGRvdWJsZSBmaW5pc2hUaW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
RmFpbChOZXR3b3JrUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JiBlcnJvcikgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgQXN5bmNocm9ub3VzTmV0d29ya0xv
YWRlckNsaWVudCgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoTkVUV09SS19QUk9DRVNTKQorCisjZW5kaWYgLy8gQXN5bmNocm9ub3VzTmV0d29ya0xv
YWRlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9I
b3N0UmVjb3JkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQu
Y3BwCmluZGV4IGU3Y2UzNGIuLjM1MjQ4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL0hvc3RSZWNvcmQuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiTmV0d29y
a1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVk
ZSAiU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpAQCAtNTYsNyArNTUsNyBAQCBIb3N0
UmVjb3JkOjp+SG9zdFJlY29yZCgpCiAjZW5kaWYKIH0KIAotdm9pZCBIb3N0UmVjb3JkOjpzY2hl
ZHVsZVJlc291cmNlTG9hZGVyKFBhc3NSZWZQdHI8U2NoZWR1bGFibGVMb2FkZXI+IGxvYWRlcikK
K3ZvaWQgSG9zdFJlY29yZDo6c2NoZWR1bGVSZXNvdXJjZUxvYWRlcihQYXNzUmVmUHRyPE5ldHdv
cmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVyKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAKQEAgLTY4LDcgKzY3LDcgQEAgdm9pZCBIb3N0UmVjb3JkOjpzY2hlZHVsZVJlc291cmNlTG9h
ZGVyKFBhc3NSZWZQdHI8U2NoZWR1bGFibGVMb2FkZXI+IGxvYWRlcikKICAgICAgICAgbV9sb2Fk
ZXJzUGVuZGluZ1tsb2FkZXItPnByaW9yaXR5KCldLmFwcGVuZChsb2FkZXIpOwogfQogCi12b2lk
IEhvc3RSZWNvcmQ6OmFkZExvYWRlckluUHJvZ3Jlc3MoU2NoZWR1bGFibGVMb2FkZXIqIGxvYWRl
cikKK3ZvaWQgSG9zdFJlY29yZDo6YWRkTG9hZGVySW5Qcm9ncmVzcyhOZXR3b3JrUmVzb3VyY2VM
b2FkZXIqIGxvYWRlcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC03Niw3
ICs3NSw3IEBAIHZvaWQgSG9zdFJlY29yZDo6YWRkTG9hZGVySW5Qcm9ncmVzcyhTY2hlZHVsYWJs
ZUxvYWRlciogbG9hZGVyKQogICAgIGxvYWRlci0+c2V0SG9zdFJlY29yZCh0aGlzKTsKIH0KIAot
aW5saW5lIGJvb2wgcmVtb3ZlTG9hZGVyRnJvbVF1ZXVlKFNjaGVkdWxhYmxlTG9hZGVyKiBsb2Fk
ZXIsIExvYWRlclF1ZXVlJiBxdWV1ZSkKK2lubGluZSBib29sIHJlbW92ZUxvYWRlckZyb21RdWV1
ZShOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgTG9hZGVyUXVldWUmIHF1ZXVlKQogewog
ICAgIExvYWRlclF1ZXVlOjppdGVyYXRvciBlbmQgPSBxdWV1ZS5lbmQoKTsKICAgICBmb3IgKExv
YWRlclF1ZXVlOjppdGVyYXRvciBpdCA9IHF1ZXVlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewpAQCAtODksMTQgKzg4LDE0IEBAIGlubGluZSBib29sIHJlbW92ZUxvYWRlckZyb21RdWV1ZShT
Y2hlZHVsYWJsZUxvYWRlciogbG9hZGVyLCBMb2FkZXJRdWV1ZSYgcXVldWUpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIEhvc3RSZWNvcmQ6OnJlbW92ZUxvYWRlcihTY2hlZHVsYWJsZUxv
YWRlciogbG9hZGVyKQordm9pZCBIb3N0UmVjb3JkOjpyZW1vdmVMb2FkZXIoTmV0d29ya1Jlc291
cmNlTG9hZGVyKiBsb2FkZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAg
IC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IER1ZSB0byBJUEMgcmFjZSBjb25kaXRpb25zLCBp
dCdzIHBvc3NpYmxlIHRoaXMgSG9zdFJlY29yZCB3aWxsIGJlIGFza2VkIHRvIHJlbW92ZSB0aGUg
c2FtZSBsb2FkZXIgdHdpY2UuCiAgICAgLy8gSXQgd291bGQgYmUgbmljZSB0byBrbm93IHRoZSBs
b2FkZXIgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGFuZCB0cmVhdCBpdCBhcyBhIG5vLW9wLgog
Ci0gICAgU2NoZWR1bGFibGVMb2FkZXJTZXQ6Oml0ZXJhdG9yIGkgPSBtX2xvYWRlcnNJblByb2dy
ZXNzLmZpbmQobG9hZGVyKTsKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXJTZXQ6Oml0ZXJhdG9y
IGkgPSBtX2xvYWRlcnNJblByb2dyZXNzLmZpbmQobG9hZGVyKTsKICAgICBpZiAoaSAhPSBtX2xv
YWRlcnNJblByb2dyZXNzLmVuZCgpKSB7CiAgICAgICAgIGktPmdldCgpLT5zZXRIb3N0UmVjb3Jk
KDApOwogICAgICAgICBtX2xvYWRlcnNJblByb2dyZXNzLnJlbW92ZShpKTsKQEAgLTE2MCw3ICsx
NTksNyBAQCB2b2lkIEhvc3RSZWNvcmQ6OnNlcnZlUGVuZGluZ1JlcXVlc3RzRm9yUXVldWUoTG9h
ZGVyUXVldWUmIHF1ZXVlLCBSZXNvdXJjZUxvYWRQcgogICAgICAgICByZXR1cm47CiAgICAgCiAg
ICAgd2hpbGUgKCFxdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPFNjaGVkdWxhYmxl
TG9hZGVyPiBsb2FkZXIgPSBxdWV1ZS5maXJzdCgpOworICAgICAgICBSZWZQdHI8TmV0d29ya1Jl
c291cmNlTG9hZGVyPiBsb2FkZXIgPSBxdWV1ZS5maXJzdCgpOwogICAgICAgICBBU1NFUlQobG9h
ZGVyLT5ob3N0UmVjb3JkKCkgPT0gdGhpcyk7CiAKICAgICAgICAgLy8gVGhpcyByZXF1ZXN0IG1p
Z2h0IGJlIGZyb20gV2ViUHJvY2VzcyB3ZSd2ZSBsb3N0IG91ciBjb25uZWN0aW9uIHRvLgpAQCAt
MTkzLDcgKzE5Miw3IEBAIHZvaWQgSG9zdFJlY29yZDo6c2VydmVQZW5kaW5nUmVxdWVzdHMoUmVz
b3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5KQogICAgICAgICBzZXJ2ZVBlbmRpbmdS
ZXF1ZXN0c0ZvclF1ZXVlKG1fbG9hZGVyc1BlbmRpbmdbcHJpb3JpdHldLCAoUmVzb3VyY2VMb2Fk
UHJpb3JpdHkpcHJpb3JpdHkpOwogfQogCi1ib29sIEhvc3RSZWNvcmQ6OmxpbWl0c1JlcXVlc3Rz
KFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5LCBTY2hlZHVsYWJsZUxvYWRlciogbG9hZGVy
KSBjb25zdAorYm9vbCBIb3N0UmVjb3JkOjpsaW1pdHNSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlv
cml0eSBwcmlvcml0eSwgTmV0d29ya1Jlc291cmNlTG9hZGVyKiBsb2FkZXIpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGxvYWRlcik7CiAgICAgQVNTRVJUKGxvYWRlci0+Y29ubmVjdGlvblRvV2ViUHJv
Y2VzcygpKTsKQEAgLTIxMyw4ICsyMTIsOCBAQCBib29sIEhvc3RSZWNvcmQ6OmxpbWl0c1JlcXVl
c3RzKFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5LCBTY2hlZHVsYWJsZUxvYWRlcgogICAg
IGlmIChtX2xvYWRlcnNJblByb2dyZXNzLnNpemUoKSA+IG1fbWF4UmVxdWVzdHNJbkZsaWdodCkg
ewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBtb3JlIGxvYWRlcnMgaW4g
cHJvZ3Jlc3MgdGhhbiB3ZSBzaG91bGQsIGF0IGxlYXN0IG9uZSBvZiB0aGVtIGhhZCBiZXR0ZXIg
YmUgc3luY2hyb25vdXMuCi0gICAgICAgIFNjaGVkdWxhYmxlTG9hZGVyU2V0OjppdGVyYXRvciBp
ID0gbV9sb2FkZXJzSW5Qcm9ncmVzcy5iZWdpbigpOwotICAgICAgICBTY2hlZHVsYWJsZUxvYWRl
clNldDo6aXRlcmF0b3IgZW5kID0gbV9sb2FkZXJzSW5Qcm9ncmVzcy5lbmQoKTsKKyAgICAgICAg
TmV0d29ya1Jlc291cmNlTG9hZGVyU2V0OjppdGVyYXRvciBpID0gbV9sb2FkZXJzSW5Qcm9ncmVz
cy5iZWdpbigpOworICAgICAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXJTZXQ6Oml0ZXJhdG9yIGVu
ZCA9IG1fbG9hZGVyc0luUHJvZ3Jlc3MuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpICE9IGVuZDsg
KytpKSB7CiAgICAgICAgICAgICBpZiAoaS0+Z2V0KCktPmlzU3luY2hyb25vdXMoKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0hvc3RSZWNvcmQuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNv
cmQuaAppbmRleCAwNTgyMDg5Li43ZTE4YzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvSG9zdFJlY29yZC5oCkBAIC0zNywxMCArMzcsOCBAQAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjsKLWNsYXNzIFNjaGVkdWxhYmxlTG9hZGVy
OwotY2xhc3MgU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcjsKIAotdHlwZWRlZiBEZXF1ZTxSZWZQ
dHI8U2NoZWR1bGFibGVMb2FkZXI+PiBMb2FkZXJRdWV1ZTsKK3R5cGVkZWYgRGVxdWU8UmVmUHRy
PE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4+IExvYWRlclF1ZXVlOwogdHlwZWRlZiB1aW50NjRfdCBS
ZXNvdXJjZUxvYWRJZGVudGlmaWVyOwogCiBjbGFzcyBIb3N0UmVjb3JkIDogcHVibGljIFJlZkNv
dW50ZWQ8SG9zdFJlY29yZD4gewpAQCAtNTQsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Y29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgCi0gICAg
dm9pZCBzY2hlZHVsZVJlc291cmNlTG9hZGVyKFBhc3NSZWZQdHI8U2NoZWR1bGFibGVMb2FkZXI+
KTsKLSAgICB2b2lkIGFkZExvYWRlckluUHJvZ3Jlc3MoU2NoZWR1bGFibGVMb2FkZXIqKTsKLSAg
ICB2b2lkIHJlbW92ZUxvYWRlcihTY2hlZHVsYWJsZUxvYWRlciopOworICAgIHZvaWQgc2NoZWR1
bGVSZXNvdXJjZUxvYWRlcihQYXNzUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4pOworICAg
IHZvaWQgYWRkTG9hZGVySW5Qcm9ncmVzcyhOZXR3b3JrUmVzb3VyY2VMb2FkZXIqKTsKKyAgICB2
b2lkIHJlbW92ZUxvYWRlcihOZXR3b3JrUmVzb3VyY2VMb2FkZXIqKTsKICAgICBib29sIGhhc1Jl
cXVlc3RzKCkgY29uc3Q7CiAgICAgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRQcmlvcml0eSk7CiAKQEAgLTY3LDEzICs2NSwxMyBAQCBwcml2YXRlOgogICAg
IEhvc3RSZWNvcmQoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQgbWF4UmVxdWVzdHNJbkZsaWdodCk7
CiAKICAgICB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzRm9yUXVldWUoTG9hZGVyUXVldWUmLCBX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSk7Ci0gICAgYm9vbCBsaW1pdHNSZXF1ZXN0cyhX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSwgU2NoZWR1bGFibGVMb2FkZXIqKSBjb25zdDsK
KyAgICBib29sIGxpbWl0c1JlcXVlc3RzKFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5LCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXIqKSBjb25zdDsKIAogICAgIExvYWRlclF1ZXVlIG1fbG9hZGVy
c1BlbmRpbmdbV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0ICsgMV07CiAgICAg
TG9hZGVyUXVldWUgbV9zeW5jTG9hZGVyc1BlbmRpbmc7CiAKLSAgICB0eXBlZGVmIEhhc2hTZXQ8
UmVmUHRyPFNjaGVkdWxhYmxlTG9hZGVyPj4gU2NoZWR1bGFibGVMb2FkZXJTZXQ7Ci0gICAgU2No
ZWR1bGFibGVMb2FkZXJTZXQgbV9sb2FkZXJzSW5Qcm9ncmVzczsKKyAgICB0eXBlZGVmIEhhc2hT
ZXQ8UmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4+IE5ldHdvcmtSZXNvdXJjZUxvYWRlclNl
dDsKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXJTZXQgbV9sb2FkZXJzSW5Qcm9ncmVzczsKIAog
ICAgIGNvbnN0IFN0cmluZyBtX25hbWU7CiAgICAgaW50IG1fbWF4UmVxdWVzdHNJbkZsaWdodDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCBiMjE4MTU0Li43ZTRlMDhkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAi
TmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVy
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgotI2luY2x1
ZGUgIlN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Jsb2JE
YXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmg+CkBAIC0xMDAsMTAgKzk5LDYgQEAgdm9p
ZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkQ2xvc2UoQ29yZUlQQzo6Q29ubmVj
dGlvbiopCiAgICAgZm9yIChIYXNoTWFwPFJlc291cmNlTG9hZElkZW50aWZpZXIsIFJlZlB0cjxO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI+Pjo6aXRlcmF0b3IgaSA9IG1fbmV0d29ya1Jlc291cmNlTG9h
ZGVycy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQogICAgICAgICBpLT52YWx1ZS0+YWJvcnQoKTsK
IAotICAgIEhhc2hNYXA8UmVzb3VyY2VMb2FkSWRlbnRpZmllciwgUmVmUHRyPFN5bmNOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI+Pjo6aXRlcmF0b3Igc3luY0VuZCA9IG1fc3luY05ldHdvcmtSZXNvdXJj
ZUxvYWRlcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPFJlc291cmNlTG9hZElkZW50aWZpZXIs
IFJlZlB0cjxTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyPj46Oml0ZXJhdG9yIGkgPSBtX3N5bmNO
ZXR3b3JrUmVzb3VyY2VMb2FkZXJzLmJlZ2luKCk7IGkgIT0gc3luY0VuZDsgKytpKQotICAgICAg
ICBpLT52YWx1ZS0+YWJvcnQoKTsKLQogICAgIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgp
LmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NEaWRDbG9zZSh0aGlzKTsKIAogICAgIG1fbmV0d29ya1Jl
c291cmNlTG9hZGVycy5jbGVhcigpOwpAQCAtMTI0LDE2ICsxMTksMTQgQEAgdm9pZCBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2NoZWR1bGVSZXNvdXJjZUxvYWQoY29uc3QgTmV0d29y
a1Jlc291cmNlTG8KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cGVyZm9y
bVN5bmNocm9ub3VzTG9hZChjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYgbG9h
ZFBhcmFtZXRlcnMsIFBhc3NSZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxheWVkUmVwbHk+IHJlcGx5KQogewot
ICAgIFJlZlB0cjxTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBTeW5jTmV0d29y
a1Jlc291cmNlTG9hZGVyOjpjcmVhdGUobG9hZFBhcmFtZXRlcnMsIHRoaXMsIHJlcGx5KTsKLSAg
ICBtX3N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXJzLmFkZChsb2FkUGFyYW1ldGVycy5pZGVudGlm
aWVyLCBsb2FkZXIpOworICAgIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGxvYWRQYXJhbWV0ZXJzLCB0aGlzLCByZXBs
eSk7CisgICAgbV9uZXR3b3JrUmVzb3VyY2VMb2FkZXJzLmFkZChsb2FkUGFyYW1ldGVycy5pZGVu
dGlmaWVyLCBsb2FkZXIpOwogICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVz
b3VyY2VMb2FkU2NoZWR1bGVyKCkuc2NoZWR1bGVMb2FkZXIobG9hZGVyLmdldCgpKTsKIH0KIAog
dm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVtb3ZlTG9hZElkZW50aWZpZXIo
UmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKQogewotICAgIFJlZlB0cjxTY2hlZHVs
YWJsZUxvYWRlcj4gbG9hZGVyID0gbV9uZXR3b3JrUmVzb3VyY2VMb2FkZXJzLnRha2UoaWRlbnRp
Zmllcik7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIGxvYWRlciA9IG1fc3luY05ldHdvcmtS
ZXNvdXJjZUxvYWRlcnMudGFrZShpZGVudGlmaWVyKTsKKyAgICBSZWZQdHI8TmV0d29ya1Jlc291
cmNlTG9hZGVyPiBsb2FkZXIgPSBtX25ldHdvcmtSZXNvdXJjZUxvYWRlcnMudGFrZShpZGVudGlm
aWVyKTsKIAogICAgIC8vIEl0J3MgcG9zc2libGUgd2UgaGF2ZSBubyBsb2FkZXIgZm9yIHRoaXMg
aWRlbnRpZmllciBpZiB0aGUgTmV0d29ya1Byb2Nlc3MgY3Jhc2hlZCBhbmQgdGhpcyB3YXMgYSBy
ZXNwYXduZWQgTmV0d29ya1Byb2Nlc3MuCiAgICAgaWYgKCFsb2FkZXIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaAppbmRleCBlNjMyMTU4Li5mMDYxMzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmgKQEAgLTkzLDcgKzkzLDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q29yZUlQQzo6Q29u
bmVjdGlvbj4gbV9jb25uZWN0aW9uOwogCiAgICAgSGFzaE1hcDxSZXNvdXJjZUxvYWRJZGVudGlm
aWVyLCBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPj4gbV9uZXR3b3JrUmVzb3VyY2VMb2Fk
ZXJzOwotICAgIEhhc2hNYXA8UmVzb3VyY2VMb2FkSWRlbnRpZmllciwgUmVmUHRyPFN5bmNOZXR3
b3JrUmVzb3VyY2VMb2FkZXI+PiBtX3N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXJzOwogCiAgICAg
Ym9vbCBtX3NlcmlhbExvYWRpbmdFbmFibGVkOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi41OWM5Y2YyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRlckNsaWVudC5oCkBAIC0wLDAgKzEsNjcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtMb2FkZXJDbGllbnRfaAorI2RlZmluZSBOZXR3
b3JrTG9hZGVyQ2xpZW50X2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKKyNpZiBF
TkFCTEUoTkVUV09SS19QUk9DRVNTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQcm90
ZWN0aW9uU3BhY2U7CitjbGFzcyBSZXNvdXJjZUVycm9yOworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0
OworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjsKKworY2xhc3Mg
TmV0d29ya0xvYWRlckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+TmV0d29ya0xvYWRl
ckNsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChOZXR3b3Jr
UmVzb3VyY2VMb2FkZXIqLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShOZXR3b3Jr
UmVzb3VyY2VMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShOZXR3b3JrUmVzb3VyY2VMb2FkZXIq
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlQnVmZmVyKE5ldHdvcmtSZXNvdXJjZUxvYWRlciosIFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlciosIGludCBlbmNvZGVkRGF0YUxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
aWRTZW5kRGF0YShOZXR3b3JrUmVzb3VyY2VMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0
ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoTmV0d29ya1Jlc291cmNlTG9hZGVyKiwgZG91
YmxlIGZpbmlzaFRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChOZXR3b3JrUmVz
b3VyY2VMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikgPSAwOwor
CisgICAgdmlydHVhbCBib29sIGlzU3luY2hyb25vdXMoKSB7IHJldHVybiBmYWxzZTsgfQorCitw
cm90ZWN0ZWQ6CisgICAgTmV0d29ya0xvYWRlckNsaWVudCgpIHsgfQorfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorCisjZW5k
aWYgLy8gTmV0d29ya0xvYWRlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggNmFmMTVkYi4uOTBmODkxZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAt
MzcsOCArMzcsOCBAQAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNpbmNs
dWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUmVz
b3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIlNjaGVkdWxhYmxlTG9hZGVyLmgiCiAjaW5jbHVkZSAiU3RhdGlzdGljc0RhdGEuaCIK
ICNpbmNsdWRlICJXZWJDb250ZXh0TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5h
Z2VyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IDlhZWJjYzYuLjkxODY5N2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC02LDcgKzYsNiBAQAogI2luY2x1ZGUg
Ik5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNsdWRlICJTeW5j
TmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTM3LDcgKzM2LDcgQEAgdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZChXZWJDb3JlOjpUaW1l
cjxOZXR3b3JrUmVzb3UKICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwogfQogCi12b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZGVyKFBhc3NSZWZQdHI8U2No
ZWR1bGFibGVMb2FkZXI+IGxvYWRlcikKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
cjo6c2NoZWR1bGVMb2FkZXIoUGFzc1JlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGxvYWRl
cikKIHsKICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSA9IGxvYWRlci0+cHJpb3Jp
dHkoKTsKICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCA9IGxvYWRl
ci0+cmVxdWVzdCgpOwpAQCAtNzUsNyArNzQsNyBAQCBIb3N0UmVjb3JkKiBOZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpob3N0Rm9yVVJMKGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwgQwog
ICAgIHJldHVybiBob3N0OwogfQogCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnJlbW92ZUxvYWRlcihTY2hlZHVsYWJsZUxvYWRlciogbG9hZGVyKQordm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmVMb2FkZXIoTmV0d29ya1Jlc291cmNlTG9hZGVyKiBs
b2FkZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobG9hZGVy
KTsKQEAgLTkzLDcgKzkyLDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpy
ZW1vdmVMb2FkZXIoU2NoZWR1bGFibGVMb2FkZXIqIGxvYWRlcikKICAgICBzY2hlZHVsZVNlcnZl
UGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
cjo6cmVjZWl2ZWRSZWRpcmVjdChTY2hlZHVsYWJsZUxvYWRlciogbG9hZGVyLCBjb25zdCBXZWJD
b3JlOjpLVVJMJiByZWRpcmVjdFVSTCkKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
cjo6cmVjZWl2ZWRSZWRpcmVjdChOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3Qg
V2ViQ29yZTo6S1VSTCYgcmVkaXJlY3RVUkwpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICIoTmV0d29ya1Byb2Nlc3MpIE5ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlY2VpdmVkUmVkaXJlY3QgbG9hZGVyIG9yaWdpbmFsbHkg
Zm9yICclcycgcmVkaXJlY3RlZCB0byAnJXMnIiwgbG9hZGVyLT5yZXF1ZXN0KCkudXJsKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgcmVkaXJlY3RVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CkBAIC0xNDgsNyArMTQ3LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpy
ZW1vdmVTY2hlZHVsZWRMb2FkZXJzKHZvaWQqIGNvbnRleHQpCiAKIHZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlU2NoZWR1bGVkTG9hZGVycygpCiB7Ci0gICAgVmVjdG9y
PFJlZlB0cjxTY2hlZHVsYWJsZUxvYWRlcj4+IGxvYWRlcnNUb1JlbW92ZTsKKyAgICBWZWN0b3I8
UmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4+IGxvYWRlcnNUb1JlbW92ZTsKICAgICB7CiAg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvYWRlcnNUb1JlbW92ZU11dGV4KTsKICAgICAg
ICAgbG9hZGVyc1RvUmVtb3ZlID0gbV9sb2FkZXJzVG9SZW1vdmU7CkBAIC0xNjAsNyArMTU5LDcg
QEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmVTY2hlZHVsZWRMb2Fk
ZXJzKCkKICAgICAgICAgcmVtb3ZlTG9hZGVyKGxvYWRlcnNUb1JlbW92ZVtpXS5nZXQoKSk7CiB9
CiAKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVSZW1vdmVMb2Fk
ZXIoU2NoZWR1bGFibGVMb2FkZXIqIGxvYWRlcikKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlcjo6c2NoZWR1bGVSZW1vdmVMb2FkZXIoTmV0d29ya1Jlc291cmNlTG9hZGVyKiBsb2Fk
ZXIpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9hZGVyc1RvUmVtb3ZlTXV0ZXgpOwog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jl
c291cmNlTG9hZFNjaGVkdWxlci5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oCmluZGV4IGRmZTcxMDIuLmZiNDEwMjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmgKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgS1VSTDsKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBIb3N0UmVjb3JkOwotY2xhc3MgU2NoZWR1bGFibGVMb2Fk
ZXI7CitjbGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkZXI7CiAKIGNsYXNzIE5ldHdvcmtSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5ldHdvcmtSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTUwLDE1ICs1MCwx
NSBAQCBwdWJsaWM6CiAgICAgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpOwogICAgIAog
ICAgIC8vIEFkZHMgdGhlIHJlcXVlc3QgdG8gdGhlIHF1ZXVlIGZvciBpdHMgaG9zdC4KLSAgICB2
b2lkIHNjaGVkdWxlTG9hZGVyKFBhc3NSZWZQdHI8U2NoZWR1bGFibGVMb2FkZXI+KTsKKyAgICB2
b2lkIHNjaGVkdWxlTG9hZGVyKFBhc3NSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPik7CiAK
ICAgICAvLyBDYWxsZWQgYnkgdGhlIFdlYlByb2Nlc3Mgd2hlbiBhIFJlc291cmNlTG9hZGVyIGlz
IGJlaW5nIGNsZWFuZWQgdXAuCi0gICAgdm9pZCByZW1vdmVMb2FkZXIoU2NoZWR1bGFibGVMb2Fk
ZXIqKTsKKyAgICB2b2lkIHJlbW92ZUxvYWRlcihOZXR3b3JrUmVzb3VyY2VMb2FkZXIqKTsKIAog
ICAgIC8vIENhbGxlZCB3aXRoaW4gdGhlIE5ldHdvcmtQcm9jZXNzIG9uIGEgYmFja2dyb3VuZCB0
aHJlYWQgd2hlbiBhIHJlc291cmNlIGxvYWQgaGFzIGZpbmlzaGVkLgotICAgIHZvaWQgc2NoZWR1
bGVSZW1vdmVMb2FkZXIoU2NoZWR1bGFibGVMb2FkZXIqKTsKKyAgICB2b2lkIHNjaGVkdWxlUmVt
b3ZlTG9hZGVyKE5ldHdvcmtSZXNvdXJjZUxvYWRlciopOwogCi0gICAgdm9pZCByZWNlaXZlZFJl
ZGlyZWN0KFNjaGVkdWxhYmxlTG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcmVkaXJlY3RV
UkwpOworICAgIHZvaWQgcmVjZWl2ZWRSZWRpcmVjdChOZXR3b3JrUmVzb3VyY2VMb2FkZXIqLCBj
b25zdCBXZWJDb3JlOjpLVVJMJiByZWRpcmVjdFVSTCk7CiAgICAgdm9pZCBzZXJ2ZVBlbmRpbmdS
ZXF1ZXN0cyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSA9IFdlYkNvcmU6OlJlc291cmNl
TG9hZFByaW9yaXR5VmVyeUxvdyk7CiAKICAgICAvLyBGb3IgTmV0d29ya1Byb2Nlc3Mgc3RhdGlz
dGljcyByZXBvcnRpbmcuCkBAIC04Niw4ICs4Niw4IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgUmVmUHRyPEhvc3RSZWNvcmQ+LCBTdHJpbmdIYXNoPiBIb3N0TWFwOwog
ICAgIEhvc3RNYXAgbV9ob3N0czsKIAotICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8U2NoZWR1
bGFibGVMb2FkZXI+PiBTY2hlZHVsYWJsZUxvYWRlclNldDsKLSAgICBTY2hlZHVsYWJsZUxvYWRl
clNldCBtX2xvYWRlcnM7CisgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI+PiBOZXR3b3JrUmVzb3VyY2VMb2FkZXJTZXQ7CisgICAgTmV0d29ya1Jlc291cmNl
TG9hZGVyU2V0IG1fbG9hZGVyczsKIAogICAgIFJlZlB0cjxIb3N0UmVjb3JkPiBtX25vbkhUVFBQ
cm90b2NvbEhvc3Q7CiAKQEAgLTk2LDcgKzk2LDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpU
aW1lcjxOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyPiBtX3JlcXVlc3RUaW1lcjsKICAgICAK
ICAgICBNdXRleCBtX2xvYWRlcnNUb1JlbW92ZU11dGV4OwotICAgIFZlY3RvcjxSZWZQdHI8U2No
ZWR1bGFibGVMb2FkZXI+PiBtX2xvYWRlcnNUb1JlbW92ZTsKKyAgICBWZWN0b3I8UmVmUHRyPE5l
dHdvcmtSZXNvdXJjZUxvYWRlcj4+IG1fbG9hZGVyc1RvUmVtb3ZlOwogCiAgICAgdW5zaWduZWQg
bV9tYXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAppbmRleCA1YWQx
MmQzLi45MWU0NGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTI4LDkgKzI4LDExIEBACiAKICNpZiBF
TkFCTEUoTkVUV09SS19QUk9DRVNTKQogCisjaW5jbHVkZSAiQXN5bmNocm9ub3VzTmV0d29ya0xv
YWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIgogI2luY2x1
ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0
d29ya0Jsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIgpAQCAtMzksMzEgKzQxLDgzIEBACiAjaW5jbHVkZSAi
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5o
IgogI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUgIlN5bmNocm9ub3VzTmV0d29y
a0xvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2lu
Y2x1ZGUgIldlYkVycm9ycy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZGVyTWVzc2FnZXMu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZUJ1ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4K
LSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLU5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVyKGNvbnN0IE5ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBsb2FkUGFyYW1ldGVycywgTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24pCi0gICAgOiBTY2hlZHVsYWJsZUxvYWRlcihsb2FkUGFy
YW1ldGVycywgY29ubmVjdGlvbikKLSAgICAsIG1fYnl0ZXNSZWNlaXZlZCgwKQorTmV0d29ya1Jl
c291cmNlTG9hZGVyOjpOZXR3b3JrUmVzb3VyY2VMb2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
KiBjb25uZWN0aW9uLCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6RGVsYXllZFJlcGx5PiByZXBseSkKKyAg
ICA6IG1fYnl0ZXNSZWNlaXZlZCgwKQogICAgICwgbV9oYW5kbGVDb252ZXJ0ZWRUb0Rvd25sb2Fk
KGZhbHNlKQorICAgICwgbV9pZGVudGlmaWVyKHBhcmFtZXRlcnMuaWRlbnRpZmllcikKKyAgICAs
IG1fd2ViUGFnZUlEKHBhcmFtZXRlcnMud2ViUGFnZUlEKQorICAgICwgbV93ZWJGcmFtZUlEKHBh
cmFtZXRlcnMud2ViRnJhbWVJRCkKKyAgICAsIG1fcmVxdWVzdChwYXJhbWV0ZXJzLnJlcXVlc3Qp
CisgICAgLCBtX3ByaW9yaXR5KHBhcmFtZXRlcnMucHJpb3JpdHkpCisgICAgLCBtX2NvbnRlbnRT
bmlmZmluZ1BvbGljeShwYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSkKKyAgICAsIG1f
YWxsb3dTdG9yZWRDcmVkZW50aWFscyhwYXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3JlZGVudGlhbHMp
CisgICAgLCBtX2NsaWVudENyZWRlbnRpYWxQb2xpY3kocGFyYW1ldGVycy5jbGllbnRDcmVkZW50
aWFsUG9saWN5KQorICAgICwgbV9pblByaXZhdGVCcm93c2luZ01vZGUocGFyYW1ldGVycy5pblBy
aXZhdGVCcm93c2luZ01vZGUpCisgICAgLCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9I
VFRQUmVkaXJlY3QocGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJl
ZGlyZWN0KQorICAgICwgbV9pc0xvYWRpbmdNYWluUmVzb3VyY2UocGFyYW1ldGVycy5pc01haW5S
ZXNvdXJjZSkKKyAgICAsIG1fc2FuZGJveEV4dGVuc2lvbnNBcmVDb25zdW1lZChmYWxzZSkKKyAg
ICAsIG1fY29ubmVjdGlvbihjb25uZWN0aW9uKQogeworICAgIC8vIEVpdGhlciB0aGlzIGxvYWRl
ciBoYXMgYm90aCBhIHdlYlBhZ2VJRCBhbmQgd2ViRnJhbWVJRCwgb3IgaXQgaXMgbm90IGFsbG93
ZWQgdG8gYXNrIHRoZSBjbGllbnQgZm9yIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzLgorICAg
IC8vIEZJWE1FOiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIHRoZSBleGlzdGVuY2Ugb2Yg
RW1wdHlGcmFtZUxvYWRlckNsaWVudCBpbiBXZWJDb3JlLgorICAgIC8vICAgICAgICBPbmNlIGJ1
ZyAxMTYyMzMgaXMgcmVzb2x2ZWQsIHRoaXMgQVNTRVJUIGNhbiBqdXN0IGJlICJtX3dlYlBhZ2VJ
RCAmJiBtX3dlYkZyYW1lSUQiCisgICAgQVNTRVJUKChtX3dlYlBhZ2VJRCAmJiBtX3dlYkZyYW1l
SUQpIHx8IG1fY2xpZW50Q3JlZGVudGlhbFBvbGljeSA9PSBEb05vdEFza0NsaWVudEZvckFueUNy
ZWRlbnRpYWxzKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IHBhcmFtZXRlcnMu
cmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9ucy5zaXplKCk7IGkgPCBjb3VudDsgKytpKSB7Cisg
ICAgICAgIGlmIChSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gZXh0ZW5zaW9uID0gU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlKHBhcmFtZXRlcnMucmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uc1tp
XSkpCisgICAgICAgICAgICBtX3JlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnMuYXBwZW5kKGV4
dGVuc2lvbik7CisgICAgfQorCisjaWYgRU5BQkxFKEJMT0IpCisgICAgaWYgKG1fcmVxdWVzdC5o
dHRwQm9keSgpKSB7CisgICAgICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+JiBlbGVt
ZW50cyA9IG1fcmVxdWVzdC5odHRwQm9keSgpLT5lbGVtZW50cygpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMCwgY291bnQgPSBlbGVtZW50cy5zaXplKCk7IGkgPCBjb3VudDsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0ubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZW5j
b2RlZEJsb2IpIHsKKyAgICAgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNp
b24+PiBibG9iRWxlbWVudEV4dGVuc2lvbnMgPSBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQo
KS5zYW5kYm94RXh0ZW5zaW9ucyhlbGVtZW50c1tpXS5tX3VybCk7CisgICAgICAgICAgICAgICAg
bV9yZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zLmFwcGVuZFZlY3RvcihibG9iRWxlbWVudEV4
dGVuc2lvbnMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1f
cmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJibG9iIikpIHsKKyAgICAgICAgQVNTRVJUKCFTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGUocGFyYW1ldGVycy5yZXNvdXJjZVNhbmRib3hFeHRlbnNpb24p
KTsKKyAgICAgICAgbV9yZXNvdXJjZVNhbmRib3hFeHRlbnNpb25zID0gTmV0d29ya0Jsb2JSZWdp
c3RyeTo6c2hhcmVkKCkuc2FuZGJveEV4dGVuc2lvbnMobV9yZXF1ZXN0LnVybCgpKTsKKyAgICB9
IGVsc2UKKyNlbmRpZgorICAgIGlmIChSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gcmVzb3VyY2VT
YW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlKHBhcmFtZXRlcnMucmVz
b3VyY2VTYW5kYm94RXh0ZW5zaW9uKSkKKyAgICAgICAgbV9yZXNvdXJjZVNhbmRib3hFeHRlbnNp
b25zLmFwcGVuZChyZXNvdXJjZVNhbmRib3hFeHRlbnNpb24pOworCiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICAKKyAgICBpZiAocmVwbHkpCisgICAgICAgIG1fbmV0d29ya0xvYWRl
ckNsaWVudCA9IFN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6Y3JlYXRlKG1fcmVxdWVz
dCwgcmVwbHkpOworICAgIGVsc2UKKyAgICAgICAgbV9uZXR3b3JrTG9hZGVyQ2xpZW50ID0gQXN5
bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6Y3JlYXRlKCk7CiB9CiAKIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6fk5ldHdvcmtSZXNvdXJjZUxvYWRlcigpCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKICAgICBBU1NFUlQoIW1faGFuZGxlKTsKKyAgICBBU1NFUlQoIW1faG9zdFJl
Y29yZCk7Cit9CisKK2Jvb2wgTmV0d29ya1Jlc291cmNlTG9hZGVyOjppc1N5bmNocm9ub3VzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3JrTG9hZGVyQ2xpZW50LT5pc1N5bmNocm9ub3Vz
KCk7CiB9CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCgpCkBAIC03NCwxMiAr
MTI4LDEyIEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCgpCiAgICAgcmVmKCk7
CiAgICAgCiAgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogQ3JlYXRlIFJlbW90ZU5ldHdv
cmtpbmdDb250ZXh0IHdpdGggYWN0dWFsIHNldHRpbmdzLgotICAgIG1fbmV0d29ya2luZ0NvbnRl
eHQgPSBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZhbHNlLCBmYWxzZSwgaW5Qcml2
YXRlQnJvd3NpbmdNb2RlKCksIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJl
Y3QoKSk7CisgICAgbV9uZXR3b3JraW5nQ29udGV4dCA9IFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0
OjpjcmVhdGUoZmFsc2UsIGZhbHNlLCBtX2luUHJpdmF0ZUJyb3dzaW5nTW9kZSwgbV9zaG91bGRD
bGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKIAogICAgIGNvbnN1bWVTYW5kYm94
RXh0ZW5zaW9ucygpOwogCiAgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogUGFzcyBhbiBh
Y3R1YWwgdmFsdWUgZm9yIGRlZmVyc0xvYWRpbmcKLSAgICBtX2hhbmRsZSA9IFJlc291cmNlSGFu
ZGxlOjpjcmVhdGUobV9uZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgcmVxdWVzdCgpLCB0aGlzLCBm
YWxzZSAvKiBkZWZlcnNMb2FkaW5nICovLCBjb250ZW50U25pZmZpbmdQb2xpY3koKSA9PSBTbmlm
ZkNvbnRlbnQpOworICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShtX25ldHdv
cmtpbmdDb250ZXh0LmdldCgpLCBtX3JlcXVlc3QsIHRoaXMsIGZhbHNlIC8qIGRlZmVyc0xvYWRp
bmcgKi8sIG1fY29udGVudFNuaWZmaW5nUG9saWN5ID09IFNuaWZmQ29udGVudCk7CiB9CiAKIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjbGVhbnVwKCkKQEAgLTEwMiwxNCArMTU2LDYgQEAg
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNsZWFudXAoKQogICAgIH0KIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVT4gYm9vbCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNlbmRBYm9ydGluZ09u
RmFpbHVyZShjb25zdCBVJiBtZXNzYWdlLCB1bnNpZ25lZCBtZXNzYWdlU2VuZEZsYWdzKQotewot
ICAgIGJvb2wgcmVzdWx0ID0gbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKS0+c2VuZChtZXNzYWdl
LCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpLCBtZXNzYWdlU2VuZEZsYWdzKTsKLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgYWJvcnQoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiB2
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ29udmVydEhhbmRsZVRvRG93bmxvYWQoKQog
ewogICAgIEFTU0VSVChtX2hhbmRsZSk7CkBAIC0xMzQsMTMgKzE4MCwxMyBAQCB2b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSwgY29ucwogICAgIGlmIChGb3JtRGF0YSogZm9ybURhdGEgPSByZXF1ZXN0KCkuaHR0
cEJvZHkoKSkKICAgICAgICAgZm9ybURhdGEtPnJlbW92ZUdlbmVyYXRlZEZpbGVzSWZOZWVkZWQo
KTsKIAotICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2Fk
ZXI6OkRpZFJlY2VpdmVSZXNwb25zZVdpdGhDZXJ0aWZpY2F0ZUluZm8ocmVzcG9uc2UsIFBsYXRm
b3JtQ2VydGlmaWNhdGVJbmZvKHJlc3BvbnNlKSwgaXNMb2FkaW5nTWFpblJlc291cmNlKCkpKTsK
KyAgICBtX25ldHdvcmtMb2FkZXJDbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCByZXNw
b25zZSk7CiAKICAgICAvLyBtX2hhbmRsZSB3aWxsIGJlIDAgaWYgdGhlIHJlcXVlc3QgZ290IGFi
b3J0ZWQgYWJvdmUuCiAgICAgaWYgKCFtX2hhbmRsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKCFpc0xvYWRpbmdNYWluUmVzb3VyY2UoKSkgeworICAgIGlmICghbV9pc0xvYWRpbmdNYWlu
UmVzb3VyY2UpIHsKICAgICAgICAgLy8gRm9yIG1haW4gcmVzb3VyY2VzLCB0aGUgd2ViIHByb2Nl
c3MgaXMgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgYmFjayBhIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6Q29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgbWVzc2FnZS4KICAgICAgICAgbV9oYW5kbGUt
PmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiAgICAgfQpAQCAtMTYxLDMwICsyMDcsMTUg
QEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVCdWZmZXIoUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSwgUGFzc1JlZlB0cjwKICAgICAvLyBTdWNoIGJ1ZmZlcmluZyB3aWxsIG5l
ZWQgdG8gYmUgdGhyZWFkIHNhZmUsIGFzIHRoaXMgY2FsbGJhY2sgaXMgaGFwcGVuaW5nIG9uIGEg
YmFja2dyb3VuZCB0aHJlYWQuCiAgICAgCiAgICAgbV9ieXRlc1JlY2VpdmVkICs9IGJ1ZmZlci0+
c2l6ZSgpOwotICAgIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5
MAotICAgIFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUgc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGU7
Ci0gICAgdHJ5R2V0U2hhcmVhYmxlSGFuZGxlRnJvbVNoYXJlZEJ1ZmZlcihzaGFyZWFibGVSZXNv
dXJjZUhhbmRsZSwgYnVmZmVyLmdldCgpKTsKLSAgICBpZiAoIXNoYXJlYWJsZVJlc291cmNlSGFu
ZGxlLmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIFNpbmNlIHdlJ3JlIGRlbGl2ZXJpbmcgdGhpcyBy
ZXNvdXJjZSBieSBvdXJzZWx2ZXMgYWxsIGF0IG9uY2UsIHdlJ2xsIGFib3J0IHRoZSByZXNvdXJj
ZSBoYW5kbGUgc2luY2Ugd2UgZG9uJ3QgbmVlZCBhbnltb3JlIGNhbGxiYWNrcyBmcm9tIFJlc291
cmNlSGFuZGxlLgotICAgICAgICBhYm9ydCgpOwotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJS
ZXNvdXJjZUxvYWRlcjo6RGlkUmVjZWl2ZVJlc291cmNlKHNoYXJlYWJsZVJlc291cmNlSGFuZGxl
LCBjdXJyZW50VGltZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYgLy8gX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi0KLSAgICBDb3JlSVBDOjpEYXRh
UmVmZXJlbmNlIGRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
YnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPnNpemUoKSk7Ci0gICAgc2VuZEFib3J0aW5nT25GYWls
dXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkUmVjZWl2ZURhdGEoZGF0YVJlZmVy
ZW5jZSwgZW5jb2RlZERhdGFMZW5ndGgpKTsKKyAgICBtX25ldHdvcmtMb2FkZXJDbGllbnQtPmRp
ZFJlY2VpdmVCdWZmZXIodGhpcywgYnVmZmVyLmdldCgpLCBlbmNvZGVkRGF0YUxlbmd0aCk7CiB9
CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUsIGRvdWJsZSBmaW5pc2hUaW1lKQogewogICAgIEFTU0VSVF9VTlVTRUQo
aGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwogCi0gICAgLy8gRklYTUUgKE5ldHdvcmtQcm9j
ZXNzKTogRm9yIHRoZSBtZW1vcnkgY2FjaGUgd2UnbGwgbmVlZCB0byB1cGRhdGUgdGhlIGZpbmlz
aGVkIHN0YXR1cyBvZiB0aGUgY2FjaGVkIHJlc291cmNlIGhlcmUuCi0gICAgLy8gU3VjaCBib29r
a2VlcGluZyB3aWxsIG5lZWQgdG8gYmUgdGhyZWFkIHNhZmUsIGFzIHRoaXMgY2FsbGJhY2sgaXMg
aGFwcGVuaW5nIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQuCi0gICAgc2VuZChNZXNzYWdlczo6V2Vi
UmVzb3VyY2VMb2FkZXI6OkRpZEZpbmlzaFJlc291cmNlTG9hZChmaW5pc2hUaW1lKSk7Ci0gICAg
CisgICAgbV9uZXR3b3JrTG9hZGVyQ2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMsIGZpbmlz
aFRpbWUpOworCiAgICAgY2xlYW51cCgpOwogfQogCkBAIC0xOTIsOSArMjIzLDggQEAgdm9pZCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29u
c3QgUmVzb3VyY2VFcnJvciYKIHsKICAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09
IG1faGFuZGxlKTsKIAotICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IEZvciB0aGUgbWVt
b3J5IGNhY2hlIHdlJ2xsIG5lZWQgdG8gdXBkYXRlIHRoZSBmaW5pc2hlZCBzdGF0dXMgb2YgdGhl
IGNhY2hlZCByZXNvdXJjZSBoZXJlLgotICAgIC8vIFN1Y2ggYm9va2tlZXBpbmcgd2lsbCBuZWVk
IHRvIGJlIHRocmVhZCBzYWZlLCBhcyB0aGlzIGNhbGxiYWNrIGlzIGhhcHBlbmluZyBvbiBhIGJh
Y2tncm91bmQgdGhyZWFkLgotICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpE
aWRGYWlsUmVzb3VyY2VMb2FkKGVycm9yKSk7CisgICAgbV9uZXR3b3JrTG9hZGVyQ2xpZW50LT5k
aWRGYWlsKHRoaXMsIGVycm9yKTsKKwogICAgIGNsZWFudXAoKTsKIH0KIApAQCAtMjA2LDExICsy
MzYsMTAgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEFzeW5j
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFIKICAgICBBU1NFUlQoIXJlZGlyZWN0UmVz
cG9uc2UuaXNOdWxsKCkpOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKKyAgICBSZXNv
dXJjZVJlcXVlc3QgcHJvcG9zZWRSZXF1ZXN0ID0gcmVxdWVzdDsKICAgICBtX3N1Z2dlc3RlZFJl
cXVlc3RGb3JXaWxsU2VuZFJlcXVlc3QgPSByZXF1ZXN0OwogCi0gICAgLy8gVGhpcyBtZXNzYWdl
IGlzIERpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSB0byBhdm9pZCBh
IHNpdHVhdGlvbiB3aGVyZSB0aGUgTmV0d29ya1Byb2Nlc3MgaXMgZGVhZGxvY2tlZCB3YWl0aW5n
IGZvciA2IGNvbm5lY3Rpb25zCi0gICAgLy8gdG8gY29tcGxldGUgd2hpbGUgdGhlIFdlYlByb2Nl
c3MgaXMgd2FpdGluZyBmb3IgYSA3dGggdG8gY29tcGxldGUuCi0gICAgc2VuZEFib3J0aW5nT25G
YWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6V2lsbFNlbmRSZXF1ZXN0KHJlcXVl
c3QsIHJlZGlyZWN0UmVzcG9uc2UpLCBDb3JlSVBDOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldh
aXRpbmdGb3JTeW5jUmVwbHkpOworICAgIG1fbmV0d29ya0xvYWRlckNsaWVudC0+d2lsbFNlbmRS
ZXF1ZXN0KHRoaXMsIHByb3Bvc2VkUmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiB9CiAKIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QpCkBAIC0yMTgsOSArMjQ3LDE2IEBAIHZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIG5ld1JlCiAgICAgbV9zdWdnZXN0ZWRSZXF1ZXN0Rm9yV2lsbFNlbmRSZXF1ZXN0
LnVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRIVFRQQm9keShuZXdSZXF1ZXN0Lm5zVVJM
UmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSk7CiAKICAgICBSdW5Mb29wOjptYWluKCktPmRp
c3BhdGNoKGJpbmQoJk5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlY2VpdmVkUmVkaXJl
Y3QsICZOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
cigpLCB0aGlzLCBtX3N1Z2dlc3RlZFJlcXVlc3RGb3JXaWxsU2VuZFJlcXVlc3QudXJsKCkpKTsK
LSAgICBtX2hhbmRsZS0+Y29udGludWVXaWxsU2VuZFJlcXVlc3QobV9zdWdnZXN0ZWRSZXF1ZXN0
Rm9yV2lsbFNlbmRSZXF1ZXN0KTsKIAorICAgIG1fcmVxdWVzdCA9IG1fc3VnZ2VzdGVkUmVxdWVz
dEZvcldpbGxTZW5kUmVxdWVzdDsKICAgICBtX3N1Z2dlc3RlZFJlcXVlc3RGb3JXaWxsU2VuZFJl
cXVlc3QgPSBSZXNvdXJjZVJlcXVlc3QoKTsKKworICAgIG1faGFuZGxlLT5jb250aW51ZVdpbGxT
ZW5kUmVxdWVzdChtX3JlcXVlc3QpOworCisgICAgaWYgKG1fcmVxdWVzdC5pc051bGwoKSkgewor
ICAgICAgICBtX2hhbmRsZS0+Y2FuY2VsKCk7CisgICAgICAgIGRpZEZhaWwobV9oYW5kbGUuZ2V0
KCksIGNhbmNlbGxlZEVycm9yKG1fcmVxdWVzdCkpOworICAgIH0KIH0KIAogdm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkKQEAgLTIzNyw3ICsy
NzMsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkU2VuZERhdGEoUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSwgdW5zaWduZWQgbG9uZyBsbwogewogICAgIEFTU0VSVF9VTlVTRUQoaGFu
ZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwogCi0gICAgc2VuZChNZXNzYWdlczo6V2ViUmVzb3Vy
Y2VMb2FkZXI6OkRpZFNlbmREYXRhKGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KSk7Cisg
ICAgbV9uZXR3b3JrTG9hZGVyQ2xpZW50LT5kaWRTZW5kRGF0YSh0aGlzLCBieXRlc1NlbnQsIHRv
dGFsQnl0ZXNUb0JlU2VudCk7CiB9CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3YXNC
bG9ja2VkKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCkBAIC0yNjMsNyArMjk5LDcgQEAgYm9vbCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUpCiAKICAgICAvLyBXZSBzdGlsbCBuZWVkIHRoaXMgc3luYyB2ZXJzaW9u
LCBiZWNhdXNlIFJlc291cmNlSGFuZGxlIGl0c2VsZiB1c2VzIGl0IGludGVybmFsbHksIGV2ZW4g
d2hlbiB0aGUgZGVsZWdhdGUgdXNlcyBhbiBhc3luYyBvbmUuCiAKLSAgICByZXR1cm4gYWxsb3dT
dG9yZWRDcmVkZW50aWFscygpID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisgICAgcmV0dXJu
IG1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwogfQog
CiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2VB
c3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQpAQCAtMjgwLDEyICszMTYsMTIgQEAgdm9pZCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShS
ZXNvdXJjZUhhbmRsZSogaGEKICAgICAvLyBGSVhNRSAoaHR0cDovL3dlYmtpdC5vcmcvYi8xMTUy
OTEpOiBTaW5jZSB3ZSBnbyBzdHJhaWdodCB0byB0aGUgVUkgcHJvY2VzcyBmb3IgYXV0aGVudGlj
YXRpb24gd2UgZG9uJ3QgZ2V0IFdlYkNvcmUncwogICAgIC8vIGNyb3NzLW9yaWdpbiBjaGVjayBi
ZWZvcmUgYXNraW5nIHRoZSBjbGllbnQgZm9yIGNyZWRlbnRpYWxzLgogICAgIC8vIFRoZXJlZm9y
ZSB3ZSBhcmUgdG9vIHBlcm1pc3NpdmUgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIENsaWVudENyZWRl
bnRpYWxQb2xpY3kgaXMgRG9Ob3RBc2tDbGllbnRGb3JDcm9zc09yaWdpbkNyZWRlbnRpYWxzLgot
ICAgIGlmIChjbGllbnRDcmVkZW50aWFsUG9saWN5KCkgPT0gRG9Ob3RBc2tDbGllbnRGb3JBbnlD
cmVkZW50aWFscykgeworICAgIGlmIChtX2NsaWVudENyZWRlbnRpYWxQb2xpY3kgPT0gRG9Ob3RB
c2tDbGllbnRGb3JBbnlDcmVkZW50aWFscykgewogICAgICAgICBjaGFsbGVuZ2UuYXV0aGVudGlj
YXRpb25DbGllbnQoKS0+cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFs
KGNoYWxsZW5nZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBOZXR3b3JrUHJvY2Vz
czo6c2hhcmVkKCkuYXV0aGVudGljYXRpb25NYW5hZ2VyKCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKHdlYlBhZ2VJRCgpLCB3ZWJGcmFtZUlEKCksIGNoYWxsZW5nZSk7CisgICAg
TmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLmF1dGhlbnRpY2F0aW9uTWFuYWdlcigpLmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShtX3dlYlBhZ2VJRCwgbV93ZWJGcmFtZUlELCBjaGFs
bGVuZ2UpOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ2FuY2VsQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKQEAgLTMwMSw5ICszMzcsMzAgQEAgQ29yZUlQQzo6
Q29ubmVjdGlvbiogTmV0d29ya1Jlc291cmNlTG9hZGVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlv
bigpCiAgICAgcmV0dXJuIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKS0+Y29ubmVjdGlvbigpOwog
fQogCi11aW50NjRfdCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEKCkKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjb25zdW1lU2FuZGJveEV4dGVu
c2lvbnMoKQogewotICAgIHJldHVybiBpZGVudGlmaWVyKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDAsIGNvdW50ID0gbV9yZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zLnNpemUoKTsgaSA8IGNv
dW50OyArK2kpCisgICAgICAgIG1fcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uc1tpXS0+Y29u
c3VtZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0gbV9yZXNvdXJjZVNhbmRi
b3hFeHRlbnNpb25zLnNpemUoKTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIG1fcmVzb3VyY2VT
YW5kYm94RXh0ZW5zaW9uc1tpXS0+Y29uc3VtZSgpOworCisgICAgbV9zYW5kYm94RXh0ZW5zaW9u
c0FyZUNvbnN1bWVkID0gdHJ1ZTsKK30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Omlu
dmFsaWRhdGVTYW5kYm94RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKG1fc2FuZGJveEV4dGVuc2lv
bnNBcmVDb25zdW1lZCkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSBtX3Jl
cXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnMuc2l6ZSgpOyBpIDwgY291bnQ7ICsraSkKKyAgICAg
ICAgICAgIG1fcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uc1tpXS0+cmV2b2tlKCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IG1fcmVzb3VyY2VTYW5kYm94RXh0ZW5zaW9u
cy5zaXplKCk7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgbV9yZXNvdXJjZVNhbmRib3hF
eHRlbnNpb25zW2ldLT5yZXZva2UoKTsKKyAgICB9CisKKyAgICBtX3JlcXVlc3RCb2R5U2FuZGJv
eEV4dGVuc2lvbnMuY2xlYXIoKTsKKyAgICBtX3Jlc291cmNlU2FuZGJveEV4dGVuc2lvbnMuY2xl
YXIoKTsKKworICAgIG1fc2FuZGJveEV4dGVuc2lvbnNBcmVDb25zdW1lZCA9IGZhbHNlOwogfQog
CiAjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKQEAgLTMxMiw5ICszNjks
NyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFBy
b3RlY3Rpb25TcGFjZUFzeW5jKFJlc291cmNlSAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7CiAKLSAgICAv
LyBUaGlzIG1lc3NhZ2UgaXMgRGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1Jl
cGx5IHRvIGF2b2lkIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBOZXR3b3JrUHJvY2VzcyBpcyBkZWFk
bG9ja2VkCi0gICAgLy8gd2FpdGluZyBmb3IgNiBjb25uZWN0aW9ucyB0byBjb21wbGV0ZSB3aGls
ZSB0aGUgV2ViUHJvY2VzcyBpcyB3YWl0aW5nIGZvciBhIDd0aCB0byBjb21wbGV0ZS4KLSAgICBz
ZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpDYW5BdXRo
ZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rpb25TcGFjZSksIENvcmVJUEM6
OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgbV9uZXR3
b3JrTG9hZGVyQ2xpZW50LT5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKHRo
aXMsIHByb3RlY3Rpb25TcGFjZSk7CiB9CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpj
b250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCByZXN1bHQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRlci5oCmluZGV4IDc5OGNjY2YuLmZiOWYzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCkBAIC0yOCwxMSAr
MjgsMTUgQEAKIAogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCiAKKyNpbmNsdWRlICJIb3N0
UmVjb3JkLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgotI2luY2x1ZGUgIlNjaGVkdWxh
YmxlTG9hZGVyLmgiCisjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNz
YWdlcy5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZVJlc291cmNlLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZUhhbmRsZUNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2Fk
ZXJPcHRpb25zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiB0
eXBlZGVmIGNvbnN0IHN0cnVjdCBfQ0ZDYWNoZWRVUkxSZXNwb25zZSogQ0ZDYWNoZWRVUkxSZXNw
b25zZVJlZjsKIApAQCAtNDUsMjIgKzQ5LDM0IEBAIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzczsK
K2NsYXNzIE5ldHdvcmtMb2FkZXJDbGllbnQ7CitjbGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkUGFy
YW1ldGVyczsKIGNsYXNzIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OworY2xhc3MgU2FuZGJveEV4
dGVuc2lvbjsKIAotY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZGVyIDogcHVibGljIFNjaGVkdWxh
YmxlTG9hZGVyLCBwdWJsaWMgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQsIHB1YmxpYyBD
b3JlSVBDOjpNZXNzYWdlU2VuZGVyIHsKK2NsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlciA6IHB1
YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4sIHB1YmxpYyBXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZUNsaWVudCwgcHVibGljIENvcmVJUEM6Ok1lc3NhZ2VTZW5kZXIgewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBjcmVhdGUoY29u
c3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIE5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBOZXR3b3JrUmVzb3VyY2VMb2FkZXIocGFyYW1ldGVycywgY29ubmVjdGlvbikp
OworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5ldHdvcmtSZXNvdXJjZUxvYWRlcihwYXJh
bWV0ZXJzLCBjb25uZWN0aW9uLCBudWxscHRyKSk7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBS
ZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBjcmVhdGUoY29uc3QgTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
KiBjb25uZWN0aW9uLCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6RGVsYXllZFJlcGx5PiByZXBseSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmV0d29ya1Jlc291cmNlTG9hZGVyKHBh
cmFtZXRlcnMsIGNvbm5lY3Rpb24sIHJlcGx5KSk7CisgICAgfSAgICAKICAgICB+TmV0d29ya1Jl
c291cmNlTG9hZGVyKCk7CiAKKyAgICBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29u
bmVjdGlvblRvV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsg
fQorCisgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkoKSB7IHJldHVy
biBtX3ByaW9yaXR5OyB9CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkg
eyByZXR1cm4gbV9yZXF1ZXN0OyB9CisKICAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSogaGFu
ZGxlKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGUuZ2V0KCk7IH0KICAgICB2b2lkIGRpZENvbnZl
cnRIYW5kbGVUb0Rvd25sb2FkKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKSBPVkVSUklERTsKKyAgICB2b2lkIHN0YXJ0KCk7
CisgICAgdm9pZCBhYm9ydCgpOwogCiAgICAgLy8gUmVzb3VyY2VIYW5kbGVDbGllbnQgbWV0aG9k
cwogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVlc3RBc3luYyhXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpIE9WRVJSSURFOwpAQCAtMTAwLDI0
ICsxMTYsNDUgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHRyeUdldFNoYXJlYWJsZUhhbmRs
ZUZyb21DRlVSTENhY2hlZFJlc3BvbnNlKFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUmLCBDRkNh
Y2hlZFVSTFJlc3BvbnNlUmVmKTsKICNlbmRpZgogCisgICAgYm9vbCBpc1N5bmNocm9ub3VzKCkg
Y29uc3Q7CisgICAgYm9vbCBpc0xvYWRpbmdNYWluUmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiBt
X2lzTG9hZGluZ01haW5SZXNvdXJjZTsgfQorICAgIAorICAgIHZvaWQgc2V0SG9zdFJlY29yZChI
b3N0UmVjb3JkKiBob3N0UmVjb3JkKSB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IG1faG9zdFJl
Y29yZCA9IGhvc3RSZWNvcmQ7IH0KKyAgICBIb3N0UmVjb3JkKiBob3N0UmVjb3JkKCkgY29uc3Qg
eyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9ob3N0UmVjb3JkLmdldCgpOyB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29sIHNlbmRBYm9ydGluZ09uRmFpbHVyZShjb25z
dCBVJiBtZXNzYWdlLCB1bnNpZ25lZCBtZXNzYWdlU2VuZEZsYWdzID0gMCkKKyAgICB7CisgICAg
ICAgIGJvb2wgcmVzdWx0ID0gbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKS0+c2VuZChtZXNzYWdl
LCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpLCBtZXNzYWdlU2VuZEZsYWdzKTsKKyAgICAg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBhYm9ydCgpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykK
KyAgICB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShi
b29sKTsKKyNlbmRpZgorICAgIHZvaWQgY29udGludWVXaWxsU2VuZFJlcXVlc3QoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KTsKKworI2lmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorICAgIHN0YXRpYyB2b2lkIHRyeUdldFNoYXJlYWJs
ZUhhbmRsZUZyb21TaGFyZWRCdWZmZXIoU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYsIFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlciopOworI2VuZGlmCisKIHByaXZhdGU6Ci0gICAgTmV0d29ya1Jlc291
cmNlTG9hZGVyKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiwgTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MqKTsKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXIoY29uc3Qg
TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmLCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcyosIFBhc3NSZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxheWVkUmVwbHk+KTsKIAogICAgIC8vIENvcmVJ
UEM6Ok1lc3NhZ2VTZW5kZXIKICAgICB2aXJ0dWFsIENvcmVJUEM6OkNvbm5lY3Rpb24qIG1lc3Nh
Z2VTZW5kZXJDb25uZWN0aW9uKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB1aW50NjRfdCBtZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdWludDY0X3Qg
bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBPVkVSUklERSB7IHJldHVybiBtX2lkZW50aWZp
ZXI7IH0KIAotICAgIHZvaWQgY29udGludWVXaWxsU2VuZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KTsKICAgICB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2
ZVJlc3BvbnNlKCk7Ci0jaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKLSAg
ICB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29s
KTsKLSNlbmRpZgogCiAgICAgdm9pZCBjbGVhbnVwKCk7CiAgICAgCiAgICAgdm9pZCBwbGF0Zm9y
bURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29sIHNlbmRBYm9ydGluZ09uRmFpbHVyZShjb25z
dCBVJiBtZXNzYWdlLCB1bnNpZ25lZCBtZXNzYWdlU2VuZEZsYWdzID0gMCk7CisgICAgdm9pZCBj
b25zdW1lU2FuZGJveEV4dGVuc2lvbnMoKTsKKyAgICB2b2lkIGludmFsaWRhdGVTYW5kYm94RXh0
ZW5zaW9ucygpOwogCiAgICAgUmVmUHRyPFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0PiBtX25ldHdv
cmtpbmdDb250ZXh0OwogICAgIFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gbV9oYW5k
bGU7CkBAIC0xMjgsMTAgKzE2NSwyNyBAQCBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1fYnl0ZXNS
ZWNlaXZlZDsKIAogICAgIGJvb2wgbV9oYW5kbGVDb252ZXJ0ZWRUb0Rvd25sb2FkOwotCi0jaWYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi0gICAgc3RhdGljIHZvaWQg
dHJ5R2V0U2hhcmVhYmxlSGFuZGxlRnJvbVNoYXJlZEJ1ZmZlcihTaGFyZWFibGVSZXNvdXJjZTo6
SGFuZGxlJiwgV2ViQ29yZTo6U2hhcmVkQnVmZmVyKik7Ci0jZW5kaWYKKyAgICBPd25QdHI8TmV0
d29ya0xvYWRlckNsaWVudD4gbV9uZXR3b3JrTG9hZGVyQ2xpZW50OworCisgICAgUmVzb3VyY2VM
b2FkSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisgICAgdWludDY0X3QgbV93ZWJQYWdlSUQ7Cisg
ICAgdWludDY0X3QgbV93ZWJGcmFtZUlEOworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBt
X3JlcXVlc3Q7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkgbV9wcmlvcml0eTsK
KyAgICBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgbV9jb250ZW50U25pZmZpbmdQb2xp
Y3k7CisgICAgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgbV9hbGxvd1N0b3JlZENyZWRlbnRp
YWxzOworICAgIFdlYkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3kgbV9jbGllbnRDcmVkZW50
aWFsUG9saWN5OworICAgIGJvb2wgbV9pblByaXZhdGVCcm93c2luZ01vZGU7CisgICAgYm9vbCBt
X3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Q7CisgICAgYm9vbCBtX2lz
TG9hZGluZ01haW5SZXNvdXJjZTsKKworICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lv
bj4+IG1fcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uczsKKyAgICBWZWN0b3I8UmVmUHRyPFNh
bmRib3hFeHRlbnNpb24+PiBtX3Jlc291cmNlU2FuZGJveEV4dGVuc2lvbnM7CisgICAgYm9vbCBt
X3NhbmRib3hFeHRlbnNpb25zQXJlQ29uc3VtZWQ7CisKKyAgICBSZWZQdHI8TmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M+IG1fY29ubmVjdGlvbjsKKyAgICAKKyAgICBSZWZQdHI8SG9zdFJl
Y29yZD4gbV9ob3N0UmVjb3JkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9TY2hlZHVsYWJsZUxvYWRlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9TY2hlZHVsYWJsZUxvYWRlci5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlN2IyMDMuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU2NoZWR1bGFibGVMb2FkZXIuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiU2NoZWR1bGFibGVMb2FkZXIuaCIKLQotI2lmIEVOQUJMRShORVRXT1JLX1BST0NF
U1MpCi0KLSNpbmNsdWRlICJOZXR3b3JrQmxvYlJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKLSNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRm9ybURhdGEuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1TY2hlZHVsYWJsZUxvYWRl
cjo6U2NoZWR1bGFibGVMb2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMm
IHBhcmFtZXRlcnMsIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uKQot
ICAgIDogbV9pZGVudGlmaWVyKHBhcmFtZXRlcnMuaWRlbnRpZmllcikKLSAgICAsIG1fd2ViUGFn
ZUlEKHBhcmFtZXRlcnMud2ViUGFnZUlEKQotICAgICwgbV93ZWJGcmFtZUlEKHBhcmFtZXRlcnMu
d2ViRnJhbWVJRCkKLSAgICAsIG1fcmVxdWVzdChwYXJhbWV0ZXJzLnJlcXVlc3QpCi0gICAgLCBt
X3ByaW9yaXR5KHBhcmFtZXRlcnMucHJpb3JpdHkpCi0gICAgLCBtX2NvbnRlbnRTbmlmZmluZ1Bv
bGljeShwYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSkKLSAgICAsIG1fYWxsb3dTdG9y
ZWRDcmVkZW50aWFscyhwYXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3JlZGVudGlhbHMpCi0gICAgLCBt
X2NsaWVudENyZWRlbnRpYWxQb2xpY3kocGFyYW1ldGVycy5jbGllbnRDcmVkZW50aWFsUG9saWN5
KQotICAgICwgbV9pblByaXZhdGVCcm93c2luZ01vZGUocGFyYW1ldGVycy5pblByaXZhdGVCcm93
c2luZ01vZGUpCi0gICAgLCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJl
Y3QocGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQot
ICAgICwgbV9pc0xvYWRpbmdNYWluUmVzb3VyY2UocGFyYW1ldGVycy5pc01haW5SZXNvdXJjZSkK
LSAgICAsIG1fc2FuZGJveEV4dGVuc2lvbnNBcmVDb25zdW1lZChmYWxzZSkKLSAgICAsIG1fY29u
bmVjdGlvbihjb25uZWN0aW9uKQotewotICAgIC8vIEVpdGhlciB0aGlzIGxvYWRlciBoYXMgYm90
aCBhIHdlYlBhZ2VJRCBhbmQgd2ViRnJhbWVJRCwgb3IgaXQgaXMgbm90IGFsbG93ZWQgdG8gYXNr
IHRoZSBjbGllbnQgZm9yIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzLgotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIHRoZSBleGlzdGVuY2Ugb2YgRW1wdHlGcmFt
ZUxvYWRlckNsaWVudCBpbiBXZWJDb3JlLgotICAgIC8vICAgICAgICBPbmNlIGJ1ZyAxMTYyMzMg
aXMgcmVzb2x2ZWQsIHRoaXMgQVNTRVJUIGNhbiBqdXN0IGJlICJtX3dlYlBhZ2VJRCAmJiBtX3dl
YkZyYW1lSUQiCi0gICAgQVNTRVJUKChtX3dlYlBhZ2VJRCAmJiBtX3dlYkZyYW1lSUQpIHx8IG1f
Y2xpZW50Q3JlZGVudGlhbFBvbGljeSA9PSBEb05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxz
KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IHBhcmFtZXRlcnMucmVxdWVzdEJv
ZHlTYW5kYm94RXh0ZW5zaW9ucy5zaXplKCk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlm
IChSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gZXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlKHBhcmFtZXRlcnMucmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uc1tpXSkpCi0gICAg
ICAgICAgICBtX3JlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnMuYXBwZW5kKGV4dGVuc2lvbik7
Ci0gICAgfQotCi0jaWYgRU5BQkxFKEJMT0IpCi0gICAgaWYgKG1fcmVxdWVzdC5odHRwQm9keSgp
KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+JiBlbGVtZW50cyA9IG1f
cmVxdWVzdC5odHRwQm9keSgpLT5lbGVtZW50cygpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MCwgY291bnQgPSBlbGVtZW50cy5zaXplKCk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAg
ICBpZiAoZWxlbWVudHNbaV0ubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEJsb2Ip
IHsKLSAgICAgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBibG9i
RWxlbWVudEV4dGVuc2lvbnMgPSBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQoKS5zYW5kYm94
RXh0ZW5zaW9ucyhlbGVtZW50c1tpXS5tX3VybCk7Ci0gICAgICAgICAgICAgICAgbV9yZXF1ZXN0
Qm9keVNhbmRib3hFeHRlbnNpb25zLmFwcGVuZFZlY3RvcihibG9iRWxlbWVudEV4dGVuc2lvbnMp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fcmVxdWVzdC51
cmwoKS5wcm90b2NvbElzKCJibG9iIikpIHsKLSAgICAgICAgQVNTRVJUKCFTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGUocGFyYW1ldGVycy5yZXNvdXJjZVNhbmRib3hFeHRlbnNpb24pKTsKLSAgICAg
ICAgbV9yZXNvdXJjZVNhbmRib3hFeHRlbnNpb25zID0gTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2hh
cmVkKCkuc2FuZGJveEV4dGVuc2lvbnMobV9yZXF1ZXN0LnVybCgpKTsKLSAgICB9IGVsc2UKLSNl
bmRpZgotICAgIGlmIChSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gcmVzb3VyY2VTYW5kYm94RXh0
ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlKHBhcmFtZXRlcnMucmVzb3VyY2VTYW5k
Ym94RXh0ZW5zaW9uKSkKLSAgICAgICAgbV9yZXNvdXJjZVNhbmRib3hFeHRlbnNpb25zLmFwcGVu
ZChyZXNvdXJjZVNhbmRib3hFeHRlbnNpb24pOwotfQotCi1TY2hlZHVsYWJsZUxvYWRlcjo6flNj
aGVkdWxhYmxlTG9hZGVyKCkKLXsKLSAgICBBU1NFUlQoIW1faG9zdFJlY29yZCk7Ci19Ci0KLXZv
aWQgU2NoZWR1bGFibGVMb2FkZXI6OmNvbnN1bWVTYW5kYm94RXh0ZW5zaW9ucygpCi17Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0gbV9yZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25z
LnNpemUoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIG1fcmVxdWVzdEJvZHlTYW5kYm94RXh0
ZW5zaW9uc1tpXS0+Y29uc3VtZSgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0g
bV9yZXNvdXJjZVNhbmRib3hFeHRlbnNpb25zLnNpemUoKTsgaSA8IGNvdW50OyArK2kpCi0gICAg
ICAgIG1fcmVzb3VyY2VTYW5kYm94RXh0ZW5zaW9uc1tpXS0+Y29uc3VtZSgpOwotCi0gICAgbV9z
YW5kYm94RXh0ZW5zaW9uc0FyZUNvbnN1bWVkID0gdHJ1ZTsKLX0KLQotdm9pZCBTY2hlZHVsYWJs
ZUxvYWRlcjo6aW52YWxpZGF0ZVNhbmRib3hFeHRlbnNpb25zKCkKLXsKLSAgICBpZiAobV9zYW5k
Ym94RXh0ZW5zaW9uc0FyZUNvbnN1bWVkKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBj
b3VudCA9IG1fcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9ucy5zaXplKCk7IGkgPCBjb3VudDsg
KytpKQotICAgICAgICAgICAgbV9yZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zW2ldLT5yZXZv
a2UoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIGNvdW50ID0gbV9yZXNvdXJjZVNhbmRi
b3hFeHRlbnNpb25zLnNpemUoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICBtX3Jlc291
cmNlU2FuZGJveEV4dGVuc2lvbnNbaV0tPnJldm9rZSgpOwotICAgIH0KLQotICAgIG1fcmVxdWVz
dEJvZHlTYW5kYm94RXh0ZW5zaW9ucy5jbGVhcigpOwotICAgIG1fcmVzb3VyY2VTYW5kYm94RXh0
ZW5zaW9ucy5jbGVhcigpOwotCi0gICAgbV9zYW5kYm94RXh0ZW5zaW9uc0FyZUNvbnN1bWVkID0g
ZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5F
VFdPUktfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L1NjaGVkdWxhYmxlTG9hZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9TY2hl
ZHVsYWJsZUxvYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWZmNWU1Li4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL1NjaGVkdWxhYmxlTG9h
ZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgU2NoZWR1bGFibGVMb2FkZXJfaAotI2RlZmluZSBTY2hlZHVsYWJsZUxvYWRlcl9oCi0KLSNp
bmNsdWRlICJIb3N0UmVjb3JkLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9w
dGlvbnMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgotI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotI2lmIEVO
QUJMRShORVRXT1JLX1BST0NFU1MpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKLWNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJh
bWV0ZXJzOwotY2xhc3MgU2FuZGJveEV4dGVuc2lvbjsKLQotY2xhc3MgU2NoZWR1bGFibGVMb2Fk
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTY2hlZHVsYWJsZUxvYWRlcj4gewotcHVibGljOgotICAg
IHZpcnR1YWwgflNjaGVkdWxhYmxlTG9hZGVyKCk7Ci0KLSAgICBSZXNvdXJjZUxvYWRJZGVudGlm
aWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICB1aW50
NjRfdCB3ZWJQYWdlSUQoKSBjb25zdCB7IHJldHVybiBtX3dlYlBhZ2VJRDsgfQotICAgIHVpbnQ2
NF90IHdlYkZyYW1lSUQoKSBjb25zdCB7IHJldHVybiBtX3dlYkZyYW1lSUQ7IH0KLSAgICBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
cXVlc3Q7IH0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJpb3JpdHk7IH0KLSAgICBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQ
b2xpY3kgY29udGVudFNuaWZmaW5nUG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50U25p
ZmZpbmdQb2xpY3k7IH0KLSAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBhbGxvd1N0b3Jl
ZENyZWRlbnRpYWxzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOyB9
Ci0gICAgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSBjbGllbnRDcmVkZW50aWFsUG9s
aWN5KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRDcmVkZW50aWFsUG9saWN5OyB9Ci0gICAgYm9v
bCBpblByaXZhdGVCcm93c2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX2luUHJpdmF0ZUJyb3dz
aW5nTW9kZTsgfQotICAgIGJvb2wgaXNMb2FkaW5nTWFpblJlc291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV9pc0xvYWRpbmdNYWluUmVzb3VyY2U7IH0KLQotICAgIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb25u
ZWN0aW9uLmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGFib3J0KCkgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlzU3luY2hyb25vdXMo
KSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdm9pZCBzZXRIb3N0UmVjb3JkKEhvc3RSZWNvcmQq
IGhvc3RSZWNvcmQpIHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgbV9ob3N0UmVjb3JkID0gaG9z
dFJlY29yZDsgfQotICAgIEhvc3RSZWNvcmQqIGhvc3RSZWNvcmQoKSBjb25zdCB7IEFTU0VSVChp
c01haW5UaHJlYWQoKSk7IHJldHVybiBtX2hvc3RSZWNvcmQuZ2V0KCk7IH0KLQotcHJvdGVjdGVk
OgotICAgIFNjaGVkdWxhYmxlTG9hZGVyKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzJiwgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqKTsKLQotICAgIHZvaWQgY29uc3Vt
ZVNhbmRib3hFeHRlbnNpb25zKCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2FuZGJveEV4dGVuc2lv
bnMoKTsKLQotICAgIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdDsgfQotCi1wcml2YXRlOgotICAgIFJlc291cmNlTG9hZElkZW50aWZpZXIgbV9pZGVudGlm
aWVyOwotICAgIHVpbnQ2NF90IG1fd2ViUGFnZUlEOwotICAgIHVpbnQ2NF90IG1fd2ViRnJhbWVJ
RDsKLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwotICAgIFdlYkNvcmU6
OlJlc291cmNlTG9hZFByaW9yaXR5IG1fcHJpb3JpdHk7Ci0gICAgV2ViQ29yZTo6Q29udGVudFNu
aWZmaW5nUG9saWN5IG1fY29udGVudFNuaWZmaW5nUG9saWN5OwotICAgIFdlYkNvcmU6OlN0b3Jl
ZENyZWRlbnRpYWxzIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLSAgICBXZWJDb3JlOjpDbGll
bnRDcmVkZW50aWFsUG9saWN5IG1fY2xpZW50Q3JlZGVudGlhbFBvbGljeTsKLSAgICBib29sIG1f
aW5Qcml2YXRlQnJvd3NpbmdNb2RlOwotICAgIGJvb2wgbV9zaG91bGRDbGVhclJlZmVycmVyT25I
VFRQU1RvSFRUUFJlZGlyZWN0OwotICAgIGJvb2wgbV9pc0xvYWRpbmdNYWluUmVzb3VyY2U7Ci0K
LSAgICBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBtX3JlcXVlc3RCb2R5U2FuZGJv
eEV4dGVuc2lvbnM7Ci0gICAgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gbV9yZXNv
dXJjZVNhbmRib3hFeHRlbnNpb25zOwotICAgIGJvb2wgbV9zYW5kYm94RXh0ZW5zaW9uc0FyZUNv
bnN1bWVkOwotCi0gICAgUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2Nv
bm5lY3Rpb247Ci0gICAgCi0gICAgUmVmUHRyPEhvc3RSZWNvcmQ+IG1faG9zdFJlY29yZDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJP
Q0VTUykKLQotI2VuZGlmIC8vIFNjaGVkdWxhYmxlTG9hZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL1N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYjA1ZWQuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIKLQotI2lm
IEVOQUJMRShORVRXT1JLX1BST0NFU1MpCi0KLSNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCi0j
aW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKLSNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29u
dGV4dC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9u
c2UuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OlN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMsIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0
aW9uLCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6RGVsYXllZFJlcGx5PiByZXBseSkKLSAgICA6IFNjaGVk
dWxhYmxlTG9hZGVyKHBhcmFtZXRlcnMsIGNvbm5lY3Rpb24pCi0gICAgLCBtX2RlbGF5ZWRSZXBs
eShyZXBseSkKLXsKLX0KLQotdm9pZCBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCgp
Ci17Ci0gICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogVGhpcyBpcyBjYWxsZWQgb24gdGhl
IE5ldHdvcmtQcm9jZXNzIG1haW4gdGhyZWFkLCBibG9ja2luZyBhbnkgb3RoZXIgcmVxdWVzdHMg
ZnJvbSBiZWluZyBzY2hlZHVsZWQuCi0gICAgLy8gVGhpcyBzaG91bGQgbW92ZSB0byBhIGJhY2tn
cm91bmQgdGhyZWFkLCBidXQgd2UnZCBlaXRoZXIgbmVlZCB0byBiZSBzdXJlIHRoYXQ6Ci0gICAg
Ly8gICBBIC0gUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkgaXMgc2Fm
ZSB0byBydW4gb24gYSBiYWNrZ3JvdW5kIHRocmVhZC4KLSAgICAvLyAgIEIgLSBXcml0ZSBjdXN0
b20gbG9hZGluZyBsb2dpYyB0aGF0IGlzIGtub3duIHRvIGJlIHNhZmUgb24gYSBiYWNrZ3JvdW5k
IHRocmVhZC4KLSAgICAKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgUmVzb3Vy
Y2VFcnJvciBlcnJvcjsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotICAgIFZlY3Rv
cjxjaGFyPiBkYXRhOwotICAgIAotICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IENyZWF0
ZSBSZW1vdGVOZXR3b3JraW5nQ29udGV4dCB3aXRoIGFjdHVhbCBzZXR0aW5ncy4KLSAgICBSZWZQ
dHI8UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ+IG5ldHdvcmtpbmdDb250ZXh0ID0gUmVtb3RlTmV0
d29ya2luZ0NvbnRleHQ6OmNyZWF0ZShmYWxzZSwgZmFsc2UsIGluUHJpdmF0ZUJyb3dzaW5nTW9k
ZSgpLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KCkpOwotCi0gICAg
Y29uc3VtZVNhbmRib3hFeHRlbnNpb25zKCk7Ci0KLSAgICBSZXNvdXJjZUhhbmRsZTo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseShuZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgcmVxdWVzdCgpLCBh
bGxvd1N0b3JlZENyZWRlbnRpYWxzKCksIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Ci0KLSAgICBj
bGVhbnVwKCk7Ci0KLSAgICBtX2RlbGF5ZWRSZXBseS0+c2VuZChlcnJvciwgcmVzcG9uc2UsIENv
cmVJUEM6OkRhdGFSZWZlcmVuY2UoKHVpbnQ4X3QqKWRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkp
OwotfQotCi12b2lkIFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0KCkKLXsKLSAgICBj
bGVhbnVwKCk7Ci19Ci0KLXZvaWQgU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2xlYW51cCgp
Ci17Ci0gICAgaW52YWxpZGF0ZVNhbmRib3hFeHRlbnNpb25zKCk7Ci0gICAgTmV0d29ya1Byb2Nl
c3M6OnNoYXJlZCgpLm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZVJlbW92
ZUxvYWRlcih0aGlzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoTkVUV09SS19QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5oIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhNjA5MjliLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL1N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFN5bmNOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXJfaAotI2RlZmluZSBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyX2gKLQotI2luY2x1ZGUgIk5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJTY2hlZHVs
YWJsZUxvYWRlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLSNpZiBFTkFCTEUo
TkVUV09SS19QUk9DRVNTKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgU3luY05ldHdv
cmtSZXNvdXJjZUxvYWRlciA6IHB1YmxpYyBTY2hlZHVsYWJsZUxvYWRlciB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcj4gY3JlYXRlKGNv
bnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVjdGlvbiwgUGFzc1JlZlB0cjxNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OkRlbGF5
ZWRSZXBseT4gcmVwbHkpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN5bmNO
ZXR3b3JrUmVzb3VyY2VMb2FkZXIocGFyYW1ldGVycywgY29ubmVjdGlvbiwgcmVwbHkpKTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgYWJvcnQoKSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1N5bmNocm9ub3VzKCkg
T1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcml2YXRlOgotICAgIFN5bmNOZXR3b3JrUmVz
b3VyY2VMb2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmLCBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyosIFBhc3NSZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxheWVkUmVwbHk+
KTsKLSAgICAKLSAgICB2b2lkIGNsZWFudXAoKTsKLSAgICAKLSAgICBSZWZQdHI8TWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpE
ZWxheWVkUmVwbHk+IG1fZGVsYXllZFJlcGx5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotCi0jZW5kaWYgLy8gU3luY05l
dHdvcmtSZXNvdXJjZUxvYWRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9TeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvU3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGFiNTUwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU3luY2hyb25vdXNOZXR3b3JrTG9hZGVy
Q2xpZW50LmNwcApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuaCIKKworI2lm
IEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisj
aW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiV2ViRXJyb3JzLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1NoYXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3luY2hyb25vdXNMb2FkZXJDbGll
bnQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitTeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OlN5bmNocm9ub3VzTmV0d29ya0xvYWRl
ckNsaWVudChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8TWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2Fk
OjpEZWxheWVkUmVwbHk+IHJlcGx5KQorICAgIDogbV9vcmlnaW5hbFJlcXVlc3QocmVxdWVzdCkK
KyAgICAsIG1fZGVsYXllZFJlcGx5KHJlcGx5KQoreworICAgIEFTU0VSVChtX2RlbGF5ZWRSZXBs
eSk7Cit9CisKK1N5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6flN5bmNocm9ub3VzTmV0
d29ya0xvYWRlckNsaWVudCgpCit7CisgICAgLy8gQnkgdGhlIHRpbWUgYSBTeW5jaHJvbm91c05l
dHdvcmtMb2FkZXJDbGllbnQgaXMgYmVpbmcgZGVzdHJveWVkLCBpdCBtdXN0IGFsd2F5cyBoYXZl
IHNlbnQgaXRzIHJlcGx5IHRvIHRoZSBXZWJQcm9jZXNzLgorICAgIEFTU0VSVCghbV9kZWxheWVk
UmVwbHkpOworfQorCit2b2lkIFN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6d2lsbFNl
bmRSZXF1ZXN0KE5ldHdvcmtSZXNvdXJjZUxvYWRlciogbG9hZGVyLCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHByb3Bvc2VkUmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBm
aXhlZCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0IGNvcnJlY3RseSBldmVuIGZvciBjcm9zcy1kb21h
aW4gcmVxdWVzdHMuCisgICAgLy8gVGhpcyBpbmNsdWRlcyBhdCBsZWFzdCB1cGRhdGluZyBob3N0
IHJlY29yZHMsIGFuZCBjb21wYXJpbmcgdGhlIGN1cnJlbnQgcmVxdWVzdCBpbnN0ZWFkIG9mIHRo
ZSBvcmlnaW5hbCByZXF1ZXN0IGhlcmUuCisgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJl
RXF1YWwobV9vcmlnaW5hbFJlcXVlc3QudXJsKCksIHByb3Bvc2VkUmVxdWVzdC51cmwoKSkpIHsK
KyAgICAgICAgQVNTRVJUKG1fZXJyb3IuaXNOdWxsKCkpOworICAgICAgICBtX2Vycm9yID0gU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnQ6OnBsYXRmb3JtQmFkU3luY2hyb25vdXNYSFJSZXNwb25zZUVy
cm9yKCk7CisgICAgICAgIHByb3Bvc2VkUmVxdWVzdCA9IDA7CisgICAgfQorICAgIAorICAgIG1f
Y3VycmVudFJlcXVlc3QgPSBwcm9wb3NlZFJlcXVlc3Q7CisgICAgbG9hZGVyLT5jb250aW51ZVdp
bGxTZW5kUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKK30KKwordm9pZCBTeW5jaHJvbm91c05l
dHdvcmtMb2FkZXJDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2Uo
TmV0d29ya1Jlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rpb25T
cGFjZSYpCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc2sgdGhlIFdlYlByb2Nlc3MgbGlr
ZSB0aGUgYXN5bmNocm9ub3VzIGNhc2UgYmVsb3cgZG9lcy4KKyAgICAvLyBUaGlzIGlzIGN1cnJl
bnRseSBpbXBvc3NpYmxlIGFzIHRoZSBXZWJQcm9jZXNzIGlzIGJsb2NrZWQgd2FpdGluZyBvbiB0
aGlzIHN5bmNocm9ub3VzIGxvYWQuCisgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHdlIGNhbiBq
dW1wIHN0cmFpZ2h0IHRvIHRoZSBVSSBwcm9jZXNzIHRvIHJlc29sdmUgdGhpcy4KKyAgICBsb2Fk
ZXItPmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSh0cnVlKTsK
K30KKwordm9pZCBTeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVSZXNw
b25zZShOZXR3b3JrUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKK3sKKyAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7Cit9CisKK3ZvaWQg
U3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQnVmZmVyKE5ldHdvcmtS
ZXNvdXJjZUxvYWRlciosIFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciogYnVmZmVyLCBpbnQgZW5jb2Rl
ZERhdGFMZW5ndGgpCit7CisgICAgLy8gRklYTUU6IFRoZXJlJ3MgYSBwb3RlbnRpYWwgcGVyZm9y
bWFuY2UgaW1wcm92ZW1lbnQgaGVyZSBieSBwcmVhbGxvY2F0aW5nIGEgU2hhcmVkTWVtb3J5IHJl
Z2lvbgorICAgIC8vIG9mIHRoZSBleHBlY3RlZCBjb250ZW50IGxlbmd0aCB0byBhdm9pZCBhIGNv
cHkgd2hlbiB3ZSBzZW5kIGl0IHRvIHRoZSBXZWJQcm9jZXNzIG9uIGNvbXBsZXRpb24uCisgICAg
Ly8gSXQncyB1bmNsZWFyIGlmIHRoZSBwb3RlbnRpYWwgY29tcGxleGl0aWVzIG9mIHRoYXQgYXBw
cm9hY2ggYXJlIHdvcnRoIGl0LgorICAgIAorICAgIGlmICghbV9yZXNwb25zZURhdGEpCisgICAg
ICAgIG1fcmVzcG9uc2VEYXRhID0gYWRvcHRQdHIobmV3IFZlY3Rvcjx1aW50OF90Pik7CisKKyAg
ICBtX3Jlc3BvbnNlRGF0YS0+YXBwZW5kKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7
Cit9CisKK3ZvaWQgU3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaWRGaW5pc2hMb2Fk
aW5nKE5ldHdvcmtSZXNvdXJjZUxvYWRlciosIGRvdWJsZSAvKiBmaW5pc2hUaW1lICovKQorewor
ICAgIHNlbmREZWxheWVkUmVwbHkoKTsKK30KKwordm9pZCBTeW5jaHJvbm91c05ldHdvcmtMb2Fk
ZXJDbGllbnQ6OmRpZEZhaWwoTmV0d29ya1Jlc291cmNlTG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgbV9lcnJvciA9IGVycm9yOworICAgIHNlbmRE
ZWxheWVkUmVwbHkoKTsKK30KKwordm9pZCBTeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6
OnNlbmREZWxheWVkUmVwbHkoKQoreworICAgIEFTU0VSVChtX2RlbGF5ZWRSZXBseSk7CisKKyAg
ICB1aW50OF90KiBieXRlcyA9IG1fcmVzcG9uc2VEYXRhID8gbV9yZXNwb25zZURhdGEtPmRhdGEo
KSA6IDA7CisgICAgc2l6ZV90IHNpemUgPSBtX3Jlc3BvbnNlRGF0YSA/IG1fcmVzcG9uc2VEYXRh
LT5zaXplKCkgOiAwOworCisgICAgaWYgKG1fcmVzcG9uc2UuaXNOdWxsKCkpIHsKKyAgICAgICAg
QVNTRVJUKCFtX2Vycm9yLmlzTnVsbCgpKTsKKyAgICAgICAgcGxhdGZvcm1TeW50aGVzaXplRXJy
b3JSZXNwb25zZSgpOworICAgIH0KKworICAgIG1fZGVsYXllZFJlcGx5LT5zZW5kKG1fZXJyb3Is
IG1fcmVzcG9uc2UsIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UoYnl0ZXMsIHNpemUpKTsKKyAgICBt
X2RlbGF5ZWRSZXBseSA9IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL1N5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5oIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZkMmFiOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL1N5bmNocm9ub3VzTmV0d29y
a0xvYWRlckNsaWVudC5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN5
bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudF9oCisjZGVmaW5lIFN5bmNocm9ub3VzTmV0d29y
a0xvYWRlckNsaWVudF9oCisKKyNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0d29ya0xvYWRlckNsaWVudC5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1
ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKK30KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudCA6IHB1YmxpYyBOZXR3
b3JrTG9hZGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxOZXR3b3Jr
TG9hZGVyQ2xpZW50PiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmln
aW5hbFJlcXVlc3QsIFBhc3NSZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxheWVkUmVwbHk+IHJlcGx5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTeW5jaHJvbm91c05ldHdvcmtMb2FkZXJD
bGllbnQob3JpZ2luYWxSZXF1ZXN0LCByZXBseSkpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFs
IH5TeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQoKSBPVkVSUklERTsKKworICAgIHZpcnR1
YWwgdm9pZCB3aWxsU2VuZFJlcXVlc3QoTmV0d29ya1Jlc291cmNlTG9hZGVyKiwgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiBwcm9wb3NlZFJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBj
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKE5ldHdvcmtSZXNvdXJjZUxvYWRl
ciosIGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoTmV0d29ya1Jlc291cmNlTG9hZGVyKiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlQnVmZmVyKE5ldHdvcmtSZXNvdXJjZUxvYWRlciosIFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlciosIGludCBlbmNvZGVkRGF0YUxlbmd0aCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IGRpZFNlbmREYXRhKE5ldHdvcmtSZXNvdXJjZUxvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBi
eXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpIE9WRVJSSURF
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKE5ldHdvcmtSZXNvdXJjZUxv
YWRlciosIGRvdWJsZSBmaW5pc2hUaW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
RmFpbChOZXR3b3JrUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JiBlcnJvcikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNTeW5jaHJvbm91cygpIE9W
RVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKworcHJpdmF0ZToKKyAgICBTeW5jaHJvbm91c05ldHdv
cmtMb2FkZXJDbGllbnQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJl
cXVlc3QsIFBhc3NSZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxheWVkUmVwbHk+KTsKKworICAgIHZvaWQgc2Vu
ZERlbGF5ZWRSZXBseSgpOworICAgIHZvaWQgcGxhdGZvcm1TeW50aGVzaXplRXJyb3JSZXNwb25z
ZSgpOworCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fb3JpZ2luYWxSZXF1ZXN0Owor
ICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX2N1cnJlbnRSZXF1ZXN0OworICAgIFJlZlB0
cjxNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJv
bm91c0xvYWQ6OkRlbGF5ZWRSZXBseT4gbV9kZWxheWVkUmVwbHk7CisgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAgIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgbV9l
cnJvcjsKKyAgICBPd25QdHI8VmVjdG9yPHVpbnQ4X3Q+PiBtX3Jlc3BvbnNlRGF0YTsKKworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9D
RVNTKQorCisjZW5kaWYgLy8gU3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9TeW5jaHJvbm91c05ldHdv
cmtMb2FkZXJDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvU3lu
Y2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjQzNjExYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9tYWMvU3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50Lm1tCkBAIC0wLDAg
KzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3lu
Y2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50LmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9D
RVNTKQorCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVu
dDo6cGxhdGZvcm1TeW50aGVzaXplRXJyb3JSZXNwb25zZSgpCit7CisgICAgbV9yZXNwb25zZSA9
IFJlc291cmNlUmVzcG9uc2UobV9vcmlnaW5hbFJlcXVlc3QudXJsKCksIFN0cmluZygpLCAwLCBT
dHJpbmcoKSwgU3RyaW5nKCkpOworCisgICAgaWYgKG1fZXJyb3IuZG9tYWluKCkgPT0gU3RyaW5n
KE5TVVJMRXJyb3JEb21haW4pKSB7CisgICAgICAgIHN3aXRjaCAobV9lcnJvci5lcnJvckNvZGUo
KSkgeworICAgICAgICBjYXNlIE5TVVJMRXJyb3JVc2VyQ2FuY2VsbGVkQXV0aGVudGljYXRpb246
CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBtaWdodCBub3QgYWN0dWFsbHkgYmUgdGhlIHJl
YWwgSFRUUCByZXNwb25zZSwgYnV0IHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGdldCB0aGUgcmVh
bCBIVFRQIHJlc3BvbnNlLgorICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29k
ZSg0MDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBtX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKG1fZXJyb3IuZXJyb3JDb2RlKCkpOworICAg
ICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIG1fcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUo
NDA0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVU
V09SS19QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDljMzgzZTEuLjllMDg4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ4OSw4ICs0ODksNiBA
QAogCQk1MTc5NTU3MTE2Mjg3N0QyMDBGQTQzQjYgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxQThBNjBGMTYyN0YyQkQwMDBEOTBFOSAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oICovOyB9OwogCQk1MTdDRjBFMzE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk1MTdDRjBFNDE2
M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0NGMEUyMTYzQTQ4
NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oICovOyB9Owot
CQk1MTgxNUI5RjE2QTYyMjIxMDA1NDUwMUYgLyogU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgxNUI5
RDE2QTYyMjIxMDA1NDUwMUYgLyogU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgKi87IH07
Ci0JCTUxODE1QkEwMTZBNjIyMjEwMDU0NTAxRiAvKiBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgxNUI5
RTE2QTYyMjIxMDA1NDUwMUYgLyogU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5oICovOyB9Owog
CQk1MTgyOURBNTE2MzdDNzBDMDAwOTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgy
OURBMzE2MzdDNzBDMDAwOTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAg
Ki87IH07CiAJCTUxODI5REE2MTYzN0M3MEMwMDA5NTNENiAvKiBOZXR3b3JrUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTgyOURBNDE2MzdDNzBDMDAwOTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
ci5oICovOyB9OwogCQk1MTgzNDU5MjEzNDUzMkU5MDA5MkI2OTYgLyogV2ViSWNvbkRhdGFiYXNl
Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxODM0NTkwMTM0NTMyRTgwMDkyQjY5NiAvKiBXZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwICov
OyB9OwpAQCAtNTE0LDggKzUxMiw2IEBACiAJCTUxOEU4RjBCMTZCMjA5MzcwMEU5MTQyOSAvKiBE
b3dubG9hZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE4RThGMDIxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFuYWdlci5jcHAg
Ki87IH07CiAJCTUxOEU4RjBDMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOEU4RjAzMTZC
MjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIuaCAqLzsgfTsKIAkJNTE4RThGMEQxNkIy
MDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4RThGMDUxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2Fk
TWFjLm1tICovOyB9OwotCQk1MTlCNEZGNDE2QTlFQTk3MDA2Njg3NEQgLyogU2NoZWR1bGFibGVM
b2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE5QjRGRjIxNkE5RUE5NzAwNjY4NzREIC8qIFNjaGVkdWxhYmxlTG9hZGVyLmNwcCAqLzsgfTsK
LQkJNTE5QjRGRjUxNkE5RUE5NzAwNjY4NzREIC8qIFNjaGVkdWxhYmxlTG9hZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTlCNEZGMzE2QTlFQTk3
MDA2Njg3NEQgLyogU2NoZWR1bGFibGVMb2FkZXIuaCAqLzsgfTsKIAkJNTFBNEQ1QTkxNkNBQzRG
RjAwMEU2MTVFIC8qIFN0YXRpc3RpY3NSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTRENUE4MTZDQUM0RkYwMDBFNjE1RSAvKiBTdGF0
aXN0aWNzUmVxdWVzdC5jcHAgKi87IH07CiAJCTUxQTU1NUY1MTI4QzZDNDcwMDlBQkNFQyAvKiBX
S0NvbnRleHRNZW51SXRlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUE1NTVGMzEyOEM2QzQ3MDA5QUJDRUMgLyogV0tDb250ZXh0TWVudUl0ZW0u
Y3BwICovOyB9OwogCQk1MUE1NTVGNjEyOEM2QzQ3MDA5QUJDRUMgLyogV0tDb250ZXh0TWVudUl0
ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTU1
NUY0MTI4QzZDNDcwMDlBQkNFQyAvKiBXS0NvbnRleHRNZW51SXRlbS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01NTUsNiArNTUxLDEyIEBACiAJ
CTUxRkEyRDc0MTUyMTJERjEwMEMxQkEwQiAvKiBJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVu
c2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUZBMkQ1QzE1MjExQTUwMDBDMUJBMEIgLyogSW5qZWN0ZWRCdW5kbGVET01XaW5kb3dFeHRlbnNp
b24uY3BwICovOyB9OwogCQk1MUZBMkQ3NzE1MjEyRTI2MDBDMUJBMEIgLyogV0tCdW5kbGVET01X
aW5kb3dFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTFGQTJENzUxNTIxMkUxRTAwQzFCQTBCIC8qIFdLQnVuZGxlRE9NV2luZG93RXh0
ZW5zaW9uLmNwcCAqLzsgfTsKIAkJNTFGQjA4RkYxNjM5REUxQTAwRUMzMjRBIC8qIFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUFCRjY1NjE2MzkyRjE1MDAxMzJBN0EgLyogV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmNwcCAqLzsgfTsKKwkJNTFGQ0IxN0YxN0JCRkRFNTAwMzk0Q0Q4IC8qIFN5bmNocm9u
b3VzTmV0d29ya0xvYWRlckNsaWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxRkNCMTdFMTdCQkZERTUwMDM5NENEOCAvKiBTeW5jaHJvbm91c05l
dHdvcmtMb2FkZXJDbGllbnQubW0gKi87IH07CisJCTUxRkNCMTg1MTdCQkZFMDMwMDM5NENEOCAv
KiBBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkNCMTgwMTdCQkZFMDMwMDM5NENEOCAvKiBB
c3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50LmNwcCAqLzsgfTsKKwkJNTFGQ0IxODYxN0JC
RkUwMzAwMzk0Q0Q4IC8qIEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkNCMTgxMTdCQkZFMDMw
MDM5NENEOCAvKiBBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50LmggKi87IH07CisJCTUx
RkNCMTg3MTdCQkZFMDMwMDM5NENEOCAvKiBOZXR3b3JrTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZDQjE4MjE3QkJGRTAzMDAz
OTRDRDggLyogTmV0d29ya0xvYWRlckNsaWVudC5oICovOyB9OworCQk1MUZDQjE4ODE3QkJGRTAz
MDAzOTRDRDggLyogU3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkNCMTgzMTdCQkZFMDMwMDM5
NENEOCAvKiBTeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuY3BwICovOyB9OworCQk1MUZD
QjE4OTE3QkJGRTAzMDAzOTRDRDggLyogU3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZDQjE4NDE3
QkJGRTAzMDAzOTRDRDggLyogU3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50LmggKi87IH07
CiAJCTUxRkQxOEI1MTY1MUZCQUQwMERCRTFDRSAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGRDE4QjMx
NjUxRkJBRDAwREJFMUNFIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgKi87IH07CiAJCTUx
RkQxOEI2MTY1MUZCQUQwMERCRTFDRSAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkQxOEI0MTY1MUZCQUQw
MERCRTFDRSAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCAqLzsgfTsKIAkJNTI3MkIyOEExNDA2
OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNzJCMjg4MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0
aXN0aWNzRGF0YS5jcHAgKi87IH07CkBAIC0xOTU5LDggKzE5NjEsNiBAQAogCQk1MTdBMzNCNDEz
MEIzMDhDMDBGODBDQjUgLyogV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2Vp
dmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3Q0YwRTIxNjNBNDg2QzAw
QzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxODE1QjlEMTZBNjIyMjEwMDU0NTAxRiAv
KiBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOyBwYXRoID0gTmV0d29y
a1Byb2Nlc3MvU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxODE1QjlFMTZBNjIyMjEwMDU0NTAxRiAvKiBTeW5jTmV0d29ya1Jlc291
cmNlTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN5bmNOZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL1N5bmNOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE4MjlEQTMxNjM3Qzcw
QzAwMDk1M0Q2IC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5j
cHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE4MjlEQTQxNjM3QzcwQzAwMDk1M0Q2
IC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oOyBwYXRoID0gTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTgzNDU5MDEzNDUzMkU4MDA5MkI2OTYgLyogV2ViSWNvbkRhdGFiYXNl
Q2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkljb25E
YXRhYmFzZUNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTg2LDgg
KzE5ODYsNiBAQAogCQk1MThFOEYwMjE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRNYW5hZ2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERvd25sb2FkTWFuYWdl
ci5jcHA7IHBhdGggPSBEb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTE4RThGMDMxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFu
YWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEb3dubG9hZE1hbmFnZXIu
aDsgcGF0aCA9IERvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTE4RThGMDUxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRG93bmxvYWRNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOUI0RkYyMTZBOUVBOTcwMDY2ODc0RCAvKiBT
Y2hlZHVsYWJsZUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBTY2hlZHVsYWJsZUxvYWRlci5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9TY2hlZHVsYWJs
ZUxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOUI0RkYzMTZBOUVB
OTcwMDY2ODc0RCAvKiBTY2hlZHVsYWJsZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBTY2hlZHVsYWJsZUxvYWRlci5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvU2No
ZWR1bGFibGVMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBNEQ1QTgx
NkNBQzRGRjAwMEU2MTVFIC8qIFN0YXRpc3RpY3NSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YXRpc3RpY3NSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFBNTU1RjMxMjhDNkM0NzAwOUFCQ0VDIC8qIFdLQ29udGV4dE1l
bnVJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLQ29udGV4
dE1lbnVJdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBNTU1RjQxMjhD
NkM0NzAwOUFCQ0VDIC8qIFdLQ29udGV4dE1lbnVJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdLQ29udGV4dE1lbnVJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMDM2LDYgKzIwMzQsMTIgQEAKIAkJNTFGQTJENUMxNTIxMUE1MDAwQzFCQTBCIC8q
IEluamVjdGVkQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGQTJENzUxNTIxMkUxRTAwQzFCQTBCIC8q
IFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFGQjA5MDIxNjNBM0IxQzAwRUMzMjRBIC8qIE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24u
bWVzc2FnZXMuaW47IHBhdGggPSBOZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5tZXNz
YWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGQ0IxN0UxN0JCRkRFNTAw
Mzk0Q0Q4IC8qIFN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVu
dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGQ0IxODAxN0JCRkUwMzAwMzk0
Q0Q4IC8qIEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5j
cHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Bc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGQ0IxODExN0JCRkUwMzAwMzk0
Q0Q4IC8qIEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5oOyBwYXRo
ID0gTmV0d29ya1Byb2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUZDQjE4MjE3QkJGRTAzMDAzOTRDRDggLyogTmV0
d29ya0xvYWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3
b3JrTG9hZGVyQ2xpZW50Lmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZGVyQ2xp
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRkNCMTgzMTdCQkZFMDMwMDM5
NENEOCAvKiBTeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50LmNw
cDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL1N5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRkNCMTg0MTdCQkZFMDMwMDM5NENE
OCAvKiBTeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gU3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50Lmg7IHBhdGggPSBO
ZXR3b3JrUHJvY2Vzcy9TeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGRDE4QjMxNjUxRkJBRDAwREJFMUNFIC8qIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jl
c291cmNlTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGRDE4QjQx
NjUxRkJBRDAwREJFMUNFIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaDsgcGF0aCA9IE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MjcyQjI4ODE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhdGlzdGljc0RhdGEuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzYzOCwxMSArMzY0MiwxNCBAQAogCQkJCUJD
ODI4MzdDMTZCNDVEQTUwMEEyNzhGRSAvKiBFbnRyeVBvaW50ICovLAogCQkJCUUxNzk4Qzc2MTZF
NjgxNTUwMDI0MDEzOSAvKiBGaWxlQVBJICovLAogCQkJCTUxMENDN0RDMTYxMzhFMjkwMEQwM0VE
MyAvKiBtYWMgKi8sCisJCQkJNTFGQ0IxODAxN0JCRkUwMzAwMzk0Q0Q4IC8qIEFzeW5jaHJvbm91
c05ldHdvcmtMb2FkZXJDbGllbnQuY3BwICovLAorCQkJCTUxRkNCMTgxMTdCQkZFMDMwMDM5NENE
OCAvKiBBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50LmggKi8sCiAJCQkJNTEyQzA2ODYx
NjM4RjY3RTAwQUJCOTExIC8qIEhvc3RSZWNvcmQuY3BwICovLAogCQkJCTUxMkMwNjg3MTYzOEY2
N0UwMEFCQjkxMSAvKiBIb3N0UmVjb3JkLmggKi8sCiAJCQkJNTEzQTE2NDkxNjMwQTlCRjAwNUQ3
RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJCQk1MTNBMTY0
QTE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCAqLywK
IAkJCQk1MTNBMTY0QjE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW4gKi8sCisJCQkJNTFGQ0IxODIxN0JCRkUwMzAwMzk0Q0Q4IC8qIE5l
dHdvcmtMb2FkZXJDbGllbnQuaCAqLywKIAkJCQk1MTBDQzdERjE2MTM4RTI5MDBEMDNFRDMgLyog
TmV0d29ya1Byb2Nlc3MuY3BwICovLAogCQkJCTUxMENDN0UwMTYxMzhFMjkwMEQwM0VEMyAvKiBO
ZXR3b3JrUHJvY2Vzcy5oICovLAogCQkJCTUxQThBNjE3MTYyN0Y1QkIwMDBEOTBFOSAvKiBOZXR3
b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLywKQEAgLTM2NTMsMTAgKzM2NjAsOCBAQAogCQkJCUUx
NTI1NTE3MTcwMTA5RkIwMDNEN0FEQiAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXIubWVzc2FnZXMu
aW4gKi8sCiAJCQkJNTE4MjlEQTMxNjM3QzcwQzAwMDk1M0Q2IC8qIE5ldHdvcmtSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwICovLAogCQkJCTUxODI5REE0MTYzN0M3MEMwMDA5NTNENiAvKiBOZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggKi8sCi0JCQkJNTE5QjRGRjIxNkE5RUE5NzAwNjY4
NzREIC8qIFNjaGVkdWxhYmxlTG9hZGVyLmNwcCAqLywKLQkJCQk1MTlCNEZGMzE2QTlFQTk3MDA2
Njg3NEQgLyogU2NoZWR1bGFibGVMb2FkZXIuaCAqLywKLQkJCQk1MTgxNUI5RDE2QTYyMjIxMDA1
NDUwMUYgLyogU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgKi8sCi0JCQkJNTE4MTVCOUUx
NkE2MjIyMTAwNTQ1MDFGIC8qIFN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCAqLywKKwkJCQk1
MUZDQjE4MzE3QkJGRTAzMDAzOTRDRDggLyogU3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50
LmNwcCAqLywKKwkJCQk1MUZDQjE4NDE3QkJGRTAzMDAzOTRDRDggLyogU3luY2hyb25vdXNOZXR3
b3JrTG9hZGVyQ2xpZW50LmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IE5ldHdvcmtQcm9jZXNzOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM2NzIsNiArMzY3Nyw3IEBACiAJCQkJNTEy
QzA2OEYxNjM5MEU2OTAwQUJCOTExIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJNYWMu
bW0gKi8sCiAJCQkJRTFCNzg0NzAxNjNGMjQ2OTAwMDdCNjkyIC8qIFJlbW90ZU5ldHdvcmtpbmdD
b250ZXh0LmggKi8sCiAJCQkJRTFCNzg0NzIxNjNGMjUzRTAwMDdCNjkyIC8qIFJlbW90ZU5ldHdv
cmtpbmdDb250ZXh0Lm1tICovLAorCQkJCTUxRkNCMTdFMTdCQkZERTUwMDM5NENEOCAvKiBTeW5j
aHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IG1hYzsK
IAkJCXBhdGggPSBOZXR3b3JrUHJvY2Vzcy9tYWM7CkBAIC01Mzk4LDYgKzU0MDQsNyBAQAogCQkJ
CUJDQzU2Rjc5MTE1OTk1N0QwMDFDQ0FGOSAvKiBNYWNoUG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUEyNEI1RjMxMUY1MzFFODAwQzM4MjY5IC8qIE1hY2hVdGlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBMjMyOTAzMTYyQzg2NzMwMEQ4MkY3QSAvKiBNZXNzYWdlRGVjb2Rlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTFGQ0IxODYxN0JCRkUwMzAwMzk0Q0Q4IC8qIEFzeW5jaHJvbm91
c05ldHdvcmtMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMjMyOEZGMTYyQzg2
NkEwMEQ4MkY3QSAvKiBNZXNzYWdlRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDNEM4
MjkxNkI4NzZBOTAwNjlEQ0NEIC8qIE1lc3NhZ2VGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUEzRUVEMTIxNjFBNTNENjAwQUVCNEY1IC8qIE1lc3NhZ2VSZWNlaXZlci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC01NDQ5LDYgKzU0NTYsNyBAQAogCQkJCTFBOTBDMjM3MTI2NTA3MTcwMDNFNDRENCAv
KiBQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU3NEE1ODExMkU2NjY4MTAwMkRG
RTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5NTgyRDMxNTND
QkZENzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxRkNC
MTg5MTdCQkZFMDMwMDM5NENEOCAvKiBTeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDRjUwNUU3MTI0MzA0N0IwMDU5NTVBRSAvKiBQbGF0Zm9ybUNl
cnRpZmljYXRlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDNDNBQkIxMjdCOTVEQzAwMzE3
RjE2IC8qIFBsYXRmb3JtUG9wdXBNZW51RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4Nzgw
RkMxMTYxQzJCODAwQ0MyNzY4IC8qIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtNTQ5Myw3ICs1NTAxLDYgQEAKIAkJCQlCQzJEMDIxNzEyQUM0MUNCMDBFNzMy
QTMgLyogU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
QUI0QThEMTI5NkYwQTIwMDIzOTUyRiAvKiBTYW5kYm94RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMUU1NTJDNTE2QUUwNjVGMDA0RUQ2NTMgLyogU2FuZGJveEluaXRpYWxpemF0aW9u
UGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE5QjRGRjUxNkE5RUE5NzAwNjY4NzRE
IC8qIFNjaGVkdWxhYmxlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQxMzA1NDEzODJF
QUMwMDAzNTFFREQgLyogU2VjSXRlbVJlcXVlc3REYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MUQxMzA1NjEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTE3OTA4OEYxNjlCQUE2QTAwNjkwNEM3IC8qIFNlY0l0ZW1TaGltLmggaW4g
SGVhZGVycyAqLywKQEAgLTU1MjAsNyArNTUyNyw2IEBACiAJCQkJMUFCMzFBOTcxNkJDNjg4MTAw
RjZEQkM5IC8qIFN0b3JhZ2VNYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
MTNCRUI0MTYzNUE5QzgwMEYxOUMwMyAvKiBTdHJpbmdSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTI5NkJEODVEMTUwMTlCQzMwMDcxRjQyNCAvKiBTdHJpbmdVdGlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTUxODE1QkEwMTZBNjIyMjEwMDU0NTAxRiAvKiBTeW5jTmV0d29ya1Jl
c291cmNlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUE0MTdDQjEyQzAwQ0NBMDAyQkU2
N0IgLyogVGV4dENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFRUTQxN0NCMTJDMDBDQ0Ew
MDJCRTY3QiAvKiBUZXh0Q2hlY2tlckNvbXBsZXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
NUU0REE0MTJEM0JEM0QwMDk5QTJCQiAvKiBUZXh0Q2hlY2tlclN0YXRlLmggaW4gSGVhZGVycyAq
LywKQEAgLTU3OTUsNiArNTgwMSw3IEBACiAJCQkJQkMxNzc0NjUxMThCOUZGNDAwN0Q5RTlBIC8q
IFdLUGFnZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTE3QjdFMTM4MUYxMTcwMDEy
QTY0MSAvKiBXS1BhZ2VQcml2YXRlTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVGRDM4QzE2
QjBFODhDMDBCMkYwRTggLyogV0tQYWdlVmlzaWJpbGl0eVR5cGVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MUZDQjE4NzE3QkJGRTAzMDAzOTRDRDggLyogTmV0d29ya0xvYWRlckNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0MxMzVBQTkxNzNCMEJDQTAwNTg2QUUyIC8qIFdLUGx1Z2luSW5m
b3JtYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzg2RkY0MTMwQjQ2RDMwMDJDMTI1NyAv
KiBXS1BsdWdpblNpdGVEYXRhTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNENTk3RDAx
MTJCNTZBQzAwRUM4QzIzIC8qIFdLUHJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjcw
NCw2ICs2NzExLDcgQEAKIAkJCQlCQ0NGNjczMzEyQzdGMTVDMDA4RjlDMzUgLyogT3JpZ2luQW5k
RGF0YWJhc2VzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMzg3NDM0MTcyRjU2MTUwMDFCRDg4
QSAvKiBQYWdlQmFubmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDNkQzN0ZDMTcyRjU1NUYw
MDlEMjg0NyAvKiBQYWdlQmFubmVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTFGQ0IxN0Yx
N0JCRkRFNTAwMzk0Q0Q4IC8qIFN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUJDMTExQjUxMTEyRjYxOTIwMDMzN0JBQiAvKiBQYWdlQ2xpZW50SW1w
bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBOTBDMjM4MTI2NTA3MTcwMDNFNDRENCAvKiBQYWdl
T3ZlcmxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTc0QTU4MjEyRTY2NjgxMDAyREZFOTgg
LyogUGFzdGVib2FyZFR5cGVzLm1tIGluIFNvdXJjZXMgKi8sCkBAIC02NzYxLDcgKzY3NjksNiBA
QAogCQkJCUJDMTExQjA5MTEyRjVFM0MwMDMzN0JBQiAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBQUI0QUFBMTI5NkYxNTQwMDIzOTUyRiAvKiBTYW5kYm94
RXh0ZW5zaW9uTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFFNTUyQzQxNkFFMDY1RjAwNEVE
NjUzIC8qIFNhbmRib3hJbml0aWFsaWF0aW9uUGFyYW1ldGVyc01hYy5tbSBpbiBTb3VyY2VzICov
LAotCQkJCTUxOUI0RkY0MTZBOUVBOTcwMDY2ODc0RCAvKiBTY2hlZHVsYWJsZUxvYWRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MUQxMzA1MzEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJl
cXVlc3REYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRDEzMDU1MTM4MkVBQzAwMDM1MUVE
RCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxNzkwODhE
MTY5QkFBNjIwMDY5MDRDNyAvKiBTZWNJdGVtU2hpbS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY3
OTQsNyArNjgwMSw2IEBACiAJCQkJMUE0NEI5NTcxNkI3MzdBQTAwQjdCQkQ4IC8qIFN0b3JhZ2VO
YW1lc3BhY2VJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMTNCRUIzMTYzNUE5QzgwMEYx
OUMwMyAvKiBTdHJpbmdSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk2QkQ4NUUx
NTAxOUJDMzAwNzFGNDI0IC8qIFN0cmluZ1V0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovLAotCQkJ
CTUxODE1QjlGMTZBNjIyMjEwMDU0NTAxRiAvKiBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFaWjQxN0VGMTJDMDBEODcwMDJCRTY3QiAvKiBUZXh0Q2hl
Y2tlckNvbXBsZXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBNDE3RUYxMkMwMEQ4NzAw
MkJFNjdCIC8qIFRleHRDaGVja2VyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBRjI2Mzgx
NDY4N0MzOTAwNEExRThBIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tIGluIFNv
dXJjZXMgKi8sCkBAIC02OTgwLDYgKzY5ODYsNyBAQAogCQkJCUJDOTBBMUQzMTIyREQ1NUUwMEND
OEM1MCAvKiBXZWJVUkxSZXNwb25zZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzkwQTFENzEy
MkRENjZBMDBDQzhDNTAgLyogV2ViVVJMUmVzcG9uc2VNYWMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlDMDMzN0REMTEyN0EyOTgwMDA4RkY0RjQgLyogV2ViV2hlZWxFdmVudC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk1MUZDQjE4NTE3QkJGRTAzMDAzOTRDRDggLyogQXN5bmNocm9ub3VzTmV0d29y
a0xvYWRlckNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOUNENTVBQjEyOEUyOTRGMDAx
MzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTUxMkUzNEU0MTMwQjREMDUwMEFCRDE5QSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNDA3NUYzMTI0RkYwMjcwMDY4RjIwQSAvKiBXS0Fy
cmF5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzA1OCw2ICs3MDY1LDcgQEAKIAkJCQk3Q0Q1RUJC
ODE3NDZBMTVCMDAwQzFDNDUgLyogV0tPYmpDVHlwZVdyYXBwZXJSZWYubW0gaW4gU291cmNlcyAq
LywKIAkJCQlCQzg1ODA2MzEyQjg1MDU3MDBFREVCMkUgLyogV0tPcGVuUGFuZWxQYXJhbWV0ZXJz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDODU4MDYyMTJCODUwNTcwMEVERUIyRSAvKiBXS09w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxRkNCMTg4MTdC
QkZFMDMwMDM5NENEOCAvKiBTeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNENTk3RDYxMTJCNTZEQzAwRUM4QzIzIC8qIFdLUGFnZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzdCNjMzODEyQTQ1QUJBMDBEMTc0QTQgLyogV0tQYWdlR3JvdXAu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMTdCN0QxMzgxRjExNzAwMTJBNjQxIC8qIFdLUGFn
ZVByaXZhdGVNYWMuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>
<flag name="review"
          id="230789"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="230830"
          type_id="3"
          status="-"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>