<?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>234087</bug_id>
          
          <creation_ts>2021-12-09 09:11:45 -0800</creation_ts>
          <short_desc>Merge StorageManager with NetworkStorageManager to manage WebStorage by origin</short_desc>
          <delta_ts>2021-12-19 20:13:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=234497</see_also>
          <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="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>cdumez</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1822155</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-12-09 09:11:45 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822174</commentid>
    <comment_count>1</comment_count>
      <attachid>446563</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-12-09 10:23:55 -0800</bug_when>
    <thetext>Created attachment 446563
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822189</commentid>
    <comment_count>2</comment_count>
      <attachid>446567</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-12-09 10:45:16 -0800</bug_when>
    <thetext>Created attachment 446567
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822236</commentid>
    <comment_count>3</comment_count>
      <attachid>446578</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-12-09 11:34:49 -0800</bug_when>
    <thetext>Created attachment 446578
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822791</commentid>
    <comment_count>4</comment_count>
      <attachid>446752</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-12-10 10:30:01 -0800</bug_when>
    <thetext>Created attachment 446752
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822796</commentid>
    <comment_count>5</comment_count>
      <attachid>446756</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-12-10 10:34:39 -0800</bug_when>
    <thetext>Created attachment 446756
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822814</commentid>
    <comment_count>6</comment_count>
      <attachid>446762</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-12-10 10:57:30 -0800</bug_when>
    <thetext>Created attachment 446762
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822906</commentid>
    <comment_count>7</comment_count>
      <attachid>446762</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-12-10 12:52:40 -0800</bug_when>
    <thetext>Comment on attachment 446762
Patch

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

&gt; Source/WebCore/platform/sql/SQLiteFileSystem.cpp:86
&gt; +        String path = filePath + suffix;

I don&apos;t know if + is as efficient as makeString().

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:458
&gt; +        std::optional&lt;String&gt; optionalLocalStoragePath;

We never use std::optional&lt;String&gt; because String is just a pointer and thus already has a &quot;null&quot; state.

&gt; Source/WebKit/NetworkProcess/storage/LocalStorageManager.cpp:50
&gt; +    auto originIdentifier = fileName.substring(0, fileNameLength - suffixLength);

Probably worth a FIXME comment since we shouldn&apos;t be using origins in file names.

&gt; Source/WebKit/NetworkProcess/storage/LocalStorageManager.cpp:133
&gt; +void LocalStorageManager::ensureStorageArea(const WebCore::ClientOrigin&amp; origin, const String&amp; path, std::optional&lt;Ref&lt;WorkQueue&gt;&gt; workQueue)

`std::optional&lt;Ref&lt;WorkQueue&gt;&gt;` makes little sense. Just use a RefPtr&lt;WorkQueue&gt;.

&gt; Source/WebKit/NetworkProcess/storage/LocalStorageManager.cpp:147
&gt; +    ensureStorageArea(origin, m_path, std::make_optional(WTFMove(workQueue)));

No std::make_optional()

&gt; Source/WebKit/NetworkProcess/storage/LocalStorageManager.h:43
&gt; +    static Vector&lt;WebCore::SecurityOriginData&gt; getOriginsOfLocalStorageData(const String&amp; path);

We don&apos;t usually use &quot;get&quot; prefixes.

&gt; Source/WebKit/NetworkProcess/storage/LocalStorageManager.h:47
&gt; +    bool isActive();

can it be const?

&gt; Source/WebKit/NetworkProcess/storage/LocalStorageManager.h:48
&gt; +    bool hasDataInMemory();

ditto.

&gt; Source/WebKit/NetworkProcess/storage/MemoryStorageArea.cpp:37
&gt; +    m_map = makeUnique&lt;WebCore::StorageMap&gt;(WebCore::StorageMap::noQuota);

Should be part of the initializer list, not the constructor body.

Also, does it really need to be a unique_ptr ? It seems like it can never be null and you rely on the StorageMap assignment operator for copying.

&gt; Source/WebKit/NetworkProcess/storage/MemoryStorageArea.cpp:80
&gt; +    if (!m_map-&gt;length())

Do we really want to return an error when calling clear() and the StorageArea is already empty? Seems odd.

&gt; Source/WebKit/NetworkProcess/storage/MemoryStorageArea.cpp:99
&gt; +

That&apos;s quite a few extra lines here.

&gt; Source/WebKit/NetworkProcess/storage/MemoryStorageArea.h:37
&gt; +    WTF_MAKE_FAST_ALLOCATED;

Not needed, StorageAreaBase already has it.

&gt; Source/WebKit/NetworkProcess/storage/MemoryStorageArea.h:39
&gt; +    MemoryStorageArea(const WebCore::ClientOrigin&amp;, StorageAreaBase::StorageType = StorageAreaBase::StorageType::Session);

explicit

&gt; Source/WebKit/NetworkProcess/storage/MemoryStorageArea.h:49
&gt; +    HashMap&lt;String, String&gt; allItems() final;

can this be const ?

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:103
&gt; +Ref&lt;NetworkStorageManager&gt; NetworkStorageManager::create(PAL::SessionID sessionID, const String&amp; path, std::optional&lt;String&gt; customLocalStoragePath)

No std::optional&lt;String&gt; please and also don&apos;t pass by value.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:108
&gt; +NetworkStorageManager::NetworkStorageManager(PAL::SessionID sessionID, const String&amp; path, std::optional&lt;String&gt; customLocalStoragePath)

ditto.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:132
&gt; +bool NetworkStorageManager::canHandleTypes(OptionSet&lt;WebsiteDataType&gt; types)

can this be const?

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:214
&gt; +        std::optional&lt;String&gt; localStoragePath;

No std::optional&lt;String&gt;, just String

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:429
&gt; +            if (openingOrigin == &quot;.DS_Store&quot;)

Should probably be in a #if PLATFORM(COCOA). Alternatively, maybe we could skip all files starting with a &apos;.&apos;, in which case it would be more cross-platform.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:441
&gt; +    for (auto origin : m_localOriginStorageManagers.keys())

auto&amp;

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:444
&gt; +    forEachOriginDirectory([&amp;](auto directory) mutable {

auto&amp;

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:451
&gt; +        for (auto origin : origins)

auto&amp;

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:463
&gt; +    auto allOrigins = getAllOrigins();

We don&apos;t need this local variable, you can just use getAllOrigins() if your for loop.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:464
&gt; +    for (auto origin : allOrigins) {

auto&amp;

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:498
&gt; +    auto allOrigins = getAllOrigins();

We don&apos;t need this local variable.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:499
&gt; +    for (auto origin : allOrigins) {

auto&amp;

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:586
&gt; +        std::optional&lt;String&gt; newLocalStoragePath;

no std::optional&lt;String&gt;, just String

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:656
&gt; +

extra line.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:692
&gt; +        return completionHandler(HashMap&lt;String, String&gt; { });

completionHandler({ }) probably works?

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:701
&gt; +    auto storageArea = m_storageAreaRegistry-&gt;getStorageArea(identifier);

We can reduce the scope by moving it to the if condition.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:702
&gt; +    bool quotaError = false;

needs a prefix since this is a Boolean variable. e.g. hasQuotaError or didExceedQuota.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:703
&gt; +    if (storageArea) {

if (auto storageArea = m_storageAreaRegistry-&gt;getStorageArea(identifier))

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:716
&gt; +    auto storageArea = m_storageAreaRegistry-&gt;getStorageArea(identifier);

Can be moved inside the if condition.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:727
&gt; +    auto storageArea = m_storageAreaRegistry-&gt;getStorageArea(identifier);

ditto.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:76
&gt; +    NetworkStorageManager(PAL::SessionID, const String&amp; path, std::optional&lt;String&gt; customLocalStoragePath);

No std::optional&lt;String&gt;, just const String&amp; or String&amp;&amp;.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:84
&gt; +    HashSet&lt;WebCore::ClientOrigin&gt; getAllOrigins();

can this be const?

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:92
&gt; +    // Message handlers for FileSystem

Period at the end.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:110
&gt; +    // Message handlers for WebStorage

ditto.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:111
&gt; +    void connectToLocalStorageArea(IPC::Connection&amp;, StorageNamespaceIdentifier, const WebCore::SecurityOriginData&amp;, CompletionHandler&lt;void(StorageAreaIdentifier)&gt;&amp;&amp;);

Assuming those are IPC handlers, you can do WebCore::SecurityOriginData&amp;&amp;.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:112
&gt; +    void connectToTransientLocalStorageArea(IPC::Connection&amp;, StorageNamespaceIdentifier, const WebCore::SecurityOriginData&amp;, const WebCore::SecurityOriginData&amp;, CompletionHandler&lt;void(StorageAreaIdentifier)&gt;&amp;&amp;);

ditto.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:113
&gt; +    void connectToSessionStorageArea(IPC::Connection&amp;, StorageNamespaceIdentifier, const WebCore::SecurityOriginData&amp;, CompletionHandler&lt;void(StorageAreaIdentifier)&gt;&amp;&amp;);

ditto.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:117
&gt; +    void setItem(IPC::Connection&amp;, StorageAreaIdentifier, StorageAreaImplIdentifier, uint64_t seed, const String&amp; key, const String&amp; value, const String&amp; urlString);

String&amp;&amp; for all the strings.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:118
&gt; +    void removeItem(IPC::Connection&amp;, StorageAreaIdentifier, StorageAreaImplIdentifier, uint64_t seed, const String&amp; key, const String&amp; urlString);

ditto.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:119
&gt; +    void clear(IPC::Connection&amp;, StorageAreaIdentifier, StorageAreaImplIdentifier, uint64_t seed, const String&amp; urlString);

String&amp;&amp;

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:130
&gt; +    std::optional&lt;String&gt; m_customLocalStoragePath;

Never std::optional&lt;String&gt;, just String.

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:46
&gt; +    StorageBucket(const String&amp; rootPath, const String&amp; identifier, std::optional&lt;String&gt; localStoragePath)

const String&amp; or String&amp;&amp;, never std::optional&lt;String&gt;

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:70
&gt; +        if (storageIdentifier == &quot;FileSystem&quot;)

What about LocalStorage and Session Storage?

Seems logical to mirror...

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:81
&gt; +        case StorageType::LocalStorage:

... this function.

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:112
&gt; +            m_localStorageManager = makeUnique&lt;LocalStorageManager&gt;(m_localStoragePath ? *m_localStoragePath : String { }, registry);

No ternary.

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:135
&gt;      bool isActive()

can this be const?

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:140
&gt; +    bool isEmpty()

can this be const?

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:155
&gt; +    OptionSet&lt;WebsiteDataType&gt; fetchData(OptionSet&lt;WebsiteDataType&gt; types)

I don&apos;t really understand these names. It says it is fetching data but it doesn&apos;t seem to return any data, just data types. Should it be fetchDataTypes()? It is also taking the types in parameter so even fetchDataTypes() would be unclear IMO.

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:175
&gt; +    void moveData(const String&amp; path, std::optional&lt;String&gt; localStoragePath)

No std::optional&lt;String&gt;

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:188
&gt; +    OptionSet&lt;WebsiteDataType&gt; fetchDataInMemory(OptionSet&lt;WebsiteDataType&gt; types)

Weird name again.

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:190
&gt; +        OptionSet&lt;WebsiteDataType&gt; result { };

No need for { }

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:204
&gt; +    OptionSet&lt;WebsiteDataType&gt; fetchDataFromDisk(OptionSet&lt;WebsiteDataType&gt; types)

Weird name again.

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:206
&gt; +        OptionSet&lt;WebsiteDataType&gt; result { };

No need for { }

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:228
&gt; +    void deleteLocalStorageData(WallTime time)

deleteLocalStorageData -&gt; deleteLocalStorageDataSince? given that it is taking a time in parameter.

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:231
&gt; +            m_localStorageManager-&gt;clearData();

This seems to ignore the time?

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:258
&gt; +    std::optional&lt;String&gt; m_localStoragePath;

std::optional&lt;String&gt; -&gt; String

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:262
&gt; +OriginStorageManager::OriginStorageManager(String&amp;&amp; path, std::optional&lt;String&gt; localStoragePath)

ditto.

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:315
&gt; +bool OriginStorageManager::isEmpty()

can this be const?

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:29
&gt; +#include &lt;WebCore/ClientOrigin.h&gt;

Why the include instead of the forward declare?

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:44
&gt; +    OriginStorageManager(String&amp;&amp; path, std::optional&lt;String&gt; localStoragePath);

std::optional&lt;String&gt; -&gt; String&amp;&amp; or const String&amp;

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:55
&gt;      bool isActive();

can this be const?

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:56
&gt; +    bool isEmpty();

ditto.

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:57
&gt; +    OptionSet&lt;WebsiteDataType&gt; fetchData(OptionSet&lt;WebsiteDataType&gt;);

Weird name, really unclear what this does.

Can it be const too?

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:59
&gt; +    void moveData(const String&amp; newPath, std::optional&lt;String&gt; localStoragePath);

no std::optional&lt;&gt;

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:73
&gt; +    std::optional&lt;String&gt; m_localStoragePath;

no std::optional&lt;&gt;

&gt; Source/WebKit/NetworkProcess/storage/SQLiteStorageArea.cpp:68
&gt; +{

We should add plenty of ASSERT(!isMainRunLoop()) in this class since it does database operations and we wouldn&apos;t want those to happen on the main thread, ever.

&gt; Source/WebKit/NetworkProcess/storage/SQLiteStorageArea.cpp:176
&gt; +    m_queue-&gt;dispatchAfter(transactionDuration, [weakThis = WeakPtr { *this }] {

I assume SQLiteStorageArea only gets constructed and destroyed on the queue? Otherwise, the usage of weakThis here would be unsafe.

&gt; Source/WebKit/NetworkProcess/storage/SQLiteStorageArea.cpp:192
&gt; +        auto result = m_database-&gt;prepareHeapStatement(statementString(type));

Can be moved inside the if condition

&gt; Source/WebKit/NetworkProcess/storage/SQLiteStorageArea.h:35
&gt; +    WTF_MAKE_FAST_ALLOCATED;

No needed, StorageAreaBase already has this.

&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp:39
&gt; +bool SessionStorageManager::isActive()

can this be const?

&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp:46
&gt; +bool SessionStorageManager::hasDataInMemory()

can this be const?

&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp:70
&gt; +    m_storageAreasByNamespace.set(namespaceIdentifier, identifier);

Why are we using set() instead of add()? Do we expect to overwrite sometimes?

&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp:71
&gt; +    m_storageAreas.set(identifier, WTFMove(storageArea));

ditto.

&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp:108
&gt; +

To many blank lines here.

&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.h:39
&gt; +    SessionStorageManager(StorageAreaRegistry&amp;);

explicit

&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.h:40
&gt; +    bool isActive();

const ?

&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.h:41
&gt; +    bool hasDataInMemory();

const ?

&gt; Source/WebKit/NetworkProcess/storage/StorageAreaBase.cpp:2
&gt; + * Copyright (C) 2021 Apple Inc. All rights reserved.

It is not clear to me which code is new and which code was moved. However, I believe that some code in this patch was just moved. When you move code (even if it gets modified), you should maintain the copyright header.
Now it all looks like new code from 2021 when I am pretty sure that some of the code is older and was merely moved.

&gt; Source/WebKit/NetworkProcess/storage/StorageAreaBase.cpp:79
&gt; +

Too many blank lines

&gt; Source/WebKit/NetworkProcess/storage/StorageAreaBase.h:50
&gt; +    StorageAreaBase(unsigned quota, const WebCore::ClientOrigin&amp;);

The constructor should be protected, not public since this is a virtual interface.

&gt; Source/WebKit/NetworkProcess/storage/StorageAreaBase.h:53
&gt; +    enum class Type : uint8_t { SQLite, Memory };

bool would suffice, not uint8_t.

&gt; Source/WebKit/NetworkProcess/storage/StorageAreaBase.h:55
&gt; +    enum class StorageType : bool { Session, Local };

did it right here :)

&gt; Source/WebKit/NetworkProcess/storage/StorageAreaBase.h:85
&gt; +

Too many blank lines.

&gt; Source/WebKit/NetworkProcess/storage/StorageAreaRegistry.cpp:51
&gt; +    if (auto storageArea = m_storageAreas.get(identifier))

seems this could all just be on one line?
```
return m_storageAreas.get(identifier).get();
```

&gt; Source/WebKit/NetworkProcess/storage/StorageAreaRegistry.h:28
&gt; +#include &quot;Connection.h&quot;

What is this for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822950</commentid>
    <comment_count>8</comment_count>
      <attachid>446762</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-12-10 13:43:55 -0800</bug_when>
    <thetext>Comment on attachment 446762
Patch

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

&gt;&gt; Source/WebCore/platform/sql/SQLiteFileSystem.cpp:86
&gt;&gt; +        String path = filePath + suffix;
&gt; 
&gt; I don&apos;t know if + is as efficient as makeString().

It seems operator uses StringAppend, and StringAppend uses tryMakeString, and makeString uses tryMakeString.

&gt;&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:458
&gt;&gt; +        std::optional&lt;String&gt; optionalLocalStoragePath;
&gt; 
&gt; We never use std::optional&lt;String&gt; because String is just a pointer and thus already has a &quot;null&quot; state.

I guess I can change it to String. Try to make a more obvious difference between empty string for ephemeral session v.s. not using custom local storage path for persistent session.

&gt;&gt; Source/WebKit/NetworkProcess/storage/LocalStorageManager.cpp:50
&gt;&gt; +    auto originIdentifier = fileName.substring(0, fileNameLength - suffixLength);
&gt; 
&gt; Probably worth a FIXME comment since we shouldn&apos;t be using origins in file names.

Sure. This function should only be used for existing files.

&gt;&gt; Source/WebKit/NetworkProcess/storage/LocalStorageManager.cpp:133
&gt;&gt; +void LocalStorageManager::ensureStorageArea(const WebCore::ClientOrigin&amp; origin, const String&amp; path, std::optional&lt;Ref&lt;WorkQueue&gt;&gt; workQueue)
&gt; 
&gt; `std::optional&lt;Ref&lt;WorkQueue&gt;&gt;` makes little sense. Just use a RefPtr&lt;WorkQueue&gt;.

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/storage/LocalStorageManager.cpp:147
&gt;&gt; +    ensureStorageArea(origin, m_path, std::make_optional(WTFMove(workQueue)));
&gt; 
&gt; No std::make_optional()

Will remove.

&gt;&gt; Source/WebKit/NetworkProcess/storage/LocalStorageManager.h:43
&gt;&gt; +    static Vector&lt;WebCore::SecurityOriginData&gt; getOriginsOfLocalStorageData(const String&amp; path);
&gt; 
&gt; We don&apos;t usually use &quot;get&quot; prefixes.

Okay, will remove.

&gt;&gt; Source/WebKit/NetworkProcess/storage/LocalStorageManager.h:47
&gt;&gt; +    bool isActive();
&gt; 
&gt; can it be const?

Yes.

&gt;&gt; Source/WebKit/NetworkProcess/storage/LocalStorageManager.h:48
&gt;&gt; +    bool hasDataInMemory();
&gt; 
&gt; ditto.

Yes.

&gt;&gt; Source/WebKit/NetworkProcess/storage/MemoryStorageArea.cpp:37
&gt;&gt; +    m_map = makeUnique&lt;WebCore::StorageMap&gt;(WebCore::StorageMap::noQuota);
&gt; 
&gt; Should be part of the initializer list, not the constructor body.
&gt; 
&gt; Also, does it really need to be a unique_ptr ? It seems like it can never be null and you rely on the StorageMap assignment operator for copying.

I guess it does not need to be a unique_ptr; will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/MemoryStorageArea.cpp:80
&gt;&gt; +    if (!m_map-&gt;length())
&gt; 
&gt; Do we really want to return an error when calling clear() and the StorageArea is already empty? Seems odd.

No, we can return void.

&gt;&gt; Source/WebKit/NetworkProcess/storage/MemoryStorageArea.cpp:99
&gt;&gt; +
&gt; 
&gt; That&apos;s quite a few extra lines here.

Will remove.

&gt;&gt; Source/WebKit/NetworkProcess/storage/MemoryStorageArea.h:37
&gt;&gt; +    WTF_MAKE_FAST_ALLOCATED;
&gt; 
&gt; Not needed, StorageAreaBase already has it.

Will remove.

&gt;&gt; Source/WebKit/NetworkProcess/storage/MemoryStorageArea.h:39
&gt;&gt; +    MemoryStorageArea(const WebCore::ClientOrigin&amp;, StorageAreaBase::StorageType = StorageAreaBase::StorageType::Session);
&gt; 
&gt; explicit

Will add.

&gt;&gt; Source/WebKit/NetworkProcess/storage/MemoryStorageArea.h:49
&gt;&gt; +    HashMap&lt;String, String&gt; allItems() final;
&gt; 
&gt; can this be const ?

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:103
&gt;&gt; +Ref&lt;NetworkStorageManager&gt; NetworkStorageManager::create(PAL::SessionID sessionID, const String&amp; path, std::optional&lt;String&gt; customLocalStoragePath)
&gt; 
&gt; No std::optional&lt;String&gt; please and also don&apos;t pass by value.

Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:108
&gt;&gt; +NetworkStorageManager::NetworkStorageManager(PAL::SessionID sessionID, const String&amp; path, std::optional&lt;String&gt; customLocalStoragePath)
&gt; 
&gt; ditto.

Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:132
&gt;&gt; +bool NetworkStorageManager::canHandleTypes(OptionSet&lt;WebsiteDataType&gt; types)
&gt; 
&gt; can this be const?

Yes.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:214
&gt;&gt; +        std::optional&lt;String&gt; localStoragePath;
&gt; 
&gt; No std::optional&lt;String&gt;, just String

Okay.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:429
&gt;&gt; +            if (openingOrigin == &quot;.DS_Store&quot;)
&gt; 
&gt; Should probably be in a #if PLATFORM(COCOA). Alternatively, maybe we could skip all files starting with a &apos;.&apos;, in which case it would be more cross-platform.

good idea; will skip all &apos;.&apos; files.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:441
&gt;&gt; +    for (auto origin : m_localOriginStorageManagers.keys())
&gt; 
&gt; auto&amp;

Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:444
&gt;&gt; +    forEachOriginDirectory([&amp;](auto directory) mutable {
&gt; 
&gt; auto&amp;

Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:451
&gt;&gt; +        for (auto origin : origins)
&gt; 
&gt; auto&amp;

Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:463
&gt;&gt; +    auto allOrigins = getAllOrigins();
&gt; 
&gt; We don&apos;t need this local variable, you can just use getAllOrigins() if your for loop.

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:464
&gt;&gt; +    for (auto origin : allOrigins) {
&gt; 
&gt; auto&amp;

Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:498
&gt;&gt; +    auto allOrigins = getAllOrigins();
&gt; 
&gt; We don&apos;t need this local variable.

Will remove.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:499
&gt;&gt; +    for (auto origin : allOrigins) {
&gt; 
&gt; auto&amp;

Will add.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:586
&gt;&gt; +        std::optional&lt;String&gt; newLocalStoragePath;
&gt; 
&gt; no std::optional&lt;String&gt;, just String

Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:656
&gt;&gt; +
&gt; 
&gt; extra line.

Will remove.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:692
&gt;&gt; +        return completionHandler(HashMap&lt;String, String&gt; { });
&gt; 
&gt; completionHandler({ }) probably works?

Will try.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:701
&gt;&gt; +    auto storageArea = m_storageAreaRegistry-&gt;getStorageArea(identifier);
&gt; 
&gt; We can reduce the scope by moving it to the if condition.

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:702
&gt;&gt; +    bool quotaError = false;
&gt; 
&gt; needs a prefix since this is a Boolean variable. e.g. hasQuotaError or didExceedQuota.

Okay.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:703
&gt;&gt; +    if (storageArea) {
&gt; 
&gt; if (auto storageArea = m_storageAreaRegistry-&gt;getStorageArea(identifier))

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:716
&gt;&gt; +    auto storageArea = m_storageAreaRegistry-&gt;getStorageArea(identifier);
&gt; 
&gt; Can be moved inside the if condition.

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:727
&gt;&gt; +    auto storageArea = m_storageAreaRegistry-&gt;getStorageArea(identifier);
&gt; 
&gt; ditto.

Will move.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:76
&gt;&gt; +    NetworkStorageManager(PAL::SessionID, const String&amp; path, std::optional&lt;String&gt; customLocalStoragePath);
&gt; 
&gt; No std::optional&lt;String&gt;, just const String&amp; or String&amp;&amp;.

Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:84
&gt;&gt; +    HashSet&lt;WebCore::ClientOrigin&gt; getAllOrigins();
&gt; 
&gt; can this be const?

Yes.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:92
&gt;&gt; +    // Message handlers for FileSystem
&gt; 
&gt; Period at the end.

Will add.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:110
&gt;&gt; +    // Message handlers for WebStorage
&gt; 
&gt; ditto.

Will add.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:111
&gt;&gt; +    void connectToLocalStorageArea(IPC::Connection&amp;, StorageNamespaceIdentifier, const WebCore::SecurityOriginData&amp;, CompletionHandler&lt;void(StorageAreaIdentifier)&gt;&amp;&amp;);
&gt; 
&gt; Assuming those are IPC handlers, you can do WebCore::SecurityOriginData&amp;&amp;.

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:112
&gt;&gt; +    void connectToTransientLocalStorageArea(IPC::Connection&amp;, StorageNamespaceIdentifier, const WebCore::SecurityOriginData&amp;, const WebCore::SecurityOriginData&amp;, CompletionHandler&lt;void(StorageAreaIdentifier)&gt;&amp;&amp;);
&gt; 
&gt; ditto.

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:113
&gt;&gt; +    void connectToSessionStorageArea(IPC::Connection&amp;, StorageNamespaceIdentifier, const WebCore::SecurityOriginData&amp;, CompletionHandler&lt;void(StorageAreaIdentifier)&gt;&amp;&amp;);
&gt; 
&gt; ditto.

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:117
&gt;&gt; +    void setItem(IPC::Connection&amp;, StorageAreaIdentifier, StorageAreaImplIdentifier, uint64_t seed, const String&amp; key, const String&amp; value, const String&amp; urlString);
&gt; 
&gt; String&amp;&amp; for all the strings.

Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:118
&gt;&gt; +    void removeItem(IPC::Connection&amp;, StorageAreaIdentifier, StorageAreaImplIdentifier, uint64_t seed, const String&amp; key, const String&amp; urlString);
&gt; 
&gt; ditto.

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:119
&gt;&gt; +    void clear(IPC::Connection&amp;, StorageAreaIdentifier, StorageAreaImplIdentifier, uint64_t seed, const String&amp; urlString);
&gt; 
&gt; String&amp;&amp;

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.h:130
&gt;&gt; +    std::optional&lt;String&gt; m_customLocalStoragePath;
&gt; 
&gt; Never std::optional&lt;String&gt;, just String.

Okay.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:46
&gt;&gt; +    StorageBucket(const String&amp; rootPath, const String&amp; identifier, std::optional&lt;String&gt; localStoragePath)
&gt; 
&gt; const String&amp; or String&amp;&amp;, never std::optional&lt;String&gt;

Okay.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:70
&gt;&gt; +        if (storageIdentifier == &quot;FileSystem&quot;)
&gt; 
&gt; What about LocalStorage and Session Storage?
&gt; 
&gt; Seems logical to mirror...

Will add.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:81
&gt;&gt; +        case StorageType::LocalStorage:
&gt; 
&gt; ... this function.

ack.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:112
&gt;&gt; +            m_localStorageManager = makeUnique&lt;LocalStorageManager&gt;(m_localStoragePath ? *m_localStoragePath : String { }, registry);
&gt; 
&gt; No ternary.

Will remove.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:135
&gt;&gt;      bool isActive()
&gt; 
&gt; can this be const?

Yes.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:140
&gt;&gt; +    bool isEmpty()
&gt; 
&gt; can this be const?

Yes.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:155
&gt;&gt; +    OptionSet&lt;WebsiteDataType&gt; fetchData(OptionSet&lt;WebsiteDataType&gt; types)
&gt; 
&gt; I don&apos;t really understand these names. It says it is fetching data but it doesn&apos;t seem to return any data, just data types. Should it be fetchDataTypes()? It is also taking the types in parameter so even fetchDataTypes() would be unclear IMO.

Will change it to something like fetchDataTypesInList().

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:175
&gt;&gt; +    void moveData(const String&amp; path, std::optional&lt;String&gt; localStoragePath)
&gt; 
&gt; No std::optional&lt;String&gt;

Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:188
&gt;&gt; +    OptionSet&lt;WebsiteDataType&gt; fetchDataInMemory(OptionSet&lt;WebsiteDataType&gt; types)
&gt; 
&gt; Weird name again.

Will change to fetchDataTypesInListFromMemory()

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:190
&gt;&gt; +        OptionSet&lt;WebsiteDataType&gt; result { };
&gt; 
&gt; No need for { }

Will remove.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:204
&gt;&gt; +    OptionSet&lt;WebsiteDataType&gt; fetchDataFromDisk(OptionSet&lt;WebsiteDataType&gt; types)
&gt; 
&gt; Weird name again.

Will change to fetchDataTypesInListFromDisk()

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:206
&gt;&gt; +        OptionSet&lt;WebsiteDataType&gt; result { };
&gt; 
&gt; No need for { }

Will remove.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:228
&gt;&gt; +    void deleteLocalStorageData(WallTime time)
&gt; 
&gt; deleteLocalStorageData -&gt; deleteLocalStorageDataSince? given that it is taking a time in parameter.

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:231
&gt;&gt; +            m_localStorageManager-&gt;clearData();
&gt; 
&gt; This seems to ignore the time?

ah nice catch; should probably check modification time first and then decide whether we need to clear data here. Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:258
&gt;&gt; +    std::optional&lt;String&gt; m_localStoragePath;
&gt; 
&gt; std::optional&lt;String&gt; -&gt; String

Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:262
&gt;&gt; +OriginStorageManager::OriginStorageManager(String&amp;&amp; path, std::optional&lt;String&gt; localStoragePath)
&gt; 
&gt; ditto.

Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:315
&gt;&gt; +bool OriginStorageManager::isEmpty()
&gt; 
&gt; can this be const?

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:29
&gt;&gt; +#include &lt;WebCore/ClientOrigin.h&gt;
&gt; 
&gt; Why the include instead of the forward declare?

oh this was added when I added ClientOrigin as parameter in the file; not needed any more. Will change back.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:44
&gt;&gt; +    OriginStorageManager(String&amp;&amp; path, std::optional&lt;String&gt; localStoragePath);
&gt; 
&gt; std::optional&lt;String&gt; -&gt; String&amp;&amp; or const String&amp;

Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:55
&gt;&gt;      bool isActive();
&gt; 
&gt; can this be const?

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:56
&gt;&gt; +    bool isEmpty();
&gt; 
&gt; ditto.

Will add const.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:57
&gt;&gt; +    OptionSet&lt;WebsiteDataType&gt; fetchData(OptionSet&lt;WebsiteDataType&gt;);
&gt; 
&gt; Weird name, really unclear what this does.
&gt; 
&gt; Can it be const too?

Yes.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:59
&gt;&gt; +    void moveData(const String&amp; newPath, std::optional&lt;String&gt; localStoragePath);
&gt; 
&gt; no std::optional&lt;&gt;

Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.h:73
&gt;&gt; +    std::optional&lt;String&gt; m_localStoragePath;
&gt; 
&gt; no std::optional&lt;&gt;

Wil change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/SQLiteStorageArea.cpp:68
&gt;&gt; +{
&gt; 
&gt; We should add plenty of ASSERT(!isMainRunLoop()) in this class since it does database operations and we wouldn&apos;t want those to happen on the main thread, ever.

Okay, will add.

&gt;&gt; Source/WebKit/NetworkProcess/storage/SQLiteStorageArea.cpp:176
&gt;&gt; +    m_queue-&gt;dispatchAfter(transactionDuration, [weakThis = WeakPtr { *this }] {
&gt; 
&gt; I assume SQLiteStorageArea only gets constructed and destroyed on the queue? Otherwise, the usage of weakThis here would be unsafe.

Yes, it&apos;s used only on one queue.

&gt;&gt; Source/WebKit/NetworkProcess/storage/SQLiteStorageArea.cpp:192
&gt;&gt; +        auto result = m_database-&gt;prepareHeapStatement(statementString(type));
&gt; 
&gt; Can be moved inside the if condition

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/storage/SQLiteStorageArea.h:35
&gt;&gt; +    WTF_MAKE_FAST_ALLOCATED;
&gt; 
&gt; No needed, StorageAreaBase already has this.

Will remove.

&gt;&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp:39
&gt;&gt; +bool SessionStorageManager::isActive()
&gt; 
&gt; can this be const?

Yes.

&gt;&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp:46
&gt;&gt; +bool SessionStorageManager::hasDataInMemory()
&gt; 
&gt; can this be const?

Yes.

&gt;&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp:70
&gt;&gt; +    m_storageAreasByNamespace.set(namespaceIdentifier, identifier);
&gt; 
&gt; Why are we using set() instead of add()? Do we expect to overwrite sometimes?

I think we don&apos;t expect overwrite (unless there&apos;s some edge case I&apos;m not aware of)

&gt;&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp:71
&gt;&gt; +    m_storageAreas.set(identifier, WTFMove(storageArea));
&gt; 
&gt; ditto.

Will change to add.

&gt;&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.cpp:108
&gt;&gt; +
&gt; 
&gt; To many blank lines here.

Will remove.

&gt;&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.h:39
&gt;&gt; +    SessionStorageManager(StorageAreaRegistry&amp;);
&gt; 
&gt; explicit

Will add.

&gt;&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.h:40
&gt;&gt; +    bool isActive();
&gt; 
&gt; const ?

Will add.

&gt;&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.h:41
&gt;&gt; +    bool hasDataInMemory();
&gt; 
&gt; const ?

Will add.

&gt;&gt; Source/WebKit/NetworkProcess/storage/StorageAreaBase.cpp:2
&gt;&gt; + * Copyright (C) 2021 Apple Inc. All rights reserved.
&gt; 
&gt; It is not clear to me which code is new and which code was moved. However, I believe that some code in this patch was just moved. When you move code (even if it gets modified), you should maintain the copyright header.
&gt; Now it all looks like new code from 2021 when I am pretty sure that some of the code is older and was merely moved.

Sure, I will update the date info here.

&gt;&gt; Source/WebKit/NetworkProcess/storage/StorageAreaBase.cpp:79
&gt;&gt; +
&gt; 
&gt; Too many blank lines

Will remove.

&gt;&gt; Source/WebKit/NetworkProcess/storage/StorageAreaBase.h:50
&gt;&gt; +    StorageAreaBase(unsigned quota, const WebCore::ClientOrigin&amp;);
&gt; 
&gt; The constructor should be protected, not public since this is a virtual interface.

Will move.

&gt;&gt; Source/WebKit/NetworkProcess/storage/StorageAreaBase.h:53
&gt;&gt; +    enum class Type : uint8_t { SQLite, Memory };
&gt; 
&gt; bool would suffice, not uint8_t.

I was considering about possibility of adding other implementation (like noSQL database); but seems Okay to use bool now.

&gt;&gt; Source/WebKit/NetworkProcess/storage/StorageAreaBase.h:55
&gt;&gt; +    enum class StorageType : bool { Session, Local };
&gt; 
&gt; did it right here :)

And storage type can only be either Session or Local (Persistent) :)

&gt;&gt; Source/WebKit/NetworkProcess/storage/StorageAreaBase.h:85
&gt;&gt; +
&gt; 
&gt; Too many blank lines.

Will remove.

&gt;&gt; Source/WebKit/NetworkProcess/storage/StorageAreaRegistry.cpp:51
&gt;&gt; +    if (auto storageArea = m_storageAreas.get(identifier))
&gt; 
&gt; seems this could all just be on one line?
&gt; ```
&gt; return m_storageAreas.get(identifier).get();
&gt; ```

Will change.

&gt;&gt; Source/WebKit/NetworkProcess/storage/StorageAreaRegistry.h:28
&gt;&gt; +#include &quot;Connection.h&quot;
&gt; 
&gt; What is this for?

I forgot why I added this. Will remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823071</commentid>
    <comment_count>9</comment_count>
      <attachid>446838</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-12-10 16:12:06 -0800</bug_when>
    <thetext>Created attachment 446838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823094</commentid>
    <comment_count>10</comment_count>
      <attachid>446838</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-12-10 16:38:09 -0800</bug_when>
    <thetext>Comment on attachment 446838
Patch

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

r=me assuming the bots are happy.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:321
&gt; +    for (auto&amp; manager : m_storageManagers.values())

I think eventually we&apos;ll want to store the NetworkStorageManager on the NetworkSession object and get rid of the NetworkProcess::m_storageManagers HashMap.
Probably shouldn&apos;t be done in this already very large patch though.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:1933
&gt; +            iterator-&gt;value-&gt;deleteDataForRegistrableDomains(websiteDataTypes, domainsToDeleteAllNonCookieWebsiteDataFor, [callbackAggregator](auto deletedDomains) mutable {

auto&amp;&amp;

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:1934
&gt; +                for (auto domain : deletedDomains)

auto&amp;

&gt; Source/WebKit/NetworkProcess/storage/LocalStorageManager.cpp:144
&gt; +        m_storageArea = makeUnique&lt;SQLiteStorageArea&gt;(localStorageQuotaInBytes, origin, path, Ref { *workQueue });

Unnecessary ref counting churn, you want `workQueue.releaseNonNull()`.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:426
&gt; +            if (openingOrigin.startsWith(&quot;.&quot;))

openingOrigin.startsWith(&apos;.&apos;) is more efficient here.

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:457
&gt; +    for (auto origin : getAllOrigins()) {

auto&amp;

&gt; Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp:491
&gt; +    for (auto origin : getAllOrigins()) {

auto&amp;

&gt; Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp:148
&gt; +            return file != &quot;.DS_Store&quot;_s &amp;&amp; file != originFileName;

Probably want a #if PLATFORM(COCOA) for the .DS_Store check.

&gt; Source/WebKit/NetworkProcess/storage/SessionStorageManager.h:59
&gt; +

extra lines</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823306</commentid>
    <comment_count>11</comment_count>
      <attachid>446928</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-12-12 01:34:07 -0800</bug_when>
    <thetext>Created attachment 446928
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823325</commentid>
    <comment_count>12</comment_count>
      <attachid>446937</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-12-12 11:33:34 -0800</bug_when>
    <thetext>Created attachment 446937
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823350</commentid>
    <comment_count>13</comment_count>
      <attachid>446949</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-12-12 16:18:23 -0800</bug_when>
    <thetext>Created attachment 446949
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823381</commentid>
    <comment_count>14</comment_count>
      <attachid>446961</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-12-12 20:50:53 -0800</bug_when>
    <thetext>Created attachment 446961
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823383</commentid>
    <comment_count>15</comment_count>
      <attachid>446963</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-12-12 21:35:09 -0800</bug_when>
    <thetext>Created attachment 446963
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823404</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-12 23:41:08 -0800</bug_when>
    <thetext>Committed r286936 (245162@main): &lt;https://commits.webkit.org/245162@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 446963.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823405</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-12 23:42:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/86399162&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446563</attachid>
            <date>2021-12-09 10:23:55 -0800</date>
            <delta_ts>2021-12-09 10:45:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234087-20211209102354.patch</filename>
            <type>text/plain</type>
            <size>172424</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODliNmU1ZGYyYWNlMzcy
NDEyMzhjODYxNzVlNjg0MjJlYWE2MWVjYy4uMjhiM2M0NWZiZjgyODIyOTM2OGI4Yjc3M2FiOTE0
M2FlYjRmNWI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTEyLTA5ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIFN0b3JhZ2VNYW5h
Z2VyIHdpdGggTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIHRvIG1hbmFnZSBXZWJTdG9yYWdlIGJ5IG9y
aWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVGaWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlRmlsZVN5c3RlbS5oOgorCiAyMDIxLTEyLTA3ICBLeWxlIFBpZGRpbmd0b24gIDxrcGlk
ZGluZ3RvbkBhcHBsZS5jb20+CiAgICAgICAgIFJvbGwgQU5HTEUgdG8gaW5jbHVkZSB1cHN0cmVh
bWVkIE1ldGFsIGJhY2tlbmQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMDg5NgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBlYzQyYzU2NDUwMjc2YTJkZjQ3MGU5OTk2NjJj
MGQxMTJjY2U1ODYwLi5hY2MyNzQ5YWY3OWFlNzg3NjBkYTczOTUyNTEwYzMyNDdiMThlNzM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDIwMiBAQAorMjAyMS0xMi0wOSAgU2lodWkgTGl1ICA8c2lodWlf
bGl1QGFwcGxlLmNvbT4KKworICAgICAgICBNZXJnZSBTdG9yYWdlTWFuYWdlciB3aXRoIE5ldHdv
cmtTdG9yYWdlTWFuYWdlciB0byBtYW5hZ2UgV2ViU3RvcmFnZSBieSBvcmlnaW4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDA4NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIG5ldHdvcmsgcHJvY2Vz
cywgV2ViU3RvcmFnZSBkYXRhIGlzIG1hbmFnZWQgYnkgV2ViS2l0OjpTdG9yYWdlTWFuYWdlciBj
bGFzcy4gRWFjaCBTdG9yYWdlTWFuYWdlciBvd25zIG9uZSBvcgorICAgICAgICBtYW55IFN0b3Jh
Z2VOYW1lU3BhY2VzLCBhbmQgZWFjaCBTdG9yYWdlTmFtZXNwYWNlcyBvd25zIG9uZSBvciBtb3Jl
IFN0b3JhZ2VBcmVhcy4gRWFjaCBTdG9yYWdlQXJlYSBjb3JyZXBvbmRzCisgICAgICAgIHRvIG9u
ZSBzdG9yYWdlIG1hcCAob25lIGxvY2FsU3RvcmFnZSBvciBzZXNzaW9uU3RvcmFnZSBvYmplY3Qp
LCBhbmQgaGFzIHR3byB0eXBlcyBvZiBiYWNrZW5kOiBhIFNRTGl0ZSBkYXRhYmFzZSwKKyAgICAg
ICAgb3IgYSBpbi1tZW1vcnkgaGFzaCBtYXAuIE5vdyB0aGF0IHdlIGhhdmUgTmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyLCB3aGljaCBtYW5hZ2VzIHN0b3JhZ2UgYnkgb3JpZ2luLiBXZSBjYW4gbWVyZ2UK
KyAgICAgICAgU3RvcmFnZU1hbmFnZXIgd2l0aCBOZXR3b3JrU3RvcmFnZU1hbmFnZXIsIGJlY2F1
c2UgbG9jYWxTdG9yYWdlIGFuZCBzZXNzaW9uU3RvcmFnZSBhcmUgbm90IHNoYXJlZCBiZXR3ZWVu
IAorICAgICAgICBkaWZmZXJlbnQgb3JpZ2lucy4KKworICAgICAgICBUaGUgbmV3IHN0cnVjdHVy
ZSBpczoKKyAgICAgICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIChtYW5hZ2Ugc3RvcmFnZSBmb3Ig
YSBzZXNzaW9uLCBvd25zIG9uZSBvciBtb3JlIE9yaWdpblN0b3JhZ2VNYW5hZ2VyKQorICAgICAg
ICBPcmlnaW5TdG9yYWdlTWFuYWdlciAobWFuYWdlIHN0b3JhZ2UgZm9yIGFuIG9yaWdpbiwgb3du
cyBvbmUgTG9jYWxTdG9yYWdlTWFuYWdlciBhbmQgb25lIFNlc3Npb25TdG9yYWdlTWFuYWdlcikK
KyAgICAgICAgTG9jYWxTdG9yYWdlTWFuYWdlciAvIFNlc3Npb25TdG9yYWdlTWFuYWdlciAobWFu
YWdlIExvY2FsU3RvcmFnZSBhbmQgU2Vzc2lvblN0b3JhZ2UsIG93bnMgb25lIG9yIG1vcmUgCisg
ICAgICAgIFN0b3JhZ2VBcmVhQmFzZXMpCisgICAgICAgIE1lbW9yeVN0b3JhZ2VBcmVhIC8gU1FM
aXRlU3RvcmFnZUFyZWEgKGluaGVyaXRzIFN0b3JhZ2VBcmVhQmFzZXM7IG1hbmFnZSBvbmUgbG9j
YWwgb3Igc2Vzc2lvbiBzdG9yYWdlLCBsaWtlIAorICAgICAgICBXZWJraXQ6OlN0b3JhZ2VBcmVh
KQorCisgICAgICAgIFN0b3JhZ2VOYW1lc3BhY2UgbGF5ZXIgaXMgcmVtb3ZlZC4gRm9yIFNlc3Np
b25TdG9yYWdlLCBkaWZmZXJlbnQgU3RvcmFnZU5hbWVzcGFjZXMgbWVhbnMgZGlmZmVyZW50IHdl
YiBwYWdlcywgCisgICAgICAgIGFuZCBzYW1lIG9yaWdpbiBjYW4gaGF2ZSBkaWZmZXJlbnQgc2Vz
c2lvblN0b3JhZ2VzIG9uIGRpZmZlcmVudCBwYWdlcywgc28gd2Uga2VlcCBhIFN0b3JhZ2VOYW1l
c3BhY2UgPD0+CisgICAgICAgIFN0b3JhZ2VBcmVhIG1hcCBpbiBTZXNzaW9uU3RvcmFnZU1hbmFn
ZXIuIEZvciBMb2NhbFN0b3JhZ2UsIGRpZmZlcm50IFN0b3JhZ2VOYW1lc3BhY2VzIG1lYW5zIGRp
ZmZlcmVudCBwYWdlIAorICAgICAgICBncm91cHMuIE91ciBvcmlnaW5hbCBwbGFuIHdhcyB0aGUg
c2FtZSBvcmlnaW4gY2FuIGhhdmUgZGlmZmVyZW50IGxvY2FsU3RvcmFnZXMgaW4gZGlmZmVyZW50
IHBhZ2UgZ3JvdXBzLCBidXQgb3VyCisgICAgICAgIG9sZCBpbXBsZW1lbnRhdGlvbiBhY3R1YWxs
eSBtYWRlIGFsbCBwYWdlIGdyb3VwcyBwb2ludCB0byB0aGUgc2FtZSBkYXRhYmFzZSBmaWxlLiBU
byBrZWVwIGV4aXN0aW5nIGJlaGF2aW9yIAorICAgICAgICAodGhhdCBhbGwgcGFnZSBncm91cHMg
d2l0aCBzYW1lIG9yaWdpbiBzaGFyZSB0aGUgc3RvcmFnZSksIHdlIG5vdyBrZWVwIG9uZSBTdG9y
YWdlQXJlYSBwZXIgTG9jYWxTdG9yYWdlTWFuYWdlci4KKworICAgICAgICBUaGUgY2hhbmdlIGlz
IG1vc3RseSByZWZhY3RvcmluZywgYW5kIHNob3VsZCBiZSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIFdl
YlN0b3JhZ2UgdGVzdHMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
bG93TWVtb3J5SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjcmVh
dGVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjpkZXN0cm95U2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpoYXNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
OjpkZWxldGVXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpk
ZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6ZGVsZXRlQW5kUmVzdHJpY3RXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwcmVwYXJlVG9TdXNwZW5kKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0Nsb3NlZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpoYXNMb2NhbFN0b3JhZ2VE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlTG9jYWxT
dG9yYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6Om1vdmVM
b2NhbFN0b3JhZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6
Z2V0T3JpZ2luc09mTG9jYWxTdG9yYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3Rv
cmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpMb2Nh
bFN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFn
ZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6aGFuZGxl
TG93TWVtb3J5V2FybmluZyk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6
OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2Vy
Ojpjb25uZWN0aW9uQ2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdl
cjo6ZW5zdXJlU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5h
Z2VyOjpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxT
dG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYSk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFy
ZWEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdl
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3Jh
Z2VBcmVhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpN
ZW1vcnlTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpp
c0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAg
ICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmFsbEl0ZW1zKToKKyAgICAgICAgKFdl
YktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpNZW1v
cnlTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3Jh
Z2VBcmVhOjpjbG9uZSBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9N
ZW1vcnlTdG9yYWdlQXJlYS5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
dG9yYWdlTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VN
YW5hZ2VyOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VN
YW5hZ2VyOjpjbGVhclN0b3JhZ2VGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1N0b3JhZ2VNYW5hZ2VyOjpmb3JFYWNoT3JpZ2luRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpmZXRjaERhdGFGcm9tRGlzayk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YU9uRGlzayk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6bW92ZURhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnN1c3BlbmQpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
dG9yYWdlTWFuYWdlcjo6aGFuZGxlTG93TWVtb3J5V2FybmluZyk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50
TG9jYWxTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6Y29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1N0b3JhZ2VNYW5hZ2VyOjpkaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpnZXRWYWx1ZXMpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0pOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnJlbW92ZUl0ZW0pOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6
dG9XZWJzaXRlRGF0YVR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
c3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojp0b1dlYnNpdGVEYXRh
VHlwZSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVj
a2V0Ojp0b1N0b3JhZ2VJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFn
ZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmxvY2FsU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAo
V2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZXhpc3RpbmdMb2Nh
bFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6
OlN0b3JhZ2VCdWNrZXQ6OnNlc3Npb25TdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6
Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpleGlzdGluZ1Nlc3Npb25TdG9y
YWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9y
YWdlQnVja2V0Ojppc0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5h
Z2VyOjpTdG9yYWdlQnVja2V0OjpmZXRjaERhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5T
dG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlRGF0YSk6CisgICAgICAgIChXZWJL
aXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojptb3ZlRGF0YSk6CisgICAg
ICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpmZXRjaERh
dGFJbk1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9y
YWdlQnVja2V0OjpmZXRjaERhdGFGcm9tRGlzayk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0
b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKToKKyAg
ICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0
ZVNlc3Npb25TdG9yYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5h
Z2VyOjpTdG9yYWdlQnVja2V0Ojptb3ZlTG9jYWxTdG9yYWdlRGF0YSk6CisgICAgICAgIChXZWJL
aXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAg
KFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdl
cik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpzZXNzaW9uU3RvcmFn
ZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZXhpc3Rp
bmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6aXNBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6ZmV0Y2hEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmRl
bGV0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6bW92ZURh
dGEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFn
ZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVh
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpmaWxlTmFt
ZVRvT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6b3JpZ2luVG9GaWxlTmFtZSk6CisgICAgICAg
IChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpkYXRhYmFzZVBhdGgpOgorICAgICAgICAoV2Vi
S2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6c3RhdGVtZW50U3RyaW5nIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OlNRTGl0ZVN0b3JhZ2VBcmVhKToKKyAgICAgICAg
KFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6U1FM
aXRlU3RvcmFnZUFyZWE6On5TUUxpdGVTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OlNR
TGl0ZVN0b3JhZ2VBcmVhOjppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFn
ZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmNyZWF0
ZVRhYmxlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6
cHJlcGFyZURhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnN0
YXJ0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3Jh
Z2VBcmVhOjpjYWNoZWRTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdl
QXJlYTo6Z2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRJ
dGVtRnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmFs
bEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnNldEl0ZW0pOgor
ICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAg
IChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjb21taXRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5
KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmhhbmRsZUxvd01lbW9yeVdh
cm5pbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFy
ZWEuaDogQWRkZWQuCisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAg
ICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6aGFzRGF0YUluTWVtb3J5KToKKyAgICAgICAg
KFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjbGVhckRhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3Rpb25DbG9zZWQpOgorICAgICAgICAo
V2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmFkZFN0b3JhZ2VBcmVhKToKKyAgICAgICAg
KFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFy
ZWEpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RG
cm9tU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6
OmNsb25lU3RvcmFnZUFyZWEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlN0b3Jh
Z2VBcmVhQmFzZTo6U3RvcmFnZUFyZWFCYXNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFy
ZWFCYXNlOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6
cmVtb3ZlTGlzdGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6Omhhc0xp
c3RlbmVycyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6bm90aWZ5
TGlzdGVuZXJzQWJvdXRDbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6
ZGlzcGF0Y2hFdmVudHMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
U3RvcmFnZUFyZWFCYXNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJh
c2U6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6
Om9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6cXVvdGEg
Y29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdp
c3RyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYVJlZ2lzdHJ5Ojpy
ZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFSZWdpc3Ry
eTo6dW5yZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFS
ZWdpc3RyeTo6Z2V0U3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYVJl
Z2lzdHJ5Ojpmb3JFYWNoU3RvcmFnZUFyZWEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2dl
bmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VE
ZXRhaWxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5oOgorICAgICAgICAqIFVuaWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0
OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFy
ZWFNYXA6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6Y2xl
YXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6ZW5zdXJlTWFwKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmNvbm5lY3QpOgorICAgICAgICAoV2ViS2l0OjpT
dG9yYWdlQXJlYU1hcDo6ZGlzY29ubmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJTdG9y
YWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU5h
bWVzcGFjZUltcGw6OmNvcHkpOgorCiAyMDIxLTEyLTA3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgQVNTRVJUSU9OIEZBSUxFRDogbV9tZXNzYWdlc0JlaW5nRGlz
cGF0Y2hlZC5pc0VtcHR5KCkgb24gaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3dl
YnNpdGUtZGF0YS1yZW1vdmFsLWZvci1zaXRlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi5odG1sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKaW5k
ZXggNzZlNDVhZjM0ZWQwOTNmZDlmMjc2ZGQ1ZDRiOTIyYTQxNjM0ZDlhZS4uZTdjZGNiZjVhYmQy
MDY5Njg1ZTFmYWQxZDc0NDE5Y2ExMDgxYTliYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcApAQCAtNDMsNiArNDMsOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxjb25zdCBjaGFy
ICosIDM+IGRhdGFiYXNlRmlsZVN1ZmZpeGVzIHsgIiIsICItc2htIiwgIi13YWwiIH07CisKIFNR
TGl0ZUZpbGVTeXN0ZW06OlNRTGl0ZUZpbGVTeXN0ZW0oKQogewogfQpAQCAtNzcsMTggKzc5LDIy
IEBAIGJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShj
b25zdCBTdHJpbmcmIHBhdGgpCiAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGly
ZWN0b3J5KHBhdGgpOwogfQogCi1ib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNl
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQorYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxl
dGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKIHsKLSAgICBhdXRvIHdhbEZp
bGVOYW1lID0gbWFrZVN0cmluZyhmaWxlTmFtZSwgIi13YWwiX3MpOwotICAgIGF1dG8gc2htRmls
ZU5hbWUgPSBtYWtlU3RyaW5nKGZpbGVOYW1lLCAiLXNobSJfcyk7CisgICAgYm9vbCBmaWxlRXhp
c3RzID0gZmFsc2U7CisgICAgZm9yIChjb25zdCBhdXRvKiBzdWZmaXggOiBkYXRhYmFzZUZpbGVT
dWZmaXhlcykgeworICAgICAgICBTdHJpbmcgcGF0aCA9IGZpbGVQYXRoICsgc3VmZml4OworICAg
ICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHBhdGgpOworICAgICAgICBmaWxlRXhpc3RzIHw9
IEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMocGF0aCk7CisgICAgfQogCi0gICAgLy8gVHJ5IHRvIGRl
bGV0ZSBhbGwgdGhyZWUgZmlsZXMgd2hldGhlciBvciBub3QgdGhleSBhcmUgdGhlcmUuCi0gICAg
RmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShmaWxlTmFtZSk7Ci0gICAgRmlsZVN5c3RlbTo6ZGVsZXRl
RmlsZSh3YWxGaWxlTmFtZSk7Ci0gICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShzaG1GaWxlTmFt
ZSk7CisgICAgcmV0dXJuICFmaWxlRXhpc3RzOworfQogCi0gICAgLy8gSWYgYW55IG9mIHRoZSB3
YWwgb3Igc2htIGZpbGVzIHJlbWFpbiBhZnRlciB0aGUgZGVsZXRlIGF0dGVtcHQsIHRoZSBvdmVy
YWxsIGRlbGV0ZSBvcGVyYXRpb24gZmFpbGVkLgotICAgIHJldHVybiAhRmlsZVN5c3RlbTo6Zmls
ZUV4aXN0cyhmaWxlTmFtZSkgJiYgIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMod2FsRmlsZU5hbWUp
ICYmICFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHNobUZpbGVOYW1lKTsKK3ZvaWQgU1FMaXRlRmls
ZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIG9sZEZpbGVQYXRoLCBjb25z
dCBTdHJpbmcmIG5ld0ZpbGVQYXRoKQoreworICAgIGZvciAoY29uc3QgYXV0byogc3VmZml4IDog
ZGF0YWJhc2VGaWxlU3VmZml4ZXMpCisgICAgICAgIEZpbGVTeXN0ZW06Om1vdmVGaWxlKG1ha2VT
dHJpbmcob2xkRmlsZVBhdGgsIHN1ZmZpeCksIG1ha2VTdHJpbmcobmV3RmlsZVBhdGgsIHN1ZmZp
eCkpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTk4LDE4ICsxMDQsMTMgQEAg
Ym9vbCBTUUxpdGVGaWxlU3lzdGVtOjp0cnVuY2F0ZURhdGFiYXNlRmlsZShzcWxpdGUzKiBkYXRh
YmFzZSkKIH0KICNlbmRpZgogICAgIAotdWludDY0X3QgU1FMaXRlRmlsZVN5c3RlbTo6ZGF0YWJh
c2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQoteyAgICAgICAgCit1aW50NjRfdCBT
UUxpdGVGaWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgp
Cit7CiAgICAgdWludDY0X3QgdG90YWxTaXplID0gMDsKLQotICAgIGlmIChhdXRvIGZpbGVTaXpl
ID0gRmlsZVN5c3RlbTo6ZmlsZVNpemUoZmlsZU5hbWUpKQotICAgICAgICB0b3RhbFNpemUgKz0g
KmZpbGVTaXplOwotCi0gICAgaWYgKGF1dG8gZmlsZVNpemUgPSBGaWxlU3lzdGVtOjpmaWxlU2l6
ZShtYWtlU3RyaW5nKGZpbGVOYW1lLCAiLXdhbCJfcykpKQotICAgICAgICB0b3RhbFNpemUgKz0g
KmZpbGVTaXplOwotCi0gICAgaWYgKGF1dG8gZmlsZVNpemUgPSBGaWxlU3lzdGVtOjpmaWxlU2l6
ZShtYWtlU3RyaW5nKGZpbGVOYW1lLCAiLXNobSJfcykpKQotICAgICAgICB0b3RhbFNpemUgKz0g
KmZpbGVTaXplOworICAgIGZvciAoY29uc3QgYXV0byogc3VmZml4IDogZGF0YWJhc2VGaWxlU3Vm
Zml4ZXMpIHsKKyAgICAgICAgaWYgKGF1dG8gZmlsZVNpemUgPSBGaWxlU3lzdGVtOjpmaWxlU2l6
ZShmaWxlUGF0aCArIHN1ZmZpeCkpCisgICAgICAgICAgICB0b3RhbFNpemUgKz0gKmZpbGVTaXpl
OworICAgIH0KIAogICAgIHJldHVybiB0b3RhbFNpemU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAppbmRleCBjNjhkOWM3ZTdhZjk4OTc2YTFl
ZDNkY2I2ZjJhY2ZlNGI2Y2Y1YzJmLi45OGU3ZWEwZDA3YTI1NDExZmE0ZjYyYWE3MjE2NTkzZjYz
ZTM5YzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmls
ZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lz
dGVtLmgKQEAgLTc4LDkgKzc4LDExIEBAIHB1YmxpYzoKICAgICAvLyBEZWxldGVzIGEgZGF0YWJh
c2UgZmlsZS4KICAgICAvLwogICAgIC8vIGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4KLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5n
JiBmaWxlTmFtZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZGVsZXRlRGF0YWJh
c2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFN0cmluZyBjb21wdXRlSGFzaEZvckZpbGVOYW1lKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUp
OworICAgIC8vIE1vdmVzIGEgZGF0YWJhc2UgZmlsZSB0byBhIG5ldyBwbGFjZS4KKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBtb3ZlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgb2xk
RmlsZVBhdGgsIGNvbnN0IFN0cmluZyYgbmV3RmlsZVBhdGgpOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBTdHJpbmcgY29tcHV0ZUhhc2hGb3JGaWxlTmFtZShjb25zdCBTdHJpbmcmIGZpbGVQ
YXRoKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gVHJ1bmNhdGVzIGEgZGF0
YWJhc2UgZmlsZS4gVXNlZCB3aGVuIE1vYmlsZVNhZmFyaVNldHRpbmdzIGRlbGV0ZXMgYSBkYXRh
YmFzZSBmaWxlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCAyOTFjYzk4OTJlODEw
MjdkOWNhZWQxZDlkYjcwNjFkNzNlNjc0MTcwLi4xMzgyNzYxYWM4ZTg3MTJmMGQzNjA2NTU3Y2Jm
Mzk3ZDZjM2I2ZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMjcxLDcgKzI3
MSw2IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvCiAgICAgICAgIHJldHVybiBwYXltZW50Q29v
cmRpbmF0b3IoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKICNlbmRp
ZgogCi0gICAgV1RGTG9nQWx3YXlzKCJVbmhhbmRsZWQgbmV0d29yayBwcm9jZXNzIG1lc3NhZ2Ug
JyVzJyIsIGRlc2NyaXB0aW9uKGRlY29kZXIubWVzc2FnZU5hbWUoKSkpOwogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuY3BwCmluZGV4IDQ3MmM4YjU3YzMyYzM1Zjg5YmUwYjE3ODFmYmRlYzhjZjNk
YWM4YmIuLjBlNDE4ZGFjYTQ2MDEwMmUzMGI2N2VhZDMzMTlmOTkwNmQyMTk3MDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0xNTcs
NyArMTU3LDYgQEAgc3RhdGljIGlubGluZSBNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeSBjcmVh
dGVNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeShOZXR3b3IKIAogTmV0d29ya1Byb2Nlc3M6Ok5l
dHdvcmtQcm9jZXNzKEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmJiBw
YXJhbWV0ZXJzKQogICAgIDogbV9kb3dubG9hZE1hbmFnZXIoKnRoaXMpCi0gICAgLCBtX3N0b3Jh
Z2VNYW5hZ2VyU2V0KFN0b3JhZ2VNYW5hZ2VyU2V0OjpjcmVhdGUoKSkKICNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQogICAgICwgbV9uZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlcigq
dGhpcykKICNlbmRpZgpAQCAtMzEzLDEyICszMTIsMTMgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
bG93TWVtb3J5SGFuZGxlcihDcml0aWNhbCBjcml0aWNhbCkKICAgICAgICAgbmV0d29ya1Nlc3Np
b24uY2xlYXJQcmVmZXRjaENhY2hlKCk7CiAgICAgfSk7CiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2Vy
U2V0LT5oYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7Ci0KICNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCiAgICAgZm9yIChhdXRvJiBzd1NlcnZlciA6IG1fc3dTZXJ2ZXJzLnZhbHVlcygpKQogICAg
ICAgICBzd1NlcnZlci0+aGFuZGxlTG93TWVtb3J5V2FybmluZygpOwogI2VuZGlmCisKKyAgICBm
b3IgKGF1dG8mIG1hbmFnZXIgOiBtX3N0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAg
bWFuYWdlci0+aGFuZGxlTG93TWVtb3J5V2FybmluZygpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMmJiBwYXJhbWV0ZXJzKQpAQCAtNDAxLDcgKzQwMSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmNyZWF0ZU5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKFByb2Nlc3NJZGVudGlmaWVy
IGlkZW50CiAKICAgICBjb25uZWN0aW9uLnNldE9uTGluZVN0YXRlKE5ldHdvcmtTdGF0ZU5vdGlm
aWVyOjpzaW5nbGV0b24oKS5vbkxpbmUoKSk7CiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5h
ZGRDb25uZWN0aW9uKGNvbm5lY3Rpb24uY29ubmVjdGlvbigpKTsKICAgICB3ZWJJREJTZXJ2ZXIo
c2Vzc2lvbklEKS5hZGRDb25uZWN0aW9uKGNvbm5lY3Rpb24uY29ubmVjdGlvbigpLCBpZGVudGlm
aWVyKTsKICAgICBpZiAoYXV0byBtYW5hZ2VyID0gbV9zdG9yYWdlTWFuYWdlcnMuZ2V0KHNlc3Np
b25JRCkpCiAgICAgICAgIG1hbmFnZXItPnN0YXJ0UmVjZWl2aW5nTWVzc2FnZUZyb21Db25uZWN0
aW9uKGNvbm5lY3Rpb24uY29ubmVjdGlvbigpKTsKQEAgLTQyMCw3ICs0MTksNyBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzJiYgcGFyYW1ldGVycwogewogICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwogCi0gICAgYWRkU3RvcmFnZU1hbmFnZXJG
b3JTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZSk7CisgICAgYWRkU3RvcmFn
ZU1hbmFnZXJGb3JTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURp
cmVjdG9yeSwgcGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZSwgcGFyYW1l
dGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihz
ZXNzaW9uSUQsIHBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAKICAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKQEAgLTQyOSw4ICs0MjgsNiBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiYgcGFy
YW1ldGVycwogICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBh
cmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMu
c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5k
aWYKIAotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMu
bG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vi
c2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycykpOwogfQogCkBA
IC00NTMsMTEgKzQ1MCwxNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgbV9zZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcnMucmVtb3ZlKHNlc3Npb25JRCk7CiB9CiAKLXZvaWQgTmV0d29y
a1Byb2Nlc3M6OmFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IFN0cmluZyYgZ2VuZXJhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUmIGdlbmVyYWxTdG9yYWdlUGF0aEhhbmRsZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6
OmFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgZ2VuZXJhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
IGdlbmVyYWxTdG9yYWdlUGF0aEhhbmRsZSwgY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRo
LCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGxvY2FsU3RvcmFnZVBhdGhIYW5kbGUpCiB7CiAg
ICAgbV9zdG9yYWdlTWFuYWdlcnMuZW5zdXJlKHNlc3Npb25JRCwgWyZdIHsKICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGdlbmVyYWxTdG9yYWdlUGF0aEhhbmRs
ZSk7Ci0gICAgICAgIHJldHVybiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShzZXNzaW9u
SUQsIGdlbmVyYWxTdG9yYWdlUGF0aCk7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBv
cHRpb25hbExvY2FsU3RvcmFnZVBhdGg7CisgICAgICAgIGlmICghbG9jYWxTdG9yYWdlUGF0aC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG9wdGlvbmFsTG9jYWxTdG9yYWdlUGF0aCA9IGxvY2Fs
U3RvcmFnZVBhdGg7CisgICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkobG9jYWxTdG9yYWdlUGF0aEhhbmRsZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlKHNlc3Npb25JRCwgZ2VuZXJhbFN0b3JhZ2VQ
YXRoLCBvcHRpb25hbExvY2FsU3RvcmFnZVBhdGgpOwogICAgIH0pOwogfQogCkBAIC01NzQsNyAr
NTc2LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKQogICAgIG1fc2VydmljZVdvcmtlckluZm8ucmVtb3ZlKHNlc3Npb25JRCk7
CiAjZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPnJlbW92ZShzZXNzaW9uSUQpOwog
ICAgIGlmIChhdXRvIHNlcnZlciA9IG1fd2ViSURCU2VydmVycy50YWtlKHNlc3Npb25JRCkpCiAg
ICAgICAgIHNlcnZlci0+Y2xvc2UoKTsKICAgICByZW1vdmVTdG9yYWdlTWFuYWdlckZvclNlc3Np
b24oc2Vzc2lvbklEKTsKQEAgLTEwNjQsMTUgKzEwNjUsMTYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
czo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBS
ZWdpc3QKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aGFzTG9jYWxTdG9yYWdlKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAobV9z
dG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewotICAgICAgICBtX3N0b3Jh
Z2VNYW5hZ2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW2RvbWFpbiwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIG9y
aWdpbnMpIG11dGFibGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjphbnlP
ZihvcmlnaW5zLCBbJmRvbWFpbl0oYXV0byYgb3JpZ2luKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGRvbWFpbi5tYXRjaGVzKG9yaWdpbik7Ci0gICAgICAgICAgICB9KSk7Ci0gICAgICAgIH0p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsK
KyAgICBhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOwor
ICAgIGlmIChpdGVyYXRvciA9PSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKKyAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKworICAgIGF1dG8gdHlwZXMgPSBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiB7IFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlIH07Cisg
ICAgaXRlcmF0b3ItPnZhbHVlLT5mZXRjaERhdGEodHlwZXMsIFtkb21haW4sIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8gZW50cmllcykgbXV0YWJs
ZSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6YW55T2YoZW50cmllcywgWyZkb21h
aW5dKGF1dG8mIGVudHJ5KSB7CisgICAgICAgICAgICByZXR1cm4gZG9tYWluLm1hdGNoZXMoZW50
cnkub3JpZ2luKTsKKyAgICAgICAgfSkpOworICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ5MCwyMCArMTQ5Miw2IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25T
ZXQ8V2Vic2l0CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpICYmIG1fc3RvcmFnZU1h
bmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0oYXV0byYmIG9yaWdpbnMpIHsKLSAgICAgICAgICAgIHdoaWxlICghb3JpZ2lucy5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRh
LmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbnMudGFrZUFueSgpLCBX
ZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlLCAwIH0pOwotICAgICAgICB9KTsKLSAgICB9
Ci0KLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6Okxv
Y2FsU3RvcmFnZSkgJiYgbV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkg
ewotICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKHNl
c3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIG9yaWdpbnMpIHsKLSAgICAgICAg
ICAgIHdoaWxlICghb3JpZ2lucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRy
eSB7IG9yaWdpbnMudGFrZUFueSgpLCBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSwgMCB9
KTsKLSAgICAgICAgfSk7Ci0gICAgfQotCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShTT1VQ
KQogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SFNU
U0NhY2hlKSkKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmhvc3RO
YW1lc1dpdGhIU1RTQ2FjaGUgPSBob3N0TmFtZXNXaXRoSFNUU0NhY2hlKHNlc3Npb25JRCk7CkBA
IC0xNTU3LDkgKzE1NDUsMTMgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0
YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXQKICNlbmRpZgogCiAg
ICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7
IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKSB7Ci0gICAgICAgIGl0ZXJhdG9y
LT52YWx1ZS0+ZmV0Y2hEYXRhKHdlYnNpdGVEYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
KGF1dG8gZW50cmllcykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3It
Pm1fd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmRWZWN0b3IoV1RGTW92ZShlbnRyaWVzKSk7Ci0g
ICAgICAgIH0pOworICAgICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OkZpbGVTeXN0ZW0pCisgICAgICAgICAgICB8fCB3ZWJzaXRlRGF0YVR5cGVzLmNv
bnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKQorICAgICAgICAgICAgfHwgd2Vi
c2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSkg
eworICAgICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5mZXRjaERhdGEod2Vic2l0ZURhdGFUeXBl
cywgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmRW
ZWN0b3IoV1RGTW92ZShlbnRyaWVzKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogICAg
IH0KIH0KIApAQCAtMTU4NiwxMiArMTU3OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0
ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpCiAg
ICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpET01DYWNo
ZSkpCiAgICAgICAgIENhY2hlU3RvcmFnZTo6RW5naW5lOjpjbGVhckFsbENhY2hlcygqdGhpcywg
c2Vzc2lvbklELCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAKLSAgICBpZiAod2Vic2l0ZURh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSAmJiBtX3N0
b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAgICBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5kZWxldGVTZXNzaW9uU3RvcmFnZShzZXNzaW9uSUQsIFtjbGVhclRhc2tzSGFu
ZGxlcl0geyB9KTsKLQotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVE
YXRhVHlwZTo6TG9jYWxTdG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhz
ZXNzaW9uSUQpKQotICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5kZWxldGVMb2NhbFN0b3Jh
Z2VNb2RpZmllZFNpbmNlKHNlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5k
bGVyXSB7IH0pOwotCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURh
dGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
ICAgICAgICAgd2ViSURCU2VydmVyKHNlc3Npb25JRCkuY2xvc2VBbmREZWxldGVEYXRhYmFzZXNN
b2RpZmllZFNpbmNlKG1vZGlmaWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKIApA
QCAtMTYzNiw4ICsxNjIyLDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVE
YXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpCiAgICAgfQogI2Vu
ZGlmCiAKLSAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vz
c2lvbklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCi0gICAgICAgIGl0
ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YU1vZGlmaWVkU2luY2Uod2Vic2l0ZURhdGFUeXBlcywg
bW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOworICAgIGlmIChhdXRvIGl0
ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBt
X3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkgeworICAgICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5j
b250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkKKyAgICAgICAgICAgIHx8IHdl
YnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkK
KyAgICAgICAgICAgIHx8IHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpGaWxlU3lzdGVtKSkKKyAgICAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YU1v
ZGlmaWVkU2luY2Uod2Vic2l0ZURhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NI
YW5kbGVyXSB7IH0pOworICAgIH0KIH0KIAogc3RhdGljIHZvaWQgY2xlYXJEaXNrQ2FjaGVFbnRy
aWVzKE5ldHdvcmtDYWNoZTo6Q2FjaGUqIGNhY2hlLCBjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmln
aW5EYXRhPiYgb3JpZ2lucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTcwMiwxMiArMTY5Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0
ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvCiAg
ICAgICAgICAgICBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6Y2xlYXJDYWNoZXNGb3JPcmlnaW4oKnRo
aXMsIHNlc3Npb25JRCwgU2VjdXJpdHlPcmlnaW5EYXRhIHsgb3JpZ2luRGF0YSB9LCBbY2xlYXJU
YXNrc0hhbmRsZXJdIHsgfSk7CiAgICAgfQogCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkgJiYgbV9zdG9yYWdlTWFuYWdl
clNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+
ZGVsZXRlU2Vzc2lvblN0b3JhZ2VGb3JPcmlnaW5zKHNlc3Npb25JRCwgb3JpZ2luRGF0YXMsIFtj
bGVhclRhc2tzSGFuZGxlcl0geyB9KTsKLQotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRh
aW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0
LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5kZWxl
dGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW5zKHNlc3Npb25JRCwgb3JpZ2luRGF0YXMsIFtjbGVhclRh
c2tzSGFuZGxlcl0geyB9KTsKLQogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzKSAmJiAhc2Vzc2lvbklELmlzRXBoZW1l
cmFsKCkpCiAgICAgICAgIHdlYklEQlNlcnZlcihzZXNzaW9uSUQpLmNsb3NlQW5kRGVsZXRlRGF0
YWJhc2VzRm9yT3JpZ2lucyhvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwog
CkBAIC0xNzQ1LDggKzE3MjksMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0
ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICAgICB9CiAj
ZW5kaWYKIAotICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChz
ZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKLSAgICAgICAg
aXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhKHdlYnNpdGVEYXRhVHlwZXMsIG9yaWdpbkRhdGFz
LCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CisgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0
b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFn
ZXJzLmVuZCgpKSB7CisgICAgICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNp
dGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKQorICAgICAgICAgICAgfHwgd2Vic2l0ZURhdGFUeXBl
cy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKQorICAgICAgICAgICAg
fHwgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW0p
KQorICAgICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhKHdlYnNpdGVEYXRhVHlw
ZXMsIG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CisgICAgfQogCiAgICAg
aWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklE
KSkgewogICAgICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBkb21haW5z
VG9EZWxldGVOZXR3b3JrRGF0YUZvcjsKQEAgLTE5MDMsMjggKzE4OTEsNiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpkZWxldGVBbmRSZXN0cmljdFdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21h
aW5zKFBBTDo6U2VzcwogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAobV9zdG9yYWdlTWFu
YWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewotICAgICAgICBpZiAod2Vic2l0ZURhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSkgewotICAgICAg
ICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKHNlc3Np
b25JRCwgW3Byb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCB0aGlzLCBzZXNzaW9uSUQsIGNh
bGxiYWNrQWdncmVnYXRvciwgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFG
b3JdKGF1dG8mJiBvcmlnaW5zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3N0b3JhZ2VNYW5h
Z2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgICAgICAgICBhdXRvIG9yaWdpbnNUb0RlbGV0ZSA9IGZpbHRlckZvclJlZ2lz
dHJhYmxlRG9tYWlucyhvcmlnaW5zLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRl
RGF0YUZvciwgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX2RvbWFpbnMpOwotICAgICAgICAgICAgICAg
IG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRlbGV0ZVNlc3Npb25TdG9yYWdlRm9yT3JpZ2lucyhzZXNz
aW9uSUQsIG9yaWdpbnNUb0RlbGV0ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpKSB7Ci0gICAgICAgICAgICBtX3N0
b3JhZ2VNYW5hZ2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW3Byb3Rl
Y3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCB0aGlzLCBzZXNzaW9uSUQsIGNhbGxiYWNrQWdncmVn
YXRvciwgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3JdKGF1dG8mJiBv
cmlnaW5zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250
YWlucyhzZXNzaW9uSUQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgICAgICBhdXRvIG9yaWdpbnNUb0RlbGV0ZSA9IGZpbHRlckZvclJlZ2lzdHJhYmxlRG9tYWlu
cyhvcmlnaW5zLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvciwgY2Fs
bGJhY2tBZ2dyZWdhdG9yLT5tX2RvbWFpbnMpOwotICAgICAgICAgICAgICAgIG1fc3RvcmFnZU1h
bmFnZXJTZXQtPmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbnMoc2Vzc2lvbklELCBvcmlnaW5z
VG9EZWxldGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgICAgICB9KTsKLSAg
ICAgICAgfQotICAgIH0KLQogICAgIGF1dG8gcGF0aCA9IG1faWRiRGF0YWJhc2VQYXRocy5nZXQo
c2Vzc2lvbklEKTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpICYmIHdlYnNpdGVEYXRhVHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpKSB7CiAgICAgICAg
IHdlYklEQlNlcnZlcihzZXNzaW9uSUQpLmdldE9yaWdpbnMoW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBSZWYgeyAqdGhpcyB9LCBzZXNzaW9uSUQsIGNhbGxiYWNrQWdncmVnYXRvciwgZG9tYWluc1Rv
RGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3JdKGF1dG8mJiBvcmlnaW5zKSB7CkBAIC0x
OTcyLDEwICsxOTM4LDE0IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFuZFJlc3RyaWN0
V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMoUEFMOjpTZXNzCiAgICAgfQogCiAgICAg
aWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0
ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKSB7Ci0gICAgICAgIGl0ZXJhdG9yLT52
YWx1ZS0+ZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyh3ZWJzaXRlRGF0YVR5cGVzLCBk
b21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvciwgW2NhbGxiYWNrQWdncmVn
YXRvcl0oYXV0byBkZWxldGVkRG9tYWlucykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8gZG9tYWluIDogZGVsZXRlZERvbWFpbnMpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5tX2RvbWFpbnMuYWRkKFdURk1vdmUoZG9tYWluKSk7Ci0gICAgICAgIH0pOworICAg
ICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2Fs
U3RvcmFnZSkKKyAgICAgICAgICAgIHx8IHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0
ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkKKyAgICAgICAgICAgIHx8IHdlYnNpdGVEYXRhVHlw
ZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtKSkgeworICAgICAgICAgICAg
aXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKHdlYnNpdGVE
YXRhVHlwZXMsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXShhdXRvIGRlbGV0ZWREb21haW5zKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8gZG9tYWluIDogZGVsZXRlZERvbWFpbnMpCisgICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV9kb21haW5zLmFkZChXVEZNb3ZlKGRvbWFpbikp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBhdXRvIGRhdGFUeXBl
c0ZvclVJUHJvY2VzcyA9IFdlYnNpdGVEYXRhOjpmaWx0ZXIod2Vic2l0ZURhdGFUeXBlcywgV2Vi
c2l0ZURhdGFQcm9jZXNzVHlwZTo6VUkpOwpAQCAtMjI5Nyw3ICsyMjY3LDggQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6cHJlcGFyZVRvU3VzcGVuZChib29sIGlzU3VzcGVuc2lvbkltbWluZW50LCBD
b21wbGV0aW9uSGFuZGwKICAgICB9CiAjZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQt
PnN1c3BlbmQoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBmb3IgKGF1dG8mIG1hbmFn
ZXIgOiBtX3N0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAgbWFuYWdlci0+c3VzcGVu
ZChbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjph
cHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpCkBAIC0yMzM2LDcgKzIzMDcsOCBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpyZXN1bWUoKQogICAgIG1fc2hvdWxkU3VzcGVuZElEQlNlcnZlcnMg
PSBmYWxzZTsKICNlbmRpZgogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+cmVzdW1lKCk7Cisg
ICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpCisgICAg
ICAgIG1hbmFnZXItPnJlc3VtZSgpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwcmVmZXRj
aEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQpAQCAtMjQzMiw4ICsyNDA0LDkgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6c2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJJREJSb290UGF0aChQ
QUw6OlNlc3Npb25JRCBzZXMKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c3luY0xvY2FsU3RvcmFn
ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
bV9zdG9yYWdlTWFuYWdlclNldC0+d2FpdFVudGlsU3luY2luZ0xvY2FsU3RvcmFnZUZpbmlzaGVk
KCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICBhdXRvIGFnZ3JlZ2F0b3IgPSBDYWxs
YmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAg
Zm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpCisgICAgICAg
IG1hbmFnZXItPnN5bmNMb2NhbFN0b3JhZ2UoW2FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAKIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OnJlc2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNDYzLDEwICsy
NDM2LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFUKICAgICBpZiAob2xkT3JpZ2luLmlzRW1w
dHkoKSB8fCBuZXdPcmlnaW4uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
ZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkgewotICAg
ICAgICBpZiAobV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkKLSAgICAg
ICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPnJlbmFtZU9yaWdpbihzZXNzaW9uSUQsIG9sZE5h
bWUsIG5ld05hbWUsIFthZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBpZiAoYXV0byBpdGVy
YXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0b3IgIT0gbV9z
dG9yYWdlTWFuYWdlcnMuZW5kKCkpCisgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+bW92ZURhdGEo
b2xkT3JpZ2luLCBuZXdPcmlnaW4sIFthZ2dyZWdhdG9yXSB7IH0pOwogCiAgICAgaWYgKGRhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykpIHsKICAg
ICAgICAgYXV0byBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhzLmdldChzZXNzaW9uSUQpOwpAQCAt
Mjc1MywyMSArMjcyNCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbW92ZUtlcHRBbGl2ZUxv
YWQoTmV0d29ya1Jlc291cmNlTG9hZGVyJiBsb2FkZXIpCiAgICAgICAgIHNlc3Npb24tPnJlbW92
ZUtlcHRBbGl2ZUxvYWQobG9hZGVyKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6Z2V0TG9j
YWxTdG9yYWdlT3JpZ2luRGV0YWlscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2lu
RGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ2Fu
bm90IGdldCBsb2NhbCBzdG9yYWdlIGluZm9ybWF0aW9uIGZvciBhbiB1bmtub3duIHNlc3Npb24i
KTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFp
bHMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NDbG9zZWQoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgbV9zdG9yYWdl
TWFuYWdlclNldC0+cmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKLQogICAgIGlmIChhdXRv
KiBzZXJ2ZXIgPSBtX3dlYklEQlNlcnZlcnMuZ2V0KHNlc3Npb25JRCkpCiAgICAgICAgIHNlcnZl
ci0+cmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IDlkMzJkNTc5NzNhMGViYWMxZDA3MTc1
YzZkZjg3OWQ0NjZjZTY4YTguLjkzNzMyODMzODMzMzAxYmE1N2VmOWQ4OWMxMzFjM2UyYWM2NzYw
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgK
QEAgLTEwNyw3ICsxMDcsNiBAQCBjbGFzcyBOZXR3b3JrUHJveGltaXR5TWFuYWdlcjsKIGNsYXNz
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjsKIGNs
YXNzIFByb2Nlc3NBc3NlcnRpb247Ci1jbGFzcyBTdG9yYWdlTWFuYWdlclNldDsKIGNsYXNzIFdl
YlBhZ2VOZXR3b3JrUGFyYW1ldGVyczsKIGNsYXNzIFdlYlNXU2VydmVyQ29ubmVjdGlvbjsKIGNs
YXNzIFdlYlNXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlvbjsKQEAgLTI5NSw3ICsyOTQsNiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBzZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKFBBTDo6U2Vz
c2lvbklEKSBjb25zdDsKIAogICAgIHZvaWQgY29ubmVjdGlvblRvV2ViUHJvY2Vzc0Nsb3NlZChJ
UEM6OkNvbm5lY3Rpb24mLCBQQUw6OlNlc3Npb25JRCk7Ci0gICAgdm9pZCBnZXRMb2NhbFN0b3Jh
Z2VPcmlnaW5EZXRhaWxzKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmKTsK
IAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgTmV0d29ya0NvbnRlbnRSdWxl
TGlzdE1hbmFnZXImIG5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyKCkgeyByZXR1cm4gbV9u
ZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlcjsgfQpAQCAtNTUxLDcgKzU0OSw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25J
RCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3Rh
LCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYp
OwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9u
SUQpOwogCi0gICAgdm9pZCBhZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oUEFMOjpTZXNzaW9u
SUQsIGNvbnN0IFN0cmluZyYgcGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CisgICAg
dm9pZCBhZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0
cmluZyYgcGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgY29uc3QgU3RyaW5nJiBsb2Nh
bFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKICAgICB2b2lkIHJlbW92
ZVN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCk7CiAKICAgICAvLyBDb25u
ZWN0aW9ucyB0byBXZWJQcm9jZXNzZXMuCkBAIC01NzQsOCArNTcyLDYgQEAgcHJpdmF0ZToKICAg
ICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nlc3Npb24+
PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4gbV9uZXR3b3JrU3RvcmFn
ZVNlc3Npb25zOwogCi0gICAgUmVmPFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VNYW5hZ2Vy
U2V0OwotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVO
ZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IDMyYWIzODQwYjY2YTdjNzhkNTNhMzU0NTkxMjBkZGRi
MmNmNGU5YmMuLjdlNGE4OWM3ZWMyNWM1ZDhlODNiZGM1YTRmNmNmOTkyN2M4NzIwZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2Fn
ZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5t
ZXNzYWdlcy5pbgpAQCAtMTcyLDcgKzE3Miw2IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNz
IExlZ2FjeVJlY2VpdmVyIHsKICAgICBNYXJrUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBp
cmVkRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+ICgpIEFzeW5jCiAgICAg
U2V0UENNRnJhdWRQcmV2ZW50aW9uVmFsdWVzRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIFN0cmluZyBzZWNyZXRUb2tlbiwgU3RyaW5nIHVubGlua2FibGVUb2tlbiwgU3RyaW5n
IHNpZ25hdHVyZSwgU3RyaW5nIGtleUlEKSAtPiAoKSBBc3luYwogICAgIFNldFByaXZhdGVDbGlj
a01lYXN1cmVtZW50QXBwQnVuZGxlSURGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgU3RyaW5nIGFwcEJ1bmRsZUlERm9yVGVzdGluZykgLT4gKCkgQXN5bmMKLSAgICBHZXRMb2Nh
bFN0b3JhZ2VPcmlnaW5EZXRhaWxzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgLT4gKFZlY3Rv
cjxXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4gZGV0
YWlscykgQXN5bmMKIAogICAgIFNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5n
KFNlY29uZHMgc2Vjb25kcykgLT4gKCkgU3luY2hyb25vdXMKICAgICBSZXNldFNlcnZpY2VXb3Jr
ZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKCkgLT4gKCkgU3luY2hyb25vdXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VN
YW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YzE1OGRkYmRjNjNmZTU2Yzk4ZWEyOGM0NjcxYjEwYzEy
NTExMmNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZU1hbmFnZXIu
aCIKKworI2luY2x1ZGUgIk1lbW9yeVN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU1FMaXRlU3Rv
cmFnZUFyZWEuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9TUUxpdGVGaWxlU3lzdGVtLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBT
dWdnZXN0ZWQgYnkgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYnN0b3JhZ2UvI2Rpc2stc3BhY2UK
K2NvbnN0ZXhwciB1bnNpZ25lZCBsb2NhbFN0b3JhZ2VRdW90YUluQnl0ZXMgPSA1ICogTUI7CisK
K2Jvb2wgTG9jYWxTdG9yYWdlTWFuYWdlcjo6aGFzTG9jYWxTdG9yYWdlRGF0YShjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQoreworICAgIHJl
dHVybiBGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKFNRTGl0ZVN0b3JhZ2VBcmVhOjpkYXRhYmFzZVBh
dGgocGF0aCwgb3JpZ2luKSk7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlTWFuYWdlcjo6ZGVsZXRl
TG9jYWxTdG9yYWdlRGF0YShXYWxsVGltZSB0aW1lLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQoreworICAgIGF1dG8gZGF0YWJhc2VQYXRo
ID0gU1FMaXRlU3RvcmFnZUFyZWE6OmRhdGFiYXNlUGF0aChwYXRoLCBvcmlnaW4pOworICAgIGlm
IChhdXRvIG1vZGlmaWNhdGlvblRpbWUgPSBGaWxlU3lzdGVtOjpmaWxlTW9kaWZpY2F0aW9uVGlt
ZShkYXRhYmFzZVBhdGgpOyBtb2RpZmljYXRpb25UaW1lICYmICptb2RpZmljYXRpb25UaW1lID49
IHRpbWUpCisgICAgICAgIFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNl
RmlsZShkYXRhYmFzZVBhdGgpOworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6Om1vdmVM
b2NhbFN0b3JhZ2VEYXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50
T3JpZ2luJiBzb3VyY2VPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgdGFyZ2V0
T3JpZ2luKQoreworICAgIFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06Om1vdmVEYXRhYmFzZUZp
bGUoU1FMaXRlU3RvcmFnZUFyZWE6OmRhdGFiYXNlUGF0aChwYXRoLCBzb3VyY2VPcmlnaW4pLCBT
UUxpdGVTdG9yYWdlQXJlYTo6ZGF0YWJhc2VQYXRoKHBhdGgsIHRhcmdldE9yaWdpbikpOworfQor
CitWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBMb2NhbFN0b3JhZ2VNYW5hZ2Vy
OjpnZXRPcmlnaW5zT2ZMb2NhbFN0b3JhZ2VEYXRhKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAg
ICBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOworICAgIGZvciAo
YXV0byYgZmlsZU5hbWUgOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHBhdGgpKSB7CisgICAg
ICAgIGlmIChhdXRvIG9yaWdpbiA9IFNRTGl0ZVN0b3JhZ2VBcmVhOjpmaWxlTmFtZVRvT3JpZ2lu
KGZpbGVOYW1lKSkKKyAgICAgICAgICAgIG9yaWdpbnMuYXBwZW5kKCpvcmlnaW4pOworICAgIH0K
KworICAgIHJldHVybiBvcmlnaW5zOworfQorCitMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0
b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5LCBjb25zdCBTdHJpbmcm
IHBhdGgpCisgICAgOiBtX3JlZ2lzdHJ5KHJlZ2lzdHJ5KQorICAgICwgbV9wYXRoKHBhdGgpCit7
Cit9CisKK2Jvb2wgTG9jYWxTdG9yYWdlTWFuYWdlcjo6aXNBY3RpdmUoKQoreworICAgIHJldHVy
biBtX3N0b3JhZ2VBcmVhICYmIG1fc3RvcmFnZUFyZWEtPmhhc0xpc3RlbmVycygpOworfQorCiti
b29sIExvY2FsU3RvcmFnZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSgpCit7CisgICAgcmV0dXJu
IG1fc3RvcmFnZUFyZWEgJiYgIW1fc3RvcmFnZUFyZWEtPmlzRW1wdHkoKTsKK30KKwordm9pZCBM
b2NhbFN0b3JhZ2VNYW5hZ2VyOjpjbGVhckRhdGEoKQoreworICAgIGlmIChtX3N0b3JhZ2VBcmVh
KQorICAgICAgICBtX3N0b3JhZ2VBcmVhLT5jbGVhcigpOworfQorCit2b2lkIExvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNsb3NlKCkKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYSAmJiBpczxTUUxpdGVT
dG9yYWdlQXJlYT4oKm1fc3RvcmFnZUFyZWEpKQorICAgICAgICBkb3duY2FzdDxTUUxpdGVTdG9y
YWdlQXJlYT4oKm1fc3RvcmFnZUFyZWEpLmNsb3NlKCk7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdl
TWFuYWdlcjo6aGFuZGxlTG93TWVtb3J5V2FybmluZygpCit7CisgICAgaWYgKG1fc3RvcmFnZUFy
ZWEgJiYgaXM8U1FMaXRlU3RvcmFnZUFyZWE+KCptX3N0b3JhZ2VBcmVhKSkKKyAgICAgICAgZG93
bmNhc3Q8U1FMaXRlU3RvcmFnZUFyZWE+KCptX3N0b3JhZ2VBcmVhKS5oYW5kbGVMb3dNZW1vcnlX
YXJuaW5nKCk7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlTWFuYWdlcjo6c3luY0xvY2FsU3RvcmFn
ZSgpCit7CisgICAgaWYgKG1fc3RvcmFnZUFyZWEgJiYgaXM8U1FMaXRlU3RvcmFnZUFyZWE+KCpt
X3N0b3JhZ2VBcmVhKSkKKyAgICAgICAgZG93bmNhc3Q8U1FMaXRlU3RvcmFnZUFyZWE+KCptX3N0
b3JhZ2VBcmVhKS5jb21taXRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Cit9CisKK3ZvaWQgTG9j
YWxTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1
ZUlEIGNvbm5lY3Rpb24pCit7CisgICAgbV9zdG9yYWdlQXJlYS0+cmVtb3ZlTGlzdGVuZXIoY29u
bmVjdGlvbik7CisgICAgaWYgKG1fc3RvcmFnZUFyZWEtPmhhc0xpc3RlbmVycygpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3N0b3JhZ2VBcmVhID0gbnVsbHB0cjsKKyAgICBtX3JlZ2lzdHJ5
LnVucmVnaXN0ZXJTdG9yYWdlQXJlYShtX3N0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCkpOworfQor
Cit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6OmVuc3VyZVN0b3JhZ2VBcmVhKGNvbnN0IFdlYkNv
cmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGgsIHN0ZDo6b3B0aW9u
YWw8UmVmPFdvcmtRdWV1ZT4+IHdvcmtRdWV1ZSkKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSAmJiB3b3JrUXVldWUp
CisgICAgICAgIG1fc3RvcmFnZUFyZWEgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0b3JhZ2VBcmVhPihs
b2NhbFN0b3JhZ2VRdW90YUluQnl0ZXMsIG9yaWdpbiwgcGF0aCwgV1RGTW92ZSgqd29ya1F1ZXVl
KSk7CisgICAgZWxzZQorICAgICAgICBtX3N0b3JhZ2VBcmVhID0gbWFrZVVuaXF1ZTxNZW1vcnlT
dG9yYWdlQXJlYT4ob3JpZ2luLCBTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlOjpMb2NhbCk7
CisgICAgbV9yZWdpc3RyeS5yZWdpc3RlclN0b3JhZ2VBcmVhKG1fc3RvcmFnZUFyZWEtPmlkZW50
aWZpZXIoKSwgKm1fc3RvcmFnZUFyZWEpOworfQorCitTdG9yYWdlQXJlYUlkZW50aWZpZXIgTG9j
YWxTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3Jp
Z2luLCBSZWY8V29ya1F1ZXVlPiYmIHdvcmtRdWV1ZSkKK3sKKyAgICBlbnN1cmVTdG9yYWdlQXJl
YShvcmlnaW4sIG1fcGF0aCwgc3RkOjptYWtlX29wdGlvbmFsKFdURk1vdmUod29ya1F1ZXVlKSkp
OworICAgIEFTU0VSVChtX3BhdGguaXNFbXB0eSgpIHx8IG1fc3RvcmFnZUFyZWEtPnR5cGUoKSA9
PSBTdG9yYWdlQXJlYUJhc2U6OlR5cGU6OlNRTGl0ZSk7CisKKyAgICBtX3N0b3JhZ2VBcmVhLT5h
ZGRMaXN0ZW5lcihjb25uZWN0aW9uKTsKKyAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+aWRlbnRp
ZmllcigpOworfQorCitTdG9yYWdlQXJlYUlkZW50aWZpZXIgTG9jYWxTdG9yYWdlTWFuYWdlcjo6
Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1
ZUlEIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQorewor
ICAgIGVuc3VyZVN0b3JhZ2VBcmVhKG9yaWdpbiwgU3RyaW5nIHsgfSwgeyB9KTsKKyAgICBBU1NF
UlQobV9zdG9yYWdlQXJlYS0+dHlwZSgpID09IFN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6TWVtb3J5
KTsKKworICAgIG1fc3RvcmFnZUFyZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb24pOworICAgIHJl
dHVybiBtX3N0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCk7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdl
TWFuYWdlcjo6ZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1
ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAg
IGlmICghbV9zdG9yYWdlQXJlYSB8fCBtX3N0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCkgIT0gaWRl
bnRpZmllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgY29ubmVjdGlvbkNsb3NlZChjb25uZWN0
aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xZmFmMGEzZmYyODM2N2JmMDM0MGJlNzZhYzU1NWVhNjIwNjI5MTE4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3Rv
cmFnZU1hbmFnZXIuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50aWZpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworc3RydWN0IENsaWVudE9yaWdpbjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFN0b3JhZ2VBcmVhQmFzZTsKK2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnk7CisKK2NsYXNz
IExvY2FsU3RvcmFnZU1hbmFnZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGhhc0xvY2FsU3RvcmFnZURhdGEoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxl
dGVMb2NhbFN0b3JhZ2VEYXRhKFdhbGxUaW1lLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFdl
YkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIHN0YXRpYyB2b2lkIG1vdmVMb2NhbFN0b3JhZ2VE
YXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBzb3Vy
Y2VPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgdGFyZ2V0T3JpZ2luKTsKKyAg
ICBzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gZ2V0T3JpZ2luc09m
TG9jYWxTdG9yYWdlRGF0YShjb25zdCBTdHJpbmcmIHBhdGgpOworCisgICAgTG9jYWxTdG9yYWdl
TWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiwgY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBi
b29sIGlzQWN0aXZlKCk7CisgICAgYm9vbCBoYXNEYXRhSW5NZW1vcnkoKTsKKyAgICB2b2lkIGNs
ZWFyRGF0YSgpOworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2b2lkIGhhbmRsZUxvd01lbW9yeVdh
cm5pbmcoKTsKKyAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoKTsKKyAgICB2b2lkIGNvbm5lY3Rp
b25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7CisKKyAgICBTdG9yYWdlQXJlYUlk
ZW50aWZpZXIgY29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1
ZUlELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBSZWY8V29ya1F1ZXVlPiYmKTsKKyAg
ICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgY29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJl
YShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4m
KTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpV
bmlxdWVJRCwgU3RvcmFnZUFyZWFJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGVu
c3VyZVN0b3JhZ2VBcmVhKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIGNvbnN0IFN0cmlu
ZyYsIHN0ZDo6b3B0aW9uYWw8UmVmPFdvcmtRdWV1ZT4+KTsKKworICAgIFN0b3JhZ2VBcmVhUmVn
aXN0cnkmIG1fcmVnaXN0cnk7CisgICAgU3RyaW5nIG1fcGF0aDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8U3RvcmFnZUFyZWFCYXNlPiBtX3N0b3JhZ2VBcmVhOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2IwNjlhZGY4ZWRmMTIx
NWQ1YWEyNmUzNTJlZDJjNDg5ZjcxNWY5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5jcHAKQEAgLTAsMCAr
MSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVt
b3J5U3RvcmFnZUFyZWEuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU1hcC5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworTWVtb3J5U3RvcmFnZUFyZWE6Ok1lbW9yeVN0b3JhZ2VBcmVh
KGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBTdG9yYWdlQXJlYUJhc2U6OlN0
b3JhZ2VUeXBlIHR5cGUpCisgICAgOiBTdG9yYWdlQXJlYUJhc2UoV2ViQ29yZTo6U3RvcmFnZU1h
cDo6bm9RdW90YSwgb3JpZ2luKQorICAgICwgbV9zdG9yYWdlVHlwZSh0eXBlKQoreworICAgIG1f
bWFwID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpTdG9yYWdlTWFwPihXZWJDb3JlOjpTdG9yYWdlTWFw
Ojpub1F1b3RhKTsKK30KKworYm9vbCBNZW1vcnlTdG9yYWdlQXJlYTo6aXNFbXB0eSgpCit7Cisg
ICAgcmV0dXJuICFtX21hcC0+bGVuZ3RoKCk7Cit9CisKK3ZvaWQgTWVtb3J5U3RvcmFnZUFyZWE6
OmNsZWFyKCkKK3sKKyAgICBtX21hcC0+Y2xlYXIoKTsKKyAgICBub3RpZnlMaXN0ZW5lcnNBYm91
dENsZWFyKCk7Cit9CisKK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IE1lbW9yeVN0b3JhZ2VBcmVh
OjphbGxJdGVtcygpCit7CisgICAgcmV0dXJuIG1fbWFwLT5pdGVtcygpOworfQorCitFeHBlY3Rl
ZDx2b2lkLCBTdG9yYWdlRXJyb3I+IE1lbW9yeVN0b3JhZ2VBcmVhOjpzZXRJdGVtKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBz
dG9yYWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUs
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICBi
b29sIGhhc1F1b3RhRXJyb3IgPSBmYWxzZTsKKyAgICBtX21hcC0+c2V0SXRlbShrZXksIHZhbHVl
LCBvbGRWYWx1ZSwgaGFzUXVvdGFFcnJvcik7CisgICAgaWYgKGhhc1F1b3RhRXJyb3IpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OlF1b3RhRXhjZWVkZWQpOwor
CisgICAgZGlzcGF0Y2hFdmVudHMoY29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIGtleSwg
b2xkVmFsdWUsIHZhbHVlLCB1cmxTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworRXhw
ZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBNZW1vcnlTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShJ
UEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50
aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZykKK3sKKyAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgbV9tYXAtPnJlbW92ZUl0
ZW0oa2V5LCBvbGRWYWx1ZSk7CisgICAgZGlzcGF0Y2hFdmVudHMoY29ubmVjdGlvbiwgc3RvcmFn
ZUFyZWFJbXBsSUQsIGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCB1cmxTdHJpbmcpOworCisgICAg
cmV0dXJuIHsgfTsKK30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBNZW1vcnlTdG9y
YWdlQXJlYTo6Y2xlYXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9y
YWdlQXJlYUltcGxJZGVudGlmaWVyIGltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVybFN0
cmluZykKK3sKKyAgICBpZiAoIW1fbWFwLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6SXRlbU5vdEZvdW5kKTsKKworICAgIG1fbWFwLT5jbGVh
cigpOworICAgIGRpc3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24sIGltcGxJZGVudGlmaWVyLCBTdHJp
bmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCB1cmxTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsK
K30KKworc3RkOjp1bmlxdWVfcHRyPE1lbW9yeVN0b3JhZ2VBcmVhPiBNZW1vcnlTdG9yYWdlQXJl
YTo6Y2xvbmUoKSBjb25zdAoreworICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBtYWtlVW5pcXVlPE1l
bW9yeVN0b3JhZ2VBcmVhPihvcmlnaW4oKSwgbV9zdG9yYWdlVHlwZSk7CisgICAgKnN0b3JhZ2VB
cmVhLT5tX21hcCA9ICptX21hcDsKKworICAgIHJldHVybiBzdG9yYWdlQXJlYTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKworCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmggYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
NzE0MjU2YzJjNTI0YzFkYjNmZDBhZmMzNTY3NmQ2Y2ZjNjg0OWZjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVh
LmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiU3RvcmFnZUFyZWFCYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFN0b3Jh
Z2VNYXA7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBNZW1vcnlTdG9yYWdlQXJl
YSBmaW5hbCA6IHB1YmxpYyBTdG9yYWdlQXJlYUJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIE1lbW9yeVN0b3JhZ2VBcmVhKGNvbnN0IFdlYkNvcmU6OkNs
aWVudE9yaWdpbiYsIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGUgPSBTdG9yYWdlQXJlYUJh
c2U6OlN0b3JhZ2VUeXBlOjpTZXNzaW9uKTsKKworICAgIGJvb2wgaXNFbXB0eSgpIGZpbmFsOwor
ICAgIHZvaWQgY2xlYXIoKSBmaW5hbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFn
ZUFyZWE+IGNsb25lKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgLy8gU3RvcmFnZUFyZWFCYXNl
CisgICAgU3RvcmFnZUFyZWFCYXNlOjpUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBT
dG9yYWdlQXJlYUJhc2U6OlR5cGU6Ok1lbW9yeTsgfTsKKyAgICBTdG9yYWdlQXJlYUJhc2U6OlN0
b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdG9yYWdlVHlw
ZTsgfQorICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGFsbEl0ZW1zKCkgZmluYWw7CisgICAg
RXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgZmluYWw7CisgICAgRXhw
ZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHVybFN0cmluZykgZmluYWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVy
cm9yPiBjbGVhcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgZmluYWw7CisKKyAgICBtdXRhYmxlIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTdG9yYWdlTWFwPiBtX21hcDsKKyAgICBTdG9yYWdlQXJl
YUJhc2U6OlN0b3JhZ2VUeXBlIG1fc3RvcmFnZVR5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmNwcAppbmRleCBlZWI2MDQ1ZmE4
MzJhOTQ4MzNhZWY5NWRlMzM1MmY3NWNlM2Y0NGMzLi4xODM1OTJlYmIwYjIzMDM2NjM5OTdmODc1
MTViOGY0NmJiMGRlYTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMjgsMTIg
KzI4LDE5IEBACiAKICNpbmNsdWRlICJGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiTG9jYWxT
dG9yYWdlTWFuYWdlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3Jr
U3RvcmFnZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk9yaWdpblN0b3JhZ2VNYW5hZ2Vy
LmgiCisjaW5jbHVkZSAiU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RvcmFn
ZUFyZWFCYXNlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFNYXBNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIlN0b3JhZ2VBcmVhUmVnaXN0cnkuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVR5cGUuaCIK
ICNpbmNsdWRlIDxwYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oPgogI2luY2x1ZGUgPHd0Zi9TY29w
ZS5oPgorI2luY2x1ZGUgPHd0Zi9TdXNwZW5kYWJsZVdvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmg+CiAjaW5jbHVkZSA8d3RmL3BlcnNpc3Rl
bmNlL1BlcnNpc3RlbnREZWNvZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNp
c3RlbnRFbmNvZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CkBAIC05NCwyMCAr
MTAxLDIyIEBAIHN0YXRpYyB2b2lkIGRlbGV0ZU9yaWdpbkZpbGVJZk5lY2Vzc2FyeShjb25zdCBT
dHJpbmcmIGZpbGVQYXRoKQogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZpbGVQYXRo
KTsKIH0KIAotUmVmPE5ldHdvcmtTdG9yYWdlTWFuYWdlcj4gTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
OjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBhdGgpCitS
ZWY8TmV0d29ya1N0b3JhZ2VNYW5hZ2VyPiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCwgc3RkOjpvcHRpb25h
bDxTdHJpbmc+IGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyKHNlc3Npb25JRCwgcGF0aCkpOworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IE5ldHdvcmtTdG9yYWdlTWFuYWdlcihzZXNzaW9uSUQsIHBhdGgsIGN1
c3RvbUxvY2FsU3RvcmFnZVBhdGgpKTsKIH0KIAotTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpOZXR3
b3JrU3RvcmFnZU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcm
IHBhdGgpCitOZXR3b3JrU3RvcmFnZU1hbmFnZXI6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcihQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCwgc3RkOjpvcHRpb25hbDxT
dHJpbmc+IGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgpCiAgICAgOiBtX3Nlc3Npb25JRChzZXNzaW9u
SUQpCi0gICAgLCBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LlN0
b3JhZ2UiKSkKKyAgICAsIG1fcXVldWUoU3VzcGVuZGFibGVXb3JrUXVldWU6OmNyZWF0ZSgiY29t
LmFwcGxlLldlYktpdC5TdG9yYWdlIikpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKIAotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsg
KnRoaXMgfSwgcGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7CisgICAgbV9x
dWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBwYXRo
ID0gcGF0aC5pc29sYXRlZENvcHkoKSwgY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCA9IGNyb3NzVGhy
ZWFkQ29weShjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKV0oKSBtdXRhYmxlIHsKICAgICAgICAgbV9m
aWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5ID0gbWFrZVVuaXF1ZTxGaWxlU3lzdGVtU3Rv
cmFnZUhhbmRsZVJlZ2lzdHJ5PigpOworICAgICAgICBtX3N0b3JhZ2VBcmVhUmVnaXN0cnkgPSBt
YWtlVW5pcXVlPFN0b3JhZ2VBcmVhUmVnaXN0cnk+KCk7CiAgICAgICAgIG1fcGF0aCA9IHBhdGg7
CisgICAgICAgIG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCA9IGN1c3RvbUxvY2FsU3RvcmFnZVBh
dGg7CiAgICAgICAgIGlmICghbV9wYXRoLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgYXV0byBz
YWx0UGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX3BhdGgsICJz
YWx0Iik7CiAgICAgICAgICAgICBtX3NhbHQgPSBGaWxlU3lzdGVtOjpyZWFkT3JNYWtlU2FsdChz
YWx0UGF0aCkudmFsdWVfb3IoRmlsZVN5c3RlbTo6U2FsdCgpKTsKQEAgLTEzNCw3ICsxNDMsNiBA
QCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xvc2UoKQogCiAgICAgbV9xdWV1ZS0+ZGlz
cGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSgpIG11dGFibGUgewog
ICAgICAgICBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmNsZWFyKCk7Ci0gICAgICAgIG1f
c2Vzc2lvbk9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5jbGVhcigpOwogICAgICAgICBtX2ZpbGVTeXN0
ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkgPSBudWxscHRyOwogCiAgICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIHsg
fSk7CkBAIC0yMzMsOSArMjQxLDYgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsZWFy
U3RvcmFnZUZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGMKICAgICAgICAg
Zm9yIChhdXRvJiBtYW5hZ2VyIDogbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMo
KSkKICAgICAgICAgICAgIG1hbmFnZXItPnNldFBlcnNpc3RlZChmYWxzZSk7CiAKLSAgICAgICAg
Zm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zZXNzaW9uT3JpZ2luU3RvcmFnZU1hbmFnZXJzLnZhbHVl
cygpKQotICAgICAgICAgICAgbWFuYWdlci0+c2V0UGVyc2lzdGVkKGZhbHNlKTsKLQogICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3Rl
Y3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAgICAg
fSk7CkBAIC0zODMsMTQgKzM4OCw2IEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpnZXRI
YW5kbGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJDb3JlOjpGaWxlCiAgICAgY29t
cGxldGlvbkhhbmRsZXIoaGFuZGxlLT5nZXRIYW5kbGUoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBX
VEZNb3ZlKG5hbWUpKSk7CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVEYXRhVHlw
ZT4gdG9XZWJzaXRlRGF0YVR5cGUoY29uc3QgU3RyaW5nJiBzdG9yYWdlVHlwZSkKLXsKLSAgICBp
ZiAoc3RvcmFnZVR5cGUgPT0gIkZpbGVTeXN0ZW0iKQotICAgICAgICByZXR1cm4gV2Vic2l0ZURh
dGFUeXBlOjpGaWxlU3lzdGVtOwotCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQogdm9p
ZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZvckVhY2hPcmlnaW5EaXJlY3RvcnkoY29uc3QgRnVu
Y3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mIGFwcGx5KQogewogICAgIGZvciAoYXV0byYgdG9w
T3JpZ2luIDogRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShtX3BhdGgpKSB7CkBAIC00MDIsNiAr
Mzk5LDkgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZvckVhY2hPcmlnaW5EaXJlY3Rv
cnkoY29uc3QgRnVuY3Rpb248dm9pZChjb25zdCBTdHIKICAgICAgICAgfQogCiAgICAgICAgIGZv
ciAoYXV0byYgb3BlbmluZ09yaWdpbiA6IG9wZW5pbmdPcmlnaW5zKSB7CisgICAgICAgICAgICBp
ZiAob3BlbmluZ09yaWdpbiA9PSAiLkRTX1N0b3JlIikKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKwogICAgICAgICAgICAgYXV0byBvcGVuaW5nT3JpZ2luRGlyZWN0b3J5ID0gRmlsZVN5c3Rl
bTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHRvcE9yaWdpbkRpcmVjdG9yeSwgb3BlbmluZ09y
aWdpbik7CiAgICAgICAgICAgICBhcHBseShvcGVuaW5nT3JpZ2luRGlyZWN0b3J5KTsKICAgICAg
ICAgfQpAQCAtNDEzLDIwICs0MTMsNDAgQEAgVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4gTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpmZXRjaERhdGFGcm9tRGlzayhPcHRpb25TZXQ8V2UKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPj4gb3JpZ2luVHlwZXM7Cisg
ICAgLy8gRmV0Y2ggdmlhIGV4aXN0aW5nIE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy4KKyAgICBIYXNo
U2V0PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gdmlzaXRlZE9yaWdpbnM7CisgICAgZm9yIChhdXRv
JiBbb3JpZ2luLCBtYW5hZ2VyXSA6IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMpIHsKKyAg
ICAgICAgT3JpZ2luU3RvcmFnZURhdGFPcHRpb25zIG9wdGlvbnMgeyBtX2N1c3RvbUxvY2FsU3Rv
cmFnZVBhdGgsIG9yaWdpbiwgc3RkOjpudWxsb3B0IH07CisgICAgICAgIGF1dG8gdHlwZXMgPSBt
YW5hZ2VyLT5mZXRjaERhdGEodGFyZ2V0VHlwZXMsIFdURk1vdmUob3B0aW9ucykpOworICAgICAg
ICBvcmlnaW5UeXBlcy5hZGQob3JpZ2luLmNsaWVudE9yaWdpbiwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4geyB9KS5pdGVyYXRvci0+dmFsdWUuYWRkKHR5cGVzKTsKKyAgICAgICAgb3JpZ2lu
VHlwZXMuYWRkKG9yaWdpbi50b3BPcmlnaW4sIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHsg
fSkuaXRlcmF0b3ItPnZhbHVlLmFkZCh0eXBlcyk7CisgICAgICAgIHZpc2l0ZWRPcmlnaW5zLmFk
ZChvcmlnaW4pOworICAgIH0KKworICAgIC8vIEZldGNoIHZpYSBuZXdseSBjcmVhdGVkIE9yaWdp
blN0b3JhZ2VNYW5hZ2VycyBiYXNlZCBvbiBkaXNrIGRhdGEuCiAgICAgZm9yRWFjaE9yaWdpbkRp
cmVjdG9yeShbJl0oYXV0byBkaXJlY3RvcnkpIG11dGFibGUgewotICAgICAgICBhdXRvIG9yaWdp
biA9IHJlYWRPcmlnaW5Gcm9tRmlsZShvcmlnaW5GaWxlUGF0aChkaXJlY3RvcnkpKTsKLSAgICAg
ICAgaWYgKCFvcmlnaW4pCisgICAgICAgIGF1dG8gcmVhZE9yaWdpbiA9IHJlYWRPcmlnaW5Gcm9t
RmlsZShvcmlnaW5GaWxlUGF0aChkaXJlY3RvcnkpKTsKKyAgICAgICAgaWYgKCFyZWFkT3JpZ2lu
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGZvciAoYXV0byYgc3RvcmFnZVR5cGUg
OiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KGRpcmVjdG9yeSkpIHsKLSAgICAgICAgICAgIGlm
IChhdXRvIHR5cGUgPSB0b1dlYnNpdGVEYXRhVHlwZShzdG9yYWdlVHlwZSk7IHR5cGUgJiYgdGFy
Z2V0VHlwZXMuY29udGFpbnMoKnR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gUmV0dXJuIGJv
dGggdG9wIG9yaWdpbiBhbmQgb3BlbmluZyBvcmlnaW4gZm9yIHRoaXMgZGF0YS4KLSAgICAgICAg
ICAgICAgICBvcmlnaW5UeXBlcy5hZGQob3JpZ2luLT5jbGllbnRPcmlnaW4sIE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IHsgfSkuaXRlcmF0b3ItPnZhbHVlLmFkZCgqdHlwZSk7Ci0gICAgICAg
ICAgICAgICAgb3JpZ2luVHlwZXMuYWRkKG9yaWdpbi0+dG9wT3JpZ2luLCBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQoKnR5cGUpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9CisgICAgICAgIGF1dG8gb3JpZ2luID0gcmVhZE9yaWdpbi52YWx1ZSgp
OworICAgICAgICBpZiAodmlzaXRlZE9yaWdpbnMuY29udGFpbnMob3JpZ2luKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBPcmlnaW5TdG9yYWdlRGF0YU9wdGlvbnMgb3B0aW9ucyB7
IG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgb3JpZ2luLCBzdGQ6Om51bGxvcHQgfTsKKyAgICAg
ICAgYXV0byB0eXBlcyA9IGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5mZXRjaERh
dGEodGFyZ2V0VHlwZXMsIFdURk1vdmUob3B0aW9ucykpOworICAgICAgICByZW1vdmVPcmlnaW5T
dG9yYWdlTWFuYWdlcklmUG9zc2libGUob3JpZ2luKTsKKyAgICAgICAgb3JpZ2luVHlwZXMuYWRk
KG9yaWdpbi5jbGllbnRPcmlnaW4sIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHsgfSkuaXRl
cmF0b3ItPnZhbHVlLmFkZCh0eXBlcyk7CisgICAgICAgIG9yaWdpblR5cGVzLmFkZChvcmlnaW4u
dG9wT3JpZ2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB7IH0pLml0ZXJhdG9yLT52YWx1
ZS5hZGQodHlwZXMpOwogICAgIH0pOwogCisgICAgLy8gRmV0Y2ggTG9jYWxTdG9yZ2Ugb3JpZ2lu
cyBzaW5jZSBpdCBtYXkgdXNlIGN1c3RvbSBwYXRoLgorICAgIGlmIChtX2N1c3RvbUxvY2FsU3Rv
cmFnZVBhdGgpIHsKKyAgICAgICAgYXV0byBvcmlnaW5zID0gTG9jYWxTdG9yYWdlTWFuYWdlcjo6
Z2V0T3JpZ2luc09mTG9jYWxTdG9yYWdlRGF0YSgqbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKTsK
KyAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBvcmlnaW5zKQorICAgICAgICAgICAgb3JpZ2lu
VHlwZXMuYWRkKG9yaWdpbiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4geyB9KS5pdGVyYXRv
ci0+dmFsdWUuYWRkKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKTsKKyAgICB9CisKICAg
ICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBlbnRyaWVzOwogICAgIGZvciAoYXV0byBbb3Jp
Z2luLCB0eXBlc10gOiBvcmlnaW5UeXBlcykgewogICAgICAgICBmb3IgKGF1dG8gdHlwZSA6IHR5
cGVzKQpAQCAtNDU2LDI1ICs0NzYsMjYgQEAgVmVjdG9yPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4g
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrKE9wdGlvblNldDwKICAgICBW
ZWN0b3I8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBkZWxldGVkT3JpZ2luczsKICAgICBmb3JFYWNo
T3JpZ2luRGlyZWN0b3J5KFsmXShhdXRvIGRpcmVjdG9yeSkgbXV0YWJsZSB7CiAgICAgICAgIGF1
dG8gZmlsZVBhdGggPSBvcmlnaW5GaWxlUGF0aChkaXJlY3RvcnkpOwotICAgICAgICBhdXRvIG9y
aWdpbiA9IHJlYWRPcmlnaW5Gcm9tRmlsZShmaWxlUGF0aCk7Ci0gICAgICAgIGlmICghb3JpZ2lu
KSB7CisgICAgICAgIGF1dG8gcmVhZE9yaWdpbiA9IHJlYWRPcmlnaW5Gcm9tRmlsZShmaWxlUGF0
aCk7CisgICAgICAgIGlmICghcmVhZE9yaWdpbikgewogICAgICAgICAgICAgLy8gSWYgb3JpZ2lu
IGNhbm5vdCBiZSByZXRyaWV2ZWQsIGJ1dCB3ZSBhcmUgYXNrZWQgdG8gcmVtb3ZlIGRhdGEgZm9y
IGFsbCBvcmlnaW5zLCByZW1vdmUgaXQuCiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihT
dG9yYWdlLCAiTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrIGZhaWxlZCB0
byByZWFkIG9yaWdpbiBmcm9tICclcyciLCBmaWxlUGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAg
ICAgICAgIGlmIChmaWx0ZXIoV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgfSkpIHsKICAgICAgICAg
ICAgICAgICBhdXRvIHRlbXBPcmlnaW5TdG9yYWdlTWFuYWdlciA9IG1ha2VVbmlxdWU8T3JpZ2lu
U3RvcmFnZU1hbmFnZXI+KFN0cmluZyB7IGRpcmVjdG9yeSB9KTsKLSAgICAgICAgICAgICAgICB0
ZW1wT3JpZ2luU3RvcmFnZU1hbmFnZXItPmRlbGV0ZURhdGEodHlwZXMsIG1vZGlmaWVkU2luY2VU
aW1lKTsKKyAgICAgICAgICAgICAgICB0ZW1wT3JpZ2luU3RvcmFnZU1hbmFnZXItPmRlbGV0ZURh
dGEodHlwZXMsIG1vZGlmaWVkU2luY2VUaW1lLCBPcmlnaW5TdG9yYWdlRGF0YU9wdGlvbnMgeyBt
X2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgsIHN0ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0IH0pOwog
ICAgICAgICAgICAgICAgIGRlbGV0ZU9yaWdpbkZpbGVJZk5lY2Vzc2FyeShmaWxlUGF0aCk7CiAg
ICAgICAgICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkoZGlyZWN0b3J5
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmICghZmlsdGVyKCpvcmlnaW4pKQorICAgICAgICBhdXRvIG9yaWdpbiA9IHJlYWRPcmln
aW4udmFsdWUoKTsKKyAgICAgICAgaWYgKCFmaWx0ZXIob3JpZ2luKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBkZWxldGVkT3JpZ2lucy5hcHBlbmQoKm9yaWdpbik7Ci0gICAgICAg
IGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIoKm9yaWdpbikuZGVsZXRlRGF0YSh0eXBlcywgbW9k
aWZpZWRTaW5jZVRpbWUpOwotICAgICAgICByZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9z
c2libGUoKm9yaWdpbik7CisgICAgICAgIGRlbGV0ZWRPcmlnaW5zLmFwcGVuZChvcmlnaW4pOwor
ICAgICAgICBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbikuZGVsZXRlRGF0YSh0eXBl
cywgbW9kaWZpZWRTaW5jZVRpbWUsIE9yaWdpblN0b3JhZ2VEYXRhT3B0aW9ucyB7IG1fY3VzdG9t
TG9jYWxTdG9yYWdlUGF0aCwgb3JpZ2luLCBzdGQ6Om51bGxvcHQgfSk7CisgICAgICAgIHJlbW92
ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShvcmlnaW4pOwogICAgICAgICBkZWxldGVP
cmlnaW5GaWxlSWZOZWNlc3NhcnkoZmlsZVBhdGgpOwogICAgICAgICBGaWxlU3lzdGVtOjpkZWxl
dGVFbXB0eURpcmVjdG9yeShkaXJlY3RvcnkpOwogICAgIH0pOwpAQCAtNTQyLDUgKzU2MywxNjYg
QEAgdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZURhdGFGb3JSZWdpc3RyYWJsZURv
bWFpbnMoT3B0aW9uU2V0PFdlYnNpdGVEYXQKICAgICB9KTsKIH0KIAordm9pZCBOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6Om1vdmVEYXRhKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYg
c291cmNlLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIHRhcmdldCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKCFtX2Nsb3NlZCk7CisKKyAgICBtX3F1ZXVl
LT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHNvdXJjZSA9
IGNyb3NzVGhyZWFkQ29weShzb3VyY2UpLCB0YXJnZXQgPSBjcm9zc1RocmVhZENvcHkodGFyZ2V0
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgYXV0byBzb3VyY2VPcmlnaW4gPSBXZWJDb3JlOjpDbGllbnRPcmlnaW4g
eyBzb3VyY2UsIHNvdXJjZSB9OworICAgICAgICBhdXRvIHRhcmdldE9yaWdpbiA9IFdlYkNvcmU6
OkNsaWVudE9yaWdpbiB7IHRhcmdldCwgdGFyZ2V0IH07CisgICAgICAgIAorICAgICAgICAvLyBD
bGVhciBleGlzdGluZyBkYXRhIGZvciB0YXJnZXQgb3JpZ2luLgorICAgICAgICBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiB0eXBlcyA9IHsgV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtLCBX
ZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSwgV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3Rv
cmFnZSAgfTsKKyAgICAgICAgT3JpZ2luU3RvcmFnZURhdGFPcHRpb25zIG9wdGlvbnMgeyBtX2N1
c3RvbUxvY2FsU3RvcmFnZVBhdGgsIHNvdXJjZU9yaWdpbiwgdGFyZ2V0T3JpZ2luIH07CisgICAg
ICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIodGFyZ2V0T3JpZ2luKS5kZWxldGVEYXRhKHR5
cGVzLCAtV2FsbFRpbWU6OmluZmluaXR5KCksIE9yaWdpblN0b3JhZ2VEYXRhT3B0aW9ucyB7IG1f
Y3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgc291cmNlT3JpZ2luLCBzdGQ6Om51bGxvcHQgfSk7Cisg
ICAgICAgIHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZSh0YXJnZXRPcmlnaW4p
OworCisgICAgICAgIC8vIE1vdmUgZGF0YSBmcm9tIHNvdXJjZSBvcmlnaW4gdG8gdGFyZ2V0IG9y
aWdpbi4KKyAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihzb3VyY2VPcmlnaW4pLm1v
dmVEYXRhKG9yaWdpbkRpcmVjdG9yeVBhdGgobV9wYXRoLCB0YXJnZXRPcmlnaW4sIG1fc2FsdCks
IE9yaWdpblN0b3JhZ2VEYXRhT3B0aW9ucyB7IG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgc291
cmNlT3JpZ2luLCB0YXJnZXRPcmlnaW4gfSk7CisgICAgICAgIHJlbW92ZU9yaWdpblN0b3JhZ2VN
YW5hZ2VySWZQb3NzaWJsZShzb3VyY2VPcmlnaW4pOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisKK3Zv
aWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzdXNwZW5kKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgbV9xdWV1ZS0+c3VzcGVuZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0
aGlzIH1dIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9sb2NhbE9yaWdpblN0b3Jh
Z2VNYW5hZ2Vycy52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gbG9jYWxTdG9yYWdl
TWFuYWdlciA9IG1hbmFnZXItPmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcigpKQorICAgICAg
ICAgICAgICAgIGxvY2FsU3RvcmFnZU1hbmFnZXItPnN5bmNMb2NhbFN0b3JhZ2UoKTsKKyAgICAg
ICAgfQorICAgIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBOZXR3
b3JrU3RvcmFnZU1hbmFnZXI6OnJlc3VtZSgpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIG1fcXVldWUtPnJlc3VtZSgpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdl
TWFuYWdlcjo6aGFuZGxlTG93TWVtb3J5V2FybmluZygpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gUmVmIHsgKnRoaXMgfV0geworICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2Fs
T3JpZ2luU3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBs
b2NhbFN0b3JhZ2VNYW5hZ2VyID0gbWFuYWdlci0+ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2Vy
KCkpCisgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTWFuYWdlci0+aGFuZGxlTG93TWVtb3J5
V2FybmluZygpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VN
YW5hZ2VyOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
bV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
eworICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFn
ZXJzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBsb2NhbFN0b3JhZ2VNYW5hZ2Vy
ID0gbWFuYWdlci0+ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkpCisgICAgICAgICAgICAg
ICAgbG9jYWxTdG9yYWdlTWFuYWdlci0+c3luY0xvY2FsU3RvcmFnZSgpOworICAgICAgICB9CisK
KyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RU
b0xvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBTdG9yYWdlTmFt
ZXNwYWNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiB0b3BP
cmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFyZWFJZGVudGlmaWVyKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIFdlYkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4gPSB7IHRvcE9yaWdpbiwgdG9wT3JpZ2lu
IH07CisgICAgY29tcGxldGlvbkhhbmRsZXIobG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihvcmln
aW4pLmxvY2FsU3RvcmFnZU1hbmFnZXIoKm1fc3RvcmFnZUFyZWFSZWdpc3RyeSwgbV9jdXN0b21M
b2NhbFN0b3JhZ2VQYXRoKS5jb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5p
cXVlSUQoKSwgb3JpZ2luLCBtX3F1ZXVlLmNvcHlSZWYoKSkpOworfQorCit2b2lkIE5ldHdvcmtT
dG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBjb25zdCBX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIHRvcE9yaWdpbiwgY29uc3QgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhJiBvcGVuaW5nT3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0
b3JhZ2VBcmVhSWRlbnRpZmllcik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luIG9yaWdpbiA9IHsgdG9wT3JpZ2luLCBvcGVuaW5nT3JpZ2luIH07Cisg
ICAgY29tcGxldGlvbkhhbmRsZXIobG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihvcmlnaW4pLmxv
Y2FsU3RvcmFnZU1hbmFnZXIoKm1fc3RvcmFnZUFyZWFSZWdpc3RyeSwgbV9jdXN0b21Mb2NhbFN0
b3JhZ2VQYXRoKS5jb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24u
dW5pcXVlSUQoKSwgb3JpZ2luKSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpj
b25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBT
dG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGEmIHRvcE9yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdl
QXJlYUlkZW50aWZpZXIpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorCit7CisgICAgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luIG9yaWdpbiA9IHsgdG9wT3JpZ2luLCB0b3BPcmlnaW4gfTsKKyAgICBjb21w
bGV0aW9uSGFuZGxlcihsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbikuc2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VBcmVhUmVnaXN0cnkpLmNvbm5lY3RUb1Nlc3Npb25TdG9y
YWdlQXJlYShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIG9yaWdpbiwgaWRlbnRpZmllcikpOworfQor
Cit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlm
aWVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBzdG9y
YWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFSZWdpc3RyeS0+Z2V0U3RvcmFnZUFyZWEoaWRlbnRpZmll
cik7CisgICAgaWYgKCFzdG9yYWdlQXJlYSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHN0
b3JhZ2VBcmVhLT5zdG9yYWdlVHlwZSgpID09IFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGU6
OkxvY2FsKQorICAgICAgICBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKHN0b3JhZ2VBcmVhLT5v
cmlnaW4oKSkubG9jYWxTdG9yYWdlTWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LCBtX2N1
c3RvbUxvY2FsU3RvcmFnZVBhdGgpLmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoY29ubmVjdGlv
bi51bmlxdWVJRCgpLCBpZGVudGlmaWVyKTsKKyAgICBlbHNlCisgICAgICAgIGxvY2FsT3JpZ2lu
U3RvcmFnZU1hbmFnZXIoc3RvcmFnZUFyZWEtPm9yaWdpbigpKS5zZXNzaW9uU3RvcmFnZU1hbmFn
ZXIoKm1fc3RvcmFnZUFyZWFSZWdpc3RyeSkuZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShjb25u
ZWN0aW9uLnVuaXF1ZUlEKCksIGlkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdl
TWFuYWdlcjo6Y2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIGZyb21JZGVudGlmaWVyLCBTdG9y
YWdlTmFtZXNwYWNlSWRlbnRpZmllciB0b0lkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2lu
U3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChhdXRvKiBzZXNzaW9uU3Rv
cmFnZU1hbmFnZXIgPSBtYW5hZ2VyLT5leGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigpKQor
ICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5jbG9uZVN0b3JhZ2VBcmVhKGNvbm5l
Y3Rpb24udW5pcXVlSUQoKSwgZnJvbUlkZW50aWZpZXIsIHRvSWRlbnRpZmllcik7CisgICAgfQor
fQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Z2V0VmFsdWVzKFN0b3JhZ2VBcmVhSWRl
bnRpZmllciBpZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJl
YVJlZ2lzdHJ5LT5nZXRTdG9yYWdlQXJlYShpZGVudGlmaWVyKTsKKyAgICBpZiAoIXN0b3JhZ2VB
cmVhKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4geyB9KTsKKworICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VBcmVhLT5hbGxJdGVt
cygpKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0oSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgU3Rv
cmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3RvcmFnZU1h
cFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJp
bmcmIHVybFN0cmluZykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGF1dG8gc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhUmVnaXN0cnktPmdldFN0b3JhZ2VBcmVh
KGlkZW50aWZpZXIpOworICAgIGJvb2wgcXVvdGFFcnJvciA9IGZhbHNlOworICAgIGlmIChzdG9y
YWdlQXJlYSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHN0b3JhZ2VBcmVhLT5zZXRJdGVtKGNv
bm5lY3Rpb24udW5pcXVlSUQoKSwgaW1wbElkZW50aWZpZXIsIGtleSwgdmFsdWUsIHVybFN0cmlu
Zyk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcXVvdGFFcnJvciA9IChyZXN1
bHQuZXJyb3IoKSA9PSBTdG9yYWdlRXJyb3I6OlF1b3RhRXhjZWVkZWQpOworICAgIH0KKworICAg
IGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFNldEl0ZW0oc3Rv
cmFnZU1hcFNlZWQsIGtleSwgcXVvdGFFcnJvciksIGlkZW50aWZpZXIpOworfQorCit2b2lkIE5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBTdG9yYWdlQXJlYUltcGxJZGVu
dGlmaWVyIGltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgYXV0byBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFSZWdp
c3RyeS0+Z2V0U3RvcmFnZUFyZWEoaWRlbnRpZmllcik7CisgICAgaWYgKHN0b3JhZ2VBcmVhKQor
ICAgICAgICBzdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIGlt
cGxJZGVudGlmaWVyLCBrZXksIHVybFN0cmluZyk7CisKKyAgICBjb25uZWN0aW9uLnNlbmQoTWVz
c2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRSZW1vdmVJdGVtKHN0b3JhZ2VNYXBTZWVkLCBrZXkp
LCBpZGVudGlmaWVyKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsZWFyKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZp
ZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHN0
b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVh
UmVnaXN0cnktPmdldFN0b3JhZ2VBcmVhKGlkZW50aWZpZXIpOworICAgIGlmIChzdG9yYWdlQXJl
YSkKKyAgICAgICAgc3RvcmFnZUFyZWEtPmNsZWFyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaW1w
bElkZW50aWZpZXIsIHVybFN0cmluZyk7CisKKyAgICBjb25uZWN0aW9uLnNlbmQoTWVzc2FnZXM6
OlN0b3JhZ2VBcmVhTWFwOjpEaWRDbGVhcihzdG9yYWdlTWFwU2VlZCksIGlkZW50aWZpZXIpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oCmluZGV4
IDJhZGRmMmI1ZTIwYWQzNmQyOGU0NDU5N2VhNDEzZmZlODk2MWE0MGYuLjAwNzVjOTUzNjUxOTI4
OTkyYmU1ZDU3ZjVmODQzMjA5MDU0N2VlNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmgKQEAg
LTI4LDYgKzI4LDkgQEAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiRmlsZVN5
c3RlbVN0b3JhZ2VFcnJvci5oIgogI2luY2x1ZGUgIk9yaWdpblN0b3JhZ2VNYW5hZ2VyLmgiCisj
aW5jbHVkZSAiU3RvcmFnZUFyZWFJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJ
bXBsSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLmgi
CiAjaW5jbHVkZSAiV2Vic2l0ZURhdGEuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdp
bi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIuaD4KQEAg
LTQ2LDEwICs0OSwxMSBAQCBzdHJ1Y3QgQ2xpZW50T3JpZ2luOwogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnk7CitjbGFzcyBTdG9yYWdl
QXJlYVJlZ2lzdHJ5OwogCiBjbGFzcyBOZXR3b3JrU3RvcmFnZU1hbmFnZXIgZmluYWwgOiBwdWJs
aWMgSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8TmV0d29ya1N0b3JhZ2VNYW5hZ2VyPiBjcmVhdGUoUEFMOjpTZXNzaW9u
SUQsIGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrU3RvcmFnZU1h
bmFnZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBzdGQ6Om9w
dGlvbmFsPFN0cmluZz4gY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCk7CiAKICAgICB2b2lkIHN0YXJ0
UmVjZWl2aW5nTWVzc2FnZUZyb21Db25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiYpOwogICAgIHZv
aWQgc3RvcFJlY2VpdmluZ01lc3NhZ2VGcm9tQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24mKTsK
QEAgLTYxLDkgKzY1LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGRlbGV0ZURhdGFN
b2RpZmllZFNpbmNlKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGRlbGV0ZURhdGFGb3JSZWdpc3RyYWJs
ZURvbWFpbnMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbj4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhhc2hTZXQ8V2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYpPiYmKTsKKyAgICB2b2lkIG1vdmVEYXRhKGNvbnN0
IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgc291cmNlLCBjb25zdCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGEmIHRhcmdldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAg
ICB2b2lkIHN1c3BlbmQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHJl
c3VtZSgpOworICAgIHZvaWQgaGFuZGxlTG93TWVtb3J5V2FybmluZygpOworICAgIHZvaWQgc3lu
Y0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiBwcml2YXRlOgot
ICAgIE5ldHdvcmtTdG9yYWdlTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBw
YXRoKTsKKyAgICBOZXR3b3JrU3RvcmFnZU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0
cmluZyYgcGF0aCwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgp
OwogICAgIH5OZXR3b3JrU3RvcmFnZU1hbmFnZXIoKTsKICAgICBPcmlnaW5TdG9yYWdlTWFuYWdl
ciYgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4m
KTsKICAgICB2b2lkIHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKQEAgLTc1LDggKzg0LDkgQEAgcHJpdmF0ZToKIAogICAg
IC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyIChpbXBsZW1lbnRlZCBieSBnZW5lcmF0ZWQgY29kZSkK
ICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2Rl
ciYpOworICAgIGJvb2wgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYsIFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpOwogCi0g
ICAgLy8gTWVzc2FnZSBoYW5kbGVycworICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMgZm9yIEZpbGVT
eXN0ZW0KICAgICB2b2lkIHBlcnNpc3RlZChjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIHBlcnNpc3QoY29uc3Qg
V2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7
CiAgICAgdm9pZCBmaWxlU3lzdGVtR2V0RGlyZWN0b3J5KElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0
IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwZWN0ZWQ8
V2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIEZpbGVTeXN0ZW1TdG9yYWdlRXJy
b3I+KT4mJik7CkBAIC04OCwyMiArOTgsMzMgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZUVu
dHJ5KFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wgZGVsZXRlUmVjdXJzaXZlbHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpv
cHRpb25hbDxGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOwogICAgIHZvaWQgcmVzb2x2ZShX
ZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgV2ViQ29yZTo6RmlsZVN5c3RlbUhh
bmRsZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwZWN0ZWQ8VmVjdG9yPFN0
cmluZz4sIEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCBnZXRGaWxlKFdl
YkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KEV4cGVjdGVkPFN0cmluZywgRmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsKLQogICAgIHVz
aW5nIEFjY2Vzc0hhbmRsZUluZm8gPSBzdGQ6OnBhaXI8V2ViQ29yZTo6RmlsZVN5c3RlbVN5bmNB
Y2Nlc3NIYW5kbGVJZGVudGlmaWVyLCBJUEM6OlNoYXJlZEZpbGVIYW5kbGU+OwogICAgIHZvaWQg
Y3JlYXRlU3luY0FjY2Vzc0hhbmRsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmll
ciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeHBlY3RlZDxBY2Nlc3NIYW5kbGVJbmZvLCBGaWxl
U3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOwogICAgIHZvaWQgY2xvc2VBY2Nlc3NIYW5kbGUoV2Vi
Q29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZpbGVTeXN0ZW1TeW5j
QWNjZXNzSGFuZGxlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlv
bmFsPEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCBnZXRIYW5kbGVOYW1l
cyhXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChFeHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgRmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYm
KTsKICAgICB2b2lkIGdldEhhbmRsZShJUEM6OkNvbm5lY3Rpb24mLCBXZWJDb3JlOjpGaWxlU3lz
dGVtSGFuZGxlSWRlbnRpZmllciwgU3RyaW5nJiYgbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChFeHBlY3RlZDxzdGQ6OnBhaXI8V2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIs
IGJvb2w+LCBGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOworICAgIAorICAgIC8vIE1lc3Nh
Z2UgaGFuZGxlcnMgZm9yIFdlYlN0b3JhZ2UKKyAgICB2b2lkIGNvbm5lY3RUb0xvY2FsU3RvcmFn
ZUFyZWEoSVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIGNvbnN0
IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3Rv
cmFnZUFyZWFJZGVudGlmaWVyKT4mJik7CisgICAgdm9pZCBjb25uZWN0VG9UcmFuc2llbnRMb2Nh
bFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVy
LCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBjb25zdCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGEmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBcmVhSWRlbnRp
Zmllcik+JiYpOworICAgIHZvaWQgY29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKElQQzo6Q29u
bmVjdGlvbiYsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGEmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBcmVhSWRlbnRp
Zmllcik+JiYpOworICAgIHZvaWQgZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShJUEM6OkNvbm5l
Y3Rpb24mLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIpOworICAgIHZvaWQgY2xvbmVTZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZShJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmll
ciwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZ2V0VmFsdWVzKFN0b3Jh
Z2VBcmVhSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiYpPiYmKTsKKyAgICB2b2lkIHNldEl0ZW0oSVBDOjpDb25uZWN0aW9uJiwg
U3RvcmFnZUFyZWFJZGVudGlmaWVyLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCB1aW50NjRf
dCBzZWVkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpOworICAgIHZvaWQgcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb24mLCBT
dG9yYWdlQXJlYUlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIHVpbnQ2NF90
IHNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CisgICAg
dm9pZCBjbGVhcihJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIsIFN0b3Jh
Z2VBcmVhSW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHNlZWQsIGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nKTsKIAogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwotICAgIFJlZjxXb3JrUXVl
dWU+IG1fcXVldWU7CisgICAgUmVmPFN1c3BlbmRhYmxlV29ya1F1ZXVlPiBtX3F1ZXVlOwogICAg
IFN0cmluZyBtX3BhdGg7CiAgICAgRmlsZVN5c3RlbTo6U2FsdCBtX3NhbHQ7CiAgICAgYm9vbCBt
X2Nsb3NlZCB7IGZhbHNlIH07CiAgICAgSGFzaE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIHN0
ZDo6dW5pcXVlX3B0cjxPcmlnaW5TdG9yYWdlTWFuYWdlcj4+IG1fbG9jYWxPcmlnaW5TdG9yYWdl
TWFuYWdlcnM7Ci0gICAgSGFzaE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVl
X3B0cjxPcmlnaW5TdG9yYWdlTWFuYWdlcj4+IG1fc2Vzc2lvbk9yaWdpblN0b3JhZ2VNYW5hZ2Vy
czsKICAgICBXZWFrSGFzaFNldDxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbnM7IC8vIE1h
aW4gdGhyZWFkIG9ubHkuCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbGVTeXN0ZW1TdG9yYWdlSGFu
ZGxlUmVnaXN0cnk+IG1fZmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8U3RvcmFnZUFyZWFSZWdpc3RyeT4gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5Owor
ICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGg7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLm1l
c3NhZ2VzLmluCmluZGV4IDRlNDA1YzZlZWFkMzI2ZTI1YjQzMTY0MjA3MDgwOTVmYTYwZGM4Mzgu
LjA0MjJiNjM0NzUxZDAzODVmODRlMDFmNjRhYzYxZGFmMzFjMTVlODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIu
bWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05l
dHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbgpAQCAtMzUsOSArMzUsMTggQEAKICAgICBS
ZXNvbHZlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdl
YkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIHRhcmdldElkZW50aWZpZXIpIC0+IChF
eHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgV2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiBy
ZXN1bHQpIEFzeW5jCiAgICAgTW92ZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmll
ciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBkZXN0aW5h
dGlvbklkZW50aWZpZXIsIFN0cmluZyBuZXdOYW1lKSAtPiAoc3RkOjpvcHRpb25hbDxXZWJLaXQ6
OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkgQXN5bmMKICAgICBHZXRGaWxlKFdlYkNv
cmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChFeHBlY3RlZDxT
dHJpbmcsIFdlYktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYwotCiAg
ICAgQ3JlYXRlU3luY0FjY2Vzc0hhbmRsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRp
ZmllciBpZGVudGlmaWVyKSAtPiAoRXhwZWN0ZWQ8c3RkOjpwYWlyPFdlYkNvcmU6OkZpbGVTeXN0
ZW1TeW5jQWNjZXNzSGFuZGxlSWRlbnRpZmllciwgSVBDOjpTaGFyZWRGaWxlSGFuZGxlPiwgV2Vi
S2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5jCiAgICAgQ2xvc2VBY2Nl
c3NIYW5kbGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmllciwg
V2ViQ29yZTo6RmlsZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyIGFjY2Vzc0hhbmRs
ZUlkZW50aWZpZXIpIC0+IChzdGQ6Om9wdGlvbmFsPFdlYktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VF
cnJvcj4gcmVzdWx0KSBBc3luYwogICAgIEdldEhhbmRsZU5hbWVzKFdlYkNvcmU6OkZpbGVTeXN0
ZW1IYW5kbGVJZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChFeHBlY3RlZDxWZWN0b3I8U3RyaW5n
PiwgV2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5jCiAgICAgR2V0
SGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0
cmluZyBuYW1lKSAtPiAoRXhwZWN0ZWQ8c3RkOjpwYWlyPFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5k
bGVJZGVudGlmaWVyLCBib29sPiwgV2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1
bHQpIEFzeW5jIFdhbnRzQ29ubmVjdGlvbgorCisgICAgQ29ubmVjdFRvTG9jYWxTdG9yYWdlQXJl
YShXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHN0b3JhZ2VOYW1lc3BhY2VJRCwg
c3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBzZWN1cml0eU9yaWdpbkRhdGEpIC0+
IChXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKSBTeW5jaHJvbm91cyBX
YW50c0Nvbm5lY3Rpb24KKyAgICBDb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKFdl
YktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgc3RvcmFnZU5hbWVzcGFjZUlELCBzdHJ1
Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHRvcExldmVsU2VjdXJpdHlPcmlnaW5EYXRh
LCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHNlY3VyaXR5T3JpZ2luRGF0YSkg
LT4gKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpIFN5bmNocm9ub3Vz
IFdhbnRzQ29ubmVjdGlvbgorICAgIENvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYShXZWJLaXQ6
OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHN0b3JhZ2VOYW1lc3BhY2VJRCwgc3RydWN0IFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBzZWN1cml0eU9yaWdpbkRhdGEpIC0+IChXZWJLaXQ6
OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKSBTeW5jaHJvbm91cyBXYW50c0Nvbm5l
Y3Rpb24KKyAgICBEaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKFdlYktpdDo6U3RvcmFnZUFyZWFJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpIFdhbnRzQ29ubmVjdGlvbgorICAgIENsb25lU2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2UoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBmcm9tU3Rv
cmFnZU5hbWVzcGFjZUlELCBXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHRvU3Rv
cmFnZU5hbWVzcGFjZUlEKSBXYW50c0Nvbm5lY3Rpb24KKyAgICBHZXRWYWx1ZXMoV2ViS2l0OjpT
dG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IHZhbHVlcykgU3luY2hyb25vdXMKKyAgICBTZXRJdGVtKFdlYktpdDo6U3RvcmFnZUFyZWFJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBp
bXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIFN0cmluZyBrZXksIFN0cmlu
ZyB2YWx1ZSwgU3RyaW5nIHVybFN0cmluZykgV2FudHNDb25uZWN0aW9uCisgICAgUmVtb3ZlSXRl
bShXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJLaXQ6OlN0b3Jh
Z2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBT
ZWVkLCBTdHJpbmcga2V5LCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50c0Nvbm5lY3Rpb24KKyAgICBD
bGVhcihXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJLaXQ6OlN0
b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VN
YXBTZWVkLCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50c0Nvbm5lY3Rpb24KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFn
ZU1hbmFnZXIuY3BwCmluZGV4IDhjZDY1NWJlMjUwNWE1YjMzNDZhYTMzNTVkZjhiMjY4MWYxMTVl
ZWUuLmM2N2NlNjFlYTMxNGFiNjgyYTYzYTAzMzcxNDBmMzJlZDdjYjFkZjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0
b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMjgsNiArMjgsMTAgQEAKIAogI2luY2x1ZGUgIkZpbGVTeXN0
ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtU3RvcmFnZU1h
bmFnZXIuaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFSZWdpc3RyeS5oIgor
I2luY2x1ZGUgIldlYnNpdGVEYXRhVHlwZS5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAt
NTMsMTMgKzU3LDI3IEBAIHB1YmxpYzoKIAogICAgIGVudW0gY2xhc3MgU3RvcmFnZVR5cGUgOiB1
aW50OF90IHsKICAgICAgICAgRmlsZVN5c3RlbSwKKyAgICAgICAgTG9jYWxTdG9yYWdlLAorICAg
ICAgICBTZXNzaW9uU3RvcmFnZSwKICAgICB9OwogCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
V2Vic2l0ZURhdGFUeXBlPiB0b1dlYnNpdGVEYXRhVHlwZShjb25zdCBTdHJpbmcmIHN0b3JhZ2VJ
ZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgaWYgKHN0b3JhZ2VJZGVudGlmaWVyID09ICJGaWxl
U3lzdGVtIikKKyAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW07
CisKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKICAgICBzdGF0aWMgU3Ry
aW5nIHRvU3RvcmFnZUlkZW50aWZpZXIoU3RvcmFnZVR5cGUgdHlwZSkKICAgICB7CiAgICAgICAg
IHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpGaWxlU3lzdGVtOgog
ICAgICAgICAgICAgcmV0dXJuICJGaWxlU3lzdGVtIl9zOworICAgICAgICBjYXNlIFN0b3JhZ2VU
eXBlOjpMb2NhbFN0b3JhZ2U6CisgICAgICAgICAgICByZXR1cm4gIkxvY2FsU3RvcmFnZSJfczsK
KyAgICAgICAgY2FzZSBTdG9yYWdlVHlwZTo6U2Vzc2lvblN0b3JhZ2U6CisgICAgICAgICAgICBy
ZXR1cm4gIlNlc3Npb25TdG9yYWdlIl9zOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTg0LDE4ICsxMDIsMTA0IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuICptX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcjsKICAgICB9CiAKKyAgICBMb2NhbFN0
b3JhZ2VNYW5hZ2VyJiBsb2NhbFN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJl
Z2lzdHJ5LCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gY3VzdG9tUGF0aCkKKyAgICB7CisgICAgICAg
IGlmICghbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VN
YW5hZ2VyID0gbWFrZVVuaXF1ZTxMb2NhbFN0b3JhZ2VNYW5hZ2VyPihyZWdpc3RyeSwgY3VzdG9t
UGF0aCA/ICpjdXN0b21QYXRoIDogU3RyaW5nIHsgfSk7CisKKyAgICAgICAgcmV0dXJuICptX2xv
Y2FsU3RvcmFnZU1hbmFnZXI7CisgICAgfQorCisgICAgTG9jYWxTdG9yYWdlTWFuYWdlciogZXhp
c3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xvY2Fs
U3RvcmFnZU1hbmFnZXIuZ2V0KCk7CisgICAgfQorCisgICAgU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
JiBzZXNzaW9uU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYgcmVnaXN0cnkpCisg
ICAgeworICAgICAgICBpZiAoIW1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICAgICAg
bV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIgPSBtYWtlVW5pcXVlPFNlc3Npb25TdG9yYWdlTWFuYWdl
cj4ocmVnaXN0cnkpOworCisgICAgICAgIHJldHVybiAqbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXI7
CisgICAgfQorCisgICAgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ1Nlc3Npb25TdG9y
YWdlTWFuYWdlcigpCisgICAgeworICAgICAgICByZXR1cm4gbV9zZXNzaW9uU3RvcmFnZU1hbmFn
ZXIuZ2V0KCk7CisgICAgfQorCiAgICAgYm9vbCBpc0FjdGl2ZSgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gISFtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcjsKKyAgICAgICAgcmV0dXJuIG1fZmls
ZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyIHx8IG1fbG9jYWxTdG9yYWdlTWFuYWdlciB8fCBtX3Nlc3Np
b25TdG9yYWdlTWFuYWdlcjsKKyAgICB9CisKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiBmZXRjaERhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIE9yaWdpblN0b3Jh
Z2VEYXRhT3B0aW9ucyYmIG9wdGlvbnMpCisgICAgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGZl
dGNoRGF0YUluTWVtb3J5KHR5cGVzKTsKKyAgICAgICAgcmVzdWx0LmFkZChmZXRjaERhdGFGcm9t
RGlzayh0eXBlcywgV1RGTW92ZShvcHRpb25zKSkpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCi0gICAgdm9pZCBkZWxldGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IHR5cGVzLCBXYWxsVGltZSBtb2RpZmllZFNpbmNlVGltZSkKKyAgICB2b2lkIGRlbGV0ZURhdGEo
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2VU
aW1lLCBPcmlnaW5TdG9yYWdlRGF0YU9wdGlvbnMmJiBvcHRpb25zKQogICAgIHsKICAgICAgICAg
aWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSkpCiAgICAgICAg
ICAgICBkZWxldGVGaWxlU3lzdGVtU3RvcmFnZURhdGEobW9kaWZpZWRTaW5jZVRpbWUpOworCisg
ICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkp
CisgICAgICAgICAgICBkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKG1vZGlmaWVkU2luY2VUaW1lLCBv
cHRpb25zLmN1c3RvbUxvY2FsU3RvcmFnZVBhdGgsIG9wdGlvbnMub3JpZ2luKTsKKworICAgICAg
ICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkgJiYg
bW9kaWZpZWRTaW5jZVRpbWUgPT0gLVdhbGxUaW1lOjppbmZpbml0eSgpKQorICAgICAgICAgICAg
ZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKCk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlRGF0YShj
b25zdCBTdHJpbmcmIHBhdGgsIE9yaWdpblN0b3JhZ2VEYXRhT3B0aW9ucyYmIG9wdGlvbnMpCisg
ICAgeworICAgICAgICBtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlciA9IG51bGxwdHI7CisgICAg
ICAgIGlmIChtX2xvY2FsU3RvcmFnZU1hbmFnZXIpCisgICAgICAgICAgICBtX2xvY2FsU3RvcmFn
ZU1hbmFnZXItPmNsb3NlKCk7CisKKyAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjptb3ZlRmlsZSht
X3Jvb3RQYXRoLCBwYXRoKSkKKyAgICAgICAgICAgIExPR19FUlJPUigiT3JpZ2luU3RvcmFnZU1h
bmFnZXI6OlN0b3JhZ2VCdWNrZXQ6Om1vdmVEdGEgZmFpbGVkIHRvIHVwZGF0ZSBwYXRoIHRvICcl
cyciLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgIG1vdmVMb2NhbFN0b3JhZ2VEYXRh
KG9wdGlvbnMuY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgb3B0aW9ucy5vcmlnaW4sIG9wdGlvbnMu
dGFyZ2V0T3JpZ2luKTsKICAgICB9CiAKIHByaXZhdGU6CisgICAgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gZmV0Y2hEYXRhSW5NZW1vcnkoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlw
ZXMpCisgICAgeworICAgICAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiByZXN1bHQgeyB9
OworICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3Jh
Z2UpKSB7CisgICAgICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VNYW5hZ2VyICYmIG1fbG9jYWxT
dG9yYWdlTWFuYWdlci0+aGFzRGF0YUluTWVtb3J5KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0
LmFkZChXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkpIHsK
KyAgICAgICAgICAgIGlmIChtX3Nlc3Npb25TdG9yYWdlTWFuYWdlciAmJiBtX3Nlc3Npb25TdG9y
YWdlTWFuYWdlci0+aGFzRGF0YUluTWVtb3J5KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFk
ZChXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
ZmV0Y2hEYXRhRnJvbURpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIE9yaWdp
blN0b3JhZ2VEYXRhT3B0aW9ucyYmIG9wdGlvbnMpCisgICAgeworICAgICAgICBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiByZXN1bHQgeyB9OworICAgICAgICBmb3IgKGF1dG8mIHN0b3JhZ2VU
eXBlIDogRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShtX3Jvb3RQYXRoKSkgeworICAgICAgICAg
ICAgaWYgKGF1dG8gdHlwZSA9IHRvV2Vic2l0ZURhdGFUeXBlKHN0b3JhZ2VUeXBlKTsgdHlwZSAm
JiB0eXBlcy5jb250YWlucygqdHlwZSkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZCgqdHlw
ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFU
eXBlOjpMb2NhbFN0b3JhZ2UpICYmICFyZXN1bHQuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpM
b2NhbFN0b3JhZ2UpKSB7CisgICAgICAgICAgICBhdXRvIHBhdGggPSBvcHRpb25zLmN1c3RvbUxv
Y2FsU3RvcmFnZVBhdGg7CisgICAgICAgICAgICBhdXRvIG9yaWdpbiA9IG9wdGlvbnMub3JpZ2lu
OworICAgICAgICAgICAgaWYgKHBhdGggJiYgb3JpZ2luICYmIExvY2FsU3RvcmFnZU1hbmFnZXI6
Omhhc0xvY2FsU3RvcmFnZURhdGEoKnBhdGgsICpvcmlnaW4pKQorICAgICAgICAgICAgICAgIHJl
c3VsdC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICB2b2lkIGRlbGV0ZUZpbGVTeXN0ZW1T
dG9yYWdlRGF0YShXYWxsVGltZSBtb2RpZmllZFNpbmNlVGltZSkKICAgICB7CiAgICAgICAgIG1f
ZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0cjsKQEAgLTEwNCwxMCArMjA4LDQzIEBA
IHByaXZhdGU6CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUFsbEZpbGVzTW9kaWZpZWRTaW5j
ZShmaWxlU3lzdGVtU3RvcmFnZVBhdGgsIG1vZGlmaWVkU2luY2VUaW1lKTsKICAgICB9CiAKKyAg
ICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZURhdGEoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZVRpbWUs
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjdXN0b21QYXRoLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6
OkNsaWVudE9yaWdpbj4gb3JpZ2luKQorICAgIHsKKyAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdl
TWFuYWdlcikgeworICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLT5jbGVhckRhdGEo
KTsKKworICAgICAgICAgICAgaWYgKCFtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmlzQWN0aXZlKCkp
CisgICAgICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0cjsKKyAgICAg
ICAgfQorCisgICAgICAgIGF1dG8gbG9jYWxTdG9yYWdlUGF0aCA9IHR5cGVTdG9yYWdlUGF0aChT
dG9yYWdlVHlwZTo6TG9jYWxTdG9yYWdlKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlQWxs
RmlsZXNNb2RpZmllZFNpbmNlKGxvY2FsU3RvcmFnZVBhdGgsIG1vZGlmaWVkU2luY2VUaW1lKTsK
KyAgICAgICAgaWYgKGN1c3RvbVBhdGggJiYgb3JpZ2luKQorICAgICAgICAgICAgTG9jYWxTdG9y
YWdlTWFuYWdlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRGF0YShtb2RpZmllZFNpbmNlVGltZSwgKmN1
c3RvbVBhdGgsICpvcmlnaW4pOworICAgIH0KKworICAgIHZvaWQgZGVsZXRlU2Vzc2lvblN0b3Jh
Z2VEYXRhKCkKKyAgICB7CisgICAgICAgIGlmICghbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXItPmNs
ZWFyRGF0YSgpOworICAgICAgICBpZiAoIW1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2
ZSgpKQorICAgICAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIgPSBudWxscHRyOworICAg
IH0KKyAgICAKKyAgICB2b2lkIG1vdmVMb2NhbFN0b3JhZ2VEYXRhKHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPiBwYXRoLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gb3JpZ2luLCBz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gdGFyZ2V0T3JpZ2luKQorICAgIHsK
KyAgICAgICAgaWYgKHBhdGggJiYgb3JpZ2luICYmIHRhcmdldE9yaWdpbikKKyAgICAgICAgICAg
IExvY2FsU3RvcmFnZU1hbmFnZXI6Om1vdmVMb2NhbFN0b3JhZ2VEYXRhKCpwYXRoLCAqb3JpZ2lu
LCAqdGFyZ2V0T3JpZ2luKTsKKyAgICB9CisgICAgCiAgICAgU3RyaW5nIG1fcm9vdFBhdGg7CiAg
ICAgU3RyaW5nIG1faWRlbnRpZmllcjsKICAgICBTdG9yYWdlQnVja2V0TW9kZSBtX21vZGUgeyBT
dG9yYWdlQnVja2V0TW9kZTo6QmVzdEVmZm9ydCB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWxl
U3lzdGVtU3RvcmFnZU1hbmFnZXI+IG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxMb2NhbFN0b3JhZ2VNYW5hZ2VyPiBtX2xvY2FsU3RvcmFnZU1hbmFnZXI7
CisgICAgc3RkOjp1bmlxdWVfcHRyPFNlc3Npb25TdG9yYWdlTWFuYWdlcj4gbV9zZXNzaW9uU3Rv
cmFnZU1hbmFnZXI7CiB9OwogCiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6T3JpZ2luU3RvcmFnZU1h
bmFnZXIoU3RyaW5nJiYgcGF0aCkKQEAgLTEzNywxNSArMjc0LDI5IEBAIEZpbGVTeXN0ZW1TdG9y
YWdlTWFuYWdlciYgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdl
cihGaWxlU3lzCiAgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5maWxlU3lzdGVtU3RvcmFnZU1h
bmFnZXIocmVnaXN0cnkpOwogfQogCi1ib29sIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2
ZSgpCitMb2NhbFN0b3JhZ2VNYW5hZ2VyJiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6bG9jYWxTdG9y
YWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSwgc3RkOjpvcHRpb25hbDxT
dHJpbmc+IGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgpCiB7Ci0gICAgcmV0dXJuIGRlZmF1bHRCdWNr
ZXQoKS5pc0FjdGl2ZSgpOworICAgIHJldHVybiBkZWZhdWx0QnVja2V0KCkubG9jYWxTdG9yYWdl
TWFuYWdlcihyZWdpc3RyeSwgY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCk7CiB9CiAKLXZvaWQgT3Jp
Z2luU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
dHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpCitMb2NhbFN0b3JhZ2VNYW5hZ2VyKiBPcmln
aW5TdG9yYWdlTWFuYWdlcjo6ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkKIHsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBkZWZhdWx0QnVja2V0KCkuZGVsZXRlRGF0
YSh0eXBlcywgbW9kaWZpZWRTaW5jZSk7CisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5leGlz
dGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKTsKK30KKworU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyJiBP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6c2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVn
aXN0cnkmIHJlZ2lzdHJ5KQoreworICAgIHJldHVybiBkZWZhdWx0QnVja2V0KCkuc2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyKHJlZ2lzdHJ5KTsKK30KKworU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKiBPcmln
aW5TdG9yYWdlTWFuYWdlcjo6ZXhpc3RpbmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIoKQoreworICAg
IHJldHVybiBkZWZhdWx0QnVja2V0KCkuZXhpc3RpbmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIoKTsK
K30KKworYm9vbCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6aXNBY3RpdmUoKQoreworICAgIHJldHVy
biBkZWZhdWx0QnVja2V0KCkuaXNBY3RpdmUoKTsKIH0KIAogdm9pZCBPcmlnaW5TdG9yYWdlTWFu
YWdlcjo6c2V0UGVyc2lzdGVkKGJvb2wgdmFsdWUpCkBAIC0xNTYsNSArMzA3LDI2IEBAIHZvaWQg
T3JpZ2luU3RvcmFnZU1hbmFnZXI6OnNldFBlcnNpc3RlZChib29sIHZhbHVlKQogICAgIGRlZmF1
bHRCdWNrZXQoKS5zZXRNb2RlKHZhbHVlID8gU3RvcmFnZUJ1Y2tldE1vZGU6OlBlcnNpc3RlbnQg
OiBTdG9yYWdlQnVja2V0TW9kZTo6QmVzdEVmZm9ydCk7CiB9CiAKK09wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+IE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpmZXRjaERhdGEoT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4gdHlwZXMsIE9yaWdpblN0b3JhZ2VEYXRhT3B0aW9ucyYmIG9wdGlvbnMpCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gZGVmYXVsdEJ1
Y2tldCgpLmZldGNoRGF0YSh0eXBlcywgV1RGTW92ZShvcHRpb25zKSk7Cit9CisKK3ZvaWQgT3Jp
Z2luU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
dHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIE9yaWdpblN0b3JhZ2VEYXRhT3B0aW9ucyYm
IG9wdGlvbnMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBkZWZh
dWx0QnVja2V0KCkuZGVsZXRlRGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZSwgV1RGTW92ZShvcHRp
b25zKSk7Cit9CisKK3ZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6Om1vdmVEYXRhKGNvbnN0IFN0
cmluZyYgbmV3UGF0aCwgT3JpZ2luU3RvcmFnZURhdGFPcHRpb25zJiYgb3B0aW9ucykKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGRlZmF1bHRCdWNrZXQoKS5tb3Zl
RGF0YShuZXdQYXRoLCBXVEZNb3ZlKG9wdGlvbnMpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9P
cmlnaW5TdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmgKaW5kZXggN2FkZmE1YjAzYjZiYTZlM2Y4Njk4MGIx
MmQyZjhhNDRkOWU0ZTY0Yi4uM2ZiOGFhZmMwZTc5M2JiYTBkYjlkNmNmZDE4ZTU5MDNlM2Q1MDcw
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdp
blN0b3JhZ2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmgKQEAgLTI2LDE4ICsyNiwyNCBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRP
cmlnaW4uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotbmFtZXNwYWNlIFdl
YkNvcmUgewotc3RydWN0IENsaWVudE9yaWdpbjsKLX0KLQogbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnk7CiBjbGFzcyBGaWxlU3lzdGVt
U3RvcmFnZU1hbmFnZXI7CitjbGFzcyBMb2NhbFN0b3JhZ2VNYW5hZ2VyOworY2xhc3MgU2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyOworY2xhc3MgU3RvcmFnZUFyZWFSZWdpc3RyeTsKIGVudW0gY2xhc3Mg
V2Vic2l0ZURhdGFUeXBlIDogdWludDMyX3Q7CiAKK3N0cnVjdCBPcmlnaW5TdG9yYWdlRGF0YU9w
dGlvbnMgeworICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRo
OworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBvcmlnaW47CisgICAg
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IHRhcmdldE9yaWdpbjsKK307CisK
IGNsYXNzIE9yaWdpblN0b3JhZ2VNYW5hZ2VyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKQEAgLTQ4LDggKzU0LDE0IEBAIHB1YmxpYzoKICAgICBib29sIHBlcnNpc3Rl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGVyc2lzdGVkOyB9CiAgICAgdm9pZCBzZXRQZXJzaXN0ZWQo
Ym9vbCB2YWx1ZSk7CiAgICAgRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyJiBmaWxlU3lzdGVtU3Rv
cmFnZU1hbmFnZXIoRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSYpOworICAgIExvY2Fs
U3RvcmFnZU1hbmFnZXImIGxvY2FsU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYs
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPik7CisgICAgTG9jYWxTdG9yYWdlTWFuYWdlciogZXhpc3Rp
bmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCk7CisgICAgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyJiBzZXNz
aW9uU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYpOworICAgIFNlc3Npb25TdG9y
YWdlTWFuYWdlciogZXhpc3RpbmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIoKTsKICAgICBib29sIGlz
QWN0aXZlKCk7Ci0gICAgdm9pZCBkZWxldGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
LCBXYWxsVGltZSk7CisgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZmV0Y2hEYXRhKE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcmlnaW5TdG9yYWdlRGF0YU9wdGlvbnMmJik7Cisg
ICAgdm9pZCBkZWxldGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSwg
T3JpZ2luU3RvcmFnZURhdGFPcHRpb25zJiYpOworICAgIHZvaWQgbW92ZURhdGEoY29uc3QgU3Ry
aW5nJiBuZXdQYXRoLCBPcmlnaW5TdG9yYWdlRGF0YU9wdGlvbnMmJik7CiAKIHByaXZhdGU6CiAg
ICAgZW51bSBjbGFzcyBTdG9yYWdlQnVja2V0TW9kZSA6IGJvb2w7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wYjhiMWMwYmU2OWY1YTgyMzI4NTk4NGJkODZmM2UxNjNjNmM0Y2ExCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NR
TGl0ZVN0b3JhZ2VBcmVhLmNwcApAQCAtMCwwICsxLDQwNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTUUxpdGVTdG9yYWdlQXJlYS5oIgorCisjaW5jbHVk
ZSA8V2ViQ29yZS9TUUxpdGVGaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVT
dGF0ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVRyYW5zYWN0aW9uLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TdG9yYWdlTWFwLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjb25z
dGV4cHIgU2Vjb25kcyB0cmFuc2FjdGlvbkR1cmF0aW9uIHsgNTAwX21zIH07Citjb25zdGV4cHIg
dW5zaWduZWQgbWF4aW11bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1vcnkgeyAxICogS0IgfTsKK2Nv
bnN0ZXhwciBhdXRvIGNyZWF0ZUl0ZW1UYWJsZVN0YXRlbWVudEFsdGVybmF0aXZlID0gIkNSRUFU
RSBUQUJMRSBJRiBOT1QgRVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZM
SUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiX3M7Citj
b25zdGV4cHIgYXV0byBjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnQgPSAiQ1JFQVRFIFRBQkxFIEl0
ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0Ig
Tk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiX3M7CisKK3N0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhPiBTUUxpdGVTdG9yYWdlQXJlYTo6ZmlsZU5hbWVUb09yaWdpbihj
b25zdCBTdHJpbmcmIGZpbGVOYW1lKQoreworICAgIGF1dG8gc3VmZml4TGVuZ3RoID0gc3RybGVu
KCIubG9jYWxzdG9yYWdlIik7CisgICAgYXV0byBmaWxlTmFtZUxlbmd0aCA9IGZpbGVOYW1lLmxl
bmd0aCgpOworICAgIGlmIChmaWxlTmFtZUxlbmd0aCA8PSBzdWZmaXhMZW5ndGgpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBhdXRvIG9yaWdpbklkZW50aWZpZXIgPSBmaWxl
TmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWVMZW5ndGggLSBzdWZmaXhMZW5ndGgpOworICAgIHJl
dHVybiBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIo
b3JpZ2luSWRlbnRpZmllcik7Cit9CisKK3N0YXRpYyBTdHJpbmcgb3JpZ2luVG9GaWxlTmFtZShj
b25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICByZXR1cm4gb3JpZ2lu
LmNsaWVudE9yaWdpbi5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIubG9jYWxzdG9yYWdlIjsKK30K
KworU3RyaW5nIFNRTGl0ZVN0b3JhZ2VBcmVhOjpkYXRhYmFzZVBhdGgoY29uc3QgU3RyaW5nJiBk
aXJlY3RvcnksIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQoreworICAgIGlm
IChkaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKwor
ICAgIHJldHVybiBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGlyZWN0b3J5
LCBvcmlnaW5Ub0ZpbGVOYW1lKG9yaWdpbikpOworfQorCitBU0NJSUxpdGVyYWwgU1FMaXRlU3Rv
cmFnZUFyZWE6OnN0YXRlbWVudFN0cmluZyhTdGF0ZW1lbnRUeXBlIHR5cGUpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpDb3VudEl0ZW1zOgor
ICAgICAgICByZXR1cm4gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJsZSJfczsKKyAgICBj
YXNlIFN0YXRlbWVudFR5cGU6OkRlbGV0ZUl0ZW06CisgICAgICAgIHJldHVybiAiREVMRVRFIEZS
T00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Il9zOworICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6RGVs
ZXRlQWxsSXRlbXM6CisgICAgICAgIHJldHVybiAiREVMRVRFIEZST00gSXRlbVRhYmxlIl9zOwor
ICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6R2V0SXRlbToKKyAgICAgICAgcmV0dXJuICJTRUxFQ1Qg
dmFsdWUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iX3M7CisgICAgY2FzZSBTdGF0ZW1lbnRU
eXBlOjpHZXRBbGxJdGVtczoKKyAgICAgICAgcmV0dXJuICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9N
IEl0ZW1UYWJsZSJfczsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OlNldEl0ZW06CisgICAgICAg
IHJldHVybiAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPykiX3M7CisgICAgY2Fz
ZSBTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIiJfczsKK30KKworU1FMaXRlU3RvcmFn
ZUFyZWE6OlNRTGl0ZVN0b3JhZ2VBcmVhKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpD
bGllbnRPcmlnaW4mIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoLCBSZWY8V29ya1F1ZXVlPiYm
IHdvcmtRdWV1ZSkKKyAgICA6IFN0b3JhZ2VBcmVhQmFzZShxdW90YSwgb3JpZ2luKQorICAgICwg
bV9wYXRoKGRhdGFiYXNlUGF0aChwYXRoLCBvcmlnaW4pKQorICAgICwgbV9xdWV1ZShXVEZNb3Zl
KHdvcmtRdWV1ZSkpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KFN0YXRlbWVudFR5cGU6OkludmFsaWQpOyArK2kpCisgICAgICAgIG1fY2FjaGVkU3Rh
dGVtZW50cy5hcHBlbmQobnVsbHB0cik7Cit9CisKK3ZvaWQgU1FMaXRlU3RvcmFnZUFyZWE6OmNs
b3NlKCkKK3sKKyAgICBtX2NhY2hlID0gc3RkOjpudWxsb3B0OworICAgIGNvbW1pdFRyYW5zYWN0
aW9uSWZOZWNlc3NhcnkoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRpY19jYXN0
PHNpemVfdD4oU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7ICsraSkKKyAgICAgICAgbV9jYWNoZWRT
dGF0ZW1lbnRzW2ldID0gbnVsbHB0cjsKKyAgICBtX2RhdGFiYXNlID0gbnVsbHB0cjsKK30KKwor
U1FMaXRlU3RvcmFnZUFyZWE6On5TUUxpdGVTdG9yYWdlQXJlYSgpCit7CisgICAgYm9vbCBkYXRh
YmFzZUlzRW1wdHkgPSBpc0VtcHR5KCk7CisgICAgY2xvc2UoKTsKKyAgICBpZiAoZGF0YWJhc2VJ
c0VtcHR5KQorICAgICAgICBXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFz
ZUZpbGUobV9wYXRoKTsKK30KKworYm9vbCBTUUxpdGVTdG9yYWdlQXJlYTo6aXNFbXB0eSgpCit7
CisgICAgaWYgKG1fY2FjaGUpCisgICAgICAgIHJldHVybiBtX2NhY2hlLT5pc0VtcHR5KCk7CisK
KyAgICBpZiAoIXByZXBhcmVEYXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFN0YXRlbWVudFR5cGU6OkNvdW50SXRl
bXMpOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9S
T1cpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VB
cmVhOjppc0VtcHR5IGZhaWxlZCBvbiBleGVjdXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1f
ZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiAhc3RhdGVtZW50LT5jb2x1bW5J
bnQoMCk7Cit9CisKK3ZvaWQgU1FMaXRlU3RvcmFnZUFyZWE6OmNsZWFyKCkKK3sKKyAgICBjbG9z
ZSgpOworICAgIFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZSht
X3BhdGgpOworICAgIG5vdGlmeUxpc3RlbmVyc0Fib3V0Q2xlYXIoKTsKK30KKworYm9vbCBTUUxp
dGVTdG9yYWdlQXJlYTo6Y3JlYXRlVGFibGVJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKCFtX2Rh
dGFiYXNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS0+dGFibGVTUUwoIkl0ZW1UYWJsZSJfcyk7CisgICAgaWYgKHN0YXRlbWVudCA9
PSBjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnQgfHwgc3RhdGVtZW50ID09IGNyZWF0ZUl0ZW1UYWJs
ZVN0YXRlbWVudEFsdGVybmF0aXZlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFRh
YmxlIGV4aXN0cyBidXQgc3RhdGVtZW50IGlzIHdyb25nOyBkcm9wIGl0LgorICAgIGlmICghc3Rh
dGVtZW50LmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoIW1fZGF0YWJhc2UtPmV4ZWN1dGVDb21t
YW5kKCJEUk9QIFRBQkxFIEl0ZW1UYWJsZSJfcykpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Y3JlYXRlVGFibGVJZk5lY2Vzc2Fy
eSBmYWlsZWQgdG8gZHJvcCBleGlzdGluZyBpdGVtIHRhYmxlICglZCkgLSAlcyIsIG1fZGF0YWJh
c2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUYWJsZSBkb2VzIG5v
dCBleGlzdC4KKyAgICBpZiAoIW1fZGF0YWJhc2UtPmV4ZWN1dGVDb21tYW5kKGNyZWF0ZUl0ZW1U
YWJsZVN0YXRlbWVudCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNR
TGl0ZVN0b3JhZ2VBcmVhOjpjcmVhdGVUYWJsZUlmTmVjZXNzYXJ5IGZhaWxlZCB0byBjcmVhdGUg
aXRlbSB0YWJsZSAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFz
ZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1FMaXRlU3RvcmFnZUFyZWE6OnByZXBhcmVEYXRhYmFz
ZSgpCit7CisgICAgaWYgKG1fZGF0YWJhc2UgJiYgbV9kYXRhYmFzZS0+aXNPcGVuKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgbV9kYXRhYmFzZSA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6
U1FMaXRlRGF0YWJhc2U+KCk7CisgICAgaWYgKCFtX2RhdGFiYXNlLT5vcGVuKG1fcGF0aCkpIHsK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpw
cmVwYXJlRGF0YWJhc2UgZmFpbGVkIHRvIG9wZW4gZGF0YWJhc2UgYXQgJyVzJyIsIG1fcGF0aC51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbV9kYXRhYmFzZSA9IG51bGxwdHI7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIFNpbmNlIGEgV29ya1F1ZXVlIGlz
bid0IGJvdW5kIHRvIGEgc3BlY2lmaWMgdGhyZWFkLCB3ZSBuZWVkIHRvIGRpc2FibGUgdGhyZWFk
aW5nIGNoZWNrLgorICAgIC8vIFdlIHdpbGwgbmV2ZXIgYWNjZXNzIHRoZSBkYXRhYmFzZSBmcm9t
IGRpZmZlcmVudCB0aHJlYWRzIHNpbXVsdGFuZW91c2x5LgorICAgIG1fZGF0YWJhc2UtPmRpc2Fi
bGVUaHJlYWRpbmdDaGVja3MoKTsKKworICAgIGlmICghY3JlYXRlVGFibGVJZk5lY2Vzc2FyeSgp
KSB7CisgICAgICAgIG1fZGF0YWJhc2UgPSBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKHF1b3RhKCkgIT0gV2ViQ29yZTo6U3RvcmFnZU1hcDo6bm9RdW90
YSkKKyAgICAgICAgbV9kYXRhYmFzZS0+c2V0TWF4aW11bVNpemUocXVvdGEoKSk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6c3RhcnRUcmFuc2FjdGlv
bklmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24pCisgICAgICAgIG1fdHJh
bnNhY3Rpb24gPSBtYWtlVW5pcXVlPFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uPigqbV9kYXRh
YmFzZSk7CisKKyAgICBpZiAobV90cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3RyYW5zYWN0aW9uLT5iZWdpbigpOworICAgIG1fcXVldWUtPmRpc3Bh
dGNoQWZ0ZXIodHJhbnNhY3Rpb25EdXJhdGlvbiwgW3dlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlz
IH1dIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcyB8fCAhd2Vha1RoaXMtPm1fdHJhbnNhY3Rpb24p
CisgICAgICAgICAgICByZXR1cm47CisgICAgCisgICAgICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBz
dGQ6OmV4Y2hhbmdlKHdlYWtUaGlzLT5tX3RyYW5zYWN0aW9uLCBudWxscHRyKTsKKyAgICAgICAg
dHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIH0pOworfQorCitXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnRBdXRvUmVzZXRTY29wZSBTUUxpdGVTdG9yYWdlQXJlYTo6Y2FjaGVkU3RhdGVtZW50KFN0
YXRlbWVudFR5cGUgdHlwZSkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7CisgICAgQVNTRVJU
KHR5cGUgPCBTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKTsKKworICAgIGF1dG8gaW5kZXggPSBzdGF0
aWNfY2FzdDx1aW50OF90Pih0eXBlKTsKKyAgICBpZiAoIW1fY2FjaGVkU3RhdGVtZW50c1tpbmRl
eF0pIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2RhdGFiYXNlLT5wcmVwYXJlSGVhcFN0YXRl
bWVudChzdGF0ZW1lbnRTdHJpbmcodHlwZSkpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAg
ICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzW2luZGV4XSA9IHJlc3VsdC52YWx1ZSgpLm1vdmVUb1Vu
aXF1ZVB0cigpOworICAgIH0KKworICAgIHJldHVybiBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRB
dXRvUmVzZXRTY29wZSB7IG1fY2FjaGVkU3RhdGVtZW50c1tpbmRleF0uZ2V0KCkgfTsKK30KKwor
RXhwZWN0ZWQ8U3RyaW5nLCBTdG9yYWdlRXJyb3I+IFNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRJdGVt
KGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGlmIChtX2NhY2hlKSB7CisgICAgICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2NhY2hlLT5maW5kKGtleSk7CisgICAgICAgIGlmIChpdGVyYXRvciA9PSBt
X2NhY2hlLT5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgICAgICBp
ZiAoIWl0ZXJhdG9yLT52YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBpdGVyYXRv
ci0+dmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIGdldEl0ZW1Gcm9tRGF0YWJhc2Uoa2V5KTsK
K30KKworRXhwZWN0ZWQ8U3RyaW5nLCBTdG9yYWdlRXJyb3I+IFNRTGl0ZVN0b3JhZ2VBcmVhOjpn
ZXRJdGVtRnJvbURhdGFiYXNlKGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGlmICghcHJlcGFy
ZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6
OkRhdGFiYXNlKTsKKworICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFN0YXRl
bWVudFR5cGU6OkdldEl0ZW0pOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+Ymlu
ZFRleHQoMSwga2V5KSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FM
aXRlU3RvcmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2UgZmFpbGVkIG9uIGNyZWF0aW5nIHN0
YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+
bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVy
cm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3Rl
cCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIHN0YXRl
bWVudC0+Y29sdW1uQmxvYkFzU3RyaW5nKDApOworICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RP
TkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VB
cmVhOjpnZXRJdGVtRnJvbURhdGFiYXNlIGZhaWxlZCBvbiBzdGVwcGluZyBzdGF0ZW1lbnQgKCVk
KSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJh
c2UpOworICAgIH0KKworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6Okl0
ZW1Ob3RGb3VuZCk7Cit9CisKK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFNRTGl0ZVN0b3JhZ2VB
cmVhOjphbGxJdGVtcygpCit7CisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAg
cmV0dXJuIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsgfTsKKworICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IGl0ZW1zOworICAgIGlmIChtX2NhY2hlKSB7CisgICAgICAgIGl0ZW1zLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9jYWNoZS0+c2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBb
a2V5LCB2YWx1ZV0gOiAqbV9jYWNoZSkgeworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwo
KSkgeworICAgICAgICAgICAgICAgIGl0ZW1zLmFkZChrZXksIHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGF1dG8gcmVz
dWx0ID0gZ2V0SXRlbUZyb21EYXRhYmFzZShrZXkpKQorICAgICAgICAgICAgICAgIGl0ZW1zLmFk
ZChrZXksIHJlc3VsdC52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaXRlbXM7
CisgICAgfQorCisgICAgLy8gSW1wb3J0IGZyb20gZGF0YWJhc2UuCisgICAgYXV0byBzdGF0ZW1l
bnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZTo6R2V0QWxsSXRlbXMpOworICAgIGlm
ICghc3RhdGVtZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxp
dGVTdG9yYWdlQXJlYTo6Z2V0QWxsSXRlbXMgZmFpbGVkIG9uIGNyZWF0aW5nIHN0YXRlbWVudCAo
JWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9y
TXNnKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIG1fY2FjaGUgPSBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiB7IH07CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3Rl
cCgpOworICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBTdHJpbmcg
a2V5ID0gc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgdmFsdWUgPSBz
dGF0ZW1lbnQtPmNvbHVtbkJsb2JBc1N0cmluZygxKTsKKyAgICAgICAgaWYgKCFrZXkuaXNOdWxs
KCkgJiYgIXZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBtX2NhY2hlLT5hZGQoa2V5LCB2
YWx1ZS5zaXplSW5CeXRlcygpID4gbWF4aW11bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1vcnkgPyBT
dHJpbmcoKSA6IHZhbHVlKTsKKyAgICAgICAgICAgIGl0ZW1zLmFkZChXVEZNb3ZlKGtleSksIFdU
Rk1vdmUodmFsdWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+
c3RlcCgpOworICAgIH0KKworICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0QWxsSXRl
bXMgZmFpbGVkIG9uIGV4ZWN1dGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+
bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKworICAgIHJldHVybiBp
dGVtczsKK30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBTUUxpdGVTdG9yYWdlQXJl
YTo6c2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VB
cmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBpZiAo
IXByZXBhcmVEYXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFn
ZUVycm9yOjpEYXRhYmFzZSk7CisKKyAgICBzdGFydFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsK
KworICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICBpZiAoYXV0byB2YWx1ZU9yRXJyb3IgPSBnZXRJ
dGVtKGtleSkpCisgICAgICAgIG9sZFZhbHVlID0gdmFsdWVPckVycm9yLnZhbHVlKCk7CisKKyAg
ICBhdXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlOjpTZXRJdGVt
KTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGtleSkgfHwg
c3RhdGVtZW50LT5iaW5kQmxvYigyLCB2YWx1ZSkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtIGZhaWxlZCBvbiBjcmVhdGlu
ZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJh
c2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3Jh
Z2VFcnJvcjo6RGF0YWJhc2UpOworICAgIH0KKworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQt
PnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ID09IFNRTElURV9GVUxMKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpRdW90YUV4Y2VlZGVkKTsKKyAgICBpZiAocmVz
dWx0ICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2Us
ICJTUUxpdGVTdG9yYWdlQXJlYTo6c2V0SXRlbSBmYWlsZWQgb24gc3RlcHBpbmcgc3RhdGVtZW50
ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRh
dGFiYXNlKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fY2FjaGUpCisgICAgICAgIG1fY2FjaGUt
PnNldChrZXksIHZhbHVlLnNpemVJbkJ5dGVzKCkgPiBtYXhpbXVtU2l6ZUZvclZhbHVlc0tlcHRJ
bk1lbW9yeSA/IFN0cmluZygpIDogdmFsdWUpOworCisgICAgZGlzcGF0Y2hFdmVudHMoY29ubmVj
dGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIGtleSwgb2xkVmFsdWUsIHZhbHVlLCB1cmxTdHJpbmcp
OworCisgICAgcmV0dXJuIHsgfTsKK30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBT
UUxpdGVTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNv
bm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBpZiAoIXBy
ZXBhcmVEYXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVy
cm9yOjpEYXRhYmFzZSk7CisKKyAgICBzdGFydFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKyAg
ICBTdHJpbmcgb2xkVmFsdWU7CisgICAgaWYgKGF1dG8gdmFsdWVPckVycm9yID0gZ2V0SXRlbShr
ZXkpKQorICAgICAgICBvbGRWYWx1ZSA9IHZhbHVlT3JFcnJvci52YWx1ZSgpOworICAgIGVsc2UK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6SXRlbU5vdEZvdW5k
KTsKKworICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFN0YXRlbWVudFR5cGU6
OkRlbGV0ZUl0ZW0pOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+YmluZFRleHQo
MSwga2V5KSB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0g
ZmFpbGVkIG9uIGV4ZWN1dGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFz
dEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworICAgIH0KKworICAgIGlmICht
X2NhY2hlKQorICAgICAgICBtX2NhY2hlLT5yZW1vdmUoa2V5KTsKKworICAgIGRpc3BhdGNoRXZl
bnRzKGNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBrZXksIG9sZFZhbHVlLCBTdHJpbmco
KSwgdXJsU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK0V4cGVjdGVkPHZvaWQsIFN0
b3JhZ2VFcnJvcj4gU1FMaXRlU3RvcmFnZUFyZWE6OmNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUlt
cGxJRCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgaWYgKCFwcmVwYXJlRGF0YWJh
c2UoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJh
c2UpOworCisgICAgaWYgKG1fY2FjaGUgJiYgbV9jYWNoZS0+aXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpJdGVtTm90Rm91bmQpOworCisgICAg
aWYgKG1fY2FjaGUpCisgICAgICAgIG1fY2FjaGUtPmNsZWFyKCk7CisKKyAgICBzdGFydFRyYW5z
YWN0aW9uSWZOZWNlc3NhcnkoKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVu
dChTdGF0ZW1lbnRUeXBlOjpEZWxldGVBbGxJdGVtcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwg
c3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpjbGVhciBmYWlsZWQgb24gZXhlY3V0
aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRh
YmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3Rv
cmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgaWYgKG1fZGF0YWJhc2UtPmxhc3RD
aGFuZ2VzKCkgPD0gMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJv
cjo6SXRlbU5vdEZvdW5kKTsKKworICAgIGRpc3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24sIHN0b3Jh
Z2VBcmVhSW1wbElELCBTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCB1cmxTdHJpbmcpOwor
CisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y29tbWl0VHJh
bnNhY3Rpb25JZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKGF1dG8gdHJhbnNhY3Rpb24gPSBzdGQ6
OmV4Y2hhbmdlKG1fdHJhbnNhY3Rpb24sIG51bGxwdHIpKQorICAgICAgICB0cmFuc2FjdGlvbi0+
Y29tbWl0KCk7Cit9CisKK3ZvaWQgU1FMaXRlU3RvcmFnZUFyZWE6OmhhbmRsZUxvd01lbW9yeVdh
cm5pbmcoKQoreworICAgIGlmIChtX2RhdGFiYXNlICYmIG1fZGF0YWJhc2UtPmlzT3BlbigpKQor
ICAgICAgICBtX2RhdGFiYXNlLT5yZWxlYXNlTWVtb3J5KCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvU1FMaXRlU3RvcmFnZUFyZWEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiZDM4MWY3NzMwMDk3ZTI5Njk3
ZWRjODYxNzc1ZjBlOTE3ZmMxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuaApAQCAtMCwwICsxLDg5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUJhc2Uu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgU1FMaXRlU3RvcmFnZUFyZWEgZmluYWwgOiBwdWJsaWMgU3RvcmFnZUFyZWFCYXNl
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3Ry
aW5nIGRhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJik7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhPiBmaWxlTmFtZVRvT3JpZ2luKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOwor
CisgICAgU1FMaXRlU3RvcmFnZUFyZWEodW5zaWduZWQgcXVvdGEsIGNvbnN0IFdlYkNvcmU6OkNs
aWVudE9yaWdpbiYsIGNvbnN0IFN0cmluZyYgcGF0aCwgUmVmPFdvcmtRdWV1ZT4mJik7CisgICAg
flNRTGl0ZVN0b3JhZ2VBcmVhKCk7CisKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBoYW5k
bGVMb3dNZW1vcnlXYXJuaW5nKCk7CisgICAgdm9pZCBjb21taXRUcmFuc2FjdGlvbklmTmVjZXNz
YXJ5KCk7CisKK3ByaXZhdGU6CisgICAgLy8gU3RvcmFnZUFyZWFCYXNlCisgICAgVHlwZSB0eXBl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gU3RvcmFnZUFyZWFCYXNlOjpUeXBlOjpTUUxpdGU7IH07
CisgICAgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTdG9y
YWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlOjpMb2NhbDsgfTsKKyAgICBib29sIGlzRW1wdHkoKSBm
aW5hbDsKKyAgICB2b2lkIGNsZWFyKCkgZmluYWw7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gYWxsSXRlbXMoKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IHNl
dEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IHJlbW92
ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKyAg
ICBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IGNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
KSBmaW5hbDsKKworICAgIGJvb2wgY3JlYXRlVGFibGVJZk5lY2Vzc2FyeSgpOworICAgIGJvb2wg
cHJlcGFyZURhdGFiYXNlKCk7CisgICAgdm9pZCBzdGFydFRyYW5zYWN0aW9uSWZOZWNlc3Nhcnko
KTsKKworICAgIGVudW0gY2xhc3MgU3RhdGVtZW50VHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBD
b3VudEl0ZW1zLAorICAgICAgICBEZWxldGVJdGVtLAorICAgICAgICBEZWxldGVBbGxJdGVtcywK
KyAgICAgICAgR2V0SXRlbSwKKyAgICAgICAgR2V0QWxsSXRlbXMsCisgICAgICAgIFNldEl0ZW0s
CisgICAgICAgIEludmFsaWQKKyAgICB9OworICAgIEFTQ0lJTGl0ZXJhbCBzdGF0ZW1lbnRTdHJp
bmcoU3RhdGVtZW50VHlwZSkgY29uc3Q7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0
b1Jlc2V0U2NvcGUgY2FjaGVkU3RhdGVtZW50KFN0YXRlbWVudFR5cGUpOworICAgIEV4cGVjdGVk
PFN0cmluZywgU3RvcmFnZUVycm9yPiBnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KTsKKyAgICBF
eHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJvcj4gZ2V0SXRlbUZyb21EYXRhYmFzZShjb25zdCBT
dHJpbmcmIGtleSk7CisKKyAgICBTdHJpbmcgbV9wYXRoOworICAgIFJlZjxXb3JrUXVldWU+IG1f
cXVldWU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiBtX2Rh
dGFiYXNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbj4g
bV90cmFuc2FjdGlvbjsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudD4+IG1fY2FjaGVkU3RhdGVtZW50czsKKyAgICBzdGQ6Om9wdGlvbmFsPEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+PiBtX2NhY2hlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJl
YSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2Um
IGFyZWEpIHsgcmV0dXJuIGFyZWEudHlwZSgpID09IFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlOjpU
eXBlOjpTUUxpdGU7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yM2UyZDM2NzRhYWQyNDkyYzk2NWQ4MWFjNzQ2
YzY3MDAwNDMzNWI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlTWFuYWdlci5jcHAKQEAgLTAsMCArMSwxMDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Vzc2lvblN0b3Jh
Z2VNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJNZW1vcnlTdG9yYWdlQXJlYS5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpTZXNzaW9uU3RvcmFnZU1hbmFn
ZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYgcmVnaXN0cnkpCisgICAgOiBtX3JlZ2lzdHJ5KHJlZ2lz
dHJ5KQoreworfQorCitib29sIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6aXNBY3RpdmUoKQorewor
ICAgIHJldHVybiBXVEY6OmFueU9mKG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpLCBbJl0gKGF1dG8m
IHN0b3JhZ2VBcmVhKSB7CisgICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS0+aGFzTGlzdGVuZXJz
KCk7CisgICAgfSk7Cit9CisKK2Jvb2wgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpoYXNEYXRhSW5N
ZW1vcnkoKQoreworICAgIHJldHVybiBXVEY6OmFueU9mKG1fc3RvcmFnZUFyZWFzLnZhbHVlcygp
LCBbJl0gKGF1dG8mIHN0b3JhZ2VBcmVhKSB7CisgICAgICAgIHJldHVybiAhc3RvcmFnZUFyZWEt
PmlzRW1wdHkoKTsKKyAgICB9KTsKK30KKwordm9pZCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNs
ZWFyRGF0YSgpCit7CisgICAgZm9yIChhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFz
LnZhbHVlcygpKQorICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoKTsKK30KKwordm9pZCBTZXNz
aW9uU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCBjb25uZWN0aW9uKQoreworICAgIGZvciAoYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3Jh
Z2VBcmVhcy52YWx1ZXMoKSkKKyAgICAgICAgc3RvcmFnZUFyZWEtPnJlbW92ZUxpc3RlbmVyKGNv
bm5lY3Rpb24pOworfQorCitTdG9yYWdlQXJlYUlkZW50aWZpZXIgU2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyOjphZGRTdG9yYWdlQXJlYShzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+IHN0
b3JhZ2VBcmVhLCBJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VO
YW1lc3BhY2VJZGVudGlmaWVyIG5hbWVzcGFjZUlkZW50aWZpZXIpCit7CisgICAgYXV0byBpZGVu
dGlmaWVyID0gc3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKTsKKyAgICBtX3JlZ2lzdHJ5LnJlZ2lz
dGVyU3RvcmFnZUFyZWEoaWRlbnRpZmllciwgKnN0b3JhZ2VBcmVhKTsKKyAgICBzdG9yYWdlQXJl
YS0+YWRkTGlzdGVuZXIoY29ubmVjdGlvbik7CisgICAgbV9zdG9yYWdlQXJlYXNCeU5hbWVzcGFj
ZS5zZXQobmFtZXNwYWNlSWRlbnRpZmllciwgaWRlbnRpZmllcik7CisgICAgbV9zdG9yYWdlQXJl
YXMuc2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc3RvcmFnZUFyZWEpKTsKKworICAgIHJldHVybiBp
ZGVudGlmaWVyOworfQorCitTdG9yYWdlQXJlYUlkZW50aWZpZXIgU2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyOjpjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJ
RCBjb25uZWN0aW9uLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgU3RvcmFn
ZU5hbWVzcGFjZUlkZW50aWZpZXIgbmFtZXNwYWNlSWRlbnRpZmllcikKK3sKKyAgICBhdXRvIGlk
ZW50aWZpZXIgPSBtX3N0b3JhZ2VBcmVhc0J5TmFtZXNwYWNlLmdldChuYW1lc3BhY2VJZGVudGlm
aWVyKTsKKyAgICBpZiAoaWRlbnRpZmllci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgQVNTRVJUKG1f
c3RvcmFnZUFyZWFzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKKyAgICAgICAgcmV0dXJuIGlkZW50
aWZpZXI7CisgICAgfQorCisgICAgYXV0byBuZXdTdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8TWVt
b3J5U3RvcmFnZUFyZWE+KG9yaWdpbik7CisgICAgcmV0dXJuIGFkZFN0b3JhZ2VBcmVhKFdURk1v
dmUobmV3U3RvcmFnZUFyZWEpLCBjb25uZWN0aW9uLCBuYW1lc3BhY2VJZGVudGlmaWVyKTsKK30K
Kwordm9pZCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEo
SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZp
ZXIgaWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VB
cmVhcy5nZXQoaWRlbnRpZmllcikpCisgICAgICAgIHN0b3JhZ2VBcmVhLT5yZW1vdmVMaXN0ZW5l
cihjb25uZWN0aW9uKTsKK30KKwordm9pZCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNsb25lU3Rv
cmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlTmFt
ZXNwYWNlSWRlbnRpZmllciBzb3VyY2VOYW1lc3BhY2VJZGVudGlmaWVyLCBTdG9yYWdlTmFtZXNw
YWNlSWRlbnRpZmllciB0YXJnZXROYW1lc3BhY2VJZGVudGlmaWVyKQoreworICAgIGF1dG8gaWRl
bnRpZmllciA9IG1fc3RvcmFnZUFyZWFzQnlOYW1lc3BhY2UuZ2V0KHNvdXJjZU5hbWVzcGFjZUlk
ZW50aWZpZXIpOworICAgIGlmICghaWRlbnRpZmllci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlQXJlYXMuZmluZChpZGVudGlm
aWVyKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlQXJlYXMuZW5kKCkpIHsKKyAgICAgICAgYXV0byBu
ZXdTdG9yYWdlQXJlYSA9IGl0ZXJhdG9yLT52YWx1ZS0+Y2xvbmUoKTsKKyAgICAgICAgYWRkU3Rv
cmFnZUFyZWEoV1RGTW92ZShuZXdTdG9yYWdlQXJlYSksIGNvbm5lY3Rpb24sIHRhcmdldE5hbWVz
cGFjZUlkZW50aWZpZXIpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKwor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E5NjU1NTJmMTU3YjA2ZjAxNWYz
NDAxODkxNGJiMmFkMmY4ZWIwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuaApAQCAtMCwwICsxLDU4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUlk
ZW50aWZpZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllci5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTWVtb3J5U3RvcmFnZUFyZWE7CisKK2NsYXNzIFNl
c3Npb25TdG9yYWdlTWFuYWdlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmKTsKKyAg
ICBib29sIGlzQWN0aXZlKCk7CisgICAgYm9vbCBoYXNEYXRhSW5NZW1vcnkoKTsKKyAgICB2b2lk
IGNsZWFyRGF0YSgpOworICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlEKTsKKworICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBjb25uZWN0VG9TZXNzaW9u
U3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgY29uc3QgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZGlzY29u
bmVjdEZyb21TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJl
YUlkZW50aWZpZXIpOworICAgIHZvaWQgY2xvbmVTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlELCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgU3RvcmFnZU5hbWVzcGFjZUlk
ZW50aWZpZXIpOworCitwcml2YXRlOgorICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBhZGRTdG9y
YWdlQXJlYShzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+LCBJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlELCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcik7CisKKyAgICBTdG9yYWdl
QXJlYVJlZ2lzdHJ5JiBtX3JlZ2lzdHJ5OworICAgIEhhc2hNYXA8U3RvcmFnZUFyZWFJZGVudGlm
aWVyLCBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+PiBtX3N0b3JhZ2VBcmVhczsK
KyAgICBIYXNoTWFwPFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBTdG9yYWdlQXJlYUlkZW50
aWZpZXI+IG1fc3RvcmFnZUFyZWFzQnlOYW1lc3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvU3RvcmFnZUFyZWFCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9TdG9yYWdlQXJlYUJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmYmY3NTg0N2M1OGUzMWQxOGY4
YTVmNzU4MzIxODM1NDAwNjNlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmNwcApAQCAtMCwwICsxLDgwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVh
QmFzZS5oIgorCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFNYXBNZXNzYWdlcy5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlQXJlYUJhc2UodW5zaWduZWQg
cXVvdGEsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQorICAgIDogbV9pZGVu
dGlmaWVyKFN0b3JhZ2VBcmVhSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSkKKyAgICAsIG1fcXVvdGEo
cXVvdGEpCisgICAgLCBtX29yaWdpbihvcmlnaW4pCit7Cit9CisKK1N0b3JhZ2VBcmVhQmFzZTo6
flN0b3JhZ2VBcmVhQmFzZSgpID0gZGVmYXVsdDsKKwordm9pZCBTdG9yYWdlQXJlYUJhc2U6OmFk
ZExpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbikKK3sKKyAgICBB
U1NFUlQoIW1fbGlzdGVuZXJzLmNvbnRhaW5zKGNvbm5lY3Rpb24pKTsKKworICAgIG1fbGlzdGVu
ZXJzLmFkZChjb25uZWN0aW9uKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYUJhc2U6OnJlbW92ZUxp
c3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbikKK3sKKyAgICBtX2xp
c3RlbmVycy5yZW1vdmUoY29ubmVjdGlvbik7Cit9CisKK2Jvb2wgU3RvcmFnZUFyZWFCYXNlOjpo
YXNMaXN0ZW5lcnMoKSBjb25zdAoreworICAgIHJldHVybiAhbV9saXN0ZW5lcnMuaXNFbXB0eSgp
OworfQorCit2b2lkIFN0b3JhZ2VBcmVhQmFzZTo6bm90aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcigp
Cit7CisgICAgZm9yIChhdXRvJiBjb25uZWN0aW9uIDogbV9saXN0ZW5lcnMpCisgICAgICAgIElQ
Qzo6Q29ubmVjdGlvbjo6c2VuZChjb25uZWN0aW9uLCBNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6
OkNsZWFyQ2FjaGUoKSwgbV9pZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCit2b2lkIFN0b3Jh
Z2VBcmVhQmFzZTo6ZGlzcGF0Y2hFdmVudHMoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3Vy
Y2VDb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIHNvdXJjZUltcGxJZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3Ry
aW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0Cit7CisgICAgQVNT
RVJUKHNvdXJjZUltcGxJZGVudGlmaWVyKTsKKworICAgIGZvciAoYXV0byYgY29ubmVjdGlvbiA6
IG1fbGlzdGVuZXJzKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8U3RvcmFnZUFyZWFJbXBsSWRl
bnRpZmllcj4gaW1wbElkZW50aWZpZXI7CisgICAgICAgIGlmIChjb25uZWN0aW9uID09IHNvdXJj
ZUNvbm5lY3Rpb24pCisgICAgICAgICAgICBpbXBsSWRlbnRpZmllciA9IHNvdXJjZUltcGxJZGVu
dGlmaWVyOworICAgICAgICBJUEM6OkNvbm5lY3Rpb246OnNlbmQoY29ubmVjdGlvbiwgTWVzc2Fn
ZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaXNwYXRjaFN0b3JhZ2VFdmVudChpbXBsSWRlbnRpZmllciwg
a2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHVybFN0cmluZyksIG1faWRlbnRpZmllci50b1VJbnQ2
NCgpKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjU5MDUxYjE0YjM1OTlmYWRlYzg0YmFlNzBhZDg2ZWUwMDBjZDdlODkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3Rv
cmFnZUFyZWFCYXNlLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSWRlbnRp
Zmllci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBDbGllbnRPcmlnaW47Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitlbnVtIGNsYXNzIFN0b3JhZ2VFcnJvciA6IHVpbnQ4X3QgeworICAgIERhdGFi
YXNlLAorICAgIEl0ZW1Ob3RGb3VuZCwKKyAgICBRdW90YUV4Y2VlZGVkLAorfTsKKworY2xhc3Mg
U3RvcmFnZUFyZWFCYXNlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFN0b3JhZ2VBcmVhQmFzZT4g
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0b3JhZ2VBcmVhQmFzZSk7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3RvcmFnZUFyZWFCYXNlKHVuc2lnbmVk
IHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICB2aXJ0dWFsIH5TdG9y
YWdlQXJlYUJhc2UoKTsKKworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeyBTUUxpdGUs
IE1lbW9yeSB9OworICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOworICAgIGVudW0g
Y2xhc3MgU3RvcmFnZVR5cGUgOiBib29sIHsgU2Vzc2lvbiwgTG9jYWwgfTsKKyAgICB2aXJ0dWFs
IFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBp
c0VtcHR5KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpID0gMDsKKworICAgIFN0b3Jh
Z2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVy
OyB9CisgICAgV2ViQ29yZTo6Q2xpZW50T3JpZ2luIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
b3JpZ2luOyB9CisgICAgdW5zaWduZWQgcXVvdGEoKSBjb25zdCB7IHJldHVybiBtX3F1b3RhOyB9
CisgICAgdm9pZCBhZGRMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKKyAgICB2
b2lkIHJlbW92ZUxpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQpOworICAgIGJvb2wg
aGFzTGlzdGVuZXJzKCkgY29uc3Q7CisgICAgdm9pZCBub3RpZnlMaXN0ZW5lcnNBYm91dENsZWFy
KCk7CisKKyAgICB2aXJ0dWFsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGFsbEl0ZW1zKCkgPSAw
OworICAgIHZpcnR1YWwgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBzZXRJdGVtKElQQzo6
Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykg
PSAwOworICAgIHZpcnR1YWwgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiByZW1vdmVJdGVt
KElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgPSAwOworICAgIHZpcnR1
YWwgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBjbGVhcihJUEM6OkNvbm5lY3Rpb246OlVu
aXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZykgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50cyhJUEM6OkNvbm5l
Y3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0b3JhZ2VBcmVh
SWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisgICAgdW5zaWduZWQgbV9xdW90YTsKKyAgICBXZWJD
b3JlOjpDbGllbnRPcmlnaW4gbV9vcmlnaW47CisgICAgSGFzaFNldDxJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlEPiBtX2xpc3RlbmVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdl
QXJlYVJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9T
dG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNWJlNjhjOWRjZTViZmNlZTViY2M3
YjhiNjY2Y2FkMTUxNDUxMTU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwCkBAIC0wLDAgKzEsNzMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFy
ZWFSZWdpc3RyeS5oIgorCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFCYXNlLmgiCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpTdG9yYWdlQXJlYVJlZ2lzdHJ5KCkg
PSBkZWZhdWx0OworCit2b2lkIFN0b3JhZ2VBcmVhUmVnaXN0cnk6OnJlZ2lzdGVyU3RvcmFnZUFy
ZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhQmFzZSYgc3Rv
cmFnZUFyZWEpCit7CisgICAgQVNTRVJUKCFtX3N0b3JhZ2VBcmVhcy5jb250YWlucyhpZGVudGlm
aWVyKSk7CisKKyAgICBtX3N0b3JhZ2VBcmVhcy5hZGQoaWRlbnRpZmllciwgc3RvcmFnZUFyZWEp
OworfQorCit2b2lkIFN0b3JhZ2VBcmVhUmVnaXN0cnk6OnVucmVnaXN0ZXJTdG9yYWdlQXJlYShT
dG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQobV9zdG9yYWdl
QXJlYXMuY29udGFpbnMoaWRlbnRpZmllcikpOworCisgICAgbV9zdG9yYWdlQXJlYXMucmVtb3Zl
KGlkZW50aWZpZXIpOworfQorCitTdG9yYWdlQXJlYUJhc2UqIFN0b3JhZ2VBcmVhUmVnaXN0cnk6
OmdldFN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAg
IGlmIChhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYXMuZ2V0KGlkZW50aWZpZXIpKQor
ICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEuZ2V0KCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordm9pZCBTdG9yYWdlQXJlYVJlZ2lzdHJ5Ojpmb3JFYWNoU3RvcmFnZUFyZWEoY29uc3Qg
RnVuY3Rpb248dm9pZChTdG9yYWdlQXJlYUJhc2UmKT4mIGFwcGx5KQoreworICAgIEhhc2hTZXQ8
U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBpZGVudGlmaWVyc1RvUmVtb3ZlOworICAgIGZvciAoYXV0
byBbaWRlbnRpZmllciwgc3RvcmFnZUFyZWFdIDogbV9zdG9yYWdlQXJlYXMpIHsKKyAgICAgICAg
aWYgKCFzdG9yYWdlQXJlYSkgeworICAgICAgICAgICAgaWRlbnRpZmllcnNUb1JlbW92ZS5hZGQo
aWRlbnRpZmllcik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGFwcGx5KCpzdG9yYWdlQXJlYSk7CisgICAgfQorCisgICAgZm9yIChhdXRvIGlkZW50aWZpZXIg
OiBpZGVudGlmaWVyc1RvUmVtb3ZlKQorICAgICAgICBtX3N0b3JhZ2VBcmVhcy5yZW1vdmUoaWRl
bnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuaCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYVJlZ2lzdHJ5LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzBjM2VhNDdlNWNmNDMzMDBmYzc0ODI0YmFhOTJmZTYwMzJiYmY1OQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9y
YWdlQXJlYVJlZ2lzdHJ5LmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSWRl
bnRpZmllci5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBTdG9yYWdlQXJlYUJhc2U7CisKK2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnkg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFN0b3JhZ2VBcmVh
UmVnaXN0cnkoKTsKKyAgICB2b2lkIHJlZ2lzdGVyU3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVu
dGlmaWVyLCBTdG9yYWdlQXJlYUJhc2UmKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTdG9yYWdlQXJl
YShTdG9yYWdlQXJlYUlkZW50aWZpZXIpOworICAgIFN0b3JhZ2VBcmVhQmFzZSogZ2V0U3RvcmFn
ZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVyKTsKKyAgICB2b2lkIGZvckVhY2hTdG9yYWdlQXJl
YShjb25zdCBGdW5jdGlvbjx2b2lkKFN0b3JhZ2VBcmVhQmFzZSYpPiYpOworCitwcml2YXRlOgor
ICAgIEhhc2hNYXA8U3RvcmFnZUFyZWFJZGVudGlmaWVyLCBXZWFrUHRyPFN0b3JhZ2VBcmVhQmFz
ZT4+IG1fc3RvcmFnZUFyZWFzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtdW5pZmllZC1zb3VyY2VzLnNoIGIv
U291cmNlL1dlYktpdC9TY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaAppbmRleCBi
NmQ0MGFkOWU5NTQ3YmQ0MGRlODVjOWM4NWEzNWMxZTI1Y2RmMTkxLi40ZjFhYzgzY2IzYTIyNmVj
Y2QwNzgzOTgzNzkyM2NiYzQ0YmFiOTIzIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L1Njcmlw
dHMvZ2VuZXJhdGUtdW5pZmllZC1zb3VyY2VzLnNoCisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0
cy9nZW5lcmF0ZS11bmlmaWVkLXNvdXJjZXMuc2gKQEAgLTE0LDcgKzE0LDcgQEAgaWYgWyAteiAi
JHtCVUlMRF9TQ1JJUFRTX0RJUn0iIF07IHRoZW4KICAgICBmaQogZmkKIAotVW5pZmllZFNvdXJj
ZUNwcEZpbGVDb3VudD0xMTEKK1VuaWZpZWRTb3VyY2VDcHBGaWxlQ291bnQ9MTEyCiBVbmlmaWVk
U291cmNlTW1GaWxlQ291bnQ9ODAKIAogaWYgWyAkIyAtZXEgMCBdOyB0aGVuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApp
bmRleCAwNWE4NWIwMTk2MDQyMDE2YWI2ODVmMjBkNGJlZjczYzQ2MjY1NjA3Li40MmZiNjFiMTc3
NTFlMTE5NzMyZmFhYjI2ZTE1OGE1MjYzNTUzNTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTE0Myw4ICsx
NDMsMTQgQEAgTmV0d29ya1Byb2Nlc3MvU2VydmljZVdvcmtlci9XZWJTV1NlcnZlclRvQ29udGV4
dENvbm5lY3Rpb24uY3BwIEBuby11bmlmeQogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9GaWxlU3lz
dGVtU3RvcmFnZU1hbmFnZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0ZpbGVTeXN0ZW1T
dG9yYWdlSGFuZGxlLmNwcAogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9GaWxlU3lzdGVtU3RvcmFn
ZUhhbmRsZVJlZ2lzdHJ5LmNwcAorTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VN
YW5hZ2VyLmNwcAorTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5jcHAK
IE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmNwcAogTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5jcHAKK05ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1Nl
c3Npb25TdG9yYWdlTWFuYWdlci5jcHAKK05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFy
ZWFCYXNlLmNwcAorTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYVJlZ2lzdHJ5LmNw
cAogCiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAog
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcAppbmRleCBlYzliMzUzNzZiOWEzM2M5N2Y0YTUwNzYzOGQ1MGU0MzZhZDlk
ZTE0Li5mMWQyMWE3OWQ1NTMwODYwNjc5YWNjYTIzNWQxZjI5OWJkZDVjZGI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5jcHAKQEAgLTE1NjQsMTYgKzE1NjQsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNy
ZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShjb25zdCBTdHJpbmcmIGluZGV4ZWREYXRhYgogICAg
ICAgICBGaWxlU3lzdGVtOjpjcmVhdGVTeW1ib2xpY0xpbmsoaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5LCBvbGRWZXJzaW9uRGlyZWN0b3J5KTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmln
aW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIWNhblNlbmRN
ZXNzYWdlKCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OkdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoc2Vzc2lvbklEKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnByZWNv
bm5lY3RUbyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIg
d2ViUGFnZVByb3h5SUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCwgY29uc3Qg
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50
aWFsc1BvbGljeSBzdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgc3RkOjpvcHRpb25hbDxOYXZpZ2F0
aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgTGFzdE5h
dmlnYXRpb25XYXNBcHBJbml0aWF0ZWQgbGFzdE5hdmlnYXRpb25XYXNBcHBJbml0aWF0ZWQpCiB7
CiAgICAgaWYgKCF1cmwuaXNWYWxpZCgpIHx8ICF1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmNwcAppbmRleCA5MDk3OTNlMzc1NjhjMDQyYjEwMDJhMjZhYTAyNzQ3ODRh
OTFlNGNhLi43MjJkOTczMWEwMTJkZTM0ZmI2YzMzMmI5MTE0NWRkMDMwMmY1NjNiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmNwcApAQCAtMTk2OSwxOCArMTk2OSw2IEBAIEFQSTo6SFRUUENvb2tpZVN0b3JlJiBX
ZWJzaXRlRGF0YVN0b3JlOjpjb29raWVTdG9yZSgpCiAgICAgcmV0dXJuICptX2Nvb2tpZVN0b3Jl
OwogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVu
Y3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRh
aWxzPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIWlzUGVyc2lzdGVudCgp
KSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBuZXR3b3JrUHJvY2VzcygpLmdldExvY2FsU3RvcmFnZURldGFpbHMobV9zZXNz
aW9uSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShh
dXRvJiYgZGV0YWlscykgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRldGFp
bHMpKTsKLSAgICB9KTsKLX0KLQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCAxZGUyNWE2NjA1N2YyZDY2YzYy
OTllNWViYmI4MTQ2YmVlOWI4MWUzLi4zNGFlNWFmNjA3M2MyNTkxNDIwZjIwOWNlMGY3NTMyYmFi
ZGM4M2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC0xNjcsNyArMTY3LDYgQEAgcHVibGljOgogICAgIHZv
aWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZp
ZWRTaW5jZSwgRnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICB2b2lk
IHJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJz
aXRlRGF0YVJlY29yZD4mLCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwog
Ci0gICAgdm9pZCBnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYpOwogICAgIHZv
aWQgc2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKENhY2hlTW9kZWwpOwogICAg
IHZvaWQgc2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMpOwogICAgIHZv
aWQgcmVzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVW5pZmllZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2Vi
S2l0L1VuaWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDUwODk4ZTQ2MzAxNzMx
OTRhZTRlZjdjY2U0M2FlOGViNDY3M2E4NmIuLjJhZDc5NjQ1ZDZlZjY4M2RhZDRlYjA3NmY1ZGQ3
MjQ3MmJmODYwYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVW5pZmllZFNvdXJjZXMtb3V0
cHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1vdXRwdXQu
eGNmaWxlbGlzdApAQCAtMTcsNiArMTcsNyBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTEtbW0ubQogJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMv
VW5pZmllZFNvdXJjZTExLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTExMC5jcHAKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRT
b3VyY2UxMTEuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTEyLmNwcAogJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTEy
LW1tLm1tCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZp
ZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTMtbW0ubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDQxNTk1OTQ4NDIzNGM0ODUwODhjMzQxNGI0OWVlNjI5ZmZhNjlhMjguLjhjYTdiYmY2ZTFkMTUw
OTFkNmYyM2VhM2NjNDRkMWMzMjMzNGU5YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTUwNyw2ICsxNTA3LDEzIEBACiAJCTkzRTc5
OTg1Mjc1NkZBNTUwMDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNFNzk5ODIyNzU2RkE1NDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29u
bmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTkzRTc5OTg3Mjc1NkZBQjQwMDc0
MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlc1JlcGxpZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OTgzMjc1
NkZBNTQwMDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlc1Jl
cGxpZXMuaCAqLzsgfTsKIAkJOTNFNzk5ODgyNzU2RkFDMjAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0
ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTk4MTI3NTZGQTUzMDA3NDAwOEEgLyogV2ViRmlsZVN5
c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXMuaCAqLzsgfTsKKwkJOTNFNzk5QzcyNzYwMjc0
NjAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUM2Mjc2MDI3MzcwMDc0MDA4QSAvKiBTdG9y
YWdlQXJlYVJlZ2lzdHJ5LmggKi87IH07CisJCTkzRTc5OUNFMjc2MDQ5N0IwMDc0MDA4QSAvKiBT
ZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzRTc5OUNBMjc2MDQ5N0EwMDc0MDA4QSAvKiBTZXNzaW9uU3RvcmFnZU1h
bmFnZXIuaCAqLzsgfTsKKwkJOTNFNzk5Q0YyNzYwNDk3QjAwNzQwMDhBIC8qIExvY2FsU3RvcmFn
ZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzRTc5OUNCMjc2MDQ5N0EwMDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmggKi87IH07
CisJCTkzRTc5OUQyMjc2MEFBNUIwMDc0MDA4QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUQxMjc2MEFB
NUEwMDc0MDA4QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCAqLzsgfTsKKwkJOTNFNzk5REEyNzYx
MjEwODAwNzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTlENDI3NjEyMTA3MDA3NDAwOEEgLyogU1FM
aXRlU3RvcmFnZUFyZWEuaCAqLzsgfTsKKwkJOTNFNzk5REIyNzYxMjEwODAwNzQwMDhBIC8qIE1l
bW9yeVN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5M0U3OTlENTI3NjEyMTA3MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuaCAq
LzsgfTsKKwkJOTNFNzk5REMyNzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5RDYyNzYx
MjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5oICovOyB9OwogCQk5M0Y1NDlCNDFFMzE3
NEI3MDAwRTcyMzkgLyogV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjU0OUIzMUUzMTc0QjcwMDBFNzIzOSAv
KiBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFB1YmxpYywgKTsgfTsgfTsKIAkJOTUwRjI4ODAyNTI0MTRFQTAwQjc0RjFDIC8qIFdLTW91c2VE
ZXZpY2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTUwRjI4N0UyNTI0MTRFOTAwQjc0RjFDIC8qIFdLTW91c2VEZXZpY2VPYnNlcnZlci5o
ICovOyB9OwogCQk5NTY1MDgzOTI2RDg3QTJCMDBFMTVDQjcgLyogQXBwbGVNZWRpYVNlcnZpY2Vz
U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NTY1
MDgzNzI2RDg3QTJCMDBFMTVDQjcgLyogQXBwbGVNZWRpYVNlcnZpY2VzU1BJLmggKi87IH07CkBA
IC01MDI0LDcgKzUwMzEsNiBAQAogCQk3QjQ4M0YxQzI1Q0REQTlCMDAxMjA0ODYgLyogTWVzc2Fn
ZVJlY2VpdmVRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXNzYWdl
UmVjZWl2ZVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCNDgzRjFEMjVD
RERBOUIwMDEyMDQ4NiAvKiBNZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lc3NhZ2VSZWNlaXZlUXVldWVNYXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QjQ4M0YxRTI1Q0REQTlCMDAxMjA0ODYgLyogTWVz
c2FnZVJlY2VpdmVRdWV1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVz
c2FnZVJlY2VpdmVRdWV1ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0I1MzAw
RTcyNzE4MjE3QTAwMDgyMDg2IC8qIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlDb2NvYS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlDb2Nv
YS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I2NEMwQjYyNTRDNUMyNTAwMDZC
NEFGIC8qIEdyYXBoaWNzQ29udGV4dEdMSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFw
aGljc0NvbnRleHRHTElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0I3MzEyMzEyNUNDODUyMzAwM0IyNzk2IC8qIFN0cmVhbUNvbm5lY3Rpb25CdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyZWFtQ29ubmVjdGlvbkJ1ZmZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QjczMTIzMjI1Q0M4NTIzMDAzQjI3OTYgLyog
U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTUzMzAsNiArNTMzNiwxOSBAQAogCQk5M0U3OTk4MTI3NTZGQTUzMDA3
NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9u
TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFNzk5ODIyNzU2RkE1
NDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJGaWxlU3lzdGVt
U3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5M0U3OTk4MzI3NTZGQTU0MDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3Jh
Z2VDb25uZWN0aW9uTWVzc2FnZXNSZXBsaWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzUmVwbGllcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlDNTI3NjAyNzM2MDA3NDAwOEEgLyog
U3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTNFNzk5QzYyNzYwMjczNzAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUFyZWFSZWdpc3RyeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlDOTI3NjA0OTdBMDA3NDAwOEEgLyogTG9j
YWxTdG9yYWdlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTNFNzk5Q0EyNzYwNDk3QTAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5Q0IyNzYwNDk3QTAwNzQwMDhBIC8qIExv
Y2FsU3RvcmFnZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9j
YWxTdG9yYWdlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlD
QzI3NjA0OTdCMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlc3Npb25TdG9yYWdlTWFuYWdlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQxMjc2MEFBNUEwMDc0MDA4QSAvKiBV
bmlmaWVkU291cmNlMTEyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFVuaWZpZWRTb3VyY2UxMTIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3
OTlEMzI3NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMaXRlU3RvcmFnZUFyZWEuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlENDI3NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRl
U3RvcmFnZUFyZWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMaXRlU3Rv
cmFnZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDUyNzYxMjEw
NzAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1lbW9yeVN0b3JhZ2VBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTkzRTc5OUQ2Mjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUFyZWFCYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQ3Mjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJl
YUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZUFy
ZWFCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDgyNzYxMjEw
ODAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE1lbW9yeVN0b3JhZ2VBcmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTNGNTQ5QjMxRTMxNzRCNzAwMEU3MjM5IC8qIFdLU25hcHNob3RDb25maWd1
cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLU25hcHNob3RDb25m
aWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjU0OUI1MUUzMTc0
REEwMDBFNzIzOSAvKiBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLU25hcHNob3RDb25maWd1cmF0aW9uLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NTBGMjg3RTI1MjQxNEU5MDBCNzRGMUMgLyogV0tN
b3VzZURldmljZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdL
TW91c2VEZXZpY2VPYnNlcnZlci5oOyBwYXRoID0gaW9zL1dLTW91c2VEZXZpY2VPYnNlcnZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODIwNyw2ICs4MjI2LDcgQEAKIAkJCQkx
Q0FFQ0I1RDI3NDY1QUUzMDBBQjc4RDAgLyogVW5pZmllZFNvdXJjZTEwOS5jcHAgKi8sCiAJCQkJ
MUNBRUNCNjAyNzQ2NUFFMzAwQUI3OEQwIC8qIFVuaWZpZWRTb3VyY2UxMTAuY3BwICovLAogCQkJ
CTFDQUVDQjVFMjc0NjVBRTMwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTExLmNwcCAqLywKKwkJ
CQk5M0U3OTlEMTI3NjBBQTVBMDA3NDAwOEEgLyogVW5pZmllZFNvdXJjZTExMi5jcHAgKi8sCiAJ
CQkpOwogCQkJbmFtZSA9ICJ1bmlmaWVkLXNvdXJjZXMiOwogCQkJcGF0aCA9ICJEZXJpdmVkU291
cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzIjsKQEAgLTk5NDgsNyArOTk2OCw2IEBACiAJCTVD
MTU3QTBBMjcxN0M5RjEwMEVENTI4MCAvKiB3ZWJwdXNoZCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNTE3QjVGNzcyNzVFOTc5NTAwMkRDMjJEIC8qIHdl
YnB1c2hkLmNwcCAqLywKIAkJCQk1MTdCNUY2MzI3NUE4RDVDMDAyREMyMkQgLyogd2VicHVzaHRv
b2wgKi8sCiAJCQkJNTE2MEU5NTQyNzRCODg3MTAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3Qu
aCAqLywKIAkJCQk1MTYwRTk1MzI3NEI4ODcxMDA1NjczODggLyogQXBwQnVuZGxlUmVxdWVzdC5t
bSAqLywKQEAgLTk5NjEsMTAgKzk5ODAsMTEgQEAKIAkJCQk1MTYwRTk1ODI3NEMwRDg4MDA1Njcz
ODggLyogUHVzaEFwcEJ1bmRsZS5tbSAqLywKIAkJCQk1MUY3QkI3OTI3NDRDNTA3MDBDNDVBNzIg
LyogUHVzaENsaWVudENvbm5lY3Rpb24uaCAqLywKIAkJCQk1MUY3QkI3QTI3NDRDNTA3MDBDNDVB
NzIgLyogUHVzaENsaWVudENvbm5lY3Rpb24ubW0gKi8sCisJCQkJNTE3QjVGNzcyNzVFOTc5NTAw
MkRDMjJEIC8qIHdlYnB1c2hkLmNwcCAqLywKIAkJCQk1MTJDRDY5RDI3MjMzOTNBMDBGN0Y4RUMg
LyogV2ViUHVzaERhZW1vbi5oICovLAogCQkJCTUxMkNENjlFMjcyMzM5M0EwMEY3RjhFQyAvKiBX
ZWJQdXNoRGFlbW9uLm1tICovLAotCQkJCTVDMTU3QTBCMjcxN0NBMUMwMEVENTI4MCAvKiBXZWJQ
dXNoRGFlbW9uTWFpbi5tbSAqLywKIAkJCQk1MTdCNUY3MjI3NUU5NjA5MDAyREMyMkQgLyogV2Vi
UHVzaERhZW1vbk1haW4uaCAqLywKKwkJCQk1QzE1N0EwQjI3MTdDQTFDMDBFRDUyODAgLyogV2Vi
UHVzaERhZW1vbk1haW4ubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IHdlYnB1c2hkOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEwMjg1LDExICsxMDMwNSwyMyBAQAogCQkJCTkzNUI1
Nzk4MjZGNTEyNzAwMDhCNDhBQyAvKiBGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5Lmgg
Ki8sCiAJCQkJOTMxQTA3NTEyNkYwNjMxMDAwNDQ3NENEIC8qIEZpbGVTeXN0ZW1TdG9yYWdlTWFu
YWdlci5jcHAgKi8sCiAJCQkJOTMxQTA3NTAyNkYwNjMxMDAwNDQ3NENEIC8qIEZpbGVTeXN0ZW1T
dG9yYWdlTWFuYWdlci5oICovLAorCQkJCTkzRTc5OUM5Mjc2MDQ5N0EwMDc0MDA4QSAvKiBMb2Nh
bFN0b3JhZ2VNYW5hZ2VyLmNwcCAqLywKKwkJCQk5M0U3OTlDQjI3NjA0OTdBMDA3NDAwOEEgLyog
TG9jYWxTdG9yYWdlTWFuYWdlci5oICovLAorCQkJCTkzRTc5OUQ4Mjc2MTIxMDgwMDc0MDA4QSAv
KiBNZW1vcnlTdG9yYWdlQXJlYS5jcHAgKi8sCisJCQkJOTNFNzk5RDUyNzYxMjEwNzAwNzQwMDhB
IC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmggKi8sCiAJCQkJOTMwODVEQzMyNkUxQkJCRDAwMEVDNkE3
IC8qIE5ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAgKi8sCiAJCQkJOTMwODVEQzQyNkUxQkJCRDAw
MEVDNkE3IC8qIE5ldHdvcmtTdG9yYWdlTWFuYWdlci5oICovLAogCQkJCTkzMDg1REM3MjZFMUM2
RUUwMDBFQzZBNyAvKiBOZXR3b3JrU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCiAJCQkJ
OTMwODVEQzUyNkUxQzZDRjAwMEVDNkE3IC8qIE9yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcCAqLywK
IAkJCQk5MzA4NURDNjI2RTFDNkNGMDAwRUM2QTcgLyogT3JpZ2luU3RvcmFnZU1hbmFnZXIuaCAq
LywKKwkJCQk5M0U3OTlDQzI3NjA0OTdCMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
LmNwcCAqLywKKwkJCQk5M0U3OTlDQTI3NjA0OTdBMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VN
YW5hZ2VyLmggKi8sCisJCQkJOTNFNzk5RDMyNzYxMjEwNzAwNzQwMDhBIC8qIFNRTGl0ZVN0b3Jh
Z2VBcmVhLmNwcCAqLywKKwkJCQk5M0U3OTlENDI3NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRlU3Rv
cmFnZUFyZWEuaCAqLywKKwkJCQk5M0U3OTlENzI3NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFy
ZWFCYXNlLmNwcCAqLywKKwkJCQk5M0U3OTlENjI3NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFy
ZWFCYXNlLmggKi8sCisJCQkJOTNFNzk5QzUyNzYwMjczNjAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVh
UmVnaXN0cnkuY3BwICovLAorCQkJCTkzRTc5OUM2Mjc2MDI3MzcwMDc0MDA4QSAvKiBTdG9yYWdl
QXJlYVJlZ2lzdHJ5LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHN0b3JhZ2U7CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwpAQCAtMTI1OTMsNyArMTI2MjUsNiBAQAogCQkJCTVDQUZERTQ1MjEz
MDg0NjMwMEIxRjdFMSAvKiBfV0tJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NEM2
MDQyMjUzQ0E1NDQwMEJERjA2MCAvKiBfV0tJbnNwZWN0b3JDb25maWd1cmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5OTRDNjA0NTI1M0NBQkEyMDBCREYwNjAgLyogX1dLSW5zcGVjdG9yQ29u
ZmlndXJhdGlvbkludGVybmFsLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTdCNUY3RjI3NUU5N0I2
MDAyREMyMkQgLyogV2ViUHVzaERhZW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTkxRjQ5MkYy
M0E4MTJDNjAwNTQ2NDJCIC8qIF9XS0luc3BlY3RvckRlYnVnZ2FibGVJbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5OTAzNkFFMjIzQTk0OUNGMDAwMEIwNkEgLyogX1dLSW5zcGVjdG9yRGVidWdn
YWJsZUluZm9JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTE5Nzk0MEMyM0RCQzUwMzAw
MjU3ODkyIC8qIF9XS0luc3BlY3RvckRlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTEyNzU3
LDYgKzEyNzg4LDcgQEAKIAkJCQkxQTY1NjNFNTFCN0E4QzUwMDA5Q0Y3ODcgLyogQVBJV2luZG93
RmVhdHVyZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3MkVCQkRCMjUzOEY2QjYwMDA1NTJCMyAv
KiBBcHBBdHRlc3RJbnRlcm5hbFNvZnRMaW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzJFQkJE
RDI1MzkyMTgxMDAwNTUyQjMgLyogQXBwQXR0ZXN0U1BJLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MTdCNUY4NTI3NUU5N0I2MDAyREMyMkQgLyogQXBwQnVuZGxlUmVxdWVzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDc0ODc5QjkyMzczQTkwOTAwRjU2NzhFIC8qIEFwcEtpdFNvZnRMaW5rLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGNDhEMkE4NTIxNTgzQTdFMDBDNjc1MkIgLyogQXBwS2l0U1BJLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NTY1MDgzOTI2RDg3QTJCMDBFMTVDQjcgLyogQXBwbGVNZWRp
YVNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAqLywKQEAgLTEyOTQyLDYgKzEyOTc0LDcgQEAKIAkJ
CQk1N0RDRURBRTIxNEM2MDMzMDAxNkI4NDcgLyogTG9jYWxTZXJ2aWNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5M0IyNjE0RTIyN0QxNEIxMDBCOTdBNzYgLyogTG9jYWxTdG9yYWdlRGF0YWJhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzQjI2MTRGMjI3RDE0QjEwMEI5N0E3NiAvKiBMb2NhbFN0
b3JhZ2VEYXRhYmFzZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTc5OUNGMjc2MDQ5
N0IwMDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
NkJFQjZEQjIyRkI5RDQ4MDAyNjk4NjcgLyogTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MUE3RjJGMzEyNUJGODIwMDA4QUVCMUQgLyogTG9nZ2luZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZEQ0Q3RjcxRDQ3RTkyQTAwOUYwOEJDIC8qIExvZ0luaXRpYWxpemF0
aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTEyOTYwLDYgKzEyOTkzLDcgQEAKIAkJCQlBMTU3OTlC
RDI1ODQ0MzMyMDA1MjgyMzYgLyogTWVkaWFTYW1wbGVDdXJzb3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTA3NUE5Q0YzMjYxNjlCQUIwMDZERkEzQSAvKiBNZWRpYVNlc3Npb25Db29yZGluYXRvclBy
b3h5UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1Nzk5QjcyNTg0NDMzMjAwNTI4MjM2
IC8qIE1lZGlhVHJhY2tSZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTc5OURCMjc2MTIx
MDgwMDc0MDA4QSAvKiBNZW1vcnlTdG9yYWdlQXJlYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE5
MzNERUYxOTY1RUIzMTAwOEFDM0VBIC8qIE1lbnVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTlCNDc5MDhEMjUzMTREODMwMEVDMTFBQiAvKiBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzRDODI5MTZCODc2QTkwMDY5RENDRCAvKiBNZXNz
YWdlRmxhZ3MuaCBpbiBIZWFkZXJzICovLApAQCAtMTI5NzAsNiArMTMwMDQsOCBAQAogCQkJCTFB
M0VFRDBGMTYxQTUzNTQwMEFFQjRGNSAvKiBNZXNzYWdlUmVjZWl2ZXJNYXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBQUIwMzdBMTg1QTdDNkEwMEVERjUwMSAvKiBNZXNzYWdlU2VuZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMTNCM0RBMjIwN0YzOURFMDA5MEM1OEQgLyogTW9iaWxlV2lGaVNQ
SS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE3QjVGN0MyNzVFOTdCNjAwMkRDMjJEIC8qIE1vY2tB
cHBCdW5kbGVGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTdCNUY4MDI3NUU5N0I2
MDAyREMyMkQgLyogTW9ja0FwcEJ1bmRsZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1
N0RDRURDQjIxNEY0RTQyMDAxNkI4NDcgLyogTW9ja0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1N0RDRURDNzIxNEYxODMwMDAxNkI4NDcgLyogTW9ja0xvY2FsQ29u
bmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTdEQ0VEQzMyMTRGMTE0QzAwMTZCODQ3IC8q
IE1vY2tMb2NhbFNlcnZpY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTI5OTcsNyArMTMwMzMsNiBA
QAogCQkJCTgzMUVFQkJEMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2
ZUxvYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzMkFFMjUyMUJFMkU4Q0QwMEZBQUUxMCAvKiBO
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
NDQzNkVDRjFBMEQwNDBCMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNTE3QjVGN0MyNzVFOTdCNjAwMkRDMjJEIC8qIE1vY2tBcHBCdW5kbGVGb3JU
ZXN0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzEwNDI4QjFCRDZCNjZGMDBBNzE1RTQgLyog
TmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxM0Ex
NjREMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTFERDlGMjkxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTMwOTIsNiAr
MTMxMjcsOCBAQAogCQkJCTg2RTY3QTI1MTkxMEI5RDEwMDAwNEFCNyAvKiBQcm9jZXNzVGhyb3R0
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzA0OEFFNjFBQ0E0NURDMDA4MkM4MzIgLyogUHJv
Y2Vzc1Rocm90dGxlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyNzlFMTkyNjk1NTc2
ODAwNEIzRUVCIC8qIFByb3RvdHlwZVRvb2xzU1BJLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTdC
NUY4MTI3NUU5N0I2MDAyREMyMkQgLyogUHVzaEFwcEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTE3QjVGN0QyNzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hDbGllbnRDb25uZWN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMUU2ODg3MDFGNkUyQkFCMDA3MDA2QTYgLyogUXVhcmFudGluZVNQ
SS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwQzIyN0UyNDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNr
TG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUVFNTcyNTI0
MDlGMTQyMDAyMDA1RDYgLyogUXVpY2tMb29rVGh1bWJuYWlsTG9hZGVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTEzMTMyLDcgKzEzMTY5LDYgQEAKIAkJCQkwNzFCQzU5MTIzQ0UxRUFBMDA2ODBEN0Mg
LyogUmVtb3RlTWVkaWFQbGF5ZXJQcm94eU1lc3NhZ2VzUmVwbGllcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUQ0RDczNzEyM0E5RTU2MjAwNzE3QTI1IC8qIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5h
Z2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFENEQ3Mzc2MjNBOUVEMTgwMDcxN0Ey
NSAvKiBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlck1lc3NhZ2VzUmVwbGllcy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNTE3QjVGODUyNzVFOTdCNjAwMkRDMjJEIC8qIEFwcEJ1bmRsZVJlcXVlc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFERDJBNjg1MjU2MzNDNjcwMEZGN0I2RiAvKiBSZW1vdGVN
ZWRpYVNvdXJjZVByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFERDJBNjg4MjU2
MzNDOTUwMEZGN0I2RiAvKiBSZW1vdGVNZWRpYVNvdXJjZVByb3h5TWVzc2FnZXNSZXBsaWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMUI3ODQ3MTE2M0YyNDY5MDAwN0I2OTIgLyogUmVtb3RlTmV0
d29ya2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLApAQCAtMTMxNzcsNiArMTMyMTMsNyBAQAog
CQkJCTUxNEQ5RjU3MTkxMTlEMzUwMDAwNjNBNyAvKiBTZXJ2aWNlc0NvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBRkRFNjVBMTk1NEE0MkIwMEM0OEZGQSAvKiBTZXNzaW9uU3RhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBMDAyRDQ5MTk2QjM0NUQwMEI5QUQ0NCAvKiBTZXNzaW9u
U3RhdGVDb2RpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTc5OUNFMjc2MDQ5N0IwMDc0MDA4
QSAvKiBTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2QkVCNkRG
MjJGQkIxNkIwMDI2OTg2NyAvKiBTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUE2NDIwRTUxMkRDRTJGRjAwQ0FBRTJDIC8qIFNoYXJlYWJsZUJpdG1hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRjQzQTlDRTAyNUQ3MkYxQzAwOTkwRTI2IC8qIFNoYXJlYWJsZUJp
dG1hcFV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzIwNSwxMSArMTMyNDIsMTQgQEAK
IAkJCQk5M0Q2Qjc3MjI1NEJCNTE5MDA1OEREM0EgLyogU3BlZWNoUmVjb2duaXRpb25TZXJ2ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzRDZCNzg0MjU0Q0NEMEUwMDU4REQzQSAvKiBTcGVlY2hS
ZWNvZ25pdGlvblNlcnZlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Q2Qjc4NTI1
NENDRDQzMDA1OEREM0EgLyogU3BlZWNoUmVjb2duaXRpb25TZXJ2ZXJNZXNzYWdlc1JlcGxpZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTc5OURBMjc2MTIxMDgwMDc0MDA4QSAvKiBTUUxpdGVT
dG9yYWdlQXJlYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EzRkVDQTIyMUY3QzA5NzAwRjI2N0NE
IC8qIFN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2QkVCNkQ3MjJG
QjlCRDcwMDI2OTg2NyAvKiBTdG9yYWdlQXJlYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNzk5
REMyNzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFEMzMwNkYxNkIxRDk5MTAwNEY2MEU3IC8qIFN0b3JhZ2VBcmVhSW1wbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUFDRUNEMjUxNzE2MkRCMTAwMUZDOUVGIC8qIFN0b3JhZ2VBcmVhTWFwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTMzNERFRTE2REU4Rjg4MDA2QThFMzggLyogU3RvcmFnZUFy
ZWFNYXBNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNzk5QzcyNzYwMjc0NjAwNzQw
MDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQjI2MTRE
MjI3RDE0OUUwMEI5N0E3NiAvKiBTdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTM2QjA1OTgyMzAzOTA5NzAwMkZDMDZCIC8qIFN0b3JhZ2VNYW5hZ2VyU2V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzY4RUVERjIzMDNBOUVEMDBCREIxMUEgLyogU3RvcmFnZU1hbmFnZXJTZXRN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzIyNSw3ICsxMzI2NSw2IEBACiAJCQkJNTdG
RDMxODYyMkIzNTE2QzAwOEQwRThCIC8qIFN1YkZyYW1lU09BdXRob3JpemF0aW9uU2Vzc2lvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDQ4QUMyNEUyNjcxMzVBNzAwQjI4OTIxIC8qIFN5bmFwc2VT
UEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0NTk5ODQyMjI4MzNFODcwMEU2MTM3MyAvKiBTeW50
aGV0aWNFZGl0aW5nQ29tbWFuZFR5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxN0I1RjdEMjc1
RTk3QjYwMDJEQzIyRCAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzE1NzEzNUYyMDQwQTlCMjAwODRGOUNGIC8qIFN5c3RlbVByZXZpZXdDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwNzlEMUQ5QTI2OTYwQ0QzMDA4ODM1NzcgLyogU3lzdGVtU3Rh
dHVzU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNEQ5ODVDQjI2OTEwOTY2MDBCQkNDQkUgLyog
VGFwSGFuZGxpbmdSZXN1bHQuaCBpbiBIZWFkZXJzICovLApAQCAtMTMyNTAsNyArMTMyODksNiBA
QAogCQkJCTFBNjQyNDVFMTJERTI5QTEwMENBQUUyQyAvKiBVcGRhdGVJbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1QzE5QTUyMDFGRDBCMjk1MDBFRUEzMjMgLyogVVJMU2NoZW1lVGFza1BhcmFt
ZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzEzMzY4MTg1NjVCNTcwMEYzRUMwNSAvKiBV
c2VyRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE3QjVGODAyNzVFOTdCNjAwMkRDMjJEIC8q
IE1vY2tBcHBCdW5kbGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q0OTFCMDgxRTcw
RDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDRDQ5MUIwRTFFNzMyRTREMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q0OTFCMTMxRTczNDgyMTAwMDA5MDY2IC8q
IFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtMTM0NzYs
OSArMTM1MTQsMTEgQEAKIAkJCQlCQ0UwRTQyNTE2OEI3QTI4MDA1N0U2NkEgLyogV2ViUHJvY2Vz
c1N1cHBsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMUUwOTM0MTg4NjFEMzgwMEQyREM0
OSAvKiBXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkY1
ODlEMTJBODgzODgwMDYyOTUzMCAvKiBXZWJQcm90ZWN0aW9uU3BhY2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTUxN0I1RjdGMjc1RTk3QjYwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTJDRDY5ODI3MjFFRkM4MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNv
bm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0I1RjJFMjc1NzM4MkEwMDJEQzIyRCAv
KiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxMkNENjlBMjcyMUYwQTkwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1MTdCNUY3MzI3NUU5NjA5MDAyREMyMkQgLyogV2ViUHVzaERh
ZW1vbk1haW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2MUNDQ0E2MjMxNDg1QUEwMEI2NTlCOSAv
KiBXZWJSZW1vdGVPYmplY3RSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NjBFNzEy
MzBGNjdGQzAwNDYxQUFFIC8qIFdlYlJlc291cmNlSW50ZXJjZXB0Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTEwQUZGQkExNjU0MjA0ODAwMUJBMDVFIC8qIFdlYlJlc291cmNlTG9h
ZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTEzNzI4LDcgKzEzNzY4LDYgQEAKIAkJCQlBMTU3OUIy
ODI1ODQ5MEU1MDA1MjgyMzYgLyogV0tNZWRpYUZvcm1hdFJlYWRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOUFDQzA3QjkyNUM4MjE4NDAwREM2Mzg2IC8qIFdLTWVkaWFLZXlTeXN0ZW1QZXJtaXNz
aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQwRUU2MUJGNjc3RTMwMEJBODFC
RSAvKiBXS01lbnVJdGVtSWRlbnRpZmllcnNQcml2YXRlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1
MTdCNUY4MTI3NUU5N0I2MDAyREMyMkQgLyogUHVzaEFwcEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUNBQkRDODYyMkM0MEZERTAwMUVERThFIC8qIFdLTWVzc2FnZUxpc3RlbmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDMTFFMTY5NDIxMkI4N0M1MDA5ODVGRjYgLyogV0tNb2NrRGlzcGxh
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDExQThEREIyMERERDFBQzAwNjBEMzRGIC8qIFdLTW9j
a01lZGlhRGV2aWNlLmggaW4gSGVhZGVycyAqLywKQEAgLTEzNzk0LDcgKzEzODMzLDYgQEAKIAkJ
CQlCQzJEMDIxOTEyQUM0MjZDMDBFNzMyQTMgLyogV0tQYWdlTG9hZFR5cGVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5M0JERUIwMTE3MUREN0FGMDBCRkVFMUIgLyogV0tQYWdlTG9hZFR5cGVzUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ3MzAzNzkxQTdDMkI3NTAwRjhGNDg3IC8qIFdL
UGFnZU5hdmlnYXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxN0I1RjczMjc1RTk2
MDkwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uTWFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFC
OEExRUUxODQwMEFDQjAwRTlBRTY5IC8qIFdLUGFnZVBvbGljeUNsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzczQ0VBRDgxODU5NTUzRjAwOEMzNjNEIC8qIFdLUGFnZVBvbGljeUNsaWVudElu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE3NzQ2NTExOEI5RkY0MDA3RDlFOUEgLyog
V0tQYWdlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTA5OCw4ICsxNTEzNiw4IEBACiAJ
CQkJNTFGN0JCN0QyNzQ1NjQwNDAwQzQ1QTcyIC8qIENvZGVTaWduaW5nLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUMxNTc5RkYyNzE3QjZEMjAwRUQ1MjgwIC8qIERhZW1vbkRlY29kZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUMxNTc5RkUyNzE3QjZDMTAwRUQ1MjgwIC8qIERhZW1vbkVuY29k
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3QjVGNzgyNzVFOTc5NTAwMkRDMjJEIC8qIHdl
YnB1c2hkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMTU3OUZCMjcxN0FGNTAwMEVENTI4MCAv
KiBEYWVtb25VdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTdCNUY3ODI3NUU5Nzk1
MDAyREMyMkQgLyogd2VicHVzaGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNTE0Myw2ICsxNTE4
MSw3IEBACiAJCQkJOTlFNzE4OUEyMUY3OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5l
cmF0b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDkyQTc4NDIxMkI2QUIxMDBGNDkzRkQgLyog
QWN0aXZpdHlBc3NlcnRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTcyRUJCREEyNTM4RjZC
NDAwMDU1MkIzIC8qIEFwcEF0dGVzdEludGVybmFsU29mdExpbmsubW0gaW4gU291cmNlcyAqLywK
KwkJCQk1MTdCNUY3RTI3NUU5N0I2MDAyREMyMkQgLyogQXBwQnVuZGxlUmVxdWVzdC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTJEOTJBNzdCMjEyQjZBNzEwMEY0OTNGRCAvKiBBcmd1bWVudENvZGVy
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREVCMUQyRTIxMjc0NzM2MDA5MzM5MDYgLyogQXJn
dW1lbnRDb2RlcnNDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkyQTc3QzIxMkI2QTcxMDBG
NDkzRkQgLyogQXR0YWNobWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE1MTUwLDcgKzE1MTg5
LDYgQEAKIAkJCQlDRDQ1NzBEMzI0NDExM0I1MDBBM0RDRUIgLyogQXVkaW9TZXNzaW9uUm91dGlu
Z0FyYml0cmF0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MTJGNThBMjEyQTg4M0FEMDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU3RkFCQjEzMjU4MTgyN0MwMDU5REM5NSAv
KiBBdXRoZW50aWNhdGlvblNlcnZpY2VzQ29yZVNvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCi0J
CQkJNTE3QjVGN0UyNzVFOTdCNjAwMkRDMjJEIC8qIEFwcEJ1bmRsZVJlcXVlc3QubW0gaW4gU291
cmNlcyAqLywKIAkJCQk5OTU1QTZGNDFDNzk4NkRDMDBFQjZBOTMgLyogQXV0b21hdGlvbkJhY2tl
bmREaXNwYXRjaGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTI0OUFENTFGMUYxRTU2MDBC
NjJGQkIgLyogQXV0b21hdGlvbkZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTk1NUE2RjYxQzc5ODZFMzAwRUI2QTkzIC8qIEF1dG9tYXRpb25Qcm90b2NvbE9iamVj
dHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNTE4OSw2ICsxNTIyNyw4IEBACiAJCQkJN0I0ODNG
MjEyNUNEREE5QzAwMTIwNDg2IC8qIE1lc3NhZ2VSZWNlaXZlUXVldWVNYXAuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkQ5MkE3ODEyMTJCNkE3MTAwRjQ5M0ZEIC8qIE1lc3NhZ2VSZWNlaXZlck1h
cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkyQTc4MjIxMkI2QTcxMDBGNDkzRkQgLyogTWVz
c2FnZVNlbmRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTdCNUY4NDI3NUU5N0I2MDAyREMy
MkQgLyogTW9ja0FwcEJ1bmRsZUZvclRlc3RpbmcubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTdC
NUY4NjI3NUU5N0I2MDAyREMyMkQgLyogTW9ja0FwcEJ1bmRsZVJlZ2lzdHJ5Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkQ5MkE3N0EyMTJCNkE2MTAwRjQ5M0ZEIC8qIE1vZHVsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1N0I4MjY0NTIzMDRGMTQwMDBCNzJFQjAgLyogTmVhckZpZWxkU29mdExp
bmsubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMUMxQjMwRjI1NDBGNTBEMDBEOTEwMEIgLyogTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTE1MjEz
LDYgKzE1MjUzLDggQEAKIAkJCQkyRDkxMzQ0RDIxMkNGOUYwMDAxMjhBRkQgLyogUGx1Z2luVmll
dy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMTVDQkIzNzIzRjM3RUNCMDAzMDBDQzcgLyogUHJl
ZmVyZW5jZU9ic2VydmVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ1NEMzMUIyMTJGNERBNjAw
NDlDMTc0IC8qIFByb2Nlc3NMYXVuY2hlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTdCNUY4
MjI3NUU5N0I2MDAyREMyMkQgLyogUHVzaEFwcEJ1bmRsZS5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTUxN0I1RjdCMjc1RTk3QTkwMDJEQzIyRCAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTFBMEMyMjdGMjQ1MTEzMEEwMEVENjE0RCAvKiBRdWlja0xvb2tUaHVt
Ym5haWxpbmdTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMEMyMjVFMjQzNTc1Q0Qw
MEVENjE0RCAvKiBRdWlja0xvb2tUaHVtYm5haWxMb2FkZXIubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk5QjEyMjlDRTIzRkYyNUYyMDA4Q0E3NTEgLyogUmVtb3RlQXVkaW9EZXN0aW5hdGlvbk1hbmFn
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNTIzMiw3ICsxNTI3NCw2IEBACiAJCQkJQ0RFNTU1
MzUyNDA2RUI4QzAwOEEzRERCIC8qIFJlbW90ZUxlZ2FjeUNETVNlc3Npb25Qcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDNFRUY0NjI1NzlDMjYxMDA2NTYzQkIg
LyogUmVtb3RlTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeVByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3OTIzMTRCMjM5Q0JDQjgwMDk1OThFMiAvKiBS
ZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk1MTdCNUY3QTI3NUU5N0E0MDAyREMyMkQgLyogV2ViUHVzaERhZW1vbi5tbSBp
biBTb3VyY2VzICovLAogCQkJCTA3MDE3ODlFMjNCRTlDRkMwMDVGMEZBQSAvKiBSZW1vdGVNZWRp
YVBsYXllck1JTUVUeXBlQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcxQkM1OEYyM0NF
MUVBQTAwNjgwRDdDIC8qIFJlbW90ZU1lZGlhUGxheWVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUQ0RDczNzAyM0E5RTU0NzAwNzE3QTI1IC8qIFJlbW90ZU1l
ZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MTUyNzMsOCArMTUzMTQsNiBAQAogCQkJCTJEMTFCNzU1MjEyNkEyODIwMDZGODg3OCAvKiBVbmlm
aWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEMTFCNzU2MjEyNkEyODIwMDZG
ODg3OCAvKiBVbmlmaWVkU291cmNlMy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDExQjc1NzIx
MjZBMjgyMDA2Rjg4NzggLyogVW5pZmllZFNvdXJjZTQtbW0ubW0gaW4gU291cmNlcyAqLywKLQkJ
CQk1MTdCNUY4NDI3NUU5N0I2MDAyREMyMkQgLyogTW9ja0FwcEJ1bmRsZUZvclRlc3RpbmcubW0g
aW4gU291cmNlcyAqLywKLQkJCQk1MTdCNUY4NjI3NUU5N0I2MDAyREMyMkQgLyogTW9ja0FwcEJ1
bmRsZVJlZ2lzdHJ5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQxMUI3NTgyMTI2QTI4MjAwNkY4
ODc4IC8qIFVuaWZpZWRTb3VyY2U0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEMTFCNzU5MjEy
NkEyODIwMDZGODg3OCAvKiBVbmlmaWVkU291cmNlNS1tbS5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTJEMTFCNzVBMjEyNkEyODIwMDZGODg3OCAvKiBVbmlmaWVkU291cmNlNS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTE1MzU3LDcgKzE1Mzk2LDYgQEAKIAkJCQkyRDExQjdBNzIxMjZBMjgzMDA2Rjg4
NzggLyogVW5pZmllZFNvdXJjZTQ0LW1tLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQxMUI3QTgy
MTI2QTI4MzAwNkY4ODc4IC8qIFVuaWZpZWRTb3VyY2U0NC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkyRDExQjdBOTIxMjZBMjgzMDA2Rjg4NzggLyogVW5pZmllZFNvdXJjZTQ1LW1tLm1tIGluIFNv
dXJjZXMgKi8sCi0JCQkJNTE3QjVGODIyNzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hBcHBCdW5kbGUu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDExQjdBQTIxMjZBMjgzMDA2Rjg4NzggLyogVW5pZmll
ZFNvdXJjZTQ1LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEMTFCN0FCMjEyNkEyODMwMDZGODg3
OCAvKiBVbmlmaWVkU291cmNlNDYtbW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDExQjdBQzIx
MjZBMjgzMDA2Rjg4NzggLyogVW5pZmllZFNvdXJjZTQ2LmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MTUzODgsNyArMTU0MjYsNiBAQAogCQkJCTJEMTFCN0M1MjEyNkEyODMwMDZGODg3OCAvKiBVbmlm
aWVkU291cmNlNTktbW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDExQjdDNjIxMjZBMjgzMDA2
Rjg4NzggLyogVW5pZmllZFNvdXJjZTU5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEMTFCN0M3
MjEyNkEyODMwMDZGODg3OCAvKiBVbmlmaWVkU291cmNlNjAtbW0ubW0gaW4gU291cmNlcyAqLywK
LQkJCQk1MTdCNUY3OTI3NUU5N0ExMDAyREMyMkQgLyogV2ViUHVzaERhZW1vbk1haW4ubW0gaW4g
U291cmNlcyAqLywKIAkJCQkyRDExQjdDODIxMjZBMjgzMDA2Rjg4NzggLyogVW5pZmllZFNvdXJj
ZTYwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJENTRDMzFBMjEyRjNCMzMwMDQ5QzE3NCAvKiBV
bmlmaWVkU291cmNlNjEtbW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDExQjdDQTIxMjZBMjgz
MDA2Rjg4NzggLyogVW5pZmllZFNvdXJjZTYxLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTUzOTYs
NyArMTU0MzMsNiBAQAogCQkJCTJEMTFCN0NCMjEyNkEyODMwMDZGODg3OCAvKiBVbmlmaWVkU291
cmNlNjIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ1NEMzMDgyMTJGM0IzMzAwNDlDMTc0IC8q
IFVuaWZpZWRTb3VyY2U2My1tbS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEMTFCN0NDMjEyNkEy
ODMwMDZGODg3OCAvKiBVbmlmaWVkU291cmNlNjMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3
QjVGN0IyNzVFOTdBOTAwMkRDMjJEIC8qIFB1c2hDbGllbnRDb25uZWN0aW9uLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkQ1NEMzMEMyMTJGM0IzMzAwNDlDMTc0IC8qIFVuaWZpZWRTb3VyY2U2NC1t
bS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEMTFCN0NEMjEyNkEyODMwMDZGODg3OCAvKiBVbmlm
aWVkU291cmNlNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ1NEMzMDcyMTJGM0IzMzAwNDlD
MTc0IC8qIFVuaWZpZWRTb3VyY2U2NS1tbS5tbSBpbiBTb3VyY2VzICovLApAQCAtMTU0NjIsNiAr
MTU0OTgsNyBAQAogCQkJCTFDQUVDQjY1Mjc0NjVBRTQwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNl
MTA5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDQUVDQjY4Mjc0NjVBRTQwMEFCNzhEMCAvKiBV
bmlmaWVkU291cmNlMTEwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDQUVDQjY2Mjc0NjVBRTQw
MEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTExLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzRTc5
OUQyMjc2MEFBNUIwMDc0MDA4QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUzOEExRkMwMjNBNTUxQkYwMEQyMzc0RiAvKiBVc2VySW50ZXJmYWNlSWRpb20ubW0g
aW4gU291cmNlcyAqLywKIAkJCQlDRDQ5MUIwRDFFNzMyRTREMDAwMDkwNjYgLyogVXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q0
OTFCMTcxRTczNTI1NTAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNTUzMSw2ICsxNTU2OCw4IEBACiAJ
CQkJQkMzMDY2QkUxMjVBNDQyMTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NFNEQyMjcxQTQ5MTZDMjAwQzdGMTUyIC8qIFdlYlBy
b2Nlc3NQb29sTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUU3QUQw
MTI4MTc5ODgwMDk4MjdEQSAvKiBXZWJQcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTE3QjVGN0EyNzVFOTdBNDAwMkRDMjJEIC8qIFdlYlB1c2hEYWVt
b24ubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTdCNUY3OTI3NUU5N0ExMDAyREMyMkQgLyogV2Vi
UHVzaERhZW1vbk1haW4ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUYwNjBFMTE2NTQzMTg1MDBG
MzI4MUIgLyogV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODFGIC8qIFdlYlJUQ01vbml0b3JNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODJD
IC8qIFdlYlJUQ1Jlc29sdmVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFN
YXAuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFN
YXAuY3BwCmluZGV4IDBmYTZhYzE4ZmQ5NDcwNTkwY2YxMDdkNmE0NDA2NmQ5MmQ5YTQzNmQuLjJj
ZjdhNmQ0YjYwMDVjMWQ3ZWMyNTZiZDYzODg3NjI5NGU5ZTRjZjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZU1hbmFnZXJNZXNz
YWdlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VB
cmVhTWFwTWVzc2FnZXMuaCIKICNpbmNsdWRlICJTdG9yYWdlTWFuYWdlclNldE1lc3NhZ2VzLmgi
CkBAIC05NSw3ICs5Niw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OnNldEl0ZW0oRnJhbWUqIHNv
dXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUFyZWEsIGNvCiAgICAgbV9wZW5kaW5n
VmFsdWVDaGFuZ2VzLmFkZChrZXkpOwogCiAgICAgaWYgKG1fbWFwSUQpCi0gICAgICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6U2V0SXRlbSgqbV9tYXBJ
RCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHZhbHVlLCBz
b3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKKyAgICAgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29u
bmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6U2V0SXRlbSgq
bV9tYXBJRCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHZh
bHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKICAgICBl
bHNlCiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTdG9yYWdlQXJlYU1hcDo6
c2V0SXRlbSBmYWlsZWQgYmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CiB9CkBA
IC0xMTQsNyArMTE1LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbShXZWJDb3Jl
OjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc28KICAgICBtX3BlbmRpbmdW
YWx1ZUNoYW5nZXMuYWRkKGtleSk7CiAKICAgICBpZiAobV9tYXBJRCkKLSAgICAgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVj
dGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpSZW1vdmVJdGVtKCptX21h
cElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIGtleSwgc291cmNl
RnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgMCk7CisgICAgICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rp
b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OlJlbW92ZUl0ZW0oKm1f
bWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwga2V5LCBzb3Vy
Y2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKICAgICBlbHNlCiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRl
bSBmYWlsZWQgYmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CiB9CkBAIC0xMjks
NyArMTMwLDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6Y2xlYXIoV2ViQ29yZTo6RnJhbWUqIHNv
dXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUEKICAgICBtX21hcCA9IG1ha2VVbmlx
dWU8U3RvcmFnZU1hcD4obV9xdW90YUluQnl0ZXMpOwogCiAgICAgaWYgKG1fbWFwSUQpCi0gICAg
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q2xlYXIo
Km1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwgc291cmNl
RnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgMCk7CisgICAgICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rp
b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNsZWFyKCptX21hcElE
LCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIHNvdXJjZUZyYW1lLT5k
b2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOwogICAgIGVsc2UKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVhTWFwOjpjbGVhciBmYWlsZWQgYmVjYXVz
ZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CiB9CkBAIC0xNjAsNyArMTYxLDcgQEAgU3Rv
cmFnZU1hcCYgU3RvcmFnZUFyZWFNYXA6OmVuc3VyZU1hcCgpCiAgICAgICAgICAgICAvLyBmcm9t
IG91ciBTdG9yYWdlTWFuYWdlclNldDo6R2V0VmFsdWVzKCkgSVBDLiBUaGlzIElQQyBtYXkgYmUg
dmVyeSBzbG93IGJlY2F1c2UgaXQgbWF5IG5lZWQgdG8gZmV0Y2ggdGhlIHZhbHVlcyBmcm9tIGRp
c2sgYW5kIHRoZXJlIG1heSBiZSBhIGxvdCBvZiBkYXRhLgogICAgICAgICAgICAgSVBDOjpVbmJv
dW5kZWRTeW5jaHJvbm91c0lQQ1Njb3BlIHVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGU7CiAg
ICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YWx1ZXM7Ci0gICAgICAgICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5j
b25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpHZXRWYWx1
ZXMoKm1fbWFwSUQpLCBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkdldFZhbHVlczo6UmVw
bHkodmFsdWVzKSwgMCk7CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1
cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2Fn
ZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6R2V0VmFsdWVzKCptX21hcElEKSwgTWVzc2FnZXM6
OlN0b3JhZ2VNYW5hZ2VyU2V0OjpHZXRWYWx1ZXM6OlJlcGx5KHZhbHVlcyksIDApOwogICAgICAg
ICAgICAgbV9tYXAtPmltcG9ydEl0ZW1zKFdURk1vdmUodmFsdWVzKSk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVhTWFw
OjplbnN1cmVNYXAgZmFpbGVkIHRvIGxvYWQgZnJvbSBuZXR3b3JrIHByb2Nlc3MgYmVjYXVzZSBz
dG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CkBAIC0zNDgsMjAgKzM0OSwyMyBAQCB2b2lkIFN0
b3JhZ2VBcmVhTWFwOjpjb25uZWN0KCkKICAgICBpZiAobV9tYXBJRCkKICAgICAgICAgcmV0dXJu
OwogCisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVyIG1hcElEOwogICAgIHN3aXRjaCAobV90eXBl
KSB7CiAgICAgY2FzZSBTdG9yYWdlVHlwZTo6TG9jYWw6CiAgICAgY2FzZSBTdG9yYWdlVHlwZTo6
VHJhbnNpZW50TG9jYWw6CiAgICAgICAgIGlmIChTZWN1cml0eU9yaWdpbiogdG9wTGV2ZWxPcmln
aW4gPSBtX25hbWVzcGFjZS50b3BMZXZlbE9yaWdpbigpKQotICAgICAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlv
bigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRvVHJhbnNp
ZW50TG9jYWxTdG9yYWdlQXJlYShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9uSUQoKSwg
bV9uYW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCksIHRvcExldmVsT3JpZ2luLT5kYXRhKCks
IG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6
Q29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYTo6UmVwbHkobV9tYXBJRCksIDApOwor
ICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OkNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEobV9uYW1lc3BhY2Uu
c3RvcmFnZU5hbWVzcGFjZUlEKCksIHRvcExldmVsT3JpZ2luLT5kYXRhKCksIG1fc2VjdXJpdHlP
cmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5lY3RU
b1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWE6OlJlcGx5KG1hcElEKSwgMCk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFnZU1h
bmFnZXJTZXQ6OkNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuc2Vzc2lvbklEKCksIG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3Vy
aXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RU
b0xvY2FsU3RvcmFnZUFyZWE6OlJlcGx5KG1fbWFwSUQpLCAwKTsKKyAgICAgICAgICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25uZWN0
VG9Mb2NhbFN0b3JhZ2VBcmVhKG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3Nl
Y3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpD
b25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhOjpSZXBseShtYXBJRCksIDApOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpTZXNzaW9uOgotICAgICAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCku
c2VuZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9TZXNzaW9uU3Rv
cmFnZUFyZWEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2Vzc2lvbklEKCksIG1fbmFtZXNwYWNl
LnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdl
czo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYTo6UmVwbHko
bV9tYXBJRCksIDApOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6Q29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKG1fbmFtZXNw
YWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNz
YWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWE6
OlJlcGx5KG1hcElEKSwgMCk7CiAgICAgfQogCi0gICAgaWYgKG1fbWFwSUQpCisgICAgaWYgKG1h
cElELmlzVmFsaWQoKSkgeworICAgICAgICBtX21hcElEID0gbWFwSUQ7CiAgICAgICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyU3RvcmFnZUFyZWFNYXAoKnRoaXMpOworICAgIH0K
IH0KIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlzY29ubmVjdCgpCkBAIC0zNzMsNyArMzc3LDcg
QEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlzY29ubmVjdCgpCiAgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkudW5yZWdpc3RlclN0b3JhZ2VBcmVhTWFwKCp0aGlzKTsKIAogICAgIGlmIChhdXRv
KiBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5leGlz
dGluZ05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6
RGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYSgqbV9tYXBJRCksIDApOworICAgICAgICBuZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OkRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoKm1fbWFwSUQpLCAwKTsKIAog
ICAgIG1fbWFwSUQgPSB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKaW5kZXggZjg0ZDAy
ZmM2ZjdlM2JiMWUzMTQzM2M1ZjAwZTYxZTBmZGViZjkzMi4uZGViNmEzNDMzY2FiYWZhZjdkY2Fh
NTYwY2RjM2ExNWUzYWNhN2U3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcApAQCAtMjcsOSAr
MjcsOSBAQAogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgiCiAKICNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZU1hbmFn
ZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhTWFwLmgiCi0jaW5jbHVkZSAiU3RvcmFnZU1hbmFnZXJTZXRNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXBQcm94eS5oIgogI2lu
Y2x1ZGUgIldlYlByb2Nlc3MuaCIKQEAgLTExNCw3ICsxMTQsNyBAQCBSZWY8U3RvcmFnZU5hbWVz
cGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkoUGFnZSYgbmV3UGFnZSkKICAgICBBU1NF
UlQobV9zdG9yYWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6U2Vzc2lvbik7CiAKICAgICBpZiAoYXV0
byBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5leGlz
dGluZ05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6
Q2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShzZXNzaW9uSUQoKSwgbV9zdG9yYWdlTmFtZXNw
YWNlSUQsIFdlYlBhZ2U6OmZyb21Db3JlUGFnZShuZXdQYWdlKS5zZXNzaW9uU3RvcmFnZU5hbWVz
cGFjZUlkZW50aWZpZXIoKSksIDApOworICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24t
PmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNsb25l
U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UobV9zdG9yYWdlTmFtZXNwYWNlSUQsIFdlYlBhZ2U6OmZy
b21Db3JlUGFnZShuZXdQYWdlKS5zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIoKSks
IDApOwogCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFnZU5hbWVzcGFjZUltcGwobV9z
dG9yYWdlVHlwZSwgV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKG5ld1BhZ2UpLnNlc3Npb25TdG9yYWdl
TmFtZXNwYWNlSWRlbnRpZmllcigpLCBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UobmV3UGFnZSkuaWRl
bnRpZmllcigpLCBtX3RvcExldmVsT3JpZ2luLmdldCgpLCBtX3F1b3RhSW5CeXRlcykpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446567</attachid>
            <date>2021-12-09 10:45:16 -0800</date>
            <delta_ts>2021-12-09 11:48:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234087-20211209104514.patch</filename>
            <type>text/plain</type>
            <size>157379</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2Nzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWFkMzkxZDExMjlkNTEz
MzdhNTVjYWFjNTVjYzYwODgzOTM1YzcwMi4uZjBhZWY0ZmMwMzRmODIzNTA5ZTQ5ZDE0ODZhOWYy
YzYyNzViZDgxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTEyLTA5ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIFN0b3JhZ2VNYW5h
Z2VyIHdpdGggTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIHRvIG1hbmFnZSBXZWJTdG9yYWdlIGJ5IG9y
aWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVGaWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlRmlsZVN5c3RlbS5oOgorCiAyMDIxLTEyLTA5ICBBbGFuIEJ1anRhcyAgPHphbGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIEFkZCBzdXBwb3J0IGZvciBlbXB0eSBiaWRp
IGlubGluZSBib3hlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmZDYwMjI3N2FhY2IxMmJmNDc1ZDU3MzgxMWY4NDVj
MDY4NWJmYTBlLi5iMzRkZTBkOGVkZGY0MjcxYzUxMWE2NTcxOTdhZjkxZWE4NzI4OGEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIwMiBAQAorMjAyMS0xMi0wOSAgU2lodWkgTGl1ICA8c2lodWlfbGl1
QGFwcGxlLmNvbT4KKworICAgICAgICBNZXJnZSBTdG9yYWdlTWFuYWdlciB3aXRoIE5ldHdvcmtT
dG9yYWdlTWFuYWdlciB0byBtYW5hZ2UgV2ViU3RvcmFnZSBieSBvcmlnaW4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDA4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIG5ldHdvcmsgcHJvY2Vzcywg
V2ViU3RvcmFnZSBkYXRhIGlzIG1hbmFnZWQgYnkgV2ViS2l0OjpTdG9yYWdlTWFuYWdlciBjbGFz
cy4gRWFjaCBTdG9yYWdlTWFuYWdlciBvd25zIG9uZSBvcgorICAgICAgICBtYW55IFN0b3JhZ2VO
YW1lU3BhY2VzLCBhbmQgZWFjaCBTdG9yYWdlTmFtZXNwYWNlcyBvd25zIG9uZSBvciBtb3JlIFN0
b3JhZ2VBcmVhcy4gRWFjaCBTdG9yYWdlQXJlYSBjb3JyZXBvbmRzCisgICAgICAgIHRvIG9uZSBz
dG9yYWdlIG1hcCAob25lIGxvY2FsU3RvcmFnZSBvciBzZXNzaW9uU3RvcmFnZSBvYmplY3QpLCBh
bmQgaGFzIHR3byB0eXBlcyBvZiBiYWNrZW5kOiBhIFNRTGl0ZSBkYXRhYmFzZSwKKyAgICAgICAg
b3IgYSBpbi1tZW1vcnkgaGFzaCBtYXAuIE5vdyB0aGF0IHdlIGhhdmUgTmV0d29ya1N0b3JhZ2VN
YW5hZ2VyLCB3aGljaCBtYW5hZ2VzIHN0b3JhZ2UgYnkgb3JpZ2luLiBXZSBjYW4gbWVyZ2UKKyAg
ICAgICAgU3RvcmFnZU1hbmFnZXIgd2l0aCBOZXR3b3JrU3RvcmFnZU1hbmFnZXIsIGJlY2F1c2Ug
bG9jYWxTdG9yYWdlIGFuZCBzZXNzaW9uU3RvcmFnZSBhcmUgbm90IHNoYXJlZCBiZXR3ZWVuIAor
ICAgICAgICBkaWZmZXJlbnQgb3JpZ2lucy4KKworICAgICAgICBUaGUgbmV3IHN0cnVjdHVyZSBp
czoKKyAgICAgICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIChtYW5hZ2Ugc3RvcmFnZSBmb3IgYSBz
ZXNzaW9uLCBvd25zIG9uZSBvciBtb3JlIE9yaWdpblN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICBP
cmlnaW5TdG9yYWdlTWFuYWdlciAobWFuYWdlIHN0b3JhZ2UgZm9yIGFuIG9yaWdpbiwgb3ducyBv
bmUgTG9jYWxTdG9yYWdlTWFuYWdlciBhbmQgb25lIFNlc3Npb25TdG9yYWdlTWFuYWdlcikKKyAg
ICAgICAgTG9jYWxTdG9yYWdlTWFuYWdlciAvIFNlc3Npb25TdG9yYWdlTWFuYWdlciAobWFuYWdl
IExvY2FsU3RvcmFnZSBhbmQgU2Vzc2lvblN0b3JhZ2UsIG93bnMgb25lIG9yIG1vcmUgCisgICAg
ICAgIFN0b3JhZ2VBcmVhQmFzZXMpCisgICAgICAgIE1lbW9yeVN0b3JhZ2VBcmVhIC8gU1FMaXRl
U3RvcmFnZUFyZWEgKGluaGVyaXRzIFN0b3JhZ2VBcmVhQmFzZXM7IG1hbmFnZSBvbmUgbG9jYWwg
b3Igc2Vzc2lvbiBzdG9yYWdlLCBsaWtlIAorICAgICAgICBXZWJraXQ6OlN0b3JhZ2VBcmVhKQor
CisgICAgICAgIFN0b3JhZ2VOYW1lc3BhY2UgbGF5ZXIgaXMgcmVtb3ZlZC4gRm9yIFNlc3Npb25T
dG9yYWdlLCBkaWZmZXJlbnQgU3RvcmFnZU5hbWVzcGFjZXMgbWVhbnMgZGlmZmVyZW50IHdlYiBw
YWdlcywgCisgICAgICAgIGFuZCBzYW1lIG9yaWdpbiBjYW4gaGF2ZSBkaWZmZXJlbnQgc2Vzc2lv
blN0b3JhZ2VzIG9uIGRpZmZlcmVudCBwYWdlcywgc28gd2Uga2VlcCBhIFN0b3JhZ2VOYW1lc3Bh
Y2UgPD0+CisgICAgICAgIFN0b3JhZ2VBcmVhIG1hcCBpbiBTZXNzaW9uU3RvcmFnZU1hbmFnZXIu
IEZvciBMb2NhbFN0b3JhZ2UsIGRpZmZlcm50IFN0b3JhZ2VOYW1lc3BhY2VzIG1lYW5zIGRpZmZl
cmVudCBwYWdlIAorICAgICAgICBncm91cHMuIE91ciBvcmlnaW5hbCBwbGFuIHdhcyB0aGUgc2Ft
ZSBvcmlnaW4gY2FuIGhhdmUgZGlmZmVyZW50IGxvY2FsU3RvcmFnZXMgaW4gZGlmZmVyZW50IHBh
Z2UgZ3JvdXBzLCBidXQgb3VyCisgICAgICAgIG9sZCBpbXBsZW1lbnRhdGlvbiBhY3R1YWxseSBt
YWRlIGFsbCBwYWdlIGdyb3VwcyBwb2ludCB0byB0aGUgc2FtZSBkYXRhYmFzZSBmaWxlLiBUbyBr
ZWVwIGV4aXN0aW5nIGJlaGF2aW9yIAorICAgICAgICAodGhhdCBhbGwgcGFnZSBncm91cHMgd2l0
aCBzYW1lIG9yaWdpbiBzaGFyZSB0aGUgc3RvcmFnZSksIHdlIG5vdyBrZWVwIG9uZSBTdG9yYWdl
QXJlYSBwZXIgTG9jYWxTdG9yYWdlTWFuYWdlci4KKworICAgICAgICBUaGUgY2hhbmdlIGlzIG1v
c3RseSByZWZhY3RvcmluZywgYW5kIHNob3VsZCBiZSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIFdlYlN0
b3JhZ2UgdGVzdHMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6bG93
TWVtb3J5SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjcmVhdGVO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6OmFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpkZXN0cm95U2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjpoYXNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6ZmV0Y2hXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpk
ZWxldGVXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxl
dGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6ZGVsZXRlQW5kUmVzdHJpY3RXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwcmVwYXJlVG9TdXNwZW5kKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0Nsb3NlZCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpoYXNMb2NhbFN0b3JhZ2VEYXRh
KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlTG9jYWxTdG9y
YWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6Om1vdmVMb2Nh
bFN0b3JhZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6Z2V0
T3JpZ2luc09mTG9jYWxTdG9yYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0
b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1h
bmFnZXI6Omhhc0RhdGFJbk1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1h
bmFnZXI6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6
OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6aGFuZGxlTG93
TWVtb3J5V2FybmluZyk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OnN5
bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpj
b25uZWN0aW9uQ2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6
ZW5zdXJlU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2Vy
Ojpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9y
YWdlTWFuYWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYSk6CisgICAgICAg
IChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5o
OiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VB
cmVhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpNZW1v
cnlTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjppc0Vt
cHR5KToKKyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAg
ICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmFsbEl0ZW1zKToKKyAgICAgICAgKFdlYktp
dDo6TWVtb3J5U3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpNZW1vcnlT
dG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VB
cmVhOjpjbG9uZSBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1v
cnlTdG9yYWdlQXJlYS5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5h
Z2VyOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5h
Z2VyOjpjbGVhclN0b3JhZ2VGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpmb3JFYWNoT3JpZ2luRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpmZXRjaERhdGFGcm9tRGlzayk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YU9uRGlzayk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6bW92ZURhdGEpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnN1c3BlbmQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrU3RvcmFnZU1hbmFnZXI6OnJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6aGFuZGxlTG93TWVtb3J5V2FybmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9j
YWxTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Y29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpkaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpnZXRWYWx1ZXMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0pOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6dG9X
ZWJzaXRlRGF0YVR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojp0b1dlYnNpdGVEYXRhVHlw
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0
Ojp0b1N0b3JhZ2VJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1h
bmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmxvY2FsU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2Vi
S2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZXhpc3RpbmdMb2NhbFN0
b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0
b3JhZ2VCdWNrZXQ6OnNlc3Npb25TdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9y
aWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpleGlzdGluZ1Nlc3Npb25TdG9yYWdl
TWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0Ojppc0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpTdG9yYWdlQnVja2V0OjpmZXRjaERhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9y
YWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6
Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojptb3ZlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpmZXRjaERhdGFJ
bk1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0OjpmZXRjaERhdGFGcm9tRGlzayk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3Jh
Z2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKToKKyAgICAg
ICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0ZVNl
c3Npb25TdG9yYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpTdG9yYWdlQnVja2V0Ojptb3ZlTG9jYWxTdG9yYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6
Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdl
YktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcik6
CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpzZXNzaW9uU3RvcmFnZU1h
bmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZXhpc3RpbmdT
ZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFu
YWdlcjo6aXNBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6
ZmV0Y2hEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmRlbGV0
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6bW92ZURhdGEp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIu
aDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpmaWxlTmFtZVRv
T3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6b3JpZ2luVG9GaWxlTmFtZSk6CisgICAgICAgIChX
ZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpkYXRhYmFzZVBhdGgpOgorICAgICAgICAoV2ViS2l0
OjpTUUxpdGVTdG9yYWdlQXJlYTo6c3RhdGVtZW50U3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OlNRTGl0ZVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdl
YktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRl
U3RvcmFnZUFyZWE6On5TUUxpdGVTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0
ZVN0b3JhZ2VBcmVhOjppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFy
ZWE6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmNyZWF0ZVRh
YmxlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6cHJl
cGFyZURhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnN0YXJ0
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VB
cmVhOjpjYWNoZWRTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJl
YTo6Z2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRJdGVt
RnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmFsbEl0
ZW1zKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAg
ICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChX
ZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjb21taXRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5KToK
KyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmhhbmRsZUxvd01lbW9yeVdhcm5p
bmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEu
aDogQWRkZWQuCisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAg
KFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSk6CisgICAgICAgIChXZWJL
aXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6aGFzRGF0YUluTWVtb3J5KToKKyAgICAgICAgKFdl
YktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViS2l0
OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3Rpb25DbG9zZWQpOgorICAgICAgICAoV2Vi
S2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmFkZFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdl
YktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEp
OgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9t
U3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNs
b25lU3RvcmFnZUFyZWEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvU3RvcmFnZUFyZWFCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VB
cmVhQmFzZTo6U3RvcmFnZUFyZWFCYXNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFC
YXNlOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6cmVt
b3ZlTGlzdGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6Omhhc0xpc3Rl
bmVycyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6bm90aWZ5TGlz
dGVuZXJzQWJvdXRDbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6ZGlz
cGF0Y2hFdmVudHMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3Rv
cmFnZUFyZWFCYXNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6
OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6Om9y
aWdpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6cXVvdGEgY29u
c3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3Ry
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpyZWdp
c3RlclN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFSZWdpc3RyeTo6
dW5yZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFSZWdp
c3RyeTo6Z2V0U3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYVJlZ2lz
dHJ5Ojpmb3JFYWNoU3RvcmFnZUFyZWEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2dlbmVy
YXRlLXVuaWZpZWQtc291cmNlcy5zaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRh
aWxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5oOgorICAgICAgICAqIFVuaWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0Ogor
ICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFN
YXA6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6Y2xlYXIp
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6ZW5zdXJlTWFwKToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmNvbm5lY3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9y
YWdlQXJlYU1hcDo6ZGlzY29ubmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU5hbWVz
cGFjZUltcGw6OmNvcHkpOgorCiAyMDIxLTEyLTA5ICBKIFBhc2NvZSAgPGpfcGFzY29lQGFwcGxl
LmNvbT4KIAogICAgICAgICBbV2ViQXV0aG5dIFJlbW92ZSB1c2VyIGdlc3R1cmUgcmVxdWlyZW1l
bnQgZm9yIHVzaW5nIHBsYXRmb3JtIGF1dGhlbnRpY2F0b3Igb24gdGhlIHdlYgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCmluZGV4IDc2ZTQ1
YWYzNGVkMDkzZmQ5ZjI3NmRkNWQ0YjkyMmE0MTYzNGQ5YWUuLmU3Y2RjYmY1YWJkMjA2OTY4NWUx
ZmFkMWQ3NDQxOWNhMTA4MWE5YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKQEAgLTQzLDYgKzQzLDggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Y29uc3QgY2hhciAqLCAzPiBk
YXRhYmFzZUZpbGVTdWZmaXhlcyB7ICIiLCAiLXNobSIsICItd2FsIiB9OworCiBTUUxpdGVGaWxl
U3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKCkKIHsKIH0KQEAgLTc3LDE4ICs3OSwyMiBAQCBib29s
IFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkoY29uc3QgU3Ry
aW5nJiBwYXRoKQogICAgIHJldHVybiBGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9yeShw
YXRoKTsKIH0KIAotYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSkKK2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJh
c2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCiB7Ci0gICAgYXV0byB3YWxGaWxlTmFtZSA9
IG1ha2VTdHJpbmcoZmlsZU5hbWUsICItd2FsIl9zKTsKLSAgICBhdXRvIHNobUZpbGVOYW1lID0g
bWFrZVN0cmluZyhmaWxlTmFtZSwgIi1zaG0iX3MpOworICAgIGJvb2wgZmlsZUV4aXN0cyA9IGZh
bHNlOworICAgIGZvciAoY29uc3QgYXV0byogc3VmZml4IDogZGF0YWJhc2VGaWxlU3VmZml4ZXMp
IHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBmaWxlUGF0aCArIHN1ZmZpeDsKKyAgICAgICAgRmls
ZVN5c3RlbTo6ZGVsZXRlRmlsZShwYXRoKTsKKyAgICAgICAgZmlsZUV4aXN0cyB8PSBGaWxlU3lz
dGVtOjpmaWxlRXhpc3RzKHBhdGgpOworICAgIH0KIAotICAgIC8vIFRyeSB0byBkZWxldGUgYWxs
IHRocmVlIGZpbGVzIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIHRoZXJlLgotICAgIEZpbGVTeXN0
ZW06OmRlbGV0ZUZpbGUoZmlsZU5hbWUpOwotICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUod2Fs
RmlsZU5hbWUpOwotICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoc2htRmlsZU5hbWUpOworICAg
IHJldHVybiAhZmlsZUV4aXN0czsKK30KIAotICAgIC8vIElmIGFueSBvZiB0aGUgd2FsIG9yIHNo
bSBmaWxlcyByZW1haW4gYWZ0ZXIgdGhlIGRlbGV0ZSBhdHRlbXB0LCB0aGUgb3ZlcmFsbCBkZWxl
dGUgb3BlcmF0aW9uIGZhaWxlZC4KLSAgICByZXR1cm4gIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMo
ZmlsZU5hbWUpICYmICFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHdhbEZpbGVOYW1lKSAmJiAhRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyhzaG1GaWxlTmFtZSk7Cit2b2lkIFNRTGl0ZUZpbGVTeXN0ZW06
Om1vdmVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRGaWxlUGF0aCwgY29uc3QgU3RyaW5n
JiBuZXdGaWxlUGF0aCkKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8qIHN1ZmZpeCA6IGRhdGFiYXNl
RmlsZVN1ZmZpeGVzKQorICAgICAgICBGaWxlU3lzdGVtOjptb3ZlRmlsZShtYWtlU3RyaW5nKG9s
ZEZpbGVQYXRoLCBzdWZmaXgpLCBtYWtlU3RyaW5nKG5ld0ZpbGVQYXRoLCBzdWZmaXgpKTsKIH0K
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC05OCwxOCArMTA0LDEzIEBAIGJvb2wgU1FM
aXRlRmlsZVN5c3RlbTo6dHJ1bmNhdGVEYXRhYmFzZUZpbGUoc3FsaXRlMyogZGF0YWJhc2UpCiB9
CiAjZW5kaWYKICAgICAKLXVpbnQ2NF90IFNRTGl0ZUZpbGVTeXN0ZW06OmRhdGFiYXNlRmlsZVNp
emUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKLXsgICAgICAgIAordWludDY0X3QgU1FMaXRlRmls
ZVN5c3RlbTo6ZGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQorewogICAg
IHVpbnQ2NF90IHRvdGFsU2l6ZSA9IDA7Ci0KLSAgICBpZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVT
eXN0ZW06OmZpbGVTaXplKGZpbGVOYW1lKSkKLSAgICAgICAgdG90YWxTaXplICs9ICpmaWxlU2l6
ZTsKLQotICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmlsZVN5c3RlbTo6ZmlsZVNpemUobWFrZVN0
cmluZyhmaWxlTmFtZSwgIi13YWwiX3MpKSkKLSAgICAgICAgdG90YWxTaXplICs9ICpmaWxlU2l6
ZTsKLQotICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmlsZVN5c3RlbTo6ZmlsZVNpemUobWFrZVN0
cmluZyhmaWxlTmFtZSwgIi1zaG0iX3MpKSkKLSAgICAgICAgdG90YWxTaXplICs9ICpmaWxlU2l6
ZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8qIHN1ZmZpeCA6IGRhdGFiYXNlRmlsZVN1ZmZpeGVzKSB7
CisgICAgICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmlsZVN5c3RlbTo6ZmlsZVNpemUoZmlsZVBh
dGggKyBzdWZmaXgpKQorICAgICAgICAgICAgdG90YWxTaXplICs9ICpmaWxlU2l6ZTsKKyAgICB9
CiAKICAgICByZXR1cm4gdG90YWxTaXplOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKaW5kZXggYzY4ZDljN2U3YWY5ODk3NmExZWQzZGNiNmYy
YWNmZTRiNmNmNWMyZi4uOThlN2VhMGQwN2EyNTQxMWZhNGY2MmFhNzIxNjU5M2Y2M2UzOWM1YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCkBA
IC03OCw5ICs3OCwxMSBAQCBwdWJsaWM6CiAgICAgLy8gRGVsZXRlcyBhIGRhdGFiYXNlIGZpbGUu
CiAgICAgLy8KICAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuCi0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGRlbGV0ZURhdGFiYXNlRmlsZShj
b25zdCBTdHJpbmcmIGZpbGVQYXRoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJp
bmcgY29tcHV0ZUhhc2hGb3JGaWxlTmFtZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKyAgICAv
LyBNb3ZlcyBhIGRhdGFiYXNlIGZpbGUgdG8gYSBuZXcgcGxhY2UuCisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHZvaWQgbW92ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIG9sZEZpbGVQYXRo
LCBjb25zdCBTdHJpbmcmIG5ld0ZpbGVQYXRoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
U3RyaW5nIGNvbXB1dGVIYXNoRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCk7CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIFRydW5jYXRlcyBhIGRhdGFiYXNlIGZp
bGUuIFVzZWQgd2hlbiBNb2JpbGVTYWZhcmlTZXR0aW5ncyBkZWxldGVzIGEgZGF0YWJhc2UgZmls
ZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggMjkxY2M5ODkyZTgxMDI3ZDljYWVk
MWQ5ZGI3MDYxZDczZTY3NDE3MC4uMTM4Mjc2MWFjOGU4NzEyZjBkMzYwNjU1N2NiZjM5N2Q2YzNi
NmY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTI3MSw3ICsyNzEsNiBAQCB2
b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3RpbwogICAgICAgICByZXR1cm4gcGF5bWVudENvb3JkaW5hdG9y
KCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiAjZW5kaWYKIAotICAg
IFdURkxvZ0Fsd2F5cygiVW5oYW5kbGVkIG5ldHdvcmsgcHJvY2VzcyBtZXNzYWdlICclcyciLCBk
ZXNjcmlwdGlvbihkZWNvZGVyLm1lc3NhZ2VOYW1lKCkpKTsKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcAppbmRleCA0M2Y1YmJlN2IxYWJlMDlkZDc3NGM5MmI1YzBlNGY0MmRjZTFkZGI3Li5k
ZGE1YjhiMDIwMGVhOTY4OTUwNzc5NzI4NDhkYjkxOTdlZjVkY2RlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMTU3LDcgKzE1Nyw2
IEBAIHN0YXRpYyBpbmxpbmUgTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnkgY3JlYXRlTWVzc2Fn
ZVBvcnRDaGFubmVsUmVnaXN0cnkoTmV0d29yCiAKIE5ldHdvcmtQcm9jZXNzOjpOZXR3b3JrUHJv
Y2VzcyhBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVy
cykKICAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKCp0aGlzKQotICAgICwgbV9zdG9yYWdlTWFuYWdl
clNldChTdG9yYWdlTWFuYWdlclNldDo6Y3JlYXRlKCkpCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKICAgICAsIG1fbmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXIoKnRoaXMpCiAj
ZW5kaWYKQEAgLTMxMywxMiArMzEyLDEzIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6Omxvd01lbW9y
eUhhbmRsZXIoQ3JpdGljYWwgY3JpdGljYWwpCiAgICAgICAgIG5ldHdvcmtTZXNzaW9uLmNsZWFy
UHJlZmV0Y2hDYWNoZSgpOwogICAgIH0pOwogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+aGFu
ZGxlTG93TWVtb3J5V2FybmluZygpOwotCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAg
IGZvciAoYXV0byYgc3dTZXJ2ZXIgOiBtX3N3U2VydmVycy52YWx1ZXMoKSkKICAgICAgICAgc3dT
ZXJ2ZXItPmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKICNlbmRpZgorCisgICAgZm9yIChhdXRv
JiBtYW5hZ2VyIDogbV9zdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpCisgICAgICAgIG1hbmFnZXIt
PmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5p
dGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYg
cGFyYW1ldGVycykKQEAgLTQwMSw3ICs0MDEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjcmVh
dGVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyhQcm9jZXNzSWRlbnRpZmllciBpZGVudAog
CiAgICAgY29ubmVjdGlvbi5zZXRPbkxpbmVTdGF0ZShOZXR3b3JrU3RhdGVOb3RpZmllcjo6c2lu
Z2xldG9uKCkub25MaW5lKCkpOwogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkQ29ubmVj
dGlvbihjb25uZWN0aW9uLmNvbm5lY3Rpb24oKSk7CiAgICAgd2ViSURCU2VydmVyKHNlc3Npb25J
RCkuYWRkQ29ubmVjdGlvbihjb25uZWN0aW9uLmNvbm5lY3Rpb24oKSwgaWRlbnRpZmllcik7CiAg
ICAgaWYgKGF1dG8gbWFuYWdlciA9IG1fc3RvcmFnZU1hbmFnZXJzLmdldChzZXNzaW9uSUQpKQog
ICAgICAgICBtYW5hZ2VyLT5zdGFydFJlY2VpdmluZ01lc3NhZ2VGcm9tQ29ubmVjdGlvbihjb25u
ZWN0aW9uLmNvbm5lY3Rpb24oKSk7CkBAIC00MjAsNyArNDE5LDcgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6YWRkV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYmIHBh
cmFtZXRlcnMKIHsKICAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKIAotICAgIGFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lv
bihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRl
cnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGUpOworICAgIGFkZFN0b3JhZ2VNYW5hZ2Vy
Rm9yU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGUsIHBhcmFtZXRlcnMubG9j
YWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAgICAgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklE
LCBwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBh
cnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCiAgICAg
YWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CkBAIC00MjksOCArNDI4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRk
V2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMK
ICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuc2Vydmlj
ZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJz
LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCiAKLSAg
ICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmxvY2FsU3Rv
cmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotCiAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRh
U3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKIH0KIApAQCAtNDUzLDEx
ICs0NTAsMTYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIG1fc2Vzc2lvblN0b3JhZ2VR
dW90YU1hbmFnZXJzLnJlbW92ZShzZXNzaW9uSUQpOwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNz
OjphZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBTdHJpbmcmIGdlbmVyYWxTdG9yYWdlUGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JiBnZW5lcmFsU3RvcmFnZVBhdGhIYW5kbGUpCit2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRTdG9y
YWdlTWFuYWdlckZvclNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJp
bmcmIGdlbmVyYWxTdG9yYWdlUGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBnZW5lcmFs
U3RvcmFnZVBhdGhIYW5kbGUsIGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlUGF0aCwgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlJiBsb2NhbFN0b3JhZ2VQYXRoSGFuZGxlKQogewogICAgIG1fc3Rv
cmFnZU1hbmFnZXJzLmVuc3VyZShzZXNzaW9uSUQsIFsmXSB7CiAgICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShnZW5lcmFsU3RvcmFnZVBhdGhIYW5kbGUpOwotICAg
ICAgICByZXR1cm4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUoc2Vzc2lvbklELCBnZW5l
cmFsU3RvcmFnZVBhdGgpOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gb3B0aW9uYWxM
b2NhbFN0b3JhZ2VQYXRoOworICAgICAgICBpZiAoIWxvY2FsU3RvcmFnZVBhdGguaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBvcHRpb25hbExvY2FsU3RvcmFnZVBhdGggPSBsb2NhbFN0b3JhZ2VQ
YXRoOworICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGxv
Y2FsU3RvcmFnZVBhdGhIYW5kbGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShzZXNzaW9uSUQsIGdlbmVyYWxTdG9yYWdlUGF0aCwgb3B0
aW9uYWxMb2NhbFN0b3JhZ2VQYXRoKTsKICAgICB9KTsKIH0KIApAQCAtNTc0LDcgKzU3Niw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCkKICAgICBtX3NlcnZpY2VXb3JrZXJJbmZvLnJlbW92ZShzZXNzaW9uSUQpOwogI2VuZGlm
CiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZW1vdmUoc2Vzc2lvbklEKTsKICAgICBpZiAo
YXV0byBzZXJ2ZXIgPSBtX3dlYklEQlNlcnZlcnMudGFrZShzZXNzaW9uSUQpKQogICAgICAgICBz
ZXJ2ZXItPmNsb3NlKCk7CiAgICAgcmVtb3ZlU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKHNlc3Np
b25JRCk7CkBAIC0xMDY0LDE1ICsxMDY1LDE2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFy
VXNlckludGVyYWN0aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6Omhhc0xvY2FsU3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKG1fc3RvcmFnZU1h
bmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQsIFtkb21haW4sIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBvcmlnaW5zKSBt
dXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6YW55T2Yob3JpZ2lu
cywgWyZkb21haW5dKGF1dG8mIG9yaWdpbikgewotICAgICAgICAgICAgICAgIHJldHVybiBkb21h
aW4ubWF0Y2hlcyhvcmlnaW4pOwotICAgICAgICAgICAgfSkpOwotICAgICAgICB9KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgYXV0
byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsKKyAgICBpZiAo
aXRlcmF0b3IgPT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCisgICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBhdXRvIHR5cGVzID0gT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4geyBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSB9OworICAgIGl0ZXJh
dG9yLT52YWx1ZS0+ZmV0Y2hEYXRhKHR5cGVzLCBbZG9tYWluLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvIGVudHJpZXMpIG11dGFibGUgeworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6OmFueU9mKGVudHJpZXMsIFsmZG9tYWluXShhdXRv
JiBlbnRyeSkgeworICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5tYXRjaGVzKGVudHJ5Lm9yaWdp
bik7CisgICAgICAgIH0pKTsKKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0
Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE0OTAsMjAgKzE0OTIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpm
ZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNp
dAogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlu
cyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0
LT5jb250YWlucyhzZXNzaW9uSUQpKSB7Ci0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmdl
dFNlc3Npb25TdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1
dG8mJiBvcmlnaW5zKSB7Ci0gICAgICAgICAgICB3aGlsZSAoIW9yaWdpbnMuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVz
LmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW5zLnRha2VBbnkoKSwgV2Vic2l0ZURh
dGFUeXBlOjpTZXNzaW9uU3RvcmFnZSwgMCB9KTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAg
aWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3Jh
Z2UpICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAg
ICAgbV9zdG9yYWdlTWFuYWdlclNldC0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mJiBvcmlnaW5zKSB7Ci0gICAgICAgICAgICB3aGls
ZSAoIW9yaWdpbnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmln
aW5zLnRha2VBbnkoKSwgV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UsIDAgfSk7Ci0gICAg
ICAgIH0pOwotICAgIH0KLQogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoU09VUCkKICAgICBp
ZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkhTVFNDYWNoZSkp
CiAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5ob3N0TmFtZXNXaXRo
SFNUU0NhY2hlID0gaG9zdE5hbWVzV2l0aEhTVFNDYWNoZShzZXNzaW9uSUQpOwpAQCAtMTU1Nyw5
ICsxNTQ1LDEzIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0CiAjZW5kaWYKIAogICAgIGlmIChh
dXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRv
ciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkgewotICAgICAgICBpdGVyYXRvci0+dmFsdWUt
PmZldGNoRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvIGVu
dHJpZXMpIG11dGFibGUgewotICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNp
dGVEYXRhLmVudHJpZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUoZW50cmllcykpOwotICAgICAgICB9
KTsKKyAgICAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpGaWxlU3lzdGVtKQorICAgICAgICAgICAgfHwgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkKKyAgICAgICAgICAgIHx8IHdlYnNpdGVEYXRh
VHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkpIHsKKyAgICAg
ICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZmV0Y2hEYXRhKHdlYnNpdGVEYXRhVHlwZXMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdKGF1dG8gZW50cmllcykgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kVmVjdG9yKFdU
Rk1vdmUoZW50cmllcykpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9CiB9CiAK
QEAgLTE1ODYsMTIgKzE1NzgsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRl
RGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaQogICAgIGlmICh3
ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RE9NQ2FjaGUpKQogICAg
ICAgICBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6Y2xlYXJBbGxDYWNoZXMoKnRoaXMsIHNlc3Npb25J
RCwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwogCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkgJiYgbV9zdG9yYWdlTWFu
YWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNl
dC0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2Uoc2Vzc2lvbklELCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsg
fSk7Ci0KLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6
OkxvY2FsU3RvcmFnZSkgJiYgbV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklE
KSkKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+ZGVsZXRlTG9jYWxTdG9yYWdlTW9kaWZp
ZWRTaW5jZShzZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9
KTsKLQogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6
SW5kZXhlZERCRGF0YWJhc2VzKSAmJiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAg
IHdlYklEQlNlcnZlcihzZXNzaW9uSUQpLmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRT
aW5jZShtb2RpZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAKQEAgLTE2MzYs
OCArMTYyMiwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaQogICAgIH0KICNlbmRpZgogCi0g
ICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7
IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKQotICAgICAgICBpdGVyYXRvci0+
dmFsdWUtPmRlbGV0ZURhdGFNb2RpZmllZFNpbmNlKHdlYnNpdGVEYXRhVHlwZXMsIG1vZGlmaWVk
U2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKKyAgICBpZiAoYXV0byBpdGVyYXRvciA9
IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdl
TWFuYWdlcnMuZW5kKCkpIHsKKyAgICAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMo
V2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpCisgICAgICAgICAgICB8fCB3ZWJzaXRlRGF0
YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpCisgICAgICAg
ICAgICB8fCB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5
c3RlbSkpCisgICAgICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRlbGV0ZURhdGFNb2RpZmllZFNp
bmNlKHdlYnNpdGVEYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0g
eyB9KTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFyRGlza0NhY2hlRW50cmllcyhOZXR3
b3JrQ2FjaGU6OkNhY2hlKiBjYWNoZSwgY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4m
IG9yaWdpbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE3MDIsMTIgKzE2OTIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRl
RGF0YUZvck9yaWdpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpbwogICAgICAgICAg
ICAgQ2FjaGVTdG9yYWdlOjpFbmdpbmU6OmNsZWFyQ2FjaGVzRm9yT3JpZ2luKCp0aGlzLCBzZXNz
aW9uSUQsIFNlY3VyaXR5T3JpZ2luRGF0YSB7IG9yaWdpbkRhdGEgfSwgW2NsZWFyVGFza3NIYW5k
bGVyXSB7IH0pOwogICAgIH0KIAotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNv
bnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRlbGV0ZVNl
c3Npb25TdG9yYWdlRm9yT3JpZ2lucyhzZXNzaW9uSUQsIG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNr
c0hhbmRsZXJdIHsgfSk7Ci0KLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkgJiYgbV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFp
bnMoc2Vzc2lvbklEKSkKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+ZGVsZXRlTG9jYWxT
dG9yYWdlRm9yT3JpZ2lucyhzZXNzaW9uSUQsIG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNrc0hhbmRs
ZXJdIHsgfSk7Ci0KICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykgJiYgIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQog
ICAgICAgICB3ZWJJREJTZXJ2ZXIoc2Vzc2lvbklEKS5jbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zv
ck9yaWdpbnMob3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKIApAQCAtMTc0
NSw4ICsxNzI5LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9y
T3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvCiAgICAgfQogI2VuZGlmCiAK
LSAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklE
KTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9y
LT52YWx1ZS0+ZGVsZXRlRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBvcmlnaW5EYXRhcywgW2NsZWFy
VGFza3NIYW5kbGVyXSB7IH0pOworICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFu
YWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQo
KSkgeworICAgICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OkxvY2FsU3RvcmFnZSkKKyAgICAgICAgICAgIHx8IHdlYnNpdGVEYXRhVHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkKKyAgICAgICAgICAgIHx8IHdlYnNp
dGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtKSkKKyAgICAg
ICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBvcmln
aW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOworICAgIH0KIAogICAgIGlmIChhdXRv
KiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpIHsKICAg
ICAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1RvRGVsZXRl
TmV0d29ya0RhdGFGb3I7CkBAIC0xOTAzLDI4ICsxODkxLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
czo6ZGVsZXRlQW5kUmVzdHJpY3RXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6
OlNlc3MKICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgaWYgKG1fc3RvcmFnZU1hbmFnZXJTZXQt
PmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkpIHsKLSAgICAgICAgICAgIG1f
c3RvcmFnZU1hbmFnZXJTZXQtPmdldFNlc3Npb25TdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQsIFtw
cm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdGhpcywgc2Vzc2lvbklELCBjYWxsYmFja0Fn
Z3JlZ2F0b3IsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yXShhdXRv
JiYgb3JpZ2lucykgewotICAgICAgICAgICAgICAgIGlmICghbV9zdG9yYWdlTWFuYWdlclNldC0+
Y29udGFpbnMoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICAgICAgYXV0byBvcmlnaW5zVG9EZWxldGUgPSBmaWx0ZXJGb3JSZWdpc3RyYWJsZURv
bWFpbnMob3JpZ2lucywgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3Is
IGNhbGxiYWNrQWdncmVnYXRvci0+bV9kb21haW5zKTsKLSAgICAgICAgICAgICAgICBtX3N0b3Jh
Z2VNYW5hZ2VyU2V0LT5kZWxldGVTZXNzaW9uU3RvcmFnZUZvck9yaWdpbnMoc2Vzc2lvbklELCBv
cmlnaW5zVG9EZWxldGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkgewotICAgICAgICAgICAgbV9zdG9yYWdlTWFu
YWdlclNldC0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQsIFtwcm90ZWN0ZWRUaGlz
ID0gUmVmIHsgKnRoaXMgfSwgdGhpcywgc2Vzc2lvbklELCBjYWxsYmFja0FnZ3JlZ2F0b3IsIGRv
bWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yXShhdXRvJiYgb3JpZ2lucykg
ewotICAgICAgICAgICAgICAgIGlmICghbV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vz
c2lvbklEKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAg
YXV0byBvcmlnaW5zVG9EZWxldGUgPSBmaWx0ZXJGb3JSZWdpc3RyYWJsZURvbWFpbnMob3JpZ2lu
cywgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IsIGNhbGxiYWNrQWdn
cmVnYXRvci0+bV9kb21haW5zKTsKLSAgICAgICAgICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0
LT5kZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW5zKHNlc3Npb25JRCwgb3JpZ2luc1RvRGVsZXRl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KICAgICBhdXRvIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0aHMuZ2V0KHNlc3Npb25J
RCk7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSAmJiB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzKSkgewogICAgICAgICB3ZWJJREJT
ZXJ2ZXIoc2Vzc2lvbklEKS5nZXRPcmlnaW5zKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsg
KnRoaXMgfSwgc2Vzc2lvbklELCBjYWxsYmFja0FnZ3JlZ2F0b3IsIGRvbWFpbnNUb0RlbGV0ZUFs
bE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yXShhdXRvJiYgb3JpZ2lucykgewpAQCAtMTk3MiwxMCAr
MTkzOCwxNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVBbmRSZXN0cmljdFdlYnNpdGVE
YXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2VzcwogICAgIH0KIAogICAgIGlmIChhdXRv
IGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAh
PSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkgewotICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRl
bGV0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMod2Vic2l0ZURhdGFUeXBlcywgZG9tYWluc1Rv
RGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1
dG8gZGVsZXRlZERvbWFpbnMpIG11dGFibGUgewotICAgICAgICAgICAgZm9yIChhdXRvIGRvbWFp
biA6IGRlbGV0ZWREb21haW5zKQotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
bV9kb21haW5zLmFkZChXVEZNb3ZlKGRvbWFpbikpOwotICAgICAgICB9KTsKKyAgICAgICAgaWYg
KHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2Up
CisgICAgICAgICAgICB8fCB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6U2Vzc2lvblN0b3JhZ2UpCisgICAgICAgICAgICB8fCB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRh
aW5zKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSkpIHsKKyAgICAgICAgICAgIGl0ZXJhdG9y
LT52YWx1ZS0+ZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyh3ZWJzaXRlRGF0YVR5cGVz
LCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvciwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0oYXV0byBkZWxldGVkRG9tYWlucykgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAg
Zm9yIChhdXRvIGRvbWFpbiA6IGRlbGV0ZWREb21haW5zKQorICAgICAgICAgICAgICAgICAgICBj
YWxsYmFja0FnZ3JlZ2F0b3ItPm1fZG9tYWlucy5hZGQoV1RGTW92ZShkb21haW4pKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9CiAgICAgfQogCiAgICAgYXV0byBkYXRhVHlwZXNGb3JVSVBy
b2Nlc3MgPSBXZWJzaXRlRGF0YTo6ZmlsdGVyKHdlYnNpdGVEYXRhVHlwZXMsIFdlYnNpdGVEYXRh
UHJvY2Vzc1R5cGU6OlVJKTsKQEAgLTIzMDYsNyArMjI3Niw4IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnByZXBhcmVUb1N1c3BlbmQoYm9vbCBpc1N1c3BlbnNpb25JbW1pbmVudCwgQ29tcGxldGlv
bkhhbmRsCiAgICAgfQogI2VuZGlmCiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5zdXNwZW5k
KFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9z
dG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpCisgICAgICAgIG1hbmFnZXItPnN1c3BlbmQoW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YXBwbGljYXRp
b25EaWRFbnRlckJhY2tncm91bmQoKQpAQCAtMjM0NSw3ICsyMzE2LDggQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6cmVzdW1lKCkKICAgICBtX3Nob3VsZFN1c3BlbmRJREJTZXJ2ZXJzID0gZmFsc2U7
CiAjZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPnJlc3VtZSgpOworICAgIGZvciAo
YXV0byYgbWFuYWdlciA6IG1fc3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKQorICAgICAgICBtYW5h
Z2VyLT5yZXN1bWUoKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cHJlZmV0Y2hETlMoY29u
c3QgU3RyaW5nJiBob3N0bmFtZSkKQEAgLTI0NDEsOCArMjQxMyw5IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OnNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoUEFMOjpTZXNz
aW9uSUQgc2VzCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnN5bmNMb2NhbFN0b3JhZ2UoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fc3RvcmFn
ZU1hbmFnZXJTZXQtPndhaXRVbnRpbFN5bmNpbmdMb2NhbFN0b3JhZ2VGaW5pc2hlZCgpOwotICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgYXV0byBhZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGZvciAoYXV0
byYgbWFuYWdlciA6IG1fc3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKQorICAgICAgICBtYW5hZ2Vy
LT5zeW5jTG9jYWxTdG9yYWdlKFthZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpyZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjQ3MiwxMCArMjQ0NSw4IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBVCiAgICAgaWYgKG9sZE9yaWdpbi5pc0VtcHR5KCkgfHwg
bmV3T3JpZ2luLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGRhdGFUeXBl
cy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKLSAgICAgICAgaWYg
KG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgICAgICBt
X3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZW5hbWVPcmlnaW4oc2Vzc2lvbklELCBvbGROYW1lLCBuZXdO
YW1lLCBbYWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBt
X3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1h
bmFnZXJzLmVuZCgpKQorICAgICAgICBpdGVyYXRvci0+dmFsdWUtPm1vdmVEYXRhKG9sZE9yaWdp
biwgbmV3T3JpZ2luLCBbYWdncmVnYXRvcl0geyB9KTsKIAogICAgIGlmIChkYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpKSB7CiAgICAgICAgIGF1
dG8gcGF0aCA9IG1faWRiRGF0YWJhc2VQYXRocy5nZXQoc2Vzc2lvbklEKTsKQEAgLTI3NjIsMjEg
KzI3MzMsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVLZXB0QWxpdmVMb2FkKE5ldHdv
cmtSZXNvdXJjZUxvYWRlciYgbG9hZGVyKQogICAgICAgICBzZXNzaW9uLT5yZW1vdmVLZXB0QWxp
dmVMb2FkKGxvYWRlcik7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmdldExvY2FsU3RvcmFn
ZU9yaWdpbkRldGFpbHMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICghbV9zdG9yYWdlTWFuYWdlclNl
dC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewotICAgICAgICBMT0dfRVJST1IoIkNhbm5vdCBnZXQg
bG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbiBmb3IgYW4gdW5rbm93biBzZXNzaW9uIik7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKHNlc3Np
b25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpjb25uZWN0aW9uVG9XZWJQcm9jZXNzQ2xvc2VkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIG1fc3RvcmFnZU1hbmFnZXJT
ZXQtPnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7Ci0KICAgICBpZiAoYXV0byogc2VydmVy
ID0gbV93ZWJJREJTZXJ2ZXJzLmdldChzZXNzaW9uSUQpKQogICAgICAgICBzZXJ2ZXItPnJlbW92
ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCA5YmM1N2VlMzdlYjYwOWMzOTdlZDdlM2QyMmY1NWUw
NjRkMDJlMDE3Li41NjFmNzcxY2QzNzkxNjBiOTRkZmMyMWZhZDFlNjQ1NmZmYmQ1M2U2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xMDcs
NyArMTA3LDYgQEAgY2xhc3MgTmV0d29ya1Byb3hpbWl0eU1hbmFnZXI7CiBjbGFzcyBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBOZXR3b3JrU3RvcmFnZU1hbmFnZXI7CiBjbGFzcyBQcm9j
ZXNzQXNzZXJ0aW9uOwotY2xhc3MgU3RvcmFnZU1hbmFnZXJTZXQ7CiBjbGFzcyBXZWJQYWdlTmV0
d29ya1BhcmFtZXRlcnM7CiBjbGFzcyBXZWJTV1NlcnZlckNvbm5lY3Rpb247CiBjbGFzcyBXZWJT
V1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb247CkBAIC0yOTUsNyArMjk0LDYgQEAgcHVibGljOgog
ICAgIGJvb2wgc2Vzc2lvbklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihQQUw6OlNlc3Npb25JRCkg
Y29uc3Q7CiAKICAgICB2b2lkIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NDbG9zZWQoSVBDOjpDb25u
ZWN0aW9uJiwgUEFMOjpTZXNzaW9uSUQpOwotICAgIHZvaWQgZ2V0TG9jYWxTdG9yYWdlT3JpZ2lu
RGV0YWlscyhQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8TG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJik7CiAKICNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIE5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5h
Z2VyJiBuZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlcigpIHsgcmV0dXJuIG1fbmV0d29ya0Nv
bnRlbnRSdWxlTGlzdE1hbmFnZXI7IH0KQEAgLTU1Miw3ICs1NTAsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIHVpbnQ2
NF90IGRlZmF1bHRRdW90YSwgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YSwgY29uc3Qg
U3RyaW5nJiBjYWNoZVJvb3RQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKICAgICB2
b2lkIHJlbW92ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEKTsKIAot
ICAgIHZvaWQgYWRkU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKFBBTDo6U2Vzc2lvbklELCBjb25z
dCBTdHJpbmcmIHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpOworICAgIHZvaWQgYWRk
U3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBh
dGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdl
UGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgdm9pZCByZW1vdmVTdG9yYWdl
TWFuYWdlckZvclNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwogCiAgICAgLy8gQ29ubmVjdGlvbnMg
dG8gV2ViUHJvY2Vzc2VzLgpAQCAtNTc1LDggKzU3Myw2IEBAIHByaXZhdGU6CiAgICAgSGFzaE1h
cDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTZXNzaW9uPj4gbV9uZXR3
b3JrU2Vzc2lvbnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4+IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9u
czsKIAotICAgIFJlZjxTdG9yYWdlTWFuYWdlclNldD4gbV9zdG9yYWdlTWFuYWdlclNldDsKLQog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1By
b2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5t
ZXNzYWdlcy5pbgppbmRleCA4ZDM0ZTcxMzk2NmM3ZTkwYWI0MzViMWJmZGQzZTNkM2I2YzIwODNj
Li4yOWQzZDk3ZTkwMDExYmUwNTJlOWJlMzM5NzhhMDUyY2NlOWY2NDU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMu
aW4KQEAgLTE3Myw3ICsxNzMsNiBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lS
ZWNlaXZlciB7CiAgICAgTWFya1ByaXZhdGVDbGlja01lYXN1cmVtZW50c0FzRXhwaXJlZEZvclRl
c3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiAoKSBBc3luYwogICAgIFNldFBDTUZy
YXVkUHJldmVudGlvblZhbHVlc0ZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBT
dHJpbmcgc2VjcmV0VG9rZW4sIFN0cmluZyB1bmxpbmthYmxlVG9rZW4sIFN0cmluZyBzaWduYXR1
cmUsIFN0cmluZyBrZXlJRCkgLT4gKCkgQXN5bmMKICAgICBTZXRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudEFwcEJ1bmRsZUlERm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmlu
ZyBhcHBCdW5kbGVJREZvclRlc3RpbmcpIC0+ICgpIEFzeW5jCi0gICAgR2V0TG9jYWxTdG9yYWdl
T3JpZ2luRGV0YWlscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChWZWN0b3I8V2ViS2l0
OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+IGRldGFpbHMpIEFz
eW5jCiAKICAgICBTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhTZWNvbmRz
IHNlY29uZHMpIC0+ICgpIFN5bmNocm9ub3VzCiAgICAgUmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hU
aW1lb3V0Rm9yVGVzdGluZygpIC0+ICgpIFN5bmNocm9ub3VzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uN2MxNThkZGJkYzYzZmU1NmM5OGVhMjhjNDY3MWIxMGMxMjUxMTJjYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9M
b2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VNYW5hZ2VyLmgiCisKKyNp
bmNsdWRlICJNZW1vcnlTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0b3JhZ2VBcmVh
LmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFSZWdpc3RyeS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
U1FMaXRlRmlsZVN5c3RlbS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gU3VnZ2VzdGVk
IGJ5IGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJzdG9yYWdlLyNkaXNrLXNwYWNlCitjb25zdGV4
cHIgdW5zaWduZWQgbG9jYWxTdG9yYWdlUXVvdGFJbkJ5dGVzID0gNSAqIE1COworCitib29sIExv
Y2FsU3RvcmFnZU1hbmFnZXI6Omhhc0xvY2FsU3RvcmFnZURhdGEoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICByZXR1cm4gRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyhTUUxpdGVTdG9yYWdlQXJlYTo6ZGF0YWJhc2VQYXRoKHBhdGgs
IG9yaWdpbikpOworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3Rv
cmFnZURhdGEoV2FsbFRpbWUgdGltZSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBhdXRvIGRhdGFiYXNlUGF0aCA9IFNRTGl0
ZVN0b3JhZ2VBcmVhOjpkYXRhYmFzZVBhdGgocGF0aCwgb3JpZ2luKTsKKyAgICBpZiAoYXV0byBt
b2RpZmljYXRpb25UaW1lID0gRmlsZVN5c3RlbTo6ZmlsZU1vZGlmaWNhdGlvblRpbWUoZGF0YWJh
c2VQYXRoKTsgbW9kaWZpY2F0aW9uVGltZSAmJiAqbW9kaWZpY2F0aW9uVGltZSA+PSB0aW1lKQor
ICAgICAgICBXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoZGF0
YWJhc2VQYXRoKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjptb3ZlTG9jYWxTdG9y
YWdlRGF0YShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYg
c291cmNlT3JpZ2luLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIHRhcmdldE9yaWdpbikK
K3sKKyAgICBXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjptb3ZlRGF0YWJhc2VGaWxlKFNRTGl0
ZVN0b3JhZ2VBcmVhOjpkYXRhYmFzZVBhdGgocGF0aCwgc291cmNlT3JpZ2luKSwgU1FMaXRlU3Rv
cmFnZUFyZWE6OmRhdGFiYXNlUGF0aChwYXRoLCB0YXJnZXRPcmlnaW4pKTsKK30KKworVmVjdG9y
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gTG9jYWxTdG9yYWdlTWFuYWdlcjo6Z2V0T3Jp
Z2luc09mTG9jYWxTdG9yYWdlRGF0YShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgVmVjdG9y
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKKyAgICBmb3IgKGF1dG8mIGZp
bGVOYW1lIDogRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShwYXRoKSkgeworICAgICAgICBpZiAo
YXV0byBvcmlnaW4gPSBTUUxpdGVTdG9yYWdlQXJlYTo6ZmlsZU5hbWVUb09yaWdpbihmaWxlTmFt
ZSkpCisgICAgICAgICAgICBvcmlnaW5zLmFwcGVuZCgqb3JpZ2luKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gb3JpZ2luczsKK30KKworTG9jYWxTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTWFu
YWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSwgY29uc3QgU3RyaW5nJiBwYXRoKQor
ICAgIDogbV9yZWdpc3RyeShyZWdpc3RyeSkKKyAgICAsIG1fcGF0aChwYXRoKQoreworfQorCiti
b29sIExvY2FsU3RvcmFnZU1hbmFnZXI6OmlzQWN0aXZlKCkKK3sKKyAgICByZXR1cm4gbV9zdG9y
YWdlQXJlYSAmJiBtX3N0b3JhZ2VBcmVhLT5oYXNMaXN0ZW5lcnMoKTsKK30KKworYm9vbCBMb2Nh
bFN0b3JhZ2VNYW5hZ2VyOjpoYXNEYXRhSW5NZW1vcnkoKQoreworICAgIHJldHVybiBtX3N0b3Jh
Z2VBcmVhICYmICFtX3N0b3JhZ2VBcmVhLT5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgTG9jYWxTdG9y
YWdlTWFuYWdlcjo6Y2xlYXJEYXRhKCkKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYSkKKyAgICAg
ICAgbV9zdG9yYWdlQXJlYS0+Y2xlYXIoKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2Vy
OjpjbG9zZSgpCit7CisgICAgaWYgKG1fc3RvcmFnZUFyZWEgJiYgaXM8U1FMaXRlU3RvcmFnZUFy
ZWE+KCptX3N0b3JhZ2VBcmVhKSkKKyAgICAgICAgZG93bmNhc3Q8U1FMaXRlU3RvcmFnZUFyZWE+
KCptX3N0b3JhZ2VBcmVhKS5jbG9zZSgpOworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6
OmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKQoreworICAgIGlmIChtX3N0b3JhZ2VBcmVhICYmIGlz
PFNRTGl0ZVN0b3JhZ2VBcmVhPigqbV9zdG9yYWdlQXJlYSkpCisgICAgICAgIGRvd25jYXN0PFNR
TGl0ZVN0b3JhZ2VBcmVhPigqbV9zdG9yYWdlQXJlYSkuaGFuZGxlTG93TWVtb3J5V2FybmluZygp
OworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQorewor
ICAgIGlmIChtX3N0b3JhZ2VBcmVhICYmIGlzPFNRTGl0ZVN0b3JhZ2VBcmVhPigqbV9zdG9yYWdl
QXJlYSkpCisgICAgICAgIGRvd25jYXN0PFNRTGl0ZVN0b3JhZ2VBcmVhPigqbV9zdG9yYWdlQXJl
YSkuY29tbWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworfQorCit2b2lkIExvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25u
ZWN0aW9uKQoreworICAgIG1fc3RvcmFnZUFyZWEtPnJlbW92ZUxpc3RlbmVyKGNvbm5lY3Rpb24p
OworICAgIGlmIChtX3N0b3JhZ2VBcmVhLT5oYXNMaXN0ZW5lcnMoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9zdG9yYWdlQXJlYSA9IG51bGxwdHI7CisgICAgbV9yZWdpc3RyeS51bnJlZ2lz
dGVyU3RvcmFnZUFyZWEobV9zdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBM
b2NhbFN0b3JhZ2VNYW5hZ2VyOjplbnN1cmVTdG9yYWdlQXJlYShjb25zdCBXZWJDb3JlOjpDbGll
bnRPcmlnaW4mIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoLCBzdGQ6Om9wdGlvbmFsPFJlZjxX
b3JrUXVldWU+PiB3b3JrUXVldWUpCit7CisgICAgaWYgKG1fc3RvcmFnZUFyZWEpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghcGF0aC5pc0VtcHR5KCkgJiYgd29ya1F1ZXVlKQorICAgICAg
ICBtX3N0b3JhZ2VBcmVhID0gbWFrZVVuaXF1ZTxTUUxpdGVTdG9yYWdlQXJlYT4obG9jYWxTdG9y
YWdlUXVvdGFJbkJ5dGVzLCBvcmlnaW4sIHBhdGgsIFdURk1vdmUoKndvcmtRdWV1ZSkpOworICAg
IGVsc2UKKyAgICAgICAgbV9zdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8TWVtb3J5U3RvcmFnZUFy
ZWE+KG9yaWdpbiwgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZTo6TG9jYWwpOworICAgIG1f
cmVnaXN0cnkucmVnaXN0ZXJTdG9yYWdlQXJlYShtX3N0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCks
ICptX3N0b3JhZ2VBcmVhKTsKK30KKworU3RvcmFnZUFyZWFJZGVudGlmaWVyIExvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCBjb25uZWN0aW9uLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgUmVm
PFdvcmtRdWV1ZT4mJiB3b3JrUXVldWUpCit7CisgICAgZW5zdXJlU3RvcmFnZUFyZWEob3JpZ2lu
LCBtX3BhdGgsIHN0ZDo6bWFrZV9vcHRpb25hbChXVEZNb3ZlKHdvcmtRdWV1ZSkpKTsKKyAgICBB
U1NFUlQobV9wYXRoLmlzRW1wdHkoKSB8fCBtX3N0b3JhZ2VBcmVhLT50eXBlKCkgPT0gU3RvcmFn
ZUFyZWFCYXNlOjpUeXBlOjpTUUxpdGUpOworCisgICAgbV9zdG9yYWdlQXJlYS0+YWRkTGlzdGVu
ZXIoY29ubmVjdGlvbik7CisgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKTsK
K30KKworU3RvcmFnZUFyZWFJZGVudGlmaWVyIExvY2FsU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RU
b1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25u
ZWN0aW9uLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBlbnN1
cmVTdG9yYWdlQXJlYShvcmlnaW4sIFN0cmluZyB7IH0sIHsgfSk7CisgICAgQVNTRVJUKG1fc3Rv
cmFnZUFyZWEtPnR5cGUoKSA9PSBTdG9yYWdlQXJlYUJhc2U6OlR5cGU6Ok1lbW9yeSk7CisKKyAg
ICBtX3N0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25uZWN0aW9uKTsKKyAgICByZXR1cm4gbV9z
dG9yYWdlQXJlYS0+aWRlbnRpZmllcigpOworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6
OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25u
ZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBpZiAoIW1f
c3RvcmFnZUFyZWEgfHwgbV9zdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpICE9IGlkZW50aWZpZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbm5lY3Rpb25DbG9zZWQoY29ubmVjdGlvbik7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWZhZjBhM2ZmMjgzNjdiZjAzNDBiZTc2YWM1NTVlYTYyMDYyOTExOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VNYW5h
Z2VyLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiU3RvcmFnZUFyZWFJZGVudGlmaWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0
cnVjdCBDbGllbnRPcmlnaW47Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTdG9y
YWdlQXJlYUJhc2U7CitjbGFzcyBTdG9yYWdlQXJlYVJlZ2lzdHJ5OworCitjbGFzcyBMb2NhbFN0
b3JhZ2VNYW5hZ2VyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgYm9vbCBoYXNMb2NhbFN0b3JhZ2VEYXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlTG9jYWxT
dG9yYWdlRGF0YShXYWxsVGltZSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBXZWJDb3JlOjpD
bGllbnRPcmlnaW4mKTsKKyAgICBzdGF0aWMgdm9pZCBtb3ZlTG9jYWxTdG9yYWdlRGF0YShjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgc291cmNlT3JpZ2lu
LCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIHRhcmdldE9yaWdpbik7CisgICAgc3RhdGlj
IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGdldE9yaWdpbnNPZkxvY2FsU3Rv
cmFnZURhdGEoY29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAgIExvY2FsU3RvcmFnZU1hbmFnZXIo
U3RvcmFnZUFyZWFSZWdpc3RyeSYsIGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgYm9vbCBpc0Fj
dGl2ZSgpOworICAgIGJvb2wgaGFzRGF0YUluTWVtb3J5KCk7CisgICAgdm9pZCBjbGVhckRhdGEo
KTsKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7
CisgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKCk7CisgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2Vk
KElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQpOworCisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVy
IGNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgY29u
c3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgUmVmPFdvcmtRdWV1ZT4mJik7CisgICAgU3RvcmFn
ZUFyZWFJZGVudGlmaWVyIGNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEoSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAg
dm9pZCBkaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQs
IFN0b3JhZ2VBcmVhSWRlbnRpZmllcik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBlbnN1cmVTdG9y
YWdlQXJlYShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBjb25zdCBTdHJpbmcmLCBzdGQ6
Om9wdGlvbmFsPFJlZjxXb3JrUXVldWU+Pik7CisKKyAgICBTdG9yYWdlQXJlYVJlZ2lzdHJ5JiBt
X3JlZ2lzdHJ5OworICAgIFN0cmluZyBtX3BhdGg7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0b3Jh
Z2VBcmVhQmFzZT4gbV9zdG9yYWdlQXJlYTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1v
cnlTdG9yYWdlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
TWVtb3J5U3RvcmFnZUFyZWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiMDY5YWRmOGVkZjEyMTVkNWFhMjZl
MzUyZWQyYzQ4OWY3MTVmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuY3BwCkBAIC0wLDAgKzEsMTAyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lbW9yeVN0b3Jh
Z2VBcmVhLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK01lbW9yeVN0b3JhZ2VBcmVhOjpNZW1vcnlTdG9yYWdlQXJlYShjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlw
ZSB0eXBlKQorICAgIDogU3RvcmFnZUFyZWFCYXNlKFdlYkNvcmU6OlN0b3JhZ2VNYXA6Om5vUXVv
dGEsIG9yaWdpbikKKyAgICAsIG1fc3RvcmFnZVR5cGUodHlwZSkKK3sKKyAgICBtX21hcCA9IG1h
a2VVbmlxdWU8V2ViQ29yZTo6U3RvcmFnZU1hcD4oV2ViQ29yZTo6U3RvcmFnZU1hcDo6bm9RdW90
YSk7Cit9CisKK2Jvb2wgTWVtb3J5U3RvcmFnZUFyZWE6OmlzRW1wdHkoKQoreworICAgIHJldHVy
biAhbV9tYXAtPmxlbmd0aCgpOworfQorCit2b2lkIE1lbW9yeVN0b3JhZ2VBcmVhOjpjbGVhcigp
Cit7CisgICAgbV9tYXAtPmNsZWFyKCk7CisgICAgbm90aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcigp
OworfQorCitIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNZW1vcnlTdG9yYWdlQXJlYTo6YWxsSXRl
bXMoKQoreworICAgIHJldHVybiBtX21hcC0+aXRlbXMoKTsKK30KKworRXhwZWN0ZWQ8dm9pZCwg
U3RvcmFnZUVycm9yPiBNZW1vcnlTdG9yYWdlQXJlYTo6c2V0SXRlbShJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFy
ZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBT
dHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgYm9vbCBoYXNR
dW90YUVycm9yID0gZmFsc2U7CisgICAgbV9tYXAtPnNldEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFs
dWUsIGhhc1F1b3RhRXJyb3IpOworICAgIGlmIChoYXNRdW90YUVycm9yKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpRdW90YUV4Y2VlZGVkKTsKKworICAgIGRp
c3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBrZXksIG9sZFZhbHVl
LCB2YWx1ZSwgdXJsU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK0V4cGVjdGVkPHZv
aWQsIFN0b3JhZ2VFcnJvcj4gTWVtb3J5U3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0oSVBDOjpDb25u
ZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIHN0
b3JhZ2VBcmVhSW1wbElELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcpCit7CisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIG1fbWFwLT5yZW1vdmVJdGVtKGtleSwg
b2xkVmFsdWUpOworICAgIGRpc3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1w
bElELCBrZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsKKworICAgIHJldHVybiB7
IH07Cit9CisKK0V4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gTWVtb3J5U3RvcmFnZUFyZWE6
OmNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJ
bXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7
CisgICAgaWYgKCFtX21hcC0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChTdG9yYWdlRXJyb3I6Okl0ZW1Ob3RGb3VuZCk7CisKKyAgICBtX21hcC0+Y2xlYXIoKTsKKyAg
ICBkaXNwYXRjaEV2ZW50cyhjb25uZWN0aW9uLCBpbXBsSWRlbnRpZmllciwgU3RyaW5nKCksIFN0
cmluZygpLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxNZW1vcnlTdG9yYWdlQXJlYT4gTWVtb3J5U3RvcmFnZUFyZWE6OmNsb25l
KCkgY29uc3QKK3sKKyAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbWFrZVVuaXF1ZTxNZW1vcnlTdG9y
YWdlQXJlYT4ob3JpZ2luKCksIG1fc3RvcmFnZVR5cGUpOworICAgICpzdG9yYWdlQXJlYS0+bV9t
YXAgPSAqbV9tYXA7CisKKyAgICByZXR1cm4gc3RvcmFnZUFyZWE7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisKKworCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDcxNDI1NmMy
YzUyNGMxZGIzZmQwYWZjMzU2NzZkNmNmYzY4NDlmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5oCkBAIC0w
LDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0b3Jh
Z2VBcmVhQmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTdG9yYWdlTWFwOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTWVtb3J5U3RvcmFnZUFyZWEgZmluYWwg
OiBwdWJsaWMgU3RvcmFnZUFyZWFCYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBNZW1vcnlTdG9yYWdlQXJlYShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mLCBTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlID0gU3RvcmFnZUFyZWFCYXNlOjpTdG9y
YWdlVHlwZTo6U2Vzc2lvbik7CisKKyAgICBib29sIGlzRW1wdHkoKSBmaW5hbDsKKyAgICB2b2lk
IGNsZWFyKCkgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeVN0b3JhZ2VBcmVhPiBj
bG9uZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIC8vIFN0b3JhZ2VBcmVhQmFzZQorICAgIFN0
b3JhZ2VBcmVhQmFzZTo6VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU3RvcmFnZUFy
ZWFCYXNlOjpUeXBlOjpNZW1vcnk7IH07CisgICAgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlw
ZSBzdG9yYWdlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3RvcmFnZVR5cGU7IH0KKyAg
ICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBhbGxJdGVtcygpIGZpbmFsOworICAgIEV4cGVjdGVk
PHZvaWQsIFN0b3JhZ2VFcnJvcj4gc2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBT
dG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGZpbmFsOworICAgIEV4cGVjdGVkPHZv
aWQsIFN0b3JhZ2VFcnJvcj4gcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBT
dG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpIGZpbmFsOworICAgIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gY2xl
YXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGZpbmFsOworCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6U3RvcmFnZU1hcD4gbV9tYXA7CisgICAgU3RvcmFnZUFyZWFCYXNlOjpT
dG9yYWdlVHlwZSBtX3N0b3JhZ2VUeXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KworCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9O
ZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggYzEwYWNiZGQ2NGZlMDRlZmYx
NmExYzhiNzRkMmJmYzE5NTNkYmQ3My4uNzhmMzdiZTgyMTU0OTQxZjBjZDg5MDQzZjZkNjkwMDA0
MDU5NzMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKQEAgLTI4LDEyICsyOCwxOCBA
QAogCiAjaW5jbHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5oIgogI2luY2x1
ZGUgIkZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZU1h
bmFnZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VN
YW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJPcmlnaW5TdG9yYWdlTWFuYWdlci5oIgorI2lu
Y2x1ZGUgIlNlc3Npb25TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhQmFz
ZS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJTdG9y
YWdlQXJlYVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCiAjaW5jbHVk
ZSA8cGFsL2NyeXB0by9DcnlwdG9EaWdlc3QuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNp
bmNsdWRlIDx3dGYvU3VzcGVuZGFibGVXb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lz
dGVuY2UvUGVyc2lzdGVudENvZGVycy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgog
CkBAIC05MywyMCArOTksMjIgQEAgc3RhdGljIHZvaWQgZGVsZXRlT3JpZ2luRmlsZUlmTmVjZXNz
YXJ5KGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZp
bGUoZmlsZVBhdGgpOwogfQogCi1SZWY8TmV0d29ya1N0b3JhZ2VNYW5hZ2VyPiBOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK1JlZjxOZXR3b3JrU3RvcmFnZU1hbmFnZXI+IE5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBz
dGQ6Om9wdGlvbmFsPFN0cmluZz4gY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrU3RvcmFnZU1hbmFnZXIoc2Vzc2lvbklELCBwYXRoKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyKHNlc3Npb25J
RCwgcGF0aCwgY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkpOwogfQogCi1OZXR3b3JrU3RvcmFnZU1h
bmFnZXI6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgcGF0aCkKK05ldHdvcmtTdG9yYWdlTWFuYWdlcjo6TmV0d29ya1N0b3JhZ2VN
YW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBzdGQ6
Om9wdGlvbmFsPFN0cmluZz4gY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkKICAgICA6IG1fc2Vzc2lv
bklEKHNlc3Npb25JRCkKLSAgICAsIG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBs
ZS5XZWJLaXQuU3RvcmFnZSIpKQorICAgICwgbV9xdWV1ZShTdXNwZW5kYWJsZVdvcmtRdWV1ZTo6
Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LlN0b3JhZ2UiKSkKIHsKICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwogCi0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBSZWYgeyAqdGhpcyB9LCBwYXRoID0gcGF0aC5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxl
IHsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0
aGlzIH0sIHBhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpLCBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRo
ID0gY3Jvc3NUaHJlYWRDb3B5KGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgpXSgpIG11dGFibGUgewog
ICAgICAgICBtX2ZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkgPSBtYWtlVW5pcXVlPEZp
bGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnk+KCk7CisgICAgICAgIG1fc3RvcmFnZUFyZWFS
ZWdpc3RyeSA9IG1ha2VVbmlxdWU8U3RvcmFnZUFyZWFSZWdpc3RyeT4oKTsKICAgICAgICAgbV9w
YXRoID0gcGF0aDsKKyAgICAgICAgbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoID0gY3VzdG9tTG9j
YWxTdG9yYWdlUGF0aDsKICAgICAgICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICBhdXRvIHNhbHRQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KG1fcGF0aCwgInNhbHQiKTsKICAgICAgICAgICAgIG1fc2FsdCA9IEZpbGVTeXN0ZW06OnJlYWRP
ck1ha2VTYWx0KHNhbHRQYXRoKS52YWx1ZV9vcihGaWxlU3lzdGVtOjpTYWx0KCkpOwpAQCAtMTMz
LDcgKzE0MSw2IEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbG9zZSgpCiAKICAgICBt
X3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dKCkg
bXV0YWJsZSB7CiAgICAgICAgIG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMuY2xlYXIoKTsK
LSAgICAgICAgbV9zZXNzaW9uT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmNsZWFyKCk7CiAgICAgICAg
IG1fZmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSA9IG51bGxwdHI7CiAKICAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0
ZWRUaGlzKV0geyB9KTsKQEAgLTIzMiw5ICsyMzksNiBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFu
YWdlcjo6Y2xlYXJTdG9yYWdlRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
YwogICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFn
ZXJzLnZhbHVlcygpKQogICAgICAgICAgICAgbWFuYWdlci0+c2V0UGVyc2lzdGVkKGZhbHNlKTsK
IAotICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX3Nlc3Npb25PcmlnaW5TdG9yYWdlTWFu
YWdlcnMudmFsdWVzKCkpCi0gICAgICAgICAgICBtYW5hZ2VyLT5zZXRQZXJzaXN0ZWQoZmFsc2Up
OwotCiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdU
Rk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwogICAgICAgICB9KTsKQEAgLTM4MiwxNCArMzg2LDYgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZU1h
bmFnZXI6OmdldEhhbmRsZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OkZp
bGUKICAgICBjb21wbGV0aW9uSGFuZGxlcihoYW5kbGUtPmdldEhhbmRsZShjb25uZWN0aW9uLnVu
aXF1ZUlEKCksIFdURk1vdmUobmFtZSkpKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2Vi
c2l0ZURhdGFUeXBlPiB0b1dlYnNpdGVEYXRhVHlwZShjb25zdCBTdHJpbmcmIHN0b3JhZ2VUeXBl
KQotewotICAgIGlmIChzdG9yYWdlVHlwZSA9PSAiRmlsZVN5c3RlbSIpCi0gICAgICAgIHJldHVy
biBXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW07Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotfQotCiB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Zm9yRWFjaE9yaWdpbkRpcmVjdG9y
eShjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYgYXBwbHkpCiB7CiAgICAgZm9y
IChhdXRvJiB0b3BPcmlnaW4gOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KG1fcGF0aCkpIHsK
QEAgLTQwMSw2ICszOTcsOSBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Zm9yRWFjaE9y
aWdpbkRpcmVjdG9yeShjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cgogICAgICAgICB9CiAK
ICAgICAgICAgZm9yIChhdXRvJiBvcGVuaW5nT3JpZ2luIDogb3BlbmluZ09yaWdpbnMpIHsKKyAg
ICAgICAgICAgIGlmIChvcGVuaW5nT3JpZ2luID09ICIuRFNfU3RvcmUiKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCiAgICAgICAgICAgICBhdXRvIG9wZW5pbmdPcmlnaW5EaXJlY3Rvcnkg
PSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQodG9wT3JpZ2luRGlyZWN0b3J5
LCBvcGVuaW5nT3JpZ2luKTsKICAgICAgICAgICAgIGFwcGx5KG9wZW5pbmdPcmlnaW5EaXJlY3Rv
cnkpOwogICAgICAgICB9CkBAIC00MTIsMjAgKzQxMSw0MCBAQCBWZWN0b3I8V2Vic2l0ZURhdGE6
OkVudHJ5PiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YUZyb21EaXNrKE9wdGlvblNl
dDxXZQogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgSGFzaE1hcDxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+PiBvcmln
aW5UeXBlczsKKyAgICAvLyBGZXRjaCB2aWEgZXhpc3RpbmcgT3JpZ2luU3RvcmFnZU1hbmFnZXJz
LgorICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiB2aXNpdGVkT3JpZ2luczsKKyAg
ICBmb3IgKGF1dG8mIFtvcmlnaW4sIG1hbmFnZXJdIDogbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5h
Z2VycykgeworICAgICAgICBPcmlnaW5TdG9yYWdlRGF0YU9wdGlvbnMgb3B0aW9ucyB7IG1fY3Vz
dG9tTG9jYWxTdG9yYWdlUGF0aCwgb3JpZ2luLCBzdGQ6Om51bGxvcHQgfTsKKyAgICAgICAgYXV0
byB0eXBlcyA9IG1hbmFnZXItPmZldGNoRGF0YSh0YXJnZXRUeXBlcywgV1RGTW92ZShvcHRpb25z
KSk7CisgICAgICAgIG9yaWdpblR5cGVzLmFkZChvcmlnaW4uY2xpZW50T3JpZ2luLCBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQodHlwZXMpOworICAg
ICAgICBvcmlnaW5UeXBlcy5hZGQob3JpZ2luLnRvcE9yaWdpbiwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4geyB9KS5pdGVyYXRvci0+dmFsdWUuYWRkKHR5cGVzKTsKKyAgICAgICAgdmlzaXRl
ZE9yaWdpbnMuYWRkKG9yaWdpbik7CisgICAgfQorCisgICAgLy8gRmV0Y2ggdmlhIG5ld2x5IGNy
ZWF0ZWQgT3JpZ2luU3RvcmFnZU1hbmFnZXJzIGJhc2VkIG9uIGRpc2sgZGF0YS4KICAgICBmb3JF
YWNoT3JpZ2luRGlyZWN0b3J5KFsmXShhdXRvIGRpcmVjdG9yeSkgbXV0YWJsZSB7Ci0gICAgICAg
IGF1dG8gb3JpZ2luID0gcmVhZE9yaWdpbkZyb21GaWxlKG9yaWdpbkZpbGVQYXRoKGRpcmVjdG9y
eSkpOwotICAgICAgICBpZiAoIW9yaWdpbikKKyAgICAgICAgYXV0byByZWFkT3JpZ2luID0gcmVh
ZE9yaWdpbkZyb21GaWxlKG9yaWdpbkZpbGVQYXRoKGRpcmVjdG9yeSkpOworICAgICAgICBpZiAo
IXJlYWRPcmlnaW4pCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgZm9yIChhdXRvJiBz
dG9yYWdlVHlwZSA6IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkoZGlyZWN0b3J5KSkgewotICAg
ICAgICAgICAgaWYgKGF1dG8gdHlwZSA9IHRvV2Vic2l0ZURhdGFUeXBlKHN0b3JhZ2VUeXBlKTsg
dHlwZSAmJiB0YXJnZXRUeXBlcy5jb250YWlucygqdHlwZSkpIHsKLSAgICAgICAgICAgICAgICAv
LyBSZXR1cm4gYm90aCB0b3Agb3JpZ2luIGFuZCBvcGVuaW5nIG9yaWdpbiBmb3IgdGhpcyBkYXRh
LgotICAgICAgICAgICAgICAgIG9yaWdpblR5cGVzLmFkZChvcmlnaW4tPmNsaWVudE9yaWdpbiwg
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4geyB9KS5pdGVyYXRvci0+dmFsdWUuYWRkKCp0eXBl
KTsKLSAgICAgICAgICAgICAgICBvcmlnaW5UeXBlcy5hZGQob3JpZ2luLT50b3BPcmlnaW4sIE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHsgfSkuaXRlcmF0b3ItPnZhbHVlLmFkZCgqdHlwZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byBvcmlnaW4gPSByZWFkT3Jp
Z2luLnZhbHVlKCk7CisgICAgICAgIGlmICh2aXNpdGVkT3JpZ2lucy5jb250YWlucyhvcmlnaW4p
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIE9yaWdpblN0b3JhZ2VEYXRhT3B0aW9u
cyBvcHRpb25zIHsgbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoLCBvcmlnaW4sIHN0ZDo6bnVsbG9w
dCB9OworICAgICAgICBhdXRvIHR5cGVzID0gbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihvcmln
aW4pLmZldGNoRGF0YSh0YXJnZXRUeXBlcywgV1RGTW92ZShvcHRpb25zKSk7CisgICAgICAgIHJl
bW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShvcmlnaW4pOworICAgICAgICBvcmln
aW5UeXBlcy5hZGQob3JpZ2luLmNsaWVudE9yaWdpbiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4geyB9KS5pdGVyYXRvci0+dmFsdWUuYWRkKHR5cGVzKTsKKyAgICAgICAgb3JpZ2luVHlwZXMu
YWRkKG9yaWdpbi50b3BPcmlnaW4sIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHsgfSkuaXRl
cmF0b3ItPnZhbHVlLmFkZCh0eXBlcyk7CiAgICAgfSk7CiAKKyAgICAvLyBGZXRjaCBMb2NhbFN0
b3JnZSBvcmlnaW5zIHNpbmNlIGl0IG1heSB1c2UgY3VzdG9tIHBhdGguCisgICAgaWYgKG1fY3Vz
dG9tTG9jYWxTdG9yYWdlUGF0aCkgeworICAgICAgICBhdXRvIG9yaWdpbnMgPSBMb2NhbFN0b3Jh
Z2VNYW5hZ2VyOjpnZXRPcmlnaW5zT2ZMb2NhbFN0b3JhZ2VEYXRhKCptX2N1c3RvbUxvY2FsU3Rv
cmFnZVBhdGgpOworICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IG9yaWdpbnMpCisgICAgICAg
ICAgICBvcmlnaW5UeXBlcy5hZGQob3JpZ2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB7
IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpOwor
ICAgIH0KKwogICAgIFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+IGVudHJpZXM7CiAgICAgZm9y
IChhdXRvIFtvcmlnaW4sIHR5cGVzXSA6IG9yaWdpblR5cGVzKSB7CiAgICAgICAgIGZvciAoYXV0
byB0eXBlIDogdHlwZXMpCkBAIC00NTUsMjUgKzQ3NCwyNiBAQCBWZWN0b3I8V2ViQ29yZTo6Q2xp
ZW50T3JpZ2luPiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZURhdGFPbkRpc2soT3B0aW9u
U2V0PAogICAgIFZlY3RvcjxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IGRlbGV0ZWRPcmlnaW5zOwog
ICAgIGZvckVhY2hPcmlnaW5EaXJlY3RvcnkoWyZdKGF1dG8gZGlyZWN0b3J5KSBtdXRhYmxlIHsK
ICAgICAgICAgYXV0byBmaWxlUGF0aCA9IG9yaWdpbkZpbGVQYXRoKGRpcmVjdG9yeSk7Ci0gICAg
ICAgIGF1dG8gb3JpZ2luID0gcmVhZE9yaWdpbkZyb21GaWxlKGZpbGVQYXRoKTsKLSAgICAgICAg
aWYgKCFvcmlnaW4pIHsKKyAgICAgICAgYXV0byByZWFkT3JpZ2luID0gcmVhZE9yaWdpbkZyb21G
aWxlKGZpbGVQYXRoKTsKKyAgICAgICAgaWYgKCFyZWFkT3JpZ2luKSB7CiAgICAgICAgICAgICAv
LyBJZiBvcmlnaW4gY2Fubm90IGJlIHJldHJpZXZlZCwgYnV0IHdlIGFyZSBhc2tlZCB0byByZW1v
dmUgZGF0YSBmb3IgYWxsIG9yaWdpbnMsIHJlbW92ZSBpdC4KICAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKFN0b3JhZ2UsICJOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZURhdGFPbkRp
c2sgZmFpbGVkIHRvIHJlYWQgb3JpZ2luIGZyb20gJyVzJyIsIGZpbGVQYXRoLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICAgICAgaWYgKGZpbHRlcihXZWJDb3JlOjpDbGllbnRPcmlnaW4geyB9KSkg
ewogICAgICAgICAgICAgICAgIGF1dG8gdGVtcE9yaWdpblN0b3JhZ2VNYW5hZ2VyID0gbWFrZVVu
aXF1ZTxPcmlnaW5TdG9yYWdlTWFuYWdlcj4oU3RyaW5nIHsgZGlyZWN0b3J5IH0pOwotICAgICAg
ICAgICAgICAgIHRlbXBPcmlnaW5TdG9yYWdlTWFuYWdlci0+ZGVsZXRlRGF0YSh0eXBlcywgbW9k
aWZpZWRTaW5jZVRpbWUpOworICAgICAgICAgICAgICAgIHRlbXBPcmlnaW5TdG9yYWdlTWFuYWdl
ci0+ZGVsZXRlRGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZVRpbWUsIE9yaWdpblN0b3JhZ2VEYXRh
T3B0aW9ucyB7IG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgc3RkOjpudWxsb3B0LCBzdGQ6Om51
bGxvcHQgfSk7CiAgICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZUlmTmVjZXNzYXJ5KGZp
bGVQYXRoKTsKICAgICAgICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9y
eShkaXJlY3RvcnkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKCFmaWx0ZXIoKm9yaWdpbikpCisgICAgICAgIGF1dG8gb3JpZ2lu
ID0gcmVhZE9yaWdpbi52YWx1ZSgpOworICAgICAgICBpZiAoIWZpbHRlcihvcmlnaW4pKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGRlbGV0ZWRPcmlnaW5zLmFwcGVuZCgqb3JpZ2lu
KTsKLSAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcigqb3JpZ2luKS5kZWxldGVEYXRh
KHR5cGVzLCBtb2RpZmllZFNpbmNlVGltZSk7Ci0gICAgICAgIHJlbW92ZU9yaWdpblN0b3JhZ2VN
YW5hZ2VySWZQb3NzaWJsZSgqb3JpZ2luKTsKKyAgICAgICAgZGVsZXRlZE9yaWdpbnMuYXBwZW5k
KG9yaWdpbik7CisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5kZWxl
dGVEYXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlVGltZSwgT3JpZ2luU3RvcmFnZURhdGFPcHRpb25z
IHsgbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoLCBvcmlnaW4sIHN0ZDo6bnVsbG9wdCB9KTsKKyAg
ICAgICAgcmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxlKG9yaWdpbik7CiAgICAg
ICAgIGRlbGV0ZU9yaWdpbkZpbGVJZk5lY2Vzc2FyeShmaWxlUGF0aCk7CiAgICAgICAgIEZpbGVT
eXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KGRpcmVjdG9yeSk7CiAgICAgfSk7CkBAIC01NDEs
NSArNTYxLDE2NiBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YUZvclJl
Z2lzdHJhYmxlRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdAogICAgIH0pOwogfQogCit2b2lk
IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6bW92ZURhdGEoY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhJiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdGFy
Z2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7Cisg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoIW1fY2xvc2VkKTsKKwor
ICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMg
fSwgc291cmNlID0gY3Jvc3NUaHJlYWRDb3B5KHNvdXJjZSksIHRhcmdldCA9IGNyb3NzVGhyZWFk
Q29weSh0YXJnZXQpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgeworICAgICAgICBhdXRvIHNvdXJjZU9yaWdpbiA9IFdlYkNvcmU6OkNs
aWVudE9yaWdpbiB7IHNvdXJjZSwgc291cmNlIH07CisgICAgICAgIGF1dG8gdGFyZ2V0T3JpZ2lu
ID0gV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgdGFyZ2V0LCB0YXJnZXQgfTsKKyAgICAgICAgCisg
ICAgICAgIC8vIENsZWFyIGV4aXN0aW5nIGRhdGEgZm9yIHRhcmdldCBvcmlnaW4uCisgICAgICAg
IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzID0geyBXZWJzaXRlRGF0YVR5cGU6OkZp
bGVTeXN0ZW0sIFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlLCBXZWJzaXRlRGF0YVR5cGU6
OlNlc3Npb25TdG9yYWdlICB9OworICAgICAgICBPcmlnaW5TdG9yYWdlRGF0YU9wdGlvbnMgb3B0
aW9ucyB7IG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgc291cmNlT3JpZ2luLCB0YXJnZXRPcmln
aW4gfTsKKyAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcih0YXJnZXRPcmlnaW4pLmRl
bGV0ZURhdGEodHlwZXMsIC1XYWxsVGltZTo6aW5maW5pdHkoKSwgT3JpZ2luU3RvcmFnZURhdGFP
cHRpb25zIHsgbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoLCBzb3VyY2VPcmlnaW4sIHN0ZDo6bnVs
bG9wdCB9KTsKKyAgICAgICAgcmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxlKHRh
cmdldE9yaWdpbik7CisKKyAgICAgICAgLy8gTW92ZSBkYXRhIGZyb20gc291cmNlIG9yaWdpbiB0
byB0YXJnZXQgb3JpZ2luLgorICAgICAgICBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKHNvdXJj
ZU9yaWdpbikubW92ZURhdGEob3JpZ2luRGlyZWN0b3J5UGF0aChtX3BhdGgsIHRhcmdldE9yaWdp
biwgbV9zYWx0KSwgT3JpZ2luU3RvcmFnZURhdGFPcHRpb25zIHsgbV9jdXN0b21Mb2NhbFN0b3Jh
Z2VQYXRoLCBzb3VyY2VPcmlnaW4sIHRhcmdldE9yaWdpbiB9KTsKKyAgICAgICAgcmVtb3ZlT3Jp
Z2luU3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxlKHNvdXJjZU9yaWdpbik7CisKKyAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9
KTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnN1c3BlbmQoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBtX3F1ZXVlLT5zdXNwZW5kKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gUmVmIHsgKnRoaXMgfV0geworICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2Fs
T3JpZ2luU3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBs
b2NhbFN0b3JhZ2VNYW5hZ2VyID0gbWFuYWdlci0+ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2Vy
KCkpCisgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTWFuYWdlci0+c3luY0xvY2FsU3RvcmFn
ZSgpOworICAgICAgICB9CisgICAgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQor
Cit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVzdW1lKCkKK3sKKyAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgbV9xdWV1ZS0+cmVzdW1lKCk7Cit9CisKK3ZvaWQgTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCkKK3sKKyAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSB7CisgICAgICAgIGZvciAoYXV0byYgbWFuYWdl
ciA6IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgICAg
IGlmIChhdXRvIGxvY2FsU3RvcmFnZU1hbmFnZXIgPSBtYW5hZ2VyLT5leGlzdGluZ0xvY2FsU3Rv
cmFnZU1hbmFnZXIoKSkKKyAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2VNYW5hZ2VyLT5oYW5k
bGVMb3dNZW1vcnlXYXJuaW5nKCk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKwordm9pZCBOZXR3
b3JrU3RvcmFnZU1hbmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7
ICp0aGlzIH0sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSB7CisgICAgICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1fbG9jYWxPcmlnaW5T
dG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGxvY2FsU3Rv
cmFnZU1hbmFnZXIgPSBtYW5hZ2VyLT5leGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKSkKKyAg
ICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2VNYW5hZ2VyLT5zeW5jTG9jYWxTdG9yYWdlKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6Y29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGEmIHRvcE9yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQXJlYUlkZW50
aWZpZXIpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgV2ViQ29yZTo6Q2xpZW50T3JpZ2luIG9yaWdpbiA9IHsgdG9wT3JpZ2lu
LCB0b3BPcmlnaW4gfTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihsb2NhbE9yaWdpblN0b3JhZ2VN
YW5hZ2VyKG9yaWdpbikubG9jYWxTdG9yYWdlTWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5
LCBtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgpLmNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoY29u
bmVjdGlvbi51bmlxdWVJRCgpLCBvcmlnaW4sIG1fcXVldWUuY29weVJlZigpKSk7Cit9CisKK3Zv
aWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VB
cmVhKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZp
ZXIsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdG9wT3JpZ2luLCBjb25zdCBX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIG9wZW5pbmdPcmlnaW4sIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU3RvcmFnZUFyZWFJZGVudGlmaWVyKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luID0geyB0b3BPcmlnaW4sIG9wZW5pbmdP
cmlnaW4gfTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vy
KG9yaWdpbikubG9jYWxTdG9yYWdlTWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LCBtX2N1
c3RvbUxvY2FsU3RvcmFnZVBhdGgpLmNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEo
Y29ubmVjdGlvbi51bmlxdWVJRCgpLCBvcmlnaW4pKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OmNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdG9wT3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFN0b3JhZ2VBcmVhSWRlbnRpZmllcik+JiYgY29tcGxldGlvbkhhbmRsZXIpCisKK3sKKyAg
ICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luID0geyB0b3BPcmlnaW4sIHRvcE9yaWdpbiB9
OworICAgIGNvbXBsZXRpb25IYW5kbGVyKGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2lu
KS5zZXNzaW9uU3RvcmFnZU1hbmFnZXIoKm1fc3RvcmFnZUFyZWFSZWdpc3RyeSkuY29ubmVjdFRv
U2Vzc2lvblN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgb3JpZ2luLCBpZGVudGlm
aWVyKSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkaXNjb25uZWN0RnJvbVN0
b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJZGVudGlm
aWVyIGlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9yYWdlQXJl
YShpZGVudGlmaWVyKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoc3RvcmFnZUFyZWEtPnN0b3JhZ2VUeXBlKCkgPT0gU3RvcmFnZUFyZWFCYXNlOjpT
dG9yYWdlVHlwZTo6TG9jYWwpCisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIoc3Rv
cmFnZUFyZWEtPm9yaWdpbigpKS5sb2NhbFN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VBcmVhUmVn
aXN0cnksIG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkuZGlzY29ubmVjdEZyb21TdG9yYWdlQXJl
YShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIGlkZW50aWZpZXIpOworICAgIGVsc2UKKyAgICAgICAg
bG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihzdG9yYWdlQXJlYS0+b3JpZ2luKCkpLnNlc3Npb25T
dG9yYWdlTWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5KS5kaXNjb25uZWN0RnJvbVN0b3Jh
Z2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgZnJvbUlkZW50
aWZpZXIsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHRvSWRlbnRpZmllcikKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1f
bG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKGF1dG8q
IHNlc3Npb25TdG9yYWdlTWFuYWdlciA9IG1hbmFnZXItPmV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VN
YW5hZ2VyKCkpCisgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZU1hbmFnZXItPmNsb25lU3RvcmFn
ZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBmcm9tSWRlbnRpZmllciwgdG9JZGVudGlmaWVy
KTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpnZXRWYWx1ZXMoU3Rv
cmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBt
X3N0b3JhZ2VBcmVhUmVnaXN0cnktPmdldFN0b3JhZ2VBcmVhKGlkZW50aWZpZXIpOworICAgIGlm
ICghc3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiB7IH0pOworCisgICAgY29tcGxldGlvbkhhbmRsZXIoc3RvcmFnZUFy
ZWEtPmFsbEl0ZW1zKCkpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c2V0SXRl
bShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVu
dGlmaWVyLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIGltcGxJZGVudGlmaWVyLCB1aW50NjRf
dCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUs
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgYXV0byBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFSZWdpc3RyeS0+Z2V0
U3RvcmFnZUFyZWEoaWRlbnRpZmllcik7CisgICAgYm9vbCBxdW90YUVycm9yID0gZmFsc2U7Cisg
ICAgaWYgKHN0b3JhZ2VBcmVhKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc3RvcmFnZUFyZWEt
PnNldEl0ZW0oY29ubmVjdGlvbi51bmlxdWVJRCgpLCBpbXBsSWRlbnRpZmllciwga2V5LCB2YWx1
ZSwgdXJsU3RyaW5nKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBxdW90YUVy
cm9yID0gKHJlc3VsdC5lcnJvcigpID09IFN0b3JhZ2VFcnJvcjo6UXVvdGFFeGNlZWRlZCk7Cisg
ICAgfQorCisgICAgY29ubmVjdGlvbi5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlk
U2V0SXRlbShzdG9yYWdlTWFwU2VlZCwga2V5LCBxdW90YUVycm9yKSwgaWRlbnRpZmllcik7Cit9
CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0b3JhZ2VB
cmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVk
LCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9y
YWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9yYWdlQXJlYShpZGVudGlmaWVyKTsKKyAgICBpZiAoc3Rv
cmFnZUFyZWEpCisgICAgICAgIHN0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGNvbm5lY3Rpb24udW5p
cXVlSUQoKSwgaW1wbElkZW50aWZpZXIsIGtleSwgdXJsU3RyaW5nKTsKKworICAgIGNvbm5lY3Rp
b24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFJlbW92ZUl0ZW0oc3RvcmFnZU1h
cFNlZWQsIGtleSksIGlkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6Y2xlYXIoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZp
ZXIgaWRlbnRpZmllciwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwg
dWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBzdG9yYWdlQXJlYSA9IG1f
c3RvcmFnZUFyZWFSZWdpc3RyeS0+Z2V0U3RvcmFnZUFyZWEoaWRlbnRpZmllcik7CisgICAgaWYg
KHN0b3JhZ2VBcmVhKQorICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoY29ubmVjdGlvbi51bmlx
dWVJRCgpLCBpbXBsSWRlbnRpZmllciwgdXJsU3RyaW5nKTsKKworICAgIGNvbm5lY3Rpb24uc2Vu
ZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZENsZWFyKHN0b3JhZ2VNYXBTZWVkKSwgaWRl
bnRpZmllcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmgg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5h
Z2VyLmgKaW5kZXggMmFkZGYyYjVlMjBhZDM2ZDI4ZTQ0NTk3ZWE0MTNmZmU4OTYxYTQwZi4uMDA3
NWM5NTM2NTE5Mjg5OTJiZTVkNTdmNWY4NDMyMDkwNTQ3ZWU1ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1h
bmFnZXIuaApAQCAtMjgsNiArMjgsOSBAQAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNs
dWRlICJGaWxlU3lzdGVtU3RvcmFnZUVycm9yLmgiCiAjaW5jbHVkZSAiT3JpZ2luU3RvcmFnZU1h
bmFnZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJT
dG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZUlk
ZW50aWZpZXIuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
Q2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtSGFuZGxlSWRlbnRp
Zmllci5oPgpAQCAtNDYsMTAgKzQ5LDExIEBAIHN0cnVjdCBDbGllbnRPcmlnaW47CiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeTsKK2Ns
YXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnk7CiAKIGNsYXNzIE5ldHdvcmtTdG9yYWdlTWFuYWdlciBm
aW5hbCA6IHB1YmxpYyBJUEM6OkNvbm5lY3Rpb246OldvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlciB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrU3RvcmFnZU1hbmFnZXI+IGNyZWF0ZShQ
QUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBzdGF0aWMgUmVmPE5ldHdv
cmtTdG9yYWdlTWFuYWdlcj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBh
dGgsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKTsKIAogICAg
IHZvaWQgc3RhcnRSZWNlaXZpbmdNZXNzYWdlRnJvbUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9u
Jik7CiAgICAgdm9pZCBzdG9wUmVjZWl2aW5nTWVzc2FnZUZyb21Db25uZWN0aW9uKElQQzo6Q29u
bmVjdGlvbiYpOwpAQCAtNjEsOSArNjUsMTQgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlRGF0
YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YT4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQg
ZGVsZXRlRGF0YU1vZGlmaWVkU2luY2UoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxU
aW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZGVsZXRlRGF0YUZv
clJlZ2lzdHJhYmxlRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik+JiYpOworICAgIHZvaWQgbW92
ZURhdGEoY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBzb3VyY2UsIGNvbnN0IFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOworICAgIHZvaWQgc3VzcGVuZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwor
ICAgIHZvaWQgcmVzdW1lKCk7CisgICAgdm9pZCBoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7Cisg
ICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAK
IHByaXZhdGU6Ci0gICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCBjb25z
dCBTdHJpbmcmIHBhdGgpOworICAgIE5ldHdvcmtTdG9yYWdlTWFuYWdlcihQQUw6OlNlc3Npb25J
RCwgY29uc3QgU3RyaW5nJiBwYXRoLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gY3VzdG9tTG9jYWxT
dG9yYWdlUGF0aCk7CiAgICAgfk5ldHdvcmtTdG9yYWdlTWFuYWdlcigpOwogICAgIE9yaWdpblN0
b3JhZ2VNYW5hZ2VyJiBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKGNvbnN0IFdlYkNvcmU6OkNs
aWVudE9yaWdpbiYpOwogICAgIHZvaWQgcmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBvc3Np
YmxlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOwpAQCAtNzUsOCArODQsOSBAQCBwcml2
YXRlOgogCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIgKGltcGxlbWVudGVkIGJ5IGdlbmVy
YXRlZCBjb2RlKQogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5j
b2Rlcik7CiAKLSAgICAvLyBNZXNzYWdlIGhhbmRsZXJzCisgICAgLy8gTWVzc2FnZSBoYW5kbGVy
cyBmb3IgRmlsZVN5c3RlbQogICAgIHZvaWQgcGVyc2lzdGVkKGNvbnN0IFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgcGVy
c2lzdChjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmKTsKICAgICB2b2lkIGZpbGVTeXN0ZW1HZXREaXJlY3RvcnkoSVBDOjpDb25uZWN0
aW9uJiwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChFeHBlY3RlZDxXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgRmlsZVN5c3Rl
bVN0b3JhZ2VFcnJvcj4pPiYmKTsKQEAgLTg4LDIyICs5OCwzMyBAQCBwcml2YXRlOgogICAgIHZv
aWQgcmVtb3ZlRW50cnkoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCBkZWxldGVSZWN1cnNpdmVseSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChzdGQ6Om9wdGlvbmFsPEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9p
ZCByZXNvbHZlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBXZWJDb3JlOjpG
aWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeHBlY3Rl
ZDxWZWN0b3I8U3RyaW5nPiwgRmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsKICAgICB2b2lk
IGdldEZpbGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoRXhwZWN0ZWQ8U3RyaW5nLCBGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYp
OwotCiAgICAgdXNpbmcgQWNjZXNzSGFuZGxlSW5mbyA9IHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxl
U3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50aWZpZXIsIElQQzo6U2hhcmVkRmlsZUhhbmRsZT47
CiAgICAgdm9pZCBjcmVhdGVTeW5jQWNjZXNzSGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5k
bGVJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cGVjdGVkPEFjY2Vzc0hhbmRs
ZUluZm8sIEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCBjbG9zZUFjY2Vz
c0hhbmRsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgV2ViQ29yZTo6Rmls
ZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KHN0ZDo6b3B0aW9uYWw8RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsKICAgICB2b2lkIGdl
dEhhbmRsZU5hbWVzKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBGaWxlU3lzdGVtU3RvcmFn
ZUVycm9yPik+JiYpOwogICAgIHZvaWQgZ2V0SGFuZGxlKElQQzo6Q29ubmVjdGlvbiYsIFdlYkNv
cmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBTdHJpbmcmJiBuYW1lLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKEV4cGVjdGVkPHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxl
SWRlbnRpZmllciwgYm9vbD4sIEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CisgICAgCisg
ICAgLy8gTWVzc2FnZSBoYW5kbGVycyBmb3IgV2ViU3RvcmFnZQorICAgIHZvaWQgY29ubmVjdFRv
TG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRp
ZmllciwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChTdG9yYWdlQXJlYUlkZW50aWZpZXIpPiYmKTsKKyAgICB2b2lkIGNvbm5lY3RUb1Ry
YW5zaWVudExvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFj
ZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFn
ZUFyZWFJZGVudGlmaWVyKT4mJik7CisgICAgdm9pZCBjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFy
ZWEoSVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFn
ZUFyZWFJZGVudGlmaWVyKT4mJik7CisgICAgdm9pZCBkaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVh
KElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllcik7CisgICAgdm9pZCBjbG9u
ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VOYW1lc3Bh
Y2VJZGVudGlmaWVyLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAgdm9pZCBnZXRW
YWx1ZXMoU3RvcmFnZUFyZWFJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik+JiYpOworICAgIHZvaWQgc2V0SXRlbShJUEM6OkNv
bm5lY3Rpb24mLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZp
ZXIsIHVpbnQ2NF90IHNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVl
LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CisgICAgdm9pZCByZW1vdmVJdGVtKElQQzo6Q29u
bmVjdGlvbiYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmll
ciwgdWludDY0X3Qgc2VlZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nKTsKKyAgICB2b2lkIGNsZWFyKElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VBcmVhSWRlbnRp
ZmllciwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc2VlZCwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpOwogCiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7Ci0gICAg
UmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKKyAgICBSZWY8U3VzcGVuZGFibGVXb3JrUXVldWU+IG1f
cXVldWU7CiAgICAgU3RyaW5nIG1fcGF0aDsKICAgICBGaWxlU3lzdGVtOjpTYWx0IG1fc2FsdDsK
ICAgICBib29sIG1fY2xvc2VkIHsgZmFsc2UgfTsKICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPE9yaWdpblN0b3JhZ2VNYW5hZ2VyPj4gbV9sb2NhbE9y
aWdpblN0b3JhZ2VNYW5hZ2VyczsKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdpbiwg
c3RkOjp1bmlxdWVfcHRyPE9yaWdpblN0b3JhZ2VNYW5hZ2VyPj4gbV9zZXNzaW9uT3JpZ2luU3Rv
cmFnZU1hbmFnZXJzOwogICAgIFdlYWtIYXNoU2V0PElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0
aW9uczsgLy8gTWFpbiB0aHJlYWQgb25seS4KICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsZVN5c3Rl
bVN0b3JhZ2VIYW5kbGVSZWdpc3RyeT4gbV9maWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlQXJlYVJlZ2lzdHJ5PiBtX3N0b3JhZ2VBcmVh
UmVnaXN0cnk7CisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG1fY3VzdG9tTG9jYWxTdG9yYWdl
UGF0aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFn
ZU1hbmFnZXIubWVzc2FnZXMuaW4KaW5kZXggNGU0MDVjNmVlYWQzMjZlMjViNDMxNjQyMDcwODA5
NWZhNjBkYzgzOC4uMDQyMmI2MzQ3NTFkMDM4NWY4NGUwMWY2NGFjNjFkYWYzMWMxNWU4OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9y
YWdlTWFuYWdlci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0zNSw5ICszNSwx
OCBAQAogICAgIFJlc29sdmUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRl
bnRpZmllciwgV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgdGFyZ2V0SWRlbnRp
ZmllcikgLT4gKEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9y
YWdlRXJyb3I+IHJlc3VsdCkgQXN5bmMKICAgICBNb3ZlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5k
bGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlm
aWVyIGRlc3RpbmF0aW9uSWRlbnRpZmllciwgU3RyaW5nIG5ld05hbWUpIC0+IChzdGQ6Om9wdGlv
bmFsPFdlYktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYwogICAgIEdl
dEZpbGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmllcikgLT4g
KEV4cGVjdGVkPFN0cmluZywgV2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQp
IEFzeW5jCi0KICAgICBDcmVhdGVTeW5jQWNjZXNzSGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1I
YW5kbGVJZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChFeHBlY3RlZDxzdGQ6OnBhaXI8V2ViQ29y
ZTo6RmlsZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyLCBJUEM6OlNoYXJlZEZpbGVI
YW5kbGU+LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkgQXN5bmMKICAg
ICBDbG9zZUFjY2Vzc0hhbmRsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBXZWJDb3JlOjpGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50aWZpZXIg
YWNjZXNzSGFuZGxlSWRlbnRpZmllcikgLT4gKHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpGaWxlU3lz
dGVtU3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5jCiAgICAgR2V0SGFuZGxlTmFtZXMoV2ViQ29y
ZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKEV4cGVjdGVkPFZl
Y3RvcjxTdHJpbmc+LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkgQXN5
bmMKICAgICBHZXRIYW5kbGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRl
bnRpZmllciwgU3RyaW5nIG5hbWUpIC0+IChFeHBlY3RlZDxzdGQ6OnBhaXI8V2ViQ29yZTo6Rmls
ZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIGJvb2w+LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdl
RXJyb3I+IHJlc3VsdCkgQXN5bmMgV2FudHNDb25uZWN0aW9uCisKKyAgICBDb25uZWN0VG9Mb2Nh
bFN0b3JhZ2VBcmVhKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgc3RvcmFnZU5h
bWVzcGFjZUlELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHNlY3VyaXR5T3Jp
Z2luRGF0YSkgLT4gKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpIFN5
bmNocm9ub3VzIFdhbnRzQ29ubmVjdGlvbgorICAgIENvbm5lY3RUb1RyYW5zaWVudExvY2FsU3Rv
cmFnZUFyZWEoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBzdG9yYWdlTmFtZXNw
YWNlSUQsIHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgdG9wTGV2ZWxTZWN1cml0
eU9yaWdpbkRhdGEsIHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgc2VjdXJpdHlP
cmlnaW5EYXRhKSAtPiAoV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikg
U3luY2hyb25vdXMgV2FudHNDb25uZWN0aW9uCisgICAgQ29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VB
cmVhKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgc3RvcmFnZU5hbWVzcGFjZUlE
LCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHNlY3VyaXR5T3JpZ2luRGF0YSkg
LT4gKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpIFN5bmNocm9ub3Vz
IFdhbnRzQ29ubmVjdGlvbgorICAgIERpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoV2ViS2l0OjpT
dG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikgV2FudHNDb25uZWN0aW9uCisgICAgQ2xv
bmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlm
aWVyIGZyb21TdG9yYWdlTmFtZXNwYWNlSUQsIFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50
aWZpZXIgdG9TdG9yYWdlTmFtZXNwYWNlSUQpIFdhbnRzQ29ubmVjdGlvbgorICAgIEdldFZhbHVl
cyhXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAoSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4gdmFsdWVzKSBTeW5jaHJvbm91cworICAgIFNldEl0ZW0oV2ViS2l0OjpT
dG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTdG9yYWdlQXJlYUltcGxJ
ZGVudGlmaWVyIGltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgU3RyaW5n
IGtleSwgU3RyaW5nIHZhbHVlLCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50c0Nvbm5lY3Rpb24KKyAg
ICBSZW1vdmVJdGVtKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdl
YktpdDo6U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qg
c3RvcmFnZU1hcFNlZWQsIFN0cmluZyBrZXksIFN0cmluZyB1cmxTdHJpbmcpIFdhbnRzQ29ubmVj
dGlvbgorICAgIENsZWFyKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIs
IFdlYktpdDo6U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0
X3Qgc3RvcmFnZU1hcFNlZWQsIFN0cmluZyB1cmxTdHJpbmcpIFdhbnRzQ29ubmVjdGlvbgogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0
b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9P
cmlnaW5TdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggOGNkNjU1YmUyNTA1YTViMzM0NmFhMzM1NWRm
OGIyNjgxZjExNWVlZS4uYzY3Y2U2MWVhMzE0YWI2ODJhNjNhMDMzNzE0MGYzMmVkN2NiMWRmNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0
b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0yOCw2ICsyOCwxMCBAQAogCiAjaW5jbHVk
ZSAiRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0
ZW1TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZU1hbmFnZXIuaCIKKyNp
bmNsdWRlICJTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVJl
Z2lzdHJ5LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCkBAIC01MywxMyArNTcsMjcgQEAgcHVibGljOgogCiAgICAgZW51bSBjbGFzcyBTdG9y
YWdlVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBGaWxlU3lzdGVtLAorICAgICAgICBMb2NhbFN0
b3JhZ2UsCisgICAgICAgIFNlc3Npb25TdG9yYWdlLAogICAgIH07CiAKKyAgICBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxXZWJzaXRlRGF0YVR5cGU+IHRvV2Vic2l0ZURhdGFUeXBlKGNvbnN0IFN0cmlu
ZyYgc3RvcmFnZUlkZW50aWZpZXIpCisgICAgeworICAgICAgICBpZiAoc3RvcmFnZUlkZW50aWZp
ZXIgPT0gIkZpbGVTeXN0ZW0iKQorICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhVHlwZTo6
RmlsZVN5c3RlbTsKKworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwogICAg
IHN0YXRpYyBTdHJpbmcgdG9TdG9yYWdlSWRlbnRpZmllcihTdG9yYWdlVHlwZSB0eXBlKQogICAg
IHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgU3RvcmFnZVR5cGU6OkZp
bGVTeXN0ZW06CiAgICAgICAgICAgICByZXR1cm4gIkZpbGVTeXN0ZW0iX3M7CisgICAgICAgIGNh
c2UgU3RvcmFnZVR5cGU6OkxvY2FsU3RvcmFnZToKKyAgICAgICAgICAgIHJldHVybiAiTG9jYWxT
dG9yYWdlIl9zOworICAgICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpTZXNzaW9uU3RvcmFnZToKKyAg
ICAgICAgICAgIHJldHVybiAiU2Vzc2lvblN0b3JhZ2UiX3M7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtODQsMTggKzEwMiwxMDQgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gKm1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOwogICAgIH0KIAor
ICAgIExvY2FsU3RvcmFnZU1hbmFnZXImIGxvY2FsU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFS
ZWdpc3RyeSYgcmVnaXN0cnksIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjdXN0b21QYXRoKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2xvY2FsU3RvcmFnZU1hbmFnZXIpCisgICAgICAgICAgICBtX2xv
Y2FsU3RvcmFnZU1hbmFnZXIgPSBtYWtlVW5pcXVlPExvY2FsU3RvcmFnZU1hbmFnZXI+KHJlZ2lz
dHJ5LCBjdXN0b21QYXRoID8gKmN1c3RvbVBhdGggOiBTdHJpbmcgeyB9KTsKKworICAgICAgICBy
ZXR1cm4gKm1fbG9jYWxTdG9yYWdlTWFuYWdlcjsKKyAgICB9CisKKyAgICBMb2NhbFN0b3JhZ2VN
YW5hZ2VyKiBleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fbG9jYWxTdG9yYWdlTWFuYWdlci5nZXQoKTsKKyAgICB9CisKKyAgICBTZXNzaW9uU3Rv
cmFnZU1hbmFnZXImIHNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiBy
ZWdpc3RyeSkKKyAgICB7CisgICAgICAgIGlmICghbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIpCisg
ICAgICAgICAgICBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlciA9IG1ha2VVbmlxdWU8U2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyPihyZWdpc3RyeSk7CisKKyAgICAgICAgcmV0dXJuICptX3Nlc3Npb25TdG9y
YWdlTWFuYWdlcjsKKyAgICB9CisKKyAgICBTZXNzaW9uU3RvcmFnZU1hbmFnZXIqIGV4aXN0aW5n
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Nlc3Npb25T
dG9yYWdlTWFuYWdlci5nZXQoKTsKKyAgICB9CisKICAgICBib29sIGlzQWN0aXZlKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiAhIW1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOworICAgICAgICBy
ZXR1cm4gbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIgfHwgbV9sb2NhbFN0b3JhZ2VNYW5hZ2Vy
IHx8IG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOworICAgIH0KKworICAgIE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IGZldGNoRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywg
T3JpZ2luU3RvcmFnZURhdGFPcHRpb25zJiYgb3B0aW9ucykKKyAgICB7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0gZmV0Y2hEYXRhSW5NZW1vcnkodHlwZXMpOworICAgICAgICByZXN1bHQuYWRkKGZl
dGNoRGF0YUZyb21EaXNrKHR5cGVzLCBXVEZNb3ZlKG9wdGlvbnMpKSk7CisKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2VUaW1lKQorICAgIHZvaWQg
ZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgV2FsbFRpbWUgbW9k
aWZpZWRTaW5jZVRpbWUsIE9yaWdpblN0b3JhZ2VEYXRhT3B0aW9ucyYmIG9wdGlvbnMpCiAgICAg
ewogICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVt
KSkKICAgICAgICAgICAgIGRlbGV0ZUZpbGVTeXN0ZW1TdG9yYWdlRGF0YShtb2RpZmllZFNpbmNl
VGltZSk7CisKKyAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9j
YWxTdG9yYWdlKSkKKyAgICAgICAgICAgIGRlbGV0ZUxvY2FsU3RvcmFnZURhdGEobW9kaWZpZWRT
aW5jZVRpbWUsIG9wdGlvbnMuY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgb3B0aW9ucy5vcmlnaW4p
OworCisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25T
dG9yYWdlKSAmJiBtb2RpZmllZFNpbmNlVGltZSA9PSAtV2FsbFRpbWU6OmluZmluaXR5KCkpCisg
ICAgICAgICAgICBkZWxldGVTZXNzaW9uU3RvcmFnZURhdGEoKTsKKyAgICB9CisKKyAgICB2b2lk
IG1vdmVEYXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgT3JpZ2luU3RvcmFnZURhdGFPcHRpb25zJiYg
b3B0aW9ucykKKyAgICB7CisgICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyID0gbnVs
bHB0cjsKKyAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdlcikKKyAgICAgICAgICAgIG1f
bG9jYWxTdG9yYWdlTWFuYWdlci0+Y2xvc2UoKTsKKworICAgICAgICBpZiAoIUZpbGVTeXN0ZW06
Om1vdmVGaWxlKG1fcm9vdFBhdGgsIHBhdGgpKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJPcmln
aW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6bW92ZUR0YSBmYWlsZWQgdG8gdXBkYXRl
IHBhdGggdG8gJyVzJyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgbW92ZUxvY2Fs
U3RvcmFnZURhdGEob3B0aW9ucy5jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoLCBvcHRpb25zLm9yaWdp
biwgb3B0aW9ucy50YXJnZXRPcmlnaW4pOwogICAgIH0KIAogcHJpdmF0ZToKKyAgICBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGFJbk1lbW9yeShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiB0eXBlcykKKyAgICB7CisgICAgICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IHJlc3VsdCB7IH07CisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6
OkxvY2FsU3RvcmFnZSkpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZU1hbmFnZXIg
JiYgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSkKKyAgICAgICAgICAg
ICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25T
dG9yYWdlKSkgeworICAgICAgICAgICAgaWYgKG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyICYmIG1f
c2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiBmZXRjaERhdGFGcm9tRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0
eXBlcywgT3JpZ2luU3RvcmFnZURhdGFPcHRpb25zJiYgb3B0aW9ucykKKyAgICB7CisgICAgICAg
IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHJlc3VsdCB7IH07CisgICAgICAgIGZvciAoYXV0
byYgc3RvcmFnZVR5cGUgOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KG1fcm9vdFBhdGgpKSB7
CisgICAgICAgICAgICBpZiAoYXV0byB0eXBlID0gdG9XZWJzaXRlRGF0YVR5cGUoc3RvcmFnZVR5
cGUpOyB0eXBlICYmIHR5cGVzLmNvbnRhaW5zKCp0eXBlKSkKKyAgICAgICAgICAgICAgICByZXN1
bHQuYWRkKCp0eXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkgJiYgIXJlc3VsdC5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKKyAgICAgICAgICAgIGF1dG8gcGF0aCA9IG9wdGlv
bnMuY3VzdG9tTG9jYWxTdG9yYWdlUGF0aDsKKyAgICAgICAgICAgIGF1dG8gb3JpZ2luID0gb3B0
aW9ucy5vcmlnaW47CisgICAgICAgICAgICBpZiAocGF0aCAmJiBvcmlnaW4gJiYgTG9jYWxTdG9y
YWdlTWFuYWdlcjo6aGFzTG9jYWxTdG9yYWdlRGF0YSgqcGF0aCwgKm9yaWdpbikpCisgICAgICAg
ICAgICAgICAgcmVzdWx0LmFkZChXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIHZvaWQgZGVsZXRl
RmlsZVN5c3RlbVN0b3JhZ2VEYXRhKFdhbGxUaW1lIG1vZGlmaWVkU2luY2VUaW1lKQogICAgIHsK
ICAgICAgICAgbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIgPSBudWxscHRyOwpAQCAtMTA0LDEw
ICsyMDgsNDMgQEAgcHJpdmF0ZToKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlQWxsRmlsZXNN
b2RpZmllZFNpbmNlKGZpbGVTeXN0ZW1TdG9yYWdlUGF0aCwgbW9kaWZpZWRTaW5jZVRpbWUpOwog
ICAgIH0KIAorICAgIHZvaWQgZGVsZXRlTG9jYWxTdG9yYWdlRGF0YShXYWxsVGltZSBtb2RpZmll
ZFNpbmNlVGltZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGN1c3RvbVBhdGgsIHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBvcmlnaW4pCisgICAgeworICAgICAgICBpZiAobV9s
b2NhbFN0b3JhZ2VNYW5hZ2VyKSB7CisgICAgICAgICAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXIt
PmNsZWFyRGF0YSgpOworCisgICAgICAgICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTWFuYWdlci0+
aXNBY3RpdmUoKSkKKyAgICAgICAgICAgICAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXIgPSBudWxs
cHRyOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBsb2NhbFN0b3JhZ2VQYXRoID0gdHlwZVN0
b3JhZ2VQYXRoKFN0b3JhZ2VUeXBlOjpMb2NhbFN0b3JhZ2UpOworICAgICAgICBGaWxlU3lzdGVt
OjpkZWxldGVBbGxGaWxlc01vZGlmaWVkU2luY2UobG9jYWxTdG9yYWdlUGF0aCwgbW9kaWZpZWRT
aW5jZVRpbWUpOworICAgICAgICBpZiAoY3VzdG9tUGF0aCAmJiBvcmlnaW4pCisgICAgICAgICAg
ICBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKG1vZGlmaWVkU2lu
Y2VUaW1lLCAqY3VzdG9tUGF0aCwgKm9yaWdpbik7CisgICAgfQorCisgICAgdm9pZCBkZWxldGVT
ZXNzaW9uU3RvcmFnZURhdGEoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdl
TWFuYWdlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3Nlc3Npb25TdG9yYWdl
TWFuYWdlci0+Y2xlYXJEYXRhKCk7CisgICAgICAgIGlmICghbV9zZXNzaW9uU3RvcmFnZU1hbmFn
ZXItPmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlciA9IG51
bGxwdHI7CisgICAgfQorICAgIAorICAgIHZvaWQgbW92ZUxvY2FsU3RvcmFnZURhdGEoc3RkOjpv
cHRpb25hbDxTdHJpbmc+IHBhdGgsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2lu
PiBvcmlnaW4sIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiB0YXJnZXRPcmln
aW4pCisgICAgeworICAgICAgICBpZiAocGF0aCAmJiBvcmlnaW4gJiYgdGFyZ2V0T3JpZ2luKQor
ICAgICAgICAgICAgTG9jYWxTdG9yYWdlTWFuYWdlcjo6bW92ZUxvY2FsU3RvcmFnZURhdGEoKnBh
dGgsICpvcmlnaW4sICp0YXJnZXRPcmlnaW4pOworICAgIH0KKyAgICAKICAgICBTdHJpbmcgbV9y
b290UGF0aDsKICAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwogICAgIFN0b3JhZ2VCdWNrZXRNb2Rl
IG1fbW9kZSB7IFN0b3JhZ2VCdWNrZXRNb2RlOjpCZXN0RWZmb3J0IH07CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcj4gbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFn
ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPExvY2FsU3RvcmFnZU1hbmFnZXI+IG1fbG9jYWxTdG9y
YWdlTWFuYWdlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyPiBt
X3Nlc3Npb25TdG9yYWdlTWFuYWdlcjsKIH07CiAKIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpPcmln
aW5TdG9yYWdlTWFuYWdlcihTdHJpbmcmJiBwYXRoKQpAQCAtMTM3LDE1ICsyNzQsMjkgQEAgRmls
ZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyJiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZmlsZVN5c3RlbVN0
b3JhZ2VNYW5hZ2VyKEZpbGVTeXMKICAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmZpbGVTeXN0
ZW1TdG9yYWdlTWFuYWdlcihyZWdpc3RyeSk7CiB9CiAKLWJvb2wgT3JpZ2luU3RvcmFnZU1hbmFn
ZXI6OmlzQWN0aXZlKCkKK0xvY2FsU3RvcmFnZU1hbmFnZXImIE9yaWdpblN0b3JhZ2VNYW5hZ2Vy
Ojpsb2NhbFN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5LCBzdGQ6
Om9wdGlvbmFsPFN0cmluZz4gY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkKIHsKLSAgICByZXR1cm4g
ZGVmYXVsdEJ1Y2tldCgpLmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5s
b2NhbFN0b3JhZ2VNYW5hZ2VyKHJlZ2lzdHJ5LCBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKTsKIH0K
IAotdm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiB0eXBlcywgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSkKK0xvY2FsU3RvcmFnZU1h
bmFnZXIqIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIo
KQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIGRlZmF1bHRCdWNrZXQo
KS5kZWxldGVEYXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlKTsKKyAgICByZXR1cm4gZGVmYXVsdEJ1
Y2tldCgpLmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcigpOworfQorCitTZXNzaW9uU3RvcmFn
ZU1hbmFnZXImIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpzZXNzaW9uU3RvcmFnZU1hbmFnZXIoU3Rv
cmFnZUFyZWFSZWdpc3RyeSYgcmVnaXN0cnkpCit7CisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQo
KS5zZXNzaW9uU3RvcmFnZU1hbmFnZXIocmVnaXN0cnkpOworfQorCitTZXNzaW9uU3RvcmFnZU1h
bmFnZXIqIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdl
cigpCit7CisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5leGlzdGluZ1Nlc3Npb25TdG9yYWdl
TWFuYWdlcigpOworfQorCitib29sIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSgpCit7
CisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5pc0FjdGl2ZSgpOwogfQogCiB2b2lkIE9yaWdp
blN0b3JhZ2VNYW5hZ2VyOjpzZXRQZXJzaXN0ZWQoYm9vbCB2YWx1ZSkKQEAgLTE1Niw1ICszMDcs
MjYgQEAgdm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6c2V0UGVyc2lzdGVkKGJvb2wgdmFsdWUp
CiAgICAgZGVmYXVsdEJ1Y2tldCgpLnNldE1vZGUodmFsdWUgPyBTdG9yYWdlQnVja2V0TW9kZTo6
UGVyc2lzdGVudCA6IFN0b3JhZ2VCdWNrZXRNb2RlOjpCZXN0RWZmb3J0KTsKIH0KIAorT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YShPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgT3JpZ2luU3RvcmFnZURhdGFPcHRpb25zJiYg
b3B0aW9ucykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVy
biBkZWZhdWx0QnVja2V0KCkuZmV0Y2hEYXRhKHR5cGVzLCBXVEZNb3ZlKG9wdGlvbnMpKTsKK30K
Kwordm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiB0eXBlcywgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgT3JpZ2luU3RvcmFnZURh
dGFPcHRpb25zJiYgb3B0aW9ucykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGRlZmF1bHRCdWNrZXQoKS5kZWxldGVEYXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlLCBX
VEZNb3ZlKG9wdGlvbnMpKTsKK30KKwordm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6bW92ZURh
dGEoY29uc3QgU3RyaW5nJiBuZXdQYXRoLCBPcmlnaW5TdG9yYWdlRGF0YU9wdGlvbnMmJiBvcHRp
b25zKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgZGVmYXVsdEJ1
Y2tldCgpLm1vdmVEYXRhKG5ld1BhdGgsIFdURk1vdmUob3B0aW9ucykpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuaAppbmRleCA3YWRmYTViMDNiNmJh
NmUzZjg2OTgwYjEyZDJmOGE0NGQ5ZTRlNjRiLi4zZmI4YWFmYzBlNzkzYmJhMGRiOWQ2Y2ZkMThl
NTkwM2UzZDUwNzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuaApAQCAtMjYsMTggKzI2LDI0IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1zdHJ1Y3QgQ2xpZW50T3JpZ2luOwotfQotCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeTsKIGNsYXNz
IEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcjsKK2NsYXNzIExvY2FsU3RvcmFnZU1hbmFnZXI7Citj
bGFzcyBTZXNzaW9uU3RvcmFnZU1hbmFnZXI7CitjbGFzcyBTdG9yYWdlQXJlYVJlZ2lzdHJ5Owog
ZW51bSBjbGFzcyBXZWJzaXRlRGF0YVR5cGUgOiB1aW50MzJfdDsKIAorc3RydWN0IE9yaWdpblN0
b3JhZ2VEYXRhT3B0aW9ucyB7CisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGN1c3RvbUxvY2Fs
U3RvcmFnZVBhdGg7CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IG9y
aWdpbjsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gdGFyZ2V0T3Jp
Z2luOworfTsKKwogY2xhc3MgT3JpZ2luU3RvcmFnZU1hbmFnZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtNDgsOCArNTQsMTQgQEAgcHVibGljOgogICAgIGJv
b2wgcGVyc2lzdGVkKCkgY29uc3QgeyByZXR1cm4gbV9wZXJzaXN0ZWQ7IH0KICAgICB2b2lkIHNl
dFBlcnNpc3RlZChib29sIHZhbHVlKTsKICAgICBGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXImIGZp
bGVTeXN0ZW1TdG9yYWdlTWFuYWdlcihGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5Jik7
CisgICAgTG9jYWxTdG9yYWdlTWFuYWdlciYgbG9jYWxTdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJl
YVJlZ2lzdHJ5Jiwgc3RkOjpvcHRpb25hbDxTdHJpbmc+KTsKKyAgICBMb2NhbFN0b3JhZ2VNYW5h
Z2VyKiBleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKTsKKyAgICBTZXNzaW9uU3RvcmFnZU1h
bmFnZXImIHNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5Jik7CisgICAg
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigpOwog
ICAgIGJvb2wgaXNBY3RpdmUoKTsKLSAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4sIFdhbGxUaW1lKTsKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBm
ZXRjaERhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9yaWdpblN0b3JhZ2VEYXRhT3B0
aW9ucyYmKTsKKyAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4s
IFdhbGxUaW1lLCBPcmlnaW5TdG9yYWdlRGF0YU9wdGlvbnMmJik7CisgICAgdm9pZCBtb3ZlRGF0
YShjb25zdCBTdHJpbmcmIG5ld1BhdGgsIE9yaWdpblN0b3JhZ2VEYXRhT3B0aW9ucyYmKTsKIAog
cHJpdmF0ZToKICAgICBlbnVtIGNsYXNzIFN0b3JhZ2VCdWNrZXRNb2RlIDogYm9vbDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdl
QXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3Rv
cmFnZUFyZWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiOGIxYzBiZTY5ZjVhODIzMjg1OTg0YmQ4NmYzZTE2
M2M2YzRjYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0b3JhZ2VBcmVhLmgi
CisKKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZUZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1NRTGl0ZVN0YXRlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlVHJhbnNhY3Rp
b24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NvbnN0ZXhwciBTZWNvbmRzIHRyYW5zYWN0aW9uRHVyYXRpb24geyA1MDBfbXMgfTsK
K2NvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtU2l6ZUZvclZhbHVlc0tlcHRJbk1lbW9yeSB7IDEg
KiBLQiB9OworY29uc3RleHByIGF1dG8gY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50QWx0ZXJuYXRp
dmUgPSAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgSXRlbVRhYmxlIChrZXkgVEVYVCBVTklR
VUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwgdmFsdWUgQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBG
QUlMKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZUl0ZW1UYWJsZVN0YXRlbWVudCA9ICJDUkVB
VEUgVEFCTEUgSXRlbVRhYmxlIChrZXkgVEVYVCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwg
dmFsdWUgQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSJfczsKKworc3RkOjpvcHRpb25h
bDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IFNRTGl0ZVN0b3JhZ2VBcmVhOjpmaWxlTmFt
ZVRvT3JpZ2luKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCit7CisgICAgYXV0byBzdWZmaXhMZW5n
dGggPSBzdHJsZW4oIi5sb2NhbHN0b3JhZ2UiKTsKKyAgICBhdXRvIGZpbGVOYW1lTGVuZ3RoID0g
ZmlsZU5hbWUubGVuZ3RoKCk7CisgICAgaWYgKGZpbGVOYW1lTGVuZ3RoIDw9IHN1ZmZpeExlbmd0
aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gb3JpZ2luSWRlbnRp
ZmllciA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZUxlbmd0aCAtIHN1ZmZpeExlbmd0
aCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNl
SWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVyKTsKK30KKworc3RhdGljIFN0cmluZyBvcmlnaW5U
b0ZpbGVOYW1lKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQoreworICAgIHJl
dHVybiBvcmlnaW4uY2xpZW50T3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpICsgIi5sb2NhbHN0
b3JhZ2UiOworfQorCitTdHJpbmcgU1FMaXRlU3RvcmFnZUFyZWE6OmRhdGFiYXNlUGF0aChjb25z
dCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4p
Cit7CisgICAgaWYgKGRpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOworCisgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChkaXJlY3RvcnksIG9yaWdpblRvRmlsZU5hbWUob3JpZ2luKSk7Cit9CisKK0FTQ0lJTGl0ZXJh
bCBTUUxpdGVTdG9yYWdlQXJlYTo6c3RhdGVtZW50U3RyaW5nKFN0YXRlbWVudFR5cGUgdHlwZSkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OkNv
dW50SXRlbXM6CisgICAgICAgIHJldHVybiAiU0VMRUNUIENPVU5UKCopIEZST00gSXRlbVRhYmxl
Il9zOworICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6RGVsZXRlSXRlbToKKyAgICAgICAgcmV0dXJu
ICJERUxFVEUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iX3M7CisgICAgY2FzZSBTdGF0ZW1l
bnRUeXBlOjpEZWxldGVBbGxJdGVtczoKKyAgICAgICAgcmV0dXJuICJERUxFVEUgRlJPTSBJdGVt
VGFibGUiX3M7CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpHZXRJdGVtOgorICAgICAgICByZXR1
cm4gIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyJfczsKKyAgICBjYXNl
IFN0YXRlbWVudFR5cGU6OkdldEFsbEl0ZW1zOgorICAgICAgICByZXR1cm4gIlNFTEVDVCBrZXks
IHZhbHVlIEZST00gSXRlbVRhYmxlIl9zOworICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6U2V0SXRl
bToKKyAgICAgICAgcmV0dXJuICJJTlNFUlQgSU5UTyBJdGVtVGFibGUgVkFMVUVTICg/LCA/KSJf
czsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OkludmFsaWQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAiIl9zOworfQorCitT
UUxpdGVTdG9yYWdlQXJlYTo6U1FMaXRlU3RvcmFnZUFyZWEodW5zaWduZWQgcXVvdGEsIGNvbnN0
IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGgsIFJlZjxX
b3JrUXVldWU+JiYgd29ya1F1ZXVlKQorICAgIDogU3RvcmFnZUFyZWFCYXNlKHF1b3RhLCBvcmln
aW4pCisgICAgLCBtX3BhdGgoZGF0YWJhc2VQYXRoKHBhdGgsIG9yaWdpbikpCisgICAgLCBtX3F1
ZXVlKFdURk1vdmUod29ya1F1ZXVlKSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0
YXRpY19jYXN0PHNpemVfdD4oU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7ICsraSkKKyAgICAgICAg
bV9jYWNoZWRTdGF0ZW1lbnRzLmFwcGVuZChudWxscHRyKTsKK30KKwordm9pZCBTUUxpdGVTdG9y
YWdlQXJlYTo6Y2xvc2UoKQoreworICAgIG1fY2FjaGUgPSBzdGQ6Om51bGxvcHQ7CisgICAgY29t
bWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKTsgKytpKQorICAgICAg
ICBtX2NhY2hlZFN0YXRlbWVudHNbaV0gPSBudWxscHRyOworICAgIG1fZGF0YWJhc2UgPSBudWxs
cHRyOworfQorCitTUUxpdGVTdG9yYWdlQXJlYTo6flNRTGl0ZVN0b3JhZ2VBcmVhKCkKK3sKKyAg
ICBib29sIGRhdGFiYXNlSXNFbXB0eSA9IGlzRW1wdHkoKTsKKyAgICBjbG9zZSgpOworICAgIGlm
IChkYXRhYmFzZUlzRW1wdHkpCisgICAgICAgIFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRl
bGV0ZURhdGFiYXNlRmlsZShtX3BhdGgpOworfQorCitib29sIFNRTGl0ZVN0b3JhZ2VBcmVhOjpp
c0VtcHR5KCkKK3sKKyAgICBpZiAobV9jYWNoZSkKKyAgICAgICAgcmV0dXJuIG1fY2FjaGUtPmlz
RW1wdHkoKTsKKworICAgIGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlw
ZTo6Q291bnRJdGVtcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX1JPVykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FM
aXRlU3RvcmFnZUFyZWE6OmlzRW1wdHkgZmFpbGVkIG9uIGV4ZWN1dGluZyBzdGF0ZW1lbnQgKCVk
KSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuICFzdGF0ZW1l
bnQtPmNvbHVtbkludCgwKTsKK30KKwordm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y2xlYXIoKQor
eworICAgIGNsb3NlKCk7CisgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0
YWJhc2VGaWxlKG1fcGF0aCk7CisgICAgbm90aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcigpOworfQor
Citib29sIFNRTGl0ZVN0b3JhZ2VBcmVhOjpjcmVhdGVUYWJsZUlmTmVjZXNzYXJ5KCkKK3sKKyAg
ICBpZiAoIW1fZGF0YWJhc2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyBz
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT50YWJsZVNRTCgiSXRlbVRhYmxlIl9zKTsKKyAgICBpZiAo
c3RhdGVtZW50ID09IGNyZWF0ZUl0ZW1UYWJsZVN0YXRlbWVudCB8fCBzdGF0ZW1lbnQgPT0gY3Jl
YXRlSXRlbVRhYmxlU3RhdGVtZW50QWx0ZXJuYXRpdmUpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgLy8gVGFibGUgZXhpc3RzIGJ1dCBzdGF0ZW1lbnQgaXMgd3Jvbmc7IGRyb3AgaXQuCisg
ICAgaWYgKCFzdGF0ZW1lbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS0+
ZXhlY3V0ZUNvbW1hbmQoIkRST1AgVEFCTEUgSXRlbVRhYmxlIl9zKSkgeworICAgICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpjcmVhdGVUYWJs
ZUlmTmVjZXNzYXJ5IGZhaWxlZCB0byBkcm9wIGV4aXN0aW5nIGl0ZW0gdGFibGUgKCVkKSAtICVz
IiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRh
YmxlIGRvZXMgbm90IGV4aXN0LgorICAgIGlmICghbV9kYXRhYmFzZS0+ZXhlY3V0ZUNvbW1hbmQo
Y3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50KSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihT
dG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmNyZWF0ZVRhYmxlSWZOZWNlc3NhcnkgZmFpbGVk
IHRvIGNyZWF0ZSBpdGVtIHRhYmxlICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigp
LCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTUUxpdGVTdG9yYWdlQXJlYTo6cHJl
cGFyZURhdGFiYXNlKCkKK3sKKyAgICBpZiAobV9kYXRhYmFzZSAmJiBtX2RhdGFiYXNlLT5pc09w
ZW4oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX2RhdGFiYXNlID0gbWFrZVVuaXF1
ZTxXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZT4oKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm9wZW4o
bV9wYXRoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3Rv
cmFnZUFyZWE6OnByZXBhcmVEYXRhYmFzZSBmYWlsZWQgdG8gb3BlbiBkYXRhYmFzZSBhdCAnJXMn
IiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtX2RhdGFiYXNlID0gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisgICAgLy8gU2luY2UgYSBX
b3JrUXVldWUgaXNuJ3QgYm91bmQgdG8gYSBzcGVjaWZpYyB0aHJlYWQsIHdlIG5lZWQgdG8gZGlz
YWJsZSB0aHJlYWRpbmcgY2hlY2suCisgICAgLy8gV2Ugd2lsbCBuZXZlciBhY2Nlc3MgdGhlIGRh
dGFiYXNlIGZyb20gZGlmZmVyZW50IHRocmVhZHMgc2ltdWx0YW5lb3VzbHkuCisgICAgbV9kYXRh
YmFzZS0+ZGlzYWJsZVRocmVhZGluZ0NoZWNrcygpOworCisgICAgaWYgKCFjcmVhdGVUYWJsZUlm
TmVjZXNzYXJ5KCkpIHsKKyAgICAgICAgbV9kYXRhYmFzZSA9IG51bGxwdHI7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocXVvdGEoKSAhPSBXZWJDb3JlOjpTdG9yYWdl
TWFwOjpub1F1b3RhKQorICAgICAgICBtX2RhdGFiYXNlLT5zZXRNYXhpbXVtU2l6ZShxdW90YSgp
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNRTGl0ZVN0b3JhZ2VBcmVhOjpzdGFy
dFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKQoreworICAgIGlmICghbV90cmFuc2FjdGlvbikKKyAg
ICAgICAgbV90cmFuc2FjdGlvbiA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rp
b24+KCptX2RhdGFiYXNlKTsKKworICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fdHJhbnNhY3Rpb24tPmJlZ2luKCk7CisgICAgbV9x
dWV1ZS0+ZGlzcGF0Y2hBZnRlcih0cmFuc2FjdGlvbkR1cmF0aW9uLCBbd2Vha1RoaXMgPSBXZWFr
UHRyIHsgKnRoaXMgfV0geworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+bV90
cmFuc2FjdGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAgICAgYXV0byB0cmFu
c2FjdGlvbiA9IHN0ZDo6ZXhjaGFuZ2Uod2Vha1RoaXMtPm1fdHJhbnNhY3Rpb24sIG51bGxwdHIp
OworICAgICAgICB0cmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgfSk7Cit9CisKK1dlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIFNRTGl0ZVN0b3JhZ2VBcmVhOjpjYWNoZWRT
dGF0ZW1lbnQoU3RhdGVtZW50VHlwZSB0eXBlKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlKTsK
KyAgICBBU1NFUlQodHlwZSA8IFN0YXRlbWVudFR5cGU6OkludmFsaWQpOworCisgICAgYXV0byBp
bmRleCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHR5cGUpOworICAgIGlmICghbV9jYWNoZWRTdGF0
ZW1lbnRzW2luZGV4XSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZGF0YWJhc2UtPnByZXBh
cmVIZWFwU3RhdGVtZW50KHN0YXRlbWVudFN0cmluZyh0eXBlKSk7CisgICAgICAgIGlmIChyZXN1
bHQpCisgICAgICAgICAgICBtX2NhY2hlZFN0YXRlbWVudHNbaW5kZXhdID0gcmVzdWx0LnZhbHVl
KCkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgfQorCisgICAgcmV0dXJuIFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgbV9jYWNoZWRTdGF0ZW1lbnRzW2luZGV4XS5nZXQo
KSB9OworfQorCitFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJvcj4gU1FMaXRlU3RvcmFnZUFy
ZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgaWYgKG1fY2FjaGUpIHsKKyAg
ICAgICAgYXV0byBpdGVyYXRvciA9IG1fY2FjaGUtPmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGl0
ZXJhdG9yID09IG1fY2FjaGUtPmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIGl0ZXJhdG9yLT52YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZ2V0SXRlbUZyb21EYXRh
YmFzZShrZXkpOworfQorCitFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJvcj4gU1FMaXRlU3Rv
cmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAg
aWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0
b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0
ZW1lbnQoU3RhdGVtZW50VHlwZTo6R2V0SXRlbSk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBrZXkpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0
b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0SXRlbUZyb21EYXRhYmFzZSBmYWlsZWQgb24g
Y3JlYXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBt
X2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9CisKKyAgICBpbnQgcmVzdWx0ID0gc3Rh
dGVtZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKQorICAgICAgICBy
ZXR1cm4gc3RhdGVtZW50LT5jb2x1bW5CbG9iQXNTdHJpbmcoMCk7CisgICAgaWYgKHJlc3VsdCAh
PSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FM
aXRlU3RvcmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2UgZmFpbGVkIG9uIHN0ZXBwaW5nIHN0
YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+
bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVy
cm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3Jh
Z2VFcnJvcjo6SXRlbU5vdEZvdW5kKTsKK30KKworSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gU1FM
aXRlU3RvcmFnZUFyZWE6OmFsbEl0ZW1zKCkKK3sKKyAgICBpZiAoIXByZXBhcmVEYXRhYmFzZSgp
KQorICAgICAgICByZXR1cm4gSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4geyB9OworCisgICAgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gaXRlbXM7CisgICAgaWYgKG1fY2FjaGUpIHsKKyAgICAgICAg
aXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NhY2hlLT5zaXplKCkpOworICAgICAgICBm
b3IgKGF1dG8mIFtrZXksIHZhbHVlXSA6ICptX2NhY2hlKSB7CisgICAgICAgICAgICBpZiAoIXZh
bHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgaXRlbXMuYWRkKGtleSwgdmFsdWUpOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoYXV0byByZXN1bHQgPSBnZXRJdGVtRnJvbURhdGFiYXNlKGtleSkpCisgICAgICAgICAgICAg
ICAgaXRlbXMuYWRkKGtleSwgcmVzdWx0LnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBpdGVtczsKKyAgICB9CisKKyAgICAvLyBJbXBvcnQgZnJvbSBkYXRhYmFzZS4KKyAgICBh
dXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlOjpHZXRBbGxJdGVt
cyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3Rv
cmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRBbGxJdGVtcyBmYWlsZWQgb24gY3JlYXRpbmcg
c3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNl
LT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgbV9j
YWNoZSA9IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsgfTsKKyAgICBpbnQgcmVzdWx0ID0gc3Rh
dGVtZW50LT5zdGVwKCk7CisgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgIFN0cmluZyBrZXkgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMCk7CisgICAgICAgIFN0cmlu
ZyB2YWx1ZSA9IHN0YXRlbWVudC0+Y29sdW1uQmxvYkFzU3RyaW5nKDEpOworICAgICAgICBpZiAo
IWtleS5pc051bGwoKSAmJiAhdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1fY2FjaGUt
PmFkZChrZXksIHZhbHVlLnNpemVJbkJ5dGVzKCkgPiBtYXhpbXVtU2l6ZUZvclZhbHVlc0tlcHRJ
bk1lbW9yeSA/IFN0cmluZygpIDogdmFsdWUpOworICAgICAgICAgICAgaXRlbXMuYWRkKFdURk1v
dmUoa2V5KSwgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0g
c3RhdGVtZW50LT5zdGVwKCk7CisgICAgfQorCisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9O
RSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVh
OjpnZXRBbGxJdGVtcyBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBt
X2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworCisg
ICAgcmV0dXJuIGl0ZW1zOworfQorCitFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IFNRTGl0
ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlv
biwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUltcGxJRCwgY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQor
eworICAgIGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKworICAgIHN0YXJ0VHJhbnNhY3Rpb25JZk5l
Y2Vzc2FyeSgpOworCisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIGlmIChhdXRvIHZhbHVlT3JF
cnJvciA9IGdldEl0ZW0oa2V5KSkKKyAgICAgICAgb2xkVmFsdWUgPSB2YWx1ZU9yRXJyb3IudmFs
dWUoKTsKKworICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFN0YXRlbWVudFR5
cGU6OlNldEl0ZW0pOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+YmluZFRleHQo
MSwga2V5KSB8fCBzdGF0ZW1lbnQtPmJpbmRCbG9iKDIsIHZhbHVlKSkgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OnNldEl0ZW0gZmFpbGVk
IG9uIGNyZWF0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3Io
KSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgaW50IHJlc3VsdCA9
IHN0YXRlbWVudC0+c3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX0ZVTEwpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OlF1b3RhRXhjZWVkZWQpOwor
ICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtIGZhaWxlZCBvbiBzdGVwcGlu
ZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJh
c2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3Jh
Z2VFcnJvcjo6RGF0YWJhc2UpOworICAgIH0KKyAgICAKKyAgICBpZiAobV9jYWNoZSkKKyAgICAg
ICAgbV9jYWNoZS0+c2V0KGtleSwgdmFsdWUuc2l6ZUluQnl0ZXMoKSA+IG1heGltdW1TaXplRm9y
VmFsdWVzS2VwdEluTWVtb3J5ID8gU3RyaW5nKCkgOiB2YWx1ZSk7CisKKyAgICBkaXNwYXRjaEV2
ZW50cyhjb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJRCwga2V5LCBvbGRWYWx1ZSwgdmFsdWUs
IHVybFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OworfQorCitFeHBlY3RlZDx2b2lkLCBTdG9y
YWdlRXJyb3I+IFNRTGl0ZVN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6
VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJl
YUltcGxJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQorewor
ICAgIGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKworICAgIHN0YXJ0VHJhbnNhY3Rpb25JZk5lY2Vz
c2FyeSgpOworICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICBpZiAoYXV0byB2YWx1ZU9yRXJyb3Ig
PSBnZXRJdGVtKGtleSkpCisgICAgICAgIG9sZFZhbHVlID0gdmFsdWVPckVycm9yLnZhbHVlKCk7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpJ
dGVtTm90Rm91bmQpOworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3Rh
dGVtZW50VHlwZTo6RGVsZXRlSXRlbSk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50
LT5iaW5kVGV4dCgxLCBrZXkpIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6
cmVtb3ZlSXRlbSBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2Rh
dGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQor
CisgICAgaWYgKG1fY2FjaGUpCisgICAgICAgIG1fY2FjaGUtPnJlbW92ZShrZXkpOworCisgICAg
ZGlzcGF0Y2hFdmVudHMoY29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIGtleSwgb2xkVmFs
dWUsIFN0cmluZygpLCB1cmxTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworRXhwZWN0
ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBTUUxpdGVTdG9yYWdlQXJlYTo6Y2xlYXIoSVBDOjpDb25u
ZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIHN0
b3JhZ2VBcmVhSW1wbElELCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBpZiAoIXBy
ZXBhcmVEYXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVy
cm9yOjpEYXRhYmFzZSk7CisKKyAgICBpZiAobV9jYWNoZSAmJiBtX2NhY2hlLT5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6Okl0ZW1Ob3RGb3Vu
ZCk7CisKKyAgICBpZiAobV9jYWNoZSkKKyAgICAgICAgbV9jYWNoZS0+Y2xlYXIoKTsKKworICAg
IHN0YXJ0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gY2Fj
aGVkU3RhdGVtZW50KFN0YXRlbWVudFR5cGU6OkRlbGV0ZUFsbEl0ZW1zKTsKKyAgICBpZiAoIXN0
YXRlbWVudCB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmNsZWFyIGZhaWxl
ZCBvbiBleGVjdXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJv
cigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9CisKKyAgICBpZiAobV9kYXRh
YmFzZS0+bGFzdENoYW5nZXMoKSA8PSAwKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
U3RvcmFnZUVycm9yOjpJdGVtTm90Rm91bmQpOworCisgICAgZGlzcGF0Y2hFdmVudHMoY29ubmVj
dGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIFN0cmluZygpLCBTdHJpbmcoKSwgU3RyaW5nKCksIHVy
bFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIFNRTGl0ZVN0b3JhZ2VBcmVh
Ojpjb21taXRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAoYXV0byB0cmFuc2Fj
dGlvbiA9IHN0ZDo6ZXhjaGFuZ2UobV90cmFuc2FjdGlvbiwgbnVsbHB0cikpCisgICAgICAgIHRy
YW5zYWN0aW9uLT5jb21taXQoKTsKK30KKwordm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6aGFuZGxl
TG93TWVtb3J5V2FybmluZygpCit7CisgICAgaWYgKG1fZGF0YWJhc2UgJiYgbV9kYXRhYmFzZS0+
aXNPcGVuKCkpCisgICAgICAgIG1fZGF0YWJhc2UtPnJlbGVhc2VNZW1vcnkoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGJkMzgxZjc3
MzAwOTdlMjk2OTdlZGM4NjE3NzVmMGU5MTdmYzE3YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5oCkBAIC0w
LDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0b3Jh
Z2VBcmVhQmFzZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBTUUxpdGVTdG9yYWdlQXJlYSBmaW5hbCA6IHB1YmxpYyBTdG9y
YWdlQXJlYUJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IHN0YXRpYyBTdHJpbmcgZGF0YWJhc2VQYXRoKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25z
dCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGZpbGVOYW1lVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSk7CisKKyAgICBTUUxpdGVTdG9yYWdlQXJlYSh1bnNpZ25lZCBxdW90YSwgY29uc3Qg
V2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgY29uc3QgU3RyaW5nJiBwYXRoLCBSZWY8V29ya1F1ZXVl
PiYmKTsKKyAgICB+U1FMaXRlU3RvcmFnZUFyZWEoKTsKKworICAgIHZvaWQgY2xvc2UoKTsKKyAg
ICB2b2lkIGhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKKyAgICB2b2lkIGNvbW1pdFRyYW5zYWN0
aW9uSWZOZWNlc3NhcnkoKTsKKworcHJpdmF0ZToKKyAgICAvLyBTdG9yYWdlQXJlYUJhc2UKKyAg
ICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTdG9yYWdlQXJlYUJhc2U6OlR5cGU6
OlNRTGl0ZTsgfTsKKyAgICBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGU6OkxvY2FsOyB9OworICAgIGJvb2wg
aXNFbXB0eSgpIGZpbmFsOworICAgIHZvaWQgY2xlYXIoKSBmaW5hbDsKKyAgICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBhbGxJdGVtcygpIGZpbmFsOworICAgIEV4cGVjdGVkPHZvaWQsIFN0b3Jh
Z2VFcnJvcj4gc2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUlt
cGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpIGZpbmFsOworICAgIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VF
cnJvcj4gcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUlt
cGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
IGZpbmFsOworICAgIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gY2xlYXIoSVBDOjpDb25u
ZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpIGZpbmFsOworCisgICAgYm9vbCBjcmVhdGVUYWJsZUlmTmVjZXNzYXJ5KCk7
CisgICAgYm9vbCBwcmVwYXJlRGF0YWJhc2UoKTsKKyAgICB2b2lkIHN0YXJ0VHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpOworCisgICAgZW51bSBjbGFzcyBTdGF0ZW1lbnRUeXBlIDogdWludDhfdCB7
CisgICAgICAgIENvdW50SXRlbXMsCisgICAgICAgIERlbGV0ZUl0ZW0sCisgICAgICAgIERlbGV0
ZUFsbEl0ZW1zLAorICAgICAgICBHZXRJdGVtLAorICAgICAgICBHZXRBbGxJdGVtcywKKyAgICAg
ICAgU2V0SXRlbSwKKyAgICAgICAgSW52YWxpZAorICAgIH07CisgICAgQVNDSUlMaXRlcmFsIHN0
YXRlbWVudFN0cmluZyhTdGF0ZW1lbnRUeXBlKSBjb25zdDsKKyAgICBXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZSk7Cisg
ICAgRXhwZWN0ZWQ8U3RyaW5nLCBTdG9yYWdlRXJyb3I+IGdldEl0ZW0oY29uc3QgU3RyaW5nJiBr
ZXkpOworICAgIEV4cGVjdGVkPFN0cmluZywgU3RvcmFnZUVycm9yPiBnZXRJdGVtRnJvbURhdGFi
YXNlKGNvbnN0IFN0cmluZyYga2V5KTsKKworICAgIFN0cmluZyBtX3BhdGg7CisgICAgUmVmPFdv
cmtRdWV1ZT4gbV9xdWV1ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U+IG1fZGF0YWJhc2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVRy
YW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50Pj4gbV9jYWNoZWRTdGF0ZW1lbnRzOworICAgIHN0ZDo6b3B0
aW9uYWw8SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4+IG1fY2FjaGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJLaXQ6OlNRTGl0
ZVN0b3JhZ2VBcmVhKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OlN0b3Jh
Z2VBcmVhQmFzZSYgYXJlYSkgeyByZXR1cm4gYXJlYS50eXBlKCkgPT0gV2ViS2l0OjpTdG9yYWdl
QXJlYUJhc2U6OlR5cGU6OlNRTGl0ZTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzZTJkMzY3NGFhZDI0OTJj
OTY1ZDgxYWM3NDZjNjcwMDA0MzM1YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMCww
ICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
ZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCIKKworI2luY2x1ZGUgIk1lbW9yeVN0b3JhZ2VBcmVhLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OlNlc3Npb25T
dG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKKyAgICA6IG1fcmVn
aXN0cnkocmVnaXN0cnkpCit7Cit9CisKK2Jvb2wgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjppc0Fj
dGl2ZSgpCit7CisgICAgcmV0dXJuIFdURjo6YW55T2YobV9zdG9yYWdlQXJlYXMudmFsdWVzKCks
IFsmXSAoYXV0byYgc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLT5o
YXNMaXN0ZW5lcnMoKTsKKyAgICB9KTsKK30KKworYm9vbCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6
Omhhc0RhdGFJbk1lbW9yeSgpCit7CisgICAgcmV0dXJuIFdURjo6YW55T2YobV9zdG9yYWdlQXJl
YXMudmFsdWVzKCksIFsmXSAoYXV0byYgc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgcmV0dXJuICFz
dG9yYWdlQXJlYS0+aXNFbXB0eSgpOworICAgIH0pOworfQorCit2b2lkIFNlc3Npb25TdG9yYWdl
TWFuYWdlcjo6Y2xlYXJEYXRhKCkKK3sKKyAgICBmb3IgKGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9z
dG9yYWdlQXJlYXMudmFsdWVzKCkpCisgICAgICAgIHN0b3JhZ2VBcmVhLT5jbGVhcigpOworfQor
Cit2b2lkIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5l
Y3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24pCit7CisgICAgZm9yIChhdXRvJiBzdG9yYWdlQXJl
YSA6IG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpKQorICAgICAgICBzdG9yYWdlQXJlYS0+cmVtb3Zl
TGlzdGVuZXIoY29ubmVjdGlvbik7Cit9CisKK1N0b3JhZ2VBcmVhSWRlbnRpZmllciBTZXNzaW9u
U3RvcmFnZU1hbmFnZXI6OmFkZFN0b3JhZ2VBcmVhKHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlTdG9y
YWdlQXJlYT4gc3RvcmFnZUFyZWEsIElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlv
biwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgbmFtZXNwYWNlSWRlbnRpZmllcikKK3sKKyAg
ICBhdXRvIGlkZW50aWZpZXIgPSBzdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpOworICAgIG1fcmVn
aXN0cnkucmVnaXN0ZXJTdG9yYWdlQXJlYShpZGVudGlmaWVyLCAqc3RvcmFnZUFyZWEpOworICAg
IHN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25uZWN0aW9uKTsKKyAgICBtX3N0b3JhZ2VBcmVh
c0J5TmFtZXNwYWNlLnNldChuYW1lc3BhY2VJZGVudGlmaWVyLCBpZGVudGlmaWVyKTsKKyAgICBt
X3N0b3JhZ2VBcmVhcy5zZXQoaWRlbnRpZmllciwgV1RGTW92ZShzdG9yYWdlQXJlYSkpOworCisg
ICAgcmV0dXJuIGlkZW50aWZpZXI7Cit9CisKK1N0b3JhZ2VBcmVhSWRlbnRpZmllciBTZXNzaW9u
U3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3Jp
Z2luLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBuYW1lc3BhY2VJZGVudGlmaWVyKQorewor
ICAgIGF1dG8gaWRlbnRpZmllciA9IG1fc3RvcmFnZUFyZWFzQnlOYW1lc3BhY2UuZ2V0KG5hbWVz
cGFjZUlkZW50aWZpZXIpOworICAgIGlmIChpZGVudGlmaWVyLmlzVmFsaWQoKSkgeworICAgICAg
ICBBU1NFUlQobV9zdG9yYWdlQXJlYXMuY29udGFpbnMoaWRlbnRpZmllcikpOworICAgICAgICBy
ZXR1cm4gaWRlbnRpZmllcjsKKyAgICB9CisKKyAgICBhdXRvIG5ld1N0b3JhZ2VBcmVhID0gbWFr
ZVVuaXF1ZTxNZW1vcnlTdG9yYWdlQXJlYT4ob3JpZ2luKTsKKyAgICByZXR1cm4gYWRkU3RvcmFn
ZUFyZWEoV1RGTW92ZShuZXdTdG9yYWdlQXJlYSksIGNvbm5lY3Rpb24sIG5hbWVzcGFjZUlkZW50
aWZpZXIpOworfQorCit2b2lkIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6ZGlzY29ubmVjdEZyb21T
dG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VB
cmVhSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvKiBzdG9yYWdlQXJlYSA9
IG1fc3RvcmFnZUFyZWFzLmdldChpZGVudGlmaWVyKSkKKyAgICAgICAgc3RvcmFnZUFyZWEtPnJl
bW92ZUxpc3RlbmVyKGNvbm5lY3Rpb24pOworfQorCit2b2lkIFNlc3Npb25TdG9yYWdlTWFuYWdl
cjo6Y2xvbmVTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24s
IFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHNvdXJjZU5hbWVzcGFjZUlkZW50aWZpZXIsIFN0
b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHRhcmdldE5hbWVzcGFjZUlkZW50aWZpZXIpCit7Cisg
ICAgYXV0byBpZGVudGlmaWVyID0gbV9zdG9yYWdlQXJlYXNCeU5hbWVzcGFjZS5nZXQoc291cmNl
TmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAgaWYgKCFpZGVudGlmaWVyLmlzVmFsaWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VBcmVhcy5m
aW5kKGlkZW50aWZpZXIpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VBcmVhcy5lbmQoKSkgeworICAg
ICAgICBhdXRvIG5ld1N0b3JhZ2VBcmVhID0gaXRlcmF0b3ItPnZhbHVlLT5jbG9uZSgpOworICAg
ICAgICBhZGRTdG9yYWdlQXJlYShXVEZNb3ZlKG5ld1N0b3JhZ2VBcmVhKSwgY29ubmVjdGlvbiwg
dGFyZ2V0TmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTk2NTU1MmYx
NTdiMDZmMDE1ZjM0MDE4OTE0YmIyYWQyZjhlYjAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlTWFuYWdlci5oCkBA
IC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlm
aWVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBNZW1vcnlTdG9yYWdlQXJlYTsK
KworY2xhc3MgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBTZXNzaW9uU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdp
c3RyeSYpOworICAgIGJvb2wgaXNBY3RpdmUoKTsKKyAgICBib29sIGhhc0RhdGFJbk1lbW9yeSgp
OworICAgIHZvaWQgY2xlYXJEYXRhKCk7CisgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKElQQzo6
Q29ubmVjdGlvbjo6VW5pcXVlSUQpOworCisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGNvbm5l
Y3RUb1Nlc3Npb25TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAg
dm9pZCBkaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQs
IFN0b3JhZ2VBcmVhSWRlbnRpZmllcik7CisgICAgdm9pZCBjbG9uZVN0b3JhZ2VBcmVhKElQQzo6
Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBTdG9yYWdl
TmFtZXNwYWNlSWRlbnRpZmllcik7CisKK3ByaXZhdGU6CisgICAgU3RvcmFnZUFyZWFJZGVudGlm
aWVyIGFkZFN0b3JhZ2VBcmVhKHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlTdG9yYWdlQXJlYT4sIElQ
Qzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyKTsKKwor
ICAgIFN0b3JhZ2VBcmVhUmVnaXN0cnkmIG1fcmVnaXN0cnk7CisgICAgSGFzaE1hcDxTdG9yYWdl
QXJlYUlkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlTdG9yYWdlQXJlYT4+IG1fc3Rv
cmFnZUFyZWFzOworICAgIEhhc2hNYXA8U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFN0b3Jh
Z2VBcmVhSWRlbnRpZmllcj4gbV9zdG9yYWdlQXJlYXNCeU5hbWVzcGFjZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZiZjc1ODQ3
YzU4ZTMxZDE4ZjhhNWY3NTgzMjE4MzU0MDA2M2UzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuY3BwCkBAIC0w
LDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U3RvcmFnZUFyZWFCYXNlLmgiCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VBcmVhQmFz
ZSh1bnNpZ25lZCBxdW90YSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pCisg
ICAgOiBtX2lkZW50aWZpZXIoU3RvcmFnZUFyZWFJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQorICAg
ICwgbV9xdW90YShxdW90YSkKKyAgICAsIG1fb3JpZ2luKG9yaWdpbikKK3sKK30KKworU3RvcmFn
ZUFyZWFCYXNlOjp+U3RvcmFnZUFyZWFCYXNlKCkgPSBkZWZhdWx0OworCit2b2lkIFN0b3JhZ2VB
cmVhQmFzZTo6YWRkTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9u
KQoreworICAgIEFTU0VSVCghbV9saXN0ZW5lcnMuY29udGFpbnMoY29ubmVjdGlvbikpOworCisg
ICAgbV9saXN0ZW5lcnMuYWRkKGNvbm5lY3Rpb24pOworfQorCit2b2lkIFN0b3JhZ2VBcmVhQmFz
ZTo6cmVtb3ZlTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uKQor
eworICAgIG1fbGlzdGVuZXJzLnJlbW92ZShjb25uZWN0aW9uKTsKK30KKworYm9vbCBTdG9yYWdl
QXJlYUJhc2U6Omhhc0xpc3RlbmVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2xpc3RlbmVy
cy5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFCYXNlOjpub3RpZnlMaXN0ZW5lcnNB
Ym91dENsZWFyKCkKK3sKKyAgICBmb3IgKGF1dG8mIGNvbm5lY3Rpb24gOiBtX2xpc3RlbmVycykK
KyAgICAgICAgSVBDOjpDb25uZWN0aW9uOjpzZW5kKGNvbm5lY3Rpb24sIE1lc3NhZ2VzOjpTdG9y
YWdlQXJlYU1hcDo6Q2xlYXJDYWNoZSgpLCBtX2lkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisK
K3ZvaWQgU3RvcmFnZUFyZWFCYXNlOjpkaXNwYXRjaEV2ZW50cyhJUEM6OkNvbm5lY3Rpb246OlVu
aXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc291cmNl
SW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVl
LCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3QK
K3sKKyAgICBBU1NFUlQoc291cmNlSW1wbElkZW50aWZpZXIpOworCisgICAgZm9yIChhdXRvJiBj
b25uZWN0aW9uIDogbV9saXN0ZW5lcnMpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxTdG9yYWdl
QXJlYUltcGxJZGVudGlmaWVyPiBpbXBsSWRlbnRpZmllcjsKKyAgICAgICAgaWYgKGNvbm5lY3Rp
b24gPT0gc291cmNlQ29ubmVjdGlvbikKKyAgICAgICAgICAgIGltcGxJZGVudGlmaWVyID0gc291
cmNlSW1wbElkZW50aWZpZXI7CisgICAgICAgIElQQzo6Q29ubmVjdGlvbjo6c2VuZChjb25uZWN0
aW9uLCBNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpc3BhdGNoU3RvcmFnZUV2ZW50KGltcGxJ
ZGVudGlmaWVyLCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgdXJsU3RyaW5nKSwgbV9pZGVudGlm
aWVyLnRvVUludDY0KCkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKwor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFn
ZUFyZWFCYXNlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFn
ZUFyZWFCYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTkwNTFiMTRiMzU5OWZhZGVjODRiYWU3MGFkODZlZTAw
MGNkN2U4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiU3RvcmFn
ZUFyZWFJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllci5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworc3RydWN0IENsaWVudE9yaWdpbjsKK30KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gY2xhc3MgU3RvcmFnZUVycm9yIDogdWludDhfdCB7
CisgICAgRGF0YWJhc2UsCisgICAgSXRlbU5vdEZvdW5kLAorICAgIFF1b3RhRXhjZWVkZWQsCit9
OworCitjbGFzcyBTdG9yYWdlQXJlYUJhc2UgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U3RvcmFn
ZUFyZWFCYXNlPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RvcmFnZUFyZWFCYXNlKTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTdG9yYWdlQXJlYUJh
c2UodW5zaWduZWQgcXVvdGEsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIHZp
cnR1YWwgflN0b3JhZ2VBcmVhQmFzZSgpOworCisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhf
dCB7IFNRTGl0ZSwgTWVtb3J5IH07CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7
CisgICAgZW51bSBjbGFzcyBTdG9yYWdlVHlwZSA6IGJvb2wgeyBTZXNzaW9uLCBMb2NhbCB9Owor
ICAgIHZpcnR1YWwgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGlzRW1wdHkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOwor
CisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X2lkZW50aWZpZXI7IH0KKyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICB1bnNpZ25lZCBxdW90YSgpIGNvbnN0IHsgcmV0dXJu
IG1fcXVvdGE7IH0KKyAgICB2b2lkIGFkZExpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVl
SUQpOworICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7
CisgICAgYm9vbCBoYXNMaXN0ZW5lcnMoKSBjb25zdDsKKyAgICB2b2lkIG5vdGlmeUxpc3RlbmVy
c0Fib3V0Q2xlYXIoKTsKKworICAgIHZpcnR1YWwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gYWxs
SXRlbXMoKSA9IDA7CisgICAgdmlydHVhbCBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IHNl
dEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nKSA9IDA7CisgICAgdmlydHVhbCBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+
IHJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSA9IDA7
CisgICAgdmlydHVhbCBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IGNsZWFyKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnRz
KElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5l
d1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
U3RvcmFnZUFyZWFJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICB1bnNpZ25lZCBtX3F1b3Rh
OworICAgIFdlYkNvcmU6OkNsaWVudE9yaWdpbiBtX29yaWdpbjsKKyAgICBIYXNoU2V0PElQQzo6
Q29ubmVjdGlvbjo6VW5pcXVlSUQ+IG1fbGlzdGVuZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1YmU2OGM5ZGNl
NWJmY2VlNWJjYzdiOGI2NjZjYWQxNTE0NTExNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAKQEAg
LTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTdG9yYWdlQXJlYVJlZ2lzdHJ5LmgiCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUJhc2UuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1N0b3JhZ2VBcmVhUmVnaXN0cnk6OlN0b3JhZ2VBcmVh
UmVnaXN0cnkoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgU3RvcmFnZUFyZWFSZWdpc3RyeTo6cmVnaXN0
ZXJTdG9yYWdlQXJlYShTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgU3RvcmFnZUFy
ZWFCYXNlJiBzdG9yYWdlQXJlYSkKK3sKKyAgICBBU1NFUlQoIW1fc3RvcmFnZUFyZWFzLmNvbnRh
aW5zKGlkZW50aWZpZXIpKTsKKworICAgIG1fc3RvcmFnZUFyZWFzLmFkZChpZGVudGlmaWVyLCBz
dG9yYWdlQXJlYSk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFSZWdpc3RyeTo6dW5yZWdpc3RlclN0
b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIEFTU0VS
VChtX3N0b3JhZ2VBcmVhcy5jb250YWlucyhpZGVudGlmaWVyKSk7CisKKyAgICBtX3N0b3JhZ2VB
cmVhcy5yZW1vdmUoaWRlbnRpZmllcik7Cit9CisKK1N0b3JhZ2VBcmVhQmFzZSogU3RvcmFnZUFy
ZWFSZWdpc3RyeTo6Z2V0U3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZp
ZXIpCit7CisgICAgaWYgKGF1dG8gc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhcy5nZXQoaWRl
bnRpZmllcikpCisgICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS5nZXQoKTsKKworICAgIHJldHVy
biBudWxscHRyOworfQorCit2b2lkIFN0b3JhZ2VBcmVhUmVnaXN0cnk6OmZvckVhY2hTdG9yYWdl
QXJlYShjb25zdCBGdW5jdGlvbjx2b2lkKFN0b3JhZ2VBcmVhQmFzZSYpPiYgYXBwbHkpCit7Cisg
ICAgSGFzaFNldDxTdG9yYWdlQXJlYUlkZW50aWZpZXI+IGlkZW50aWZpZXJzVG9SZW1vdmU7Cisg
ICAgZm9yIChhdXRvIFtpZGVudGlmaWVyLCBzdG9yYWdlQXJlYV0gOiBtX3N0b3JhZ2VBcmVhcykg
eworICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7CisgICAgICAgICAgICBpZGVudGlmaWVyc1Rv
UmVtb3ZlLmFkZChpZGVudGlmaWVyKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgYXBwbHkoKnN0b3JhZ2VBcmVhKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8g
aWRlbnRpZmllciA6IGlkZW50aWZpZXJzVG9SZW1vdmUpCisgICAgICAgIG1fc3RvcmFnZUFyZWFz
LnJlbW92ZShpZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdp
c3RyeS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVh
UmVnaXN0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMGMzZWE0N2U1Y2Y0MzMwMGZjNzQ4MjRiYWE5MmZlNjAz
MmJiZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiU3Rv
cmFnZUFyZWFJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFN0b3JhZ2VBcmVhQmFzZTsKKworY2xhc3MgU3RvcmFnZUFy
ZWFSZWdpc3RyeSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
U3RvcmFnZUFyZWFSZWdpc3RyeSgpOworICAgIHZvaWQgcmVnaXN0ZXJTdG9yYWdlQXJlYShTdG9y
YWdlQXJlYUlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhQmFzZSYpOworICAgIHZvaWQgdW5yZWdpc3Rl
clN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhSWRlbnRpZmllcik7CisgICAgU3RvcmFnZUFyZWFCYXNl
KiBnZXRTdG9yYWdlQXJlYShTdG9yYWdlQXJlYUlkZW50aWZpZXIpOworICAgIHZvaWQgZm9yRWFj
aFN0b3JhZ2VBcmVhKGNvbnN0IEZ1bmN0aW9uPHZvaWQoU3RvcmFnZUFyZWFCYXNlJik+Jik7CisK
K3ByaXZhdGU6CisgICAgSGFzaE1hcDxTdG9yYWdlQXJlYUlkZW50aWZpZXIsIFdlYWtQdHI8U3Rv
cmFnZUFyZWFCYXNlPj4gbV9zdG9yYWdlQXJlYXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy9nZW5lcmF0ZS11bmlmaWVkLXNv
dXJjZXMuc2ggYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtdW5pZmllZC1zb3VyY2Vz
LnNoCmluZGV4IGI2ZDQwYWQ5ZTk1NDdiZDQwZGU4NWM5Yzg1YTM1YzFlMjVjZGYxOTEuLjRmMWFj
ODNjYjNhMjI2ZWNjZDA3ODM5ODM3OTIzY2JjNDRiYWI5MjMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2NyaXB0cy9nZW5lcmF0ZS11bmlmaWVkLXNvdXJjZXMuc2gKKysrIGIvU291cmNlL1dl
YktpdC9TY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaApAQCAtMTQsNyArMTQsNyBA
QCBpZiBbIC16ICIke0JVSUxEX1NDUklQVFNfRElSfSIgXTsgdGhlbgogICAgIGZpCiBmaQogCi1V
bmlmaWVkU291cmNlQ3BwRmlsZUNvdW50PTExMQorVW5pZmllZFNvdXJjZUNwcEZpbGVDb3VudD0x
MTIKIFVuaWZpZWRTb3VyY2VNbUZpbGVDb3VudD04MAogCiBpZiBbICQjIC1lcSAwIF07IHRoZW4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXMudHh0CmluZGV4IDA1YTg1YjAxOTYwNDIwMTZhYjY4NWYyMGQ0YmVmNzNjNDYyNjU2MDcu
LjQyZmI2MWIxNzc1MWUxMTk3MzJmYWFiMjZlMTU4YTUyNjM1NTM1MjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApA
QCAtMTQzLDggKzE0MywxNCBAQCBOZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2VyL1dlYlNXU2Vy
dmVyVG9Db250ZXh0Q29ubmVjdGlvbi5jcHAgQG5vLXVuaWZ5CiBOZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL0ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5jcHAKIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
RmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGUuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0ZpbGVT
eXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0xv
Y2FsU3RvcmFnZU1hbmFnZXIuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3Jh
Z2VBcmVhLmNwcAogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIu
Y3BwCiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcAorTmV0
d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKK05ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcAorTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9TdG9yYWdlQXJlYUJhc2UuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVh
UmVnaXN0cnkuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0
YWJhc2UuY3BwCiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IDM1M2U1ZjQ2NmY2YWNiYTc2ZWJmY2YzOWQy
NzNiYWEzYzE1NjJmOTIuLjI1Y2U0NmE3ZjgyMjBjYjRiNmEzMDBmOWFlNzYyNjVlNWRhMzNiYzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5LmNwcApAQCAtMTU3MiwxNiArMTU3Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKGNvbnN0IFN0cmluZyYgaW5kZXhl
ZERhdGFiCiAgICAgICAgIEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGljTGluayhpbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnksIG9sZFZlcnNpb25EaXJlY3RvcnkpOwogfQogCi12b2lkIE5ldHdvcmtQ
cm9jZXNzUHJveHk6OmdldExvY2FsU3RvcmFnZURldGFpbHMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlm
ICghY2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6R2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhzZXNzaW9uSUQp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViUGFnZVByb3h5
SWRlbnRpZmllciB3ZWJQYWdlUHJveHlJRCwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgd2ViUGFn
ZUlELCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIFdlYkNvcmU6OlN0
b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBzdGQ6Om9wdGlv
bmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluLCBMYXN0TmF2aWdhdGlvbldhc0FwcEluaXRpYXRlZCBsYXN0TmF2aWdhdGlvbldhc0FwcElu
aXRpYXRlZCkKIHsKICAgICBpZiAoIXVybC5pc1ZhbGlkKCkgfHwgIXVybC5wcm90b2NvbElzSW5I
VFRQRmFtaWx5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDkwOTc5M2UzNzU2OGMwNDJiMTAwMmEy
NmFhMDI3NDc4NGE5MWU0Y2EuLjcyMmQ5NzMxYTAxMmRlMzRmYjZjMzMyYjkxMTQ1ZGQwMzAyZjU2
M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0xOTY5LDE4ICsxOTY5LDYgQEAgQVBJOjpIVFRQQ29v
a2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tpZVN0b3JlKCkKICAgICByZXR1cm4gKm1f
Y29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdl
RGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6
Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICghaXNQ
ZXJzaXN0ZW50KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TG9jYWxTdG9yYWdlRGV0
YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUoZGV0YWlscykpOwotICAgIH0pOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
c2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDFkZTI1YTY2
MDU3ZjJkNjZjNjI5OWU1ZWJiYjgxNDZiZWU5YjgxZTMuLjM0YWU1YWY2MDczYzI1OTE0MjBmMjA5
Y2UwZjc1MzJiYWJkYzgzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTE2Nyw3ICsxNjcsNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxs
VGltZSBtb2RpZmllZFNpbmNlLCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
OwogICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3Qg
VmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiYsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcik7CiAKLSAgICB2b2lkIGdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9p
ZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4m
Jik7CiAgICAgdm9pZCBzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVN
b2RlbCk7CiAgICAgdm9pZCBzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoU2Vjb25k
cyk7CiAgICAgdm9pZCByZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdCBi
L1NvdXJjZS9XZWJLaXQvVW5pZmllZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggNTA4
OThlNDYzMDE3MzE5NGFlNGVmN2NjZTQzYWU4ZWI0NjczYTg2Yi4uMmFkNzk2NDVkNmVmNjgzZGFk
NGViMDc2ZjVkZDcyNDcyYmY4NjBiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VbmlmaWVk
U291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L1VuaWZpZWRTb3Vy
Y2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0xNyw2ICsxNyw3IEBAICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2Ux
MS1tbS5tCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZp
ZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTEuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTEwLmNwcAog
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJj
ZXMvVW5pZmllZFNvdXJjZTExMS5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMTIuY3BwCiAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9Vbmlm
aWVkU291cmNlMTItbW0ubW0KICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMi5jcHAKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3Vy
Y2UxMy1tbS5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggZmJmNDg3OWU4Y2MzNjNhY2U4YWFkYjEzMTc1OGUxNzFiZjU0NGI3YS4uYmNk
NTQ0ZTk0MjMwNmEyYmEyNjhiNTcxNDNiZWMxMmU0YTI0YmRkMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTA4LDYgKzE1MDgsMTMg
QEAKIAkJOTNFNzk5ODUyNzU2RkE1NTAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29u
bmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTk4MjI3NTZGQTU0MDA3NDAwOEEgLyogV2ViRmlsZVN5c3Rl
bVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJOTNFNzk5ODcy
NzU2RkFCNDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2Vz
UmVwbGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNFNzk5ODMyNzU2RkE1NDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlv
bk1lc3NhZ2VzUmVwbGllcy5oICovOyB9OwogCQk5M0U3OTk4ODI3NTZGQUMyMDA3NDAwOEEgLyog
V2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OTgxMjc1NkZBNTMwMDc0MDA4QSAv
KiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlcy5oICovOyB9OworCQk5M0U3
OTlDNzI3NjAyNzQ2MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3RyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5QzYyNzYwMjczNzAwNzQw
MDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuaCAqLzsgfTsKKwkJOTNFNzk5Q0UyNzYwNDk3QjAw
NzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5Q0EyNzYwNDk3QTAwNzQwMDhBIC8qIFNlc3Np
b25TdG9yYWdlTWFuYWdlci5oICovOyB9OworCQk5M0U3OTlDRjI3NjA0OTdCMDA3NDAwOEEgLyog
TG9jYWxTdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNFNzk5Q0IyNzYwNDk3QTAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFn
ZXIuaCAqLzsgfTsKKwkJOTNFNzk5RDIyNzYwQUE1QjAwNzQwMDhBIC8qIFVuaWZpZWRTb3VyY2Ux
MTIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNF
Nzk5RDEyNzYwQUE1QTAwNzQwMDhBIC8qIFVuaWZpZWRTb3VyY2UxMTIuY3BwICovOyB9OworCQk5
M0U3OTlEQTI3NjEyMTA4MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUQ0Mjc2MTIxMDcwMDc0
MDA4QSAvKiBTUUxpdGVTdG9yYWdlQXJlYS5oICovOyB9OworCQk5M0U3OTlEQjI3NjEyMTA4MDA3
NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUQ1Mjc2MTIxMDcwMDc0MDA4QSAvKiBNZW1vcnlTdG9y
YWdlQXJlYS5oICovOyB9OworCQk5M0U3OTlEQzI3NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFy
ZWFCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0U3OTlENjI3NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmggKi87IH07CiAJCTkz
RjU0OUI0MUUzMTc0QjcwMDBFNzIzOSAvKiBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGNTQ5QjMxRTMxNzRC
NzAwMEU3MjM5IC8qIFdLU25hcHNob3RDb25maWd1cmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk5NTBGMjg4MDI1MjQxNEVBMDBCNzRGMUMg
LyogV0tNb3VzZURldmljZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NTBGMjg3RTI1MjQxNEU5MDBCNzRGMUMgLyogV0tNb3VzZURldmlj
ZU9ic2VydmVyLmggKi87IH07CiAJCTk1NjUwODM5MjZEODdBMkIwMEUxNUNCNyAvKiBBcHBsZU1l
ZGlhU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk1NjUwODM3MjZEODdBMkIwMEUxNUNCNyAvKiBBcHBsZU1lZGlhU2VydmljZXNTUEku
aCAqLzsgfTsKQEAgLTUzMzAsNiArNTMzNywxOSBAQAogCQk5M0U3OTk4MTI3NTZGQTUzMDA3NDAw
OEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVz
c2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFNzk5ODIyNzU2RkE1NDAw
NzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJGaWxlU3lzdGVtU3Rv
cmFnZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5M0U3OTk4MzI3NTZGQTU0MDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VD
b25uZWN0aW9uTWVzc2FnZXNSZXBsaWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzUmVwbGllcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlDNTI3NjAyNzM2MDA3NDAwOEEgLyogU3Rv
cmFnZUFyZWFSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OTNFNzk5QzYyNzYwMjczNzAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUFyZWFSZWdpc3RyeS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlDOTI3NjA0OTdBMDA3NDAwOEEgLyogTG9jYWxT
dG9yYWdlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBM
b2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNF
Nzk5Q0EyNzYwNDk3QTAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5Q0IyNzYwNDk3QTAwNzQwMDhBIC8qIExvY2Fs
U3RvcmFnZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9jYWxT
dG9yYWdlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlDQzI3
NjA0OTdCMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlc3Npb25TdG9yYWdlTWFuYWdlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQxMjc2MEFBNUEwMDc0MDA4QSAvKiBVbmlm
aWVkU291cmNlMTEyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVu
aWZpZWRTb3VyY2UxMTIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlE
MzI3NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMaXRlU3RvcmFnZUFyZWEuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlENDI3NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRlU3Rv
cmFnZUFyZWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMaXRlU3RvcmFn
ZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDUyNzYxMjEwNzAw
NzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1lbW9yeVN0b3JhZ2VBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTkzRTc5OUQ2Mjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUFyZWFCYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTkzRTc5OUQ3Mjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZUFyZWFC
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDgyNzYxMjEwODAw
NzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE1lbW9yeVN0b3JhZ2VBcmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNGNTQ5QjMxRTMxNzRCNzAwMEU3MjM5IC8qIFdLU25hcHNob3RDb25maWd1cmF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLU25hcHNob3RDb25maWd1
cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjU0OUI1MUUzMTc0REEw
MDBFNzIzOSAvKiBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLU25hcHNob3RDb25maWd1cmF0aW9uLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5NTBGMjg3RTI1MjQxNEU5MDBCNzRGMUMgLyogV0tNb3Vz
ZURldmljZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLTW91
c2VEZXZpY2VPYnNlcnZlci5oOyBwYXRoID0gaW9zL1dLTW91c2VEZXZpY2VPYnNlcnZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODIwOSw2ICs4MjI5LDcgQEAKIAkJCQkxQ0FF
Q0I1RDI3NDY1QUUzMDBBQjc4RDAgLyogVW5pZmllZFNvdXJjZTEwOS5jcHAgKi8sCiAJCQkJMUNB
RUNCNjAyNzQ2NUFFMzAwQUI3OEQwIC8qIFVuaWZpZWRTb3VyY2UxMTAuY3BwICovLAogCQkJCTFD
QUVDQjVFMjc0NjVBRTMwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTExLmNwcCAqLywKKwkJCQk5
M0U3OTlEMTI3NjBBQTVBMDA3NDAwOEEgLyogVW5pZmllZFNvdXJjZTExMi5jcHAgKi8sCiAJCQkp
OwogCQkJbmFtZSA9ICJ1bmlmaWVkLXNvdXJjZXMiOwogCQkJcGF0aCA9ICJEZXJpdmVkU291cmNl
cy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzIjsKQEAgLTEwMjg4LDExICsxMDMwOSwyMyBAQAogCQkJ
CTkzNUI1Nzk4MjZGNTEyNzAwMDhCNDhBQyAvKiBGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lz
dHJ5LmggKi8sCiAJCQkJOTMxQTA3NTEyNkYwNjMxMDAwNDQ3NENEIC8qIEZpbGVTeXN0ZW1TdG9y
YWdlTWFuYWdlci5jcHAgKi8sCiAJCQkJOTMxQTA3NTAyNkYwNjMxMDAwNDQ3NENEIC8qIEZpbGVT
eXN0ZW1TdG9yYWdlTWFuYWdlci5oICovLAorCQkJCTkzRTc5OUM5Mjc2MDQ5N0EwMDc0MDA4QSAv
KiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcCAqLywKKwkJCQk5M0U3OTlDQjI3NjA0OTdBMDA3NDAw
OEEgLyogTG9jYWxTdG9yYWdlTWFuYWdlci5oICovLAorCQkJCTkzRTc5OUQ4Mjc2MTIxMDgwMDc0
MDA4QSAvKiBNZW1vcnlTdG9yYWdlQXJlYS5jcHAgKi8sCisJCQkJOTNFNzk5RDUyNzYxMjEwNzAw
NzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmggKi8sCiAJCQkJOTMwODVEQzMyNkUxQkJCRDAw
MEVDNkE3IC8qIE5ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAgKi8sCiAJCQkJOTMwODVEQzQyNkUx
QkJCRDAwMEVDNkE3IC8qIE5ldHdvcmtTdG9yYWdlTWFuYWdlci5oICovLAogCQkJCTkzMDg1REM3
MjZFMUM2RUUwMDBFQzZBNyAvKiBOZXR3b3JrU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW4gKi8s
CiAJCQkJOTMwODVEQzUyNkUxQzZDRjAwMEVDNkE3IC8qIE9yaWdpblN0b3JhZ2VNYW5hZ2VyLmNw
cCAqLywKIAkJCQk5MzA4NURDNjI2RTFDNkNGMDAwRUM2QTcgLyogT3JpZ2luU3RvcmFnZU1hbmFn
ZXIuaCAqLywKKwkJCQk5M0U3OTlDQzI3NjA0OTdCMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VN
YW5hZ2VyLmNwcCAqLywKKwkJCQk5M0U3OTlDQTI3NjA0OTdBMDA3NDAwOEEgLyogU2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyLmggKi8sCisJCQkJOTNFNzk5RDMyNzYxMjEwNzAwNzQwMDhBIC8qIFNRTGl0
ZVN0b3JhZ2VBcmVhLmNwcCAqLywKKwkJCQk5M0U3OTlENDI3NjEyMTA3MDA3NDAwOEEgLyogU1FM
aXRlU3RvcmFnZUFyZWEuaCAqLywKKwkJCQk5M0U3OTlENzI3NjEyMTA4MDA3NDAwOEEgLyogU3Rv
cmFnZUFyZWFCYXNlLmNwcCAqLywKKwkJCQk5M0U3OTlENjI3NjEyMTA4MDA3NDAwOEEgLyogU3Rv
cmFnZUFyZWFCYXNlLmggKi8sCisJCQkJOTNFNzk5QzUyNzYwMjczNjAwNzQwMDhBIC8qIFN0b3Jh
Z2VBcmVhUmVnaXN0cnkuY3BwICovLAorCQkJCTkzRTc5OUM2Mjc2MDI3MzcwMDc0MDA4QSAvKiBT
dG9yYWdlQXJlYVJlZ2lzdHJ5LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHN0b3JhZ2U7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTI5NDcsNiArMTI5ODAsNyBAQAogCQkJCTU3RENF
REFFMjE0QzYwMzMwMDE2Qjg0NyAvKiBMb2NhbFNlcnZpY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzQjI2MTRFMjI3RDE0QjEwMEI5N0E3NiAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTNCMjYxNEYyMjdEMTRCMTAwQjk3QTc2IC8qIExvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNzk5Q0YyNzYwNDk3QjAwNzQw
MDhBIC8qIExvY2FsU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2QkVCNkRC
MjJGQjlENDgwMDI2OTg2NyAvKiBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxQTdGMkYzMTI1QkY4MjAwMDhBRUIxRCAvKiBMb2dnaW5nLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkRDRDdGNzFENDdFOTJBMDA5RjA4QkMgLyogTG9nSW5pdGlhbGl6YXRpb24uaCBp
biBIZWFkZXJzICovLApAQCAtMTI5NjUsNiArMTI5OTksNyBAQAogCQkJCUExNTc5OUJEMjU4NDQz
MzIwMDUyODIzNiAvKiBNZWRpYVNhbXBsZUN1cnNvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc1
QTlDRjMyNjE2OUJBQjAwNkRGQTNBIC8qIE1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yUHJveHlQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU3OTlCNzI1ODQ0MzMyMDA1MjgyMzYgLyogTWVk
aWFUcmFja1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNzk5REIyNzYxMjEwODAwNzQw
MDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTkzM0RFRjE5
NjVFQjMxMDA4QUMzRUEgLyogTWVudVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUI0
NzkwOEQyNTMxNEQ4MzAwRUMxMUFCIC8qIE1lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUFDNEM4MjkxNkI4NzZBOTAwNjlEQ0NEIC8qIE1lc3NhZ2VGbGFn
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzE4NCw2ICsxMzIxOSw3IEBACiAJCQkJNTE0RDlGNTcx
OTExOUQzNTAwMDA2M0E3IC8qIFNlcnZpY2VzQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFGREU2NUExOTU0QTQyQjAwQzQ4RkZBIC8qIFNlc3Npb25TdGF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEwMDJENDkxOTZCMzQ1RDAwQjlBRDQ0IC8qIFNlc3Npb25TdGF0ZUNvZGluZy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNzk5Q0UyNzYwNDk3QjAwNzQwMDhBIC8qIFNlc3Npb25T
dG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZCRUI2REYyMkZCQjE2QjAwMjY5
ODY3IC8qIFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY0
MjBFNTEyRENFMkZGMDBDQUFFMkMgLyogU2hhcmVhYmxlQml0bWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGNDNBOUNFMDI1RDcyRjFDMDA5OTBFMjYgLyogU2hhcmVhYmxlQml0bWFwVXRpbGl0aWVz
LmggaW4gSGVhZGVycyAqLywKQEAgLTEzMjEyLDExICsxMzI0OCwxNCBAQAogCQkJCTkzRDZCNzcy
MjU0QkI1MTkwMDU4REQzQSAvKiBTcGVlY2hSZWNvZ25pdGlvblNlcnZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTNENkI3ODQyNTRDQ0QwRTAwNThERDNBIC8qIFNwZWVjaFJlY29nbml0aW9uU2Vy
dmVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRDZCNzg1MjU0Q0NENDMwMDU4REQz
QSAvKiBTcGVlY2hSZWNvZ25pdGlvblNlcnZlck1lc3NhZ2VzUmVwbGllcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJOTNFNzk5REEyNzYxMjEwODAwNzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QTNGRUNBMjIxRjdDMDk3MDBGMjY3Q0QgLyogU3RvcmFnZUFj
Y2Vzc1N0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZCRUI2RDcyMkZCOUJENzAwMjY5ODY3
IC8qIFN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3OTlEQzI3NjEyMTA4MDA3
NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUQzMzA2RjE2
QjFEOTkxMDA0RjYwRTcgLyogU3RvcmFnZUFyZWFJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUNFQ0QyNTE3MTYyREIxMDAxRkM5RUYgLyogU3RvcmFnZUFyZWFNYXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBMzM0REVFMTZERThGODgwMDZBOEUzOCAvKiBTdG9yYWdlQXJlYU1hcE1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3OTlDNzI3NjAyNzQ2MDA3NDAwOEEgLyogU3RvcmFn
ZUFyZWFSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNCMjYxNEQyMjdEMTQ5RTAwQjk3
QTc2IC8qIFN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzZCMDU5ODIzMDM5
MDk3MDAyRkMwNkIgLyogU3RvcmFnZU1hbmFnZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
NjhFRURGMjMwM0E5RUQwMEJEQjExQSAvKiBTdG9yYWdlTWFuYWdlclNldE1lc3NhZ2VzLmggaW4g
SGVhZGVycyAqLywKQEAgLTE1NDY5LDYgKzE1NTA4LDcgQEAKIAkJCQkxQ0FFQ0I2NTI3NDY1QUU0
MDBBQjc4RDAgLyogVW5pZmllZFNvdXJjZTEwOS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQ0FF
Q0I2ODI3NDY1QUU0MDBBQjc4RDAgLyogVW5pZmllZFNvdXJjZTExMC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQ0FFQ0I2NjI3NDY1QUU0MDBBQjc4RDAgLyogVW5pZmllZFNvdXJjZTExMS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk5M0U3OTlEMjI3NjBBQTVCMDA3NDAwOEEgLyogVW5pZmllZFNv
dXJjZTExMi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzhBMUZDMDIzQTU1MUJGMDBEMjM3NEYg
LyogVXNlckludGVyZmFjZUlkaW9tLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q0OTFCMEQxRTcz
MkU0RDAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUNENDkxQjE3MUU3MzUyNTUwMDAwOTA2NiAvKiBVc2VyTWVk
aWFDYXB0dXJlTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFy
ZWFNYXAuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFy
ZWFNYXAuY3BwCmluZGV4IDBmYTZhYzE4ZmQ5NDcwNTkwY2YxMDdkNmE0NDA2NmQ5MmQ5YTQzNmQu
LjJjZjdhNmQ0YjYwMDVjMWQ3ZWMyNTZiZDYzODg3NjI5NGU5ZTRjZjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZU1hbmFnZXJN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogI2luY2x1ZGUgIlN0b3Jh
Z2VBcmVhTWFwTWVzc2FnZXMuaCIKICNpbmNsdWRlICJTdG9yYWdlTWFuYWdlclNldE1lc3NhZ2Vz
LmgiCkBAIC05NSw3ICs5Niw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OnNldEl0ZW0oRnJhbWUq
IHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUFyZWEsIGNvCiAgICAgbV9wZW5k
aW5nVmFsdWVDaGFuZ2VzLmFkZChrZXkpOwogCiAgICAgaWYgKG1fbWFwSUQpCi0gICAgICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNv
bm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6U2V0SXRlbSgqbV9t
YXBJRCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHZhbHVl
LCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKKyAgICAgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCku
Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6U2V0SXRl
bSgqbV9tYXBJRCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBrZXks
IHZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKICAg
ICBlbHNlCiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTdG9yYWdlQXJlYU1h
cDo6c2V0SXRlbSBmYWlsZWQgYmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CiB9
CkBAIC0xMTQsNyArMTE1LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbShXZWJD
b3JlOjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc28KICAgICBtX3BlbmRp
bmdWYWx1ZUNoYW5nZXMuYWRkKGtleSk7CiAKICAgICBpZiAobV9tYXBJRCkKLSAgICAgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29u
bmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpSZW1vdmVJdGVtKCpt
X21hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIGtleSwgc291
cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgMCk7CisgICAgICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OlJlbW92ZUl0ZW0o
Km1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwga2V5LCBz
b3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKICAgICBlbHNlCiAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTdG9yYWdlQXJlYU1hcDo6cmVtb3Zl
SXRlbSBmYWlsZWQgYmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CiB9CkBAIC0x
MjksNyArMTMwLDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6Y2xlYXIoV2ViQ29yZTo6RnJhbWUq
IHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUEKICAgICBtX21hcCA9IG1ha2VV
bmlxdWU8U3RvcmFnZU1hcD4obV9xdW90YUluQnl0ZXMpOwogCiAgICAgaWYgKG1fbWFwSUQpCi0g
ICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q2xl
YXIoKm1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwgc291
cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgMCk7CisgICAgICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNsZWFyKCptX21h
cElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIHNvdXJjZUZyYW1l
LT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOwogICAgIGVsc2UKICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVhTWFwOjpjbGVhciBmYWlsZWQgYmVj
YXVzZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CiB9CkBAIC0xNjAsNyArMTYxLDcgQEAg
U3RvcmFnZU1hcCYgU3RvcmFnZUFyZWFNYXA6OmVuc3VyZU1hcCgpCiAgICAgICAgICAgICAvLyBm
cm9tIG91ciBTdG9yYWdlTWFuYWdlclNldDo6R2V0VmFsdWVzKCkgSVBDLiBUaGlzIElQQyBtYXkg
YmUgdmVyeSBzbG93IGJlY2F1c2UgaXQgbWF5IG5lZWQgdG8gZmV0Y2ggdGhlIHZhbHVlcyBmcm9t
IGRpc2sgYW5kIHRoZXJlIG1heSBiZSBhIGxvdCBvZiBkYXRhLgogICAgICAgICAgICAgSVBDOjpV
bmJvdW5kZWRTeW5jaHJvbm91c0lQQ1Njb3BlIHVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGU7
CiAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YWx1ZXM7Ci0gICAgICAgICAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
KS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpHZXRW
YWx1ZXMoKm1fbWFwSUQpLCBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkdldFZhbHVlczo6
UmVwbHkodmFsdWVzKSwgMCk7CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5l
bnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVz
c2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6R2V0VmFsdWVzKCptX21hcElEKSwgTWVzc2Fn
ZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpHZXRWYWx1ZXM6OlJlcGx5KHZhbHVlcyksIDApOwogICAg
ICAgICAgICAgbV9tYXAtPmltcG9ydEl0ZW1zKFdURk1vdmUodmFsdWVzKSk7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVh
TWFwOjplbnN1cmVNYXAgZmFpbGVkIHRvIGxvYWQgZnJvbSBuZXR3b3JrIHByb2Nlc3MgYmVjYXVz
ZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CkBAIC0zNDgsMjAgKzM0OSwyMyBAQCB2b2lk
IFN0b3JhZ2VBcmVhTWFwOjpjb25uZWN0KCkKICAgICBpZiAobV9tYXBJRCkKICAgICAgICAgcmV0
dXJuOwogCisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVyIG1hcElEOwogICAgIHN3aXRjaCAobV90
eXBlKSB7CiAgICAgY2FzZSBTdG9yYWdlVHlwZTo6TG9jYWw6CiAgICAgY2FzZSBTdG9yYWdlVHlw
ZTo6VHJhbnNpZW50TG9jYWw6CiAgICAgICAgIGlmIChTZWN1cml0eU9yaWdpbiogdG9wTGV2ZWxP
cmlnaW4gPSBtX25hbWVzcGFjZS50b3BMZXZlbE9yaWdpbigpKQotICAgICAgICAgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVj
dGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRvVHJh
bnNpZW50TG9jYWxTdG9yYWdlQXJlYShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9uSUQo
KSwgbV9uYW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCksIHRvcExldmVsT3JpZ2luLT5kYXRh
KCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNl
dDo6Q29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYTo6UmVwbHkobV9tYXBJRCksIDAp
OworICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OkNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEobV9uYW1lc3Bh
Y2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCksIHRvcExldmVsT3JpZ2luLT5kYXRhKCksIG1fc2VjdXJp
dHlPcmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5l
Y3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWE6OlJlcGx5KG1hcElEKSwgMCk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFn
ZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuc2Vzc2lvbklEKCksIG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3Nl
Y3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5l
Y3RUb0xvY2FsU3RvcmFnZUFyZWE6OlJlcGx5KG1fbWFwSUQpLCAwKTsKKyAgICAgICAgICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNv
bm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25u
ZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBt
X3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
OjpDb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhOjpSZXBseShtYXBJRCksIDApOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpTZXNzaW9uOgotICAgICAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCkuc2VuZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9TZXNzaW9u
U3RvcmFnZUFyZWEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2Vzc2lvbklEKCksIG1fbmFtZXNw
YWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNz
YWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYTo6UmVw
bHkobV9tYXBJRCksIDApOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6
Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKG1fbmFt
ZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBN
ZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFy
ZWE6OlJlcGx5KG1hcElEKSwgMCk7CiAgICAgfQogCi0gICAgaWYgKG1fbWFwSUQpCisgICAgaWYg
KG1hcElELmlzVmFsaWQoKSkgeworICAgICAgICBtX21hcElEID0gbWFwSUQ7CiAgICAgICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyU3RvcmFnZUFyZWFNYXAoKnRoaXMpOworICAg
IH0KIH0KIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlzY29ubmVjdCgpCkBAIC0zNzMsNyArMzc3
LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlzY29ubmVjdCgpCiAgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkudW5yZWdpc3RlclN0b3JhZ2VBcmVhTWFwKCp0aGlzKTsKIAogICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5l
eGlzdGluZ05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpKQotICAgICAgICBuZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNl
dDo6RGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYSgqbV9tYXBJRCksIDApOworICAgICAgICBuZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OkRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoKm1fbWFwSUQpLCAwKTsK
IAogICAgIG1fbWFwSUQgPSB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKaW5kZXggZjg0
ZDAyZmM2ZjdlM2JiMWUzMTQzM2M1ZjAwZTYxZTBmZGViZjkzMi4uZGViNmEzNDMzY2FiYWZhZjdk
Y2FhNTYwY2RjM2ExNWUzYWNhN2U3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcApAQCAtMjcs
OSArMjcsOSBAQAogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgiCiAKICNpbmNsdWRl
ICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZU1h
bmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogI2luY2x1ZGUg
IlN0b3JhZ2VBcmVhTWFwLmgiCi0jaW5jbHVkZSAiU3RvcmFnZU1hbmFnZXJTZXRNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXBQcm94eS5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKQEAgLTExNCw3ICsxMTQsNyBAQCBSZWY8U3RvcmFnZU5h
bWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkoUGFnZSYgbmV3UGFnZSkKICAgICBB
U1NFUlQobV9zdG9yYWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6U2Vzc2lvbik7CiAKICAgICBpZiAo
YXV0byBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5l
eGlzdGluZ05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpKQotICAgICAgICBuZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNl
dDo6Q2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShzZXNzaW9uSUQoKSwgbV9zdG9yYWdlTmFt
ZXNwYWNlSUQsIFdlYlBhZ2U6OmZyb21Db3JlUGFnZShuZXdQYWdlKS5zZXNzaW9uU3RvcmFnZU5h
bWVzcGFjZUlkZW50aWZpZXIoKSksIDApOworICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNs
b25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UobV9zdG9yYWdlTmFtZXNwYWNlSUQsIFdlYlBhZ2U6
OmZyb21Db3JlUGFnZShuZXdQYWdlKS5zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIo
KSksIDApOwogCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFnZU5hbWVzcGFjZUltcGwo
bV9zdG9yYWdlVHlwZSwgV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKG5ld1BhZ2UpLnNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlSWRlbnRpZmllcigpLCBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UobmV3UGFnZSku
aWRlbnRpZmllcigpLCBtX3RvcExldmVsT3JpZ2luLmdldCgpLCBtX3F1b3RhSW5CeXRlcykpOwog
fQo=
</data>
<flag name="commit-queue"
          id="472013"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446578</attachid>
            <date>2021-12-09 11:34:49 -0800</date>
            <delta_ts>2021-12-10 10:29:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234087-20211209113448.patch</filename>
            <type>text/plain</type>
            <size>157552</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2Nzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWFkMzkxZDExMjlkNTEz
MzdhNTVjYWFjNTVjYzYwODgzOTM1YzcwMi4uZjBhZWY0ZmMwMzRmODIzNTA5ZTQ5ZDE0ODZhOWYy
YzYyNzViZDgxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTEyLTA5ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIFN0b3JhZ2VNYW5h
Z2VyIHdpdGggTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIHRvIG1hbmFnZSBXZWJTdG9yYWdlIGJ5IG9y
aWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVGaWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlRmlsZVN5c3RlbS5oOgorCiAyMDIxLTEyLTA5ICBBbGFuIEJ1anRhcyAgPHphbGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIEFkZCBzdXBwb3J0IGZvciBlbXB0eSBiaWRp
IGlubGluZSBib3hlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmZDYwMjI3N2FhY2IxMmJmNDc1ZDU3MzgxMWY4NDVj
MDY4NWJmYTBlLi5iMzRkZTBkOGVkZGY0MjcxYzUxMWE2NTcxOTdhZjkxZWE4NzI4OGEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIwMiBAQAorMjAyMS0xMi0wOSAgU2lodWkgTGl1ICA8c2lodWlfbGl1
QGFwcGxlLmNvbT4KKworICAgICAgICBNZXJnZSBTdG9yYWdlTWFuYWdlciB3aXRoIE5ldHdvcmtT
dG9yYWdlTWFuYWdlciB0byBtYW5hZ2UgV2ViU3RvcmFnZSBieSBvcmlnaW4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDA4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIG5ldHdvcmsgcHJvY2Vzcywg
V2ViU3RvcmFnZSBkYXRhIGlzIG1hbmFnZWQgYnkgV2ViS2l0OjpTdG9yYWdlTWFuYWdlciBjbGFz
cy4gRWFjaCBTdG9yYWdlTWFuYWdlciBvd25zIG9uZSBvcgorICAgICAgICBtYW55IFN0b3JhZ2VO
YW1lU3BhY2VzLCBhbmQgZWFjaCBTdG9yYWdlTmFtZXNwYWNlcyBvd25zIG9uZSBvciBtb3JlIFN0
b3JhZ2VBcmVhcy4gRWFjaCBTdG9yYWdlQXJlYSBjb3JyZXBvbmRzCisgICAgICAgIHRvIG9uZSBz
dG9yYWdlIG1hcCAob25lIGxvY2FsU3RvcmFnZSBvciBzZXNzaW9uU3RvcmFnZSBvYmplY3QpLCBh
bmQgaGFzIHR3byB0eXBlcyBvZiBiYWNrZW5kOiBhIFNRTGl0ZSBkYXRhYmFzZSwKKyAgICAgICAg
b3IgYSBpbi1tZW1vcnkgaGFzaCBtYXAuIE5vdyB0aGF0IHdlIGhhdmUgTmV0d29ya1N0b3JhZ2VN
YW5hZ2VyLCB3aGljaCBtYW5hZ2VzIHN0b3JhZ2UgYnkgb3JpZ2luLiBXZSBjYW4gbWVyZ2UKKyAg
ICAgICAgU3RvcmFnZU1hbmFnZXIgd2l0aCBOZXR3b3JrU3RvcmFnZU1hbmFnZXIsIGJlY2F1c2Ug
bG9jYWxTdG9yYWdlIGFuZCBzZXNzaW9uU3RvcmFnZSBhcmUgbm90IHNoYXJlZCBiZXR3ZWVuIAor
ICAgICAgICBkaWZmZXJlbnQgb3JpZ2lucy4KKworICAgICAgICBUaGUgbmV3IHN0cnVjdHVyZSBp
czoKKyAgICAgICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIChtYW5hZ2Ugc3RvcmFnZSBmb3IgYSBz
ZXNzaW9uLCBvd25zIG9uZSBvciBtb3JlIE9yaWdpblN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICBP
cmlnaW5TdG9yYWdlTWFuYWdlciAobWFuYWdlIHN0b3JhZ2UgZm9yIGFuIG9yaWdpbiwgb3ducyBv
bmUgTG9jYWxTdG9yYWdlTWFuYWdlciBhbmQgb25lIFNlc3Npb25TdG9yYWdlTWFuYWdlcikKKyAg
ICAgICAgTG9jYWxTdG9yYWdlTWFuYWdlciAvIFNlc3Npb25TdG9yYWdlTWFuYWdlciAobWFuYWdl
IExvY2FsU3RvcmFnZSBhbmQgU2Vzc2lvblN0b3JhZ2UsIG93bnMgb25lIG9yIG1vcmUgCisgICAg
ICAgIFN0b3JhZ2VBcmVhQmFzZXMpCisgICAgICAgIE1lbW9yeVN0b3JhZ2VBcmVhIC8gU1FMaXRl
U3RvcmFnZUFyZWEgKGluaGVyaXRzIFN0b3JhZ2VBcmVhQmFzZXM7IG1hbmFnZSBvbmUgbG9jYWwg
b3Igc2Vzc2lvbiBzdG9yYWdlLCBsaWtlIAorICAgICAgICBXZWJraXQ6OlN0b3JhZ2VBcmVhKQor
CisgICAgICAgIFN0b3JhZ2VOYW1lc3BhY2UgbGF5ZXIgaXMgcmVtb3ZlZC4gRm9yIFNlc3Npb25T
dG9yYWdlLCBkaWZmZXJlbnQgU3RvcmFnZU5hbWVzcGFjZXMgbWVhbnMgZGlmZmVyZW50IHdlYiBw
YWdlcywgCisgICAgICAgIGFuZCBzYW1lIG9yaWdpbiBjYW4gaGF2ZSBkaWZmZXJlbnQgc2Vzc2lv
blN0b3JhZ2VzIG9uIGRpZmZlcmVudCBwYWdlcywgc28gd2Uga2VlcCBhIFN0b3JhZ2VOYW1lc3Bh
Y2UgPD0+CisgICAgICAgIFN0b3JhZ2VBcmVhIG1hcCBpbiBTZXNzaW9uU3RvcmFnZU1hbmFnZXIu
IEZvciBMb2NhbFN0b3JhZ2UsIGRpZmZlcm50IFN0b3JhZ2VOYW1lc3BhY2VzIG1lYW5zIGRpZmZl
cmVudCBwYWdlIAorICAgICAgICBncm91cHMuIE91ciBvcmlnaW5hbCBwbGFuIHdhcyB0aGUgc2Ft
ZSBvcmlnaW4gY2FuIGhhdmUgZGlmZmVyZW50IGxvY2FsU3RvcmFnZXMgaW4gZGlmZmVyZW50IHBh
Z2UgZ3JvdXBzLCBidXQgb3VyCisgICAgICAgIG9sZCBpbXBsZW1lbnRhdGlvbiBhY3R1YWxseSBt
YWRlIGFsbCBwYWdlIGdyb3VwcyBwb2ludCB0byB0aGUgc2FtZSBkYXRhYmFzZSBmaWxlLiBUbyBr
ZWVwIGV4aXN0aW5nIGJlaGF2aW9yIAorICAgICAgICAodGhhdCBhbGwgcGFnZSBncm91cHMgd2l0
aCBzYW1lIG9yaWdpbiBzaGFyZSB0aGUgc3RvcmFnZSksIHdlIG5vdyBrZWVwIG9uZSBTdG9yYWdl
QXJlYSBwZXIgTG9jYWxTdG9yYWdlTWFuYWdlci4KKworICAgICAgICBUaGUgY2hhbmdlIGlzIG1v
c3RseSByZWZhY3RvcmluZywgYW5kIHNob3VsZCBiZSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIFdlYlN0
b3JhZ2UgdGVzdHMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6bG93
TWVtb3J5SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjcmVhdGVO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6OmFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpkZXN0cm95U2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjpoYXNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6ZmV0Y2hXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpk
ZWxldGVXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxl
dGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6ZGVsZXRlQW5kUmVzdHJpY3RXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwcmVwYXJlVG9TdXNwZW5kKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0Nsb3NlZCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpoYXNMb2NhbFN0b3JhZ2VEYXRh
KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlTG9jYWxTdG9y
YWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6Om1vdmVMb2Nh
bFN0b3JhZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6Z2V0
T3JpZ2luc09mTG9jYWxTdG9yYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0
b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1h
bmFnZXI6Omhhc0RhdGFJbk1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1h
bmFnZXI6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6
OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6aGFuZGxlTG93
TWVtb3J5V2FybmluZyk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OnN5
bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpj
b25uZWN0aW9uQ2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6
ZW5zdXJlU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2Vy
Ojpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9y
YWdlTWFuYWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYSk6CisgICAgICAg
IChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5o
OiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VB
cmVhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpNZW1v
cnlTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjppc0Vt
cHR5KToKKyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAg
ICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmFsbEl0ZW1zKToKKyAgICAgICAgKFdlYktp
dDo6TWVtb3J5U3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpNZW1vcnlT
dG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VB
cmVhOjpjbG9uZSBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1v
cnlTdG9yYWdlQXJlYS5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5h
Z2VyOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5h
Z2VyOjpjbGVhclN0b3JhZ2VGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpmb3JFYWNoT3JpZ2luRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpmZXRjaERhdGFGcm9tRGlzayk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YU9uRGlzayk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6bW92ZURhdGEpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnN1c3BlbmQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrU3RvcmFnZU1hbmFnZXI6OnJlc3VtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6aGFuZGxlTG93TWVtb3J5V2FybmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9j
YWxTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Y29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpkaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpnZXRWYWx1ZXMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0pOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6dG9X
ZWJzaXRlRGF0YVR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojp0b1dlYnNpdGVEYXRhVHlw
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0
Ojp0b1N0b3JhZ2VJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1h
bmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmxvY2FsU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2Vi
S2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZXhpc3RpbmdMb2NhbFN0
b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0
b3JhZ2VCdWNrZXQ6OnNlc3Npb25TdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9y
aWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpleGlzdGluZ1Nlc3Npb25TdG9yYWdl
TWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0Ojppc0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpTdG9yYWdlQnVja2V0OjpmZXRjaERhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9y
YWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6
Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojptb3ZlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpmZXRjaERhdGFJ
bk1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0OjpmZXRjaERhdGFGcm9tRGlzayk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3Jh
Z2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKToKKyAgICAg
ICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0ZVNl
c3Npb25TdG9yYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpTdG9yYWdlQnVja2V0Ojptb3ZlTG9jYWxTdG9yYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6
Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdl
YktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcik6
CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpzZXNzaW9uU3RvcmFnZU1h
bmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZXhpc3RpbmdT
ZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFu
YWdlcjo6aXNBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6
ZmV0Y2hEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmRlbGV0
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6bW92ZURhdGEp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIu
aDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpmaWxlTmFtZVRv
T3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6b3JpZ2luVG9GaWxlTmFtZSk6CisgICAgICAgIChX
ZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpkYXRhYmFzZVBhdGgpOgorICAgICAgICAoV2ViS2l0
OjpTUUxpdGVTdG9yYWdlQXJlYTo6c3RhdGVtZW50U3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OlNRTGl0ZVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdl
YktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRl
U3RvcmFnZUFyZWE6On5TUUxpdGVTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0
ZVN0b3JhZ2VBcmVhOjppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFy
ZWE6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmNyZWF0ZVRh
YmxlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6cHJl
cGFyZURhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnN0YXJ0
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VB
cmVhOjpjYWNoZWRTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJl
YTo6Z2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRJdGVt
RnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmFsbEl0
ZW1zKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAg
ICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChX
ZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjb21taXRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5KToK
KyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmhhbmRsZUxvd01lbW9yeVdhcm5p
bmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEu
aDogQWRkZWQuCisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAg
KFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSk6CisgICAgICAgIChXZWJL
aXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6aGFzRGF0YUluTWVtb3J5KToKKyAgICAgICAgKFdl
YktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViS2l0
OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3Rpb25DbG9zZWQpOgorICAgICAgICAoV2Vi
S2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmFkZFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdl
YktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEp
OgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9t
U3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNs
b25lU3RvcmFnZUFyZWEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvU3RvcmFnZUFyZWFCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VB
cmVhQmFzZTo6U3RvcmFnZUFyZWFCYXNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFC
YXNlOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6cmVt
b3ZlTGlzdGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6Omhhc0xpc3Rl
bmVycyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6bm90aWZ5TGlz
dGVuZXJzQWJvdXRDbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6ZGlz
cGF0Y2hFdmVudHMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3Rv
cmFnZUFyZWFCYXNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6
OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6Om9y
aWdpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6cXVvdGEgY29u
c3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3Ry
eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpyZWdp
c3RlclN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFSZWdpc3RyeTo6
dW5yZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFSZWdp
c3RyeTo6Z2V0U3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYVJlZ2lz
dHJ5Ojpmb3JFYWNoU3RvcmFnZUFyZWEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2dlbmVy
YXRlLXVuaWZpZWQtc291cmNlcy5zaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRh
aWxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5oOgorICAgICAgICAqIFVuaWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0Ogor
ICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFN
YXA6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6Y2xlYXIp
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6ZW5zdXJlTWFwKToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmNvbm5lY3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9y
YWdlQXJlYU1hcDo6ZGlzY29ubmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU5hbWVz
cGFjZUltcGw6OmNvcHkpOgorCiAyMDIxLTEyLTA5ICBKIFBhc2NvZSAgPGpfcGFzY29lQGFwcGxl
LmNvbT4KIAogICAgICAgICBbV2ViQXV0aG5dIFJlbW92ZSB1c2VyIGdlc3R1cmUgcmVxdWlyZW1l
bnQgZm9yIHVzaW5nIHBsYXRmb3JtIGF1dGhlbnRpY2F0b3Igb24gdGhlIHdlYgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCmluZGV4IDc2ZTQ1
YWYzNGVkMDkzZmQ5ZjI3NmRkNWQ0YjkyMmE0MTYzNGQ5YWUuLmU3Y2RjYmY1YWJkMjA2OTY4NWUx
ZmFkMWQ3NDQxOWNhMTA4MWE5YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKQEAgLTQzLDYgKzQzLDggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Y29uc3QgY2hhciAqLCAzPiBk
YXRhYmFzZUZpbGVTdWZmaXhlcyB7ICIiLCAiLXNobSIsICItd2FsIiB9OworCiBTUUxpdGVGaWxl
U3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKCkKIHsKIH0KQEAgLTc3LDE4ICs3OSwyMiBAQCBib29s
IFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhc2VEaXJlY3RvcnkoY29uc3QgU3Ry
aW5nJiBwYXRoKQogICAgIHJldHVybiBGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9yeShw
YXRoKTsKIH0KIAotYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSkKK2Jvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJh
c2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCiB7Ci0gICAgYXV0byB3YWxGaWxlTmFtZSA9
IG1ha2VTdHJpbmcoZmlsZU5hbWUsICItd2FsIl9zKTsKLSAgICBhdXRvIHNobUZpbGVOYW1lID0g
bWFrZVN0cmluZyhmaWxlTmFtZSwgIi1zaG0iX3MpOworICAgIGJvb2wgZmlsZUV4aXN0cyA9IGZh
bHNlOworICAgIGZvciAoY29uc3QgYXV0byogc3VmZml4IDogZGF0YWJhc2VGaWxlU3VmZml4ZXMp
IHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBmaWxlUGF0aCArIHN1ZmZpeDsKKyAgICAgICAgRmls
ZVN5c3RlbTo6ZGVsZXRlRmlsZShwYXRoKTsKKyAgICAgICAgZmlsZUV4aXN0cyB8PSBGaWxlU3lz
dGVtOjpmaWxlRXhpc3RzKHBhdGgpOworICAgIH0KIAotICAgIC8vIFRyeSB0byBkZWxldGUgYWxs
IHRocmVlIGZpbGVzIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIHRoZXJlLgotICAgIEZpbGVTeXN0
ZW06OmRlbGV0ZUZpbGUoZmlsZU5hbWUpOwotICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUod2Fs
RmlsZU5hbWUpOwotICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoc2htRmlsZU5hbWUpOworICAg
IHJldHVybiAhZmlsZUV4aXN0czsKK30KIAotICAgIC8vIElmIGFueSBvZiB0aGUgd2FsIG9yIHNo
bSBmaWxlcyByZW1haW4gYWZ0ZXIgdGhlIGRlbGV0ZSBhdHRlbXB0LCB0aGUgb3ZlcmFsbCBkZWxl
dGUgb3BlcmF0aW9uIGZhaWxlZC4KLSAgICByZXR1cm4gIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMo
ZmlsZU5hbWUpICYmICFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHdhbEZpbGVOYW1lKSAmJiAhRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyhzaG1GaWxlTmFtZSk7Cit2b2lkIFNRTGl0ZUZpbGVTeXN0ZW06
Om1vdmVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRGaWxlUGF0aCwgY29uc3QgU3RyaW5n
JiBuZXdGaWxlUGF0aCkKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8qIHN1ZmZpeCA6IGRhdGFiYXNl
RmlsZVN1ZmZpeGVzKQorICAgICAgICBGaWxlU3lzdGVtOjptb3ZlRmlsZShtYWtlU3RyaW5nKG9s
ZEZpbGVQYXRoLCBzdWZmaXgpLCBtYWtlU3RyaW5nKG5ld0ZpbGVQYXRoLCBzdWZmaXgpKTsKIH0K
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC05OCwxOCArMTA0LDEzIEBAIGJvb2wgU1FM
aXRlRmlsZVN5c3RlbTo6dHJ1bmNhdGVEYXRhYmFzZUZpbGUoc3FsaXRlMyogZGF0YWJhc2UpCiB9
CiAjZW5kaWYKICAgICAKLXVpbnQ2NF90IFNRTGl0ZUZpbGVTeXN0ZW06OmRhdGFiYXNlRmlsZVNp
emUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKLXsgICAgICAgIAordWludDY0X3QgU1FMaXRlRmls
ZVN5c3RlbTo6ZGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQorewogICAg
IHVpbnQ2NF90IHRvdGFsU2l6ZSA9IDA7Ci0KLSAgICBpZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVT
eXN0ZW06OmZpbGVTaXplKGZpbGVOYW1lKSkKLSAgICAgICAgdG90YWxTaXplICs9ICpmaWxlU2l6
ZTsKLQotICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmlsZVN5c3RlbTo6ZmlsZVNpemUobWFrZVN0
cmluZyhmaWxlTmFtZSwgIi13YWwiX3MpKSkKLSAgICAgICAgdG90YWxTaXplICs9ICpmaWxlU2l6
ZTsKLQotICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmlsZVN5c3RlbTo6ZmlsZVNpemUobWFrZVN0
cmluZyhmaWxlTmFtZSwgIi1zaG0iX3MpKSkKLSAgICAgICAgdG90YWxTaXplICs9ICpmaWxlU2l6
ZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8qIHN1ZmZpeCA6IGRhdGFiYXNlRmlsZVN1ZmZpeGVzKSB7
CisgICAgICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmlsZVN5c3RlbTo6ZmlsZVNpemUoZmlsZVBh
dGggKyBzdWZmaXgpKQorICAgICAgICAgICAgdG90YWxTaXplICs9ICpmaWxlU2l6ZTsKKyAgICB9
CiAKICAgICByZXR1cm4gdG90YWxTaXplOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKaW5kZXggYzY4ZDljN2U3YWY5ODk3NmExZWQzZGNiNmYy
YWNmZTRiNmNmNWMyZi4uOThlN2VhMGQwN2EyNTQxMWZhNGY2MmFhNzIxNjU5M2Y2M2UzOWM1YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCkBA
IC03OCw5ICs3OCwxMSBAQCBwdWJsaWM6CiAgICAgLy8gRGVsZXRlcyBhIGRhdGFiYXNlIGZpbGUu
CiAgICAgLy8KICAgICAvLyBmaWxlTmFtZSAtIFRoZSBmaWxlIG5hbWUuCi0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGRlbGV0ZURhdGFiYXNlRmlsZShj
b25zdCBTdHJpbmcmIGZpbGVQYXRoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJp
bmcgY29tcHV0ZUhhc2hGb3JGaWxlTmFtZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKyAgICAv
LyBNb3ZlcyBhIGRhdGFiYXNlIGZpbGUgdG8gYSBuZXcgcGxhY2UuCisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHZvaWQgbW92ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIG9sZEZpbGVQYXRo
LCBjb25zdCBTdHJpbmcmIG5ld0ZpbGVQYXRoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
U3RyaW5nIGNvbXB1dGVIYXNoRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCk7CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIFRydW5jYXRlcyBhIGRhdGFiYXNlIGZp
bGUuIFVzZWQgd2hlbiBNb2JpbGVTYWZhcmlTZXR0aW5ncyBkZWxldGVzIGEgZGF0YWJhc2UgZmls
ZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggMjkxY2M5ODkyZTgxMDI3ZDljYWVk
MWQ5ZGI3MDYxZDczZTY3NDE3MC4uMTM4Mjc2MWFjOGU4NzEyZjBkMzYwNjU1N2NiZjM5N2Q2YzNi
NmY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTI3MSw3ICsyNzEsNiBAQCB2
b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3RpbwogICAgICAgICByZXR1cm4gcGF5bWVudENvb3JkaW5hdG9y
KCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiAjZW5kaWYKIAotICAg
IFdURkxvZ0Fsd2F5cygiVW5oYW5kbGVkIG5ldHdvcmsgcHJvY2VzcyBtZXNzYWdlICclcyciLCBk
ZXNjcmlwdGlvbihkZWNvZGVyLm1lc3NhZ2VOYW1lKCkpKTsKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcAppbmRleCA0M2Y1YmJlN2IxYWJlMDlkZDc3NGM5MmI1YzBlNGY0MmRjZTFkZGI3Li5k
ZGE1YjhiMDIwMGVhOTY4OTUwNzc5NzI4NDhkYjkxOTdlZjVkY2RlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMTU3LDcgKzE1Nyw2
IEBAIHN0YXRpYyBpbmxpbmUgTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnkgY3JlYXRlTWVzc2Fn
ZVBvcnRDaGFubmVsUmVnaXN0cnkoTmV0d29yCiAKIE5ldHdvcmtQcm9jZXNzOjpOZXR3b3JrUHJv
Y2VzcyhBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVy
cykKICAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKCp0aGlzKQotICAgICwgbV9zdG9yYWdlTWFuYWdl
clNldChTdG9yYWdlTWFuYWdlclNldDo6Y3JlYXRlKCkpCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKICAgICAsIG1fbmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXIoKnRoaXMpCiAj
ZW5kaWYKQEAgLTMxMywxMiArMzEyLDEzIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6Omxvd01lbW9y
eUhhbmRsZXIoQ3JpdGljYWwgY3JpdGljYWwpCiAgICAgICAgIG5ldHdvcmtTZXNzaW9uLmNsZWFy
UHJlZmV0Y2hDYWNoZSgpOwogICAgIH0pOwogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+aGFu
ZGxlTG93TWVtb3J5V2FybmluZygpOwotCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAg
IGZvciAoYXV0byYgc3dTZXJ2ZXIgOiBtX3N3U2VydmVycy52YWx1ZXMoKSkKICAgICAgICAgc3dT
ZXJ2ZXItPmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKICNlbmRpZgorCisgICAgZm9yIChhdXRv
JiBtYW5hZ2VyIDogbV9zdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpCisgICAgICAgIG1hbmFnZXIt
PmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5p
dGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYg
cGFyYW1ldGVycykKQEAgLTQwMSw3ICs0MDEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjcmVh
dGVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyhQcm9jZXNzSWRlbnRpZmllciBpZGVudAog
CiAgICAgY29ubmVjdGlvbi5zZXRPbkxpbmVTdGF0ZShOZXR3b3JrU3RhdGVOb3RpZmllcjo6c2lu
Z2xldG9uKCkub25MaW5lKCkpOwogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkQ29ubmVj
dGlvbihjb25uZWN0aW9uLmNvbm5lY3Rpb24oKSk7CiAgICAgd2ViSURCU2VydmVyKHNlc3Npb25J
RCkuYWRkQ29ubmVjdGlvbihjb25uZWN0aW9uLmNvbm5lY3Rpb24oKSwgaWRlbnRpZmllcik7CiAg
ICAgaWYgKGF1dG8gbWFuYWdlciA9IG1fc3RvcmFnZU1hbmFnZXJzLmdldChzZXNzaW9uSUQpKQog
ICAgICAgICBtYW5hZ2VyLT5zdGFydFJlY2VpdmluZ01lc3NhZ2VGcm9tQ29ubmVjdGlvbihjb25u
ZWN0aW9uLmNvbm5lY3Rpb24oKSk7CkBAIC00MjAsNyArNDE5LDcgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6YWRkV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYmIHBh
cmFtZXRlcnMKIHsKICAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKIAotICAgIGFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lv
bihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRl
cnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGUpOworICAgIGFkZFN0b3JhZ2VNYW5hZ2Vy
Rm9yU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGUsIHBhcmFtZXRlcnMubG9j
YWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAgICAgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklE
LCBwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBh
cnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCiAgICAg
YWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CkBAIC00MjksOCArNDI4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRk
V2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMK
ICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuc2Vydmlj
ZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJz
LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCiAKLSAg
ICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmxvY2FsU3Rv
cmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotCiAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRh
U3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKIH0KIApAQCAtNDUzLDEx
ICs0NTAsMTYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIG1fc2Vzc2lvblN0b3JhZ2VR
dW90YU1hbmFnZXJzLnJlbW92ZShzZXNzaW9uSUQpOwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNz
OjphZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBTdHJpbmcmIGdlbmVyYWxTdG9yYWdlUGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JiBnZW5lcmFsU3RvcmFnZVBhdGhIYW5kbGUpCit2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRTdG9y
YWdlTWFuYWdlckZvclNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJp
bmcmIGdlbmVyYWxTdG9yYWdlUGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBnZW5lcmFs
U3RvcmFnZVBhdGhIYW5kbGUsIGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlUGF0aCwgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlJiBsb2NhbFN0b3JhZ2VQYXRoSGFuZGxlKQogewogICAgIG1fc3Rv
cmFnZU1hbmFnZXJzLmVuc3VyZShzZXNzaW9uSUQsIFsmXSB7CiAgICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShnZW5lcmFsU3RvcmFnZVBhdGhIYW5kbGUpOwotICAg
ICAgICByZXR1cm4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUoc2Vzc2lvbklELCBnZW5l
cmFsU3RvcmFnZVBhdGgpOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gb3B0aW9uYWxM
b2NhbFN0b3JhZ2VQYXRoOworICAgICAgICBpZiAoIWxvY2FsU3RvcmFnZVBhdGguaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBvcHRpb25hbExvY2FsU3RvcmFnZVBhdGggPSBsb2NhbFN0b3JhZ2VQ
YXRoOworICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGxv
Y2FsU3RvcmFnZVBhdGhIYW5kbGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShzZXNzaW9uSUQsIGdlbmVyYWxTdG9yYWdlUGF0aCwgb3B0
aW9uYWxMb2NhbFN0b3JhZ2VQYXRoKTsKICAgICB9KTsKIH0KIApAQCAtNTc0LDcgKzU3Niw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCkKICAgICBtX3NlcnZpY2VXb3JrZXJJbmZvLnJlbW92ZShzZXNzaW9uSUQpOwogI2VuZGlm
CiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZW1vdmUoc2Vzc2lvbklEKTsKICAgICBpZiAo
YXV0byBzZXJ2ZXIgPSBtX3dlYklEQlNlcnZlcnMudGFrZShzZXNzaW9uSUQpKQogICAgICAgICBz
ZXJ2ZXItPmNsb3NlKCk7CiAgICAgcmVtb3ZlU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKHNlc3Np
b25JRCk7CkBAIC0xMDY0LDE1ICsxMDY1LDE2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFy
VXNlckludGVyYWN0aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6Omhhc0xvY2FsU3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKG1fc3RvcmFnZU1h
bmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQsIFtkb21haW4sIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBvcmlnaW5zKSBt
dXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6YW55T2Yob3JpZ2lu
cywgWyZkb21haW5dKGF1dG8mIG9yaWdpbikgewotICAgICAgICAgICAgICAgIHJldHVybiBkb21h
aW4ubWF0Y2hlcyhvcmlnaW4pOwotICAgICAgICAgICAgfSkpOwotICAgICAgICB9KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgYXV0
byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsKKyAgICBpZiAo
aXRlcmF0b3IgPT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCisgICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBhdXRvIHR5cGVzID0gT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4geyBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSB9OworICAgIGl0ZXJh
dG9yLT52YWx1ZS0+ZmV0Y2hEYXRhKHR5cGVzLCBbZG9tYWluLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvIGVudHJpZXMpIG11dGFibGUgeworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6OmFueU9mKGVudHJpZXMsIFsmZG9tYWluXShhdXRv
JiBlbnRyeSkgeworICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5tYXRjaGVzKGVudHJ5Lm9yaWdp
bik7CisgICAgICAgIH0pKTsKKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0
Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTE0OTAsMjAgKzE0OTIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpm
ZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNp
dAogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlu
cyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0
LT5jb250YWlucyhzZXNzaW9uSUQpKSB7Ci0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmdl
dFNlc3Npb25TdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1
dG8mJiBvcmlnaW5zKSB7Ci0gICAgICAgICAgICB3aGlsZSAoIW9yaWdpbnMuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVz
LmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW5zLnRha2VBbnkoKSwgV2Vic2l0ZURh
dGFUeXBlOjpTZXNzaW9uU3RvcmFnZSwgMCB9KTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAg
aWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3Jh
Z2UpICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAg
ICAgbV9zdG9yYWdlTWFuYWdlclNldC0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQs
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mJiBvcmlnaW5zKSB7Ci0gICAgICAgICAgICB3aGls
ZSAoIW9yaWdpbnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmln
aW5zLnRha2VBbnkoKSwgV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UsIDAgfSk7Ci0gICAg
ICAgIH0pOwotICAgIH0KLQogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoU09VUCkKICAgICBp
ZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkhTVFNDYWNoZSkp
CiAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5ob3N0TmFtZXNXaXRo
SFNUU0NhY2hlID0gaG9zdE5hbWVzV2l0aEhTVFNDYWNoZShzZXNzaW9uSUQpOwpAQCAtMTU1Nyw5
ICsxNTQ1LDEzIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0CiAjZW5kaWYKIAogICAgIGlmIChh
dXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRv
ciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkgewotICAgICAgICBpdGVyYXRvci0+dmFsdWUt
PmZldGNoRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvIGVu
dHJpZXMpIG11dGFibGUgewotICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNp
dGVEYXRhLmVudHJpZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUoZW50cmllcykpOwotICAgICAgICB9
KTsKKyAgICAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpGaWxlU3lzdGVtKQorICAgICAgICAgICAgfHwgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkKKyAgICAgICAgICAgIHx8IHdlYnNpdGVEYXRh
VHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkpIHsKKyAgICAg
ICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZmV0Y2hEYXRhKHdlYnNpdGVEYXRhVHlwZXMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdKGF1dG8gZW50cmllcykgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kVmVjdG9yKFdU
Rk1vdmUoZW50cmllcykpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9CiB9CiAK
QEAgLTE1ODYsMTIgKzE1NzgsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRl
RGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaQogICAgIGlmICh3
ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RE9NQ2FjaGUpKQogICAg
ICAgICBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6Y2xlYXJBbGxDYWNoZXMoKnRoaXMsIHNlc3Npb25J
RCwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwogCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkgJiYgbV9zdG9yYWdlTWFu
YWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNl
dC0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2Uoc2Vzc2lvbklELCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsg
fSk7Ci0KLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6
OkxvY2FsU3RvcmFnZSkgJiYgbV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklE
KSkKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+ZGVsZXRlTG9jYWxTdG9yYWdlTW9kaWZp
ZWRTaW5jZShzZXNzaW9uSUQsIG1vZGlmaWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9
KTsKLQogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6
SW5kZXhlZERCRGF0YWJhc2VzKSAmJiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAg
IHdlYklEQlNlcnZlcihzZXNzaW9uSUQpLmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRT
aW5jZShtb2RpZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAKQEAgLTE2MzYs
OCArMTYyMiwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaQogICAgIH0KICNlbmRpZgogCi0g
ICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7
IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKQotICAgICAgICBpdGVyYXRvci0+
dmFsdWUtPmRlbGV0ZURhdGFNb2RpZmllZFNpbmNlKHdlYnNpdGVEYXRhVHlwZXMsIG1vZGlmaWVk
U2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKKyAgICBpZiAoYXV0byBpdGVyYXRvciA9
IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdl
TWFuYWdlcnMuZW5kKCkpIHsKKyAgICAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMo
V2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpCisgICAgICAgICAgICB8fCB3ZWJzaXRlRGF0
YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpCisgICAgICAg
ICAgICB8fCB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5
c3RlbSkpCisgICAgICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRlbGV0ZURhdGFNb2RpZmllZFNp
bmNlKHdlYnNpdGVEYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0g
eyB9KTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFyRGlza0NhY2hlRW50cmllcyhOZXR3
b3JrQ2FjaGU6OkNhY2hlKiBjYWNoZSwgY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4m
IG9yaWdpbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE3MDIsMTIgKzE2OTIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRl
RGF0YUZvck9yaWdpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpbwogICAgICAgICAg
ICAgQ2FjaGVTdG9yYWdlOjpFbmdpbmU6OmNsZWFyQ2FjaGVzRm9yT3JpZ2luKCp0aGlzLCBzZXNz
aW9uSUQsIFNlY3VyaXR5T3JpZ2luRGF0YSB7IG9yaWdpbkRhdGEgfSwgW2NsZWFyVGFza3NIYW5k
bGVyXSB7IH0pOwogICAgIH0KIAotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNv
bnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRlbGV0ZVNl
c3Npb25TdG9yYWdlRm9yT3JpZ2lucyhzZXNzaW9uSUQsIG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNr
c0hhbmRsZXJdIHsgfSk7Ci0KLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkgJiYgbV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFp
bnMoc2Vzc2lvbklEKSkKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+ZGVsZXRlTG9jYWxT
dG9yYWdlRm9yT3JpZ2lucyhzZXNzaW9uSUQsIG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNrc0hhbmRs
ZXJdIHsgfSk7Ci0KICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykgJiYgIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQog
ICAgICAgICB3ZWJJREJTZXJ2ZXIoc2Vzc2lvbklEKS5jbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zv
ck9yaWdpbnMob3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKIApAQCAtMTc0
NSw4ICsxNzI5LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9y
T3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvCiAgICAgfQogI2VuZGlmCiAK
LSAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklE
KTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9y
LT52YWx1ZS0+ZGVsZXRlRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBvcmlnaW5EYXRhcywgW2NsZWFy
VGFza3NIYW5kbGVyXSB7IH0pOworICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFu
YWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQo
KSkgeworICAgICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OkxvY2FsU3RvcmFnZSkKKyAgICAgICAgICAgIHx8IHdlYnNpdGVEYXRhVHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkKKyAgICAgICAgICAgIHx8IHdlYnNp
dGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtKSkKKyAgICAg
ICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBvcmln
aW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOworICAgIH0KIAogICAgIGlmIChhdXRv
KiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpIHsKICAg
ICAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1RvRGVsZXRl
TmV0d29ya0RhdGFGb3I7CkBAIC0xOTAzLDI4ICsxODkxLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
czo6ZGVsZXRlQW5kUmVzdHJpY3RXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6
OlNlc3MKICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgaWYgKG1fc3RvcmFnZU1hbmFnZXJTZXQt
PmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkpIHsKLSAgICAgICAgICAgIG1f
c3RvcmFnZU1hbmFnZXJTZXQtPmdldFNlc3Npb25TdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQsIFtw
cm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdGhpcywgc2Vzc2lvbklELCBjYWxsYmFja0Fn
Z3JlZ2F0b3IsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yXShhdXRv
JiYgb3JpZ2lucykgewotICAgICAgICAgICAgICAgIGlmICghbV9zdG9yYWdlTWFuYWdlclNldC0+
Y29udGFpbnMoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICAgICAgYXV0byBvcmlnaW5zVG9EZWxldGUgPSBmaWx0ZXJGb3JSZWdpc3RyYWJsZURv
bWFpbnMob3JpZ2lucywgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3Is
IGNhbGxiYWNrQWdncmVnYXRvci0+bV9kb21haW5zKTsKLSAgICAgICAgICAgICAgICBtX3N0b3Jh
Z2VNYW5hZ2VyU2V0LT5kZWxldGVTZXNzaW9uU3RvcmFnZUZvck9yaWdpbnMoc2Vzc2lvbklELCBv
cmlnaW5zVG9EZWxldGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkgewotICAgICAgICAgICAgbV9zdG9yYWdlTWFu
YWdlclNldC0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQsIFtwcm90ZWN0ZWRUaGlz
ID0gUmVmIHsgKnRoaXMgfSwgdGhpcywgc2Vzc2lvbklELCBjYWxsYmFja0FnZ3JlZ2F0b3IsIGRv
bWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yXShhdXRvJiYgb3JpZ2lucykg
ewotICAgICAgICAgICAgICAgIGlmICghbV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vz
c2lvbklEKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAg
YXV0byBvcmlnaW5zVG9EZWxldGUgPSBmaWx0ZXJGb3JSZWdpc3RyYWJsZURvbWFpbnMob3JpZ2lu
cywgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IsIGNhbGxiYWNrQWdn
cmVnYXRvci0+bV9kb21haW5zKTsKLSAgICAgICAgICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0
LT5kZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW5zKHNlc3Npb25JRCwgb3JpZ2luc1RvRGVsZXRl
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KICAgICBhdXRvIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0aHMuZ2V0KHNlc3Npb25J
RCk7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSAmJiB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzKSkgewogICAgICAgICB3ZWJJREJT
ZXJ2ZXIoc2Vzc2lvbklEKS5nZXRPcmlnaW5zKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsg
KnRoaXMgfSwgc2Vzc2lvbklELCBjYWxsYmFja0FnZ3JlZ2F0b3IsIGRvbWFpbnNUb0RlbGV0ZUFs
bE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yXShhdXRvJiYgb3JpZ2lucykgewpAQCAtMTk3MiwxMCAr
MTkzOCwxNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVBbmRSZXN0cmljdFdlYnNpdGVE
YXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2VzcwogICAgIH0KIAogICAgIGlmIChhdXRv
IGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAh
PSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkgewotICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRl
bGV0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMod2Vic2l0ZURhdGFUeXBlcywgZG9tYWluc1Rv
RGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1
dG8gZGVsZXRlZERvbWFpbnMpIG11dGFibGUgewotICAgICAgICAgICAgZm9yIChhdXRvIGRvbWFp
biA6IGRlbGV0ZWREb21haW5zKQotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
bV9kb21haW5zLmFkZChXVEZNb3ZlKGRvbWFpbikpOwotICAgICAgICB9KTsKKyAgICAgICAgaWYg
KHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2Up
CisgICAgICAgICAgICB8fCB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6U2Vzc2lvblN0b3JhZ2UpCisgICAgICAgICAgICB8fCB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRh
aW5zKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSkpIHsKKyAgICAgICAgICAgIGl0ZXJhdG9y
LT52YWx1ZS0+ZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyh3ZWJzaXRlRGF0YVR5cGVz
LCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvciwgW2NhbGxiYWNrQWdn
cmVnYXRvcl0oYXV0byBkZWxldGVkRG9tYWlucykgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAg
Zm9yIChhdXRvIGRvbWFpbiA6IGRlbGV0ZWREb21haW5zKQorICAgICAgICAgICAgICAgICAgICBj
YWxsYmFja0FnZ3JlZ2F0b3ItPm1fZG9tYWlucy5hZGQoV1RGTW92ZShkb21haW4pKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9CiAgICAgfQogCiAgICAgYXV0byBkYXRhVHlwZXNGb3JVSVBy
b2Nlc3MgPSBXZWJzaXRlRGF0YTo6ZmlsdGVyKHdlYnNpdGVEYXRhVHlwZXMsIFdlYnNpdGVEYXRh
UHJvY2Vzc1R5cGU6OlVJKTsKQEAgLTIzMDYsNyArMjI3Niw4IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnByZXBhcmVUb1N1c3BlbmQoYm9vbCBpc1N1c3BlbnNpb25JbW1pbmVudCwgQ29tcGxldGlv
bkhhbmRsCiAgICAgfQogI2VuZGlmCiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5zdXNwZW5k
KFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9z
dG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpCisgICAgICAgIG1hbmFnZXItPnN1c3BlbmQoW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YXBwbGljYXRp
b25EaWRFbnRlckJhY2tncm91bmQoKQpAQCAtMjM0NSw3ICsyMzE2LDggQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6cmVzdW1lKCkKICAgICBtX3Nob3VsZFN1c3BlbmRJREJTZXJ2ZXJzID0gZmFsc2U7
CiAjZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPnJlc3VtZSgpOworICAgIGZvciAo
YXV0byYgbWFuYWdlciA6IG1fc3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKQorICAgICAgICBtYW5h
Z2VyLT5yZXN1bWUoKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cHJlZmV0Y2hETlMoY29u
c3QgU3RyaW5nJiBob3N0bmFtZSkKQEAgLTI0NDEsOCArMjQxMyw5IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OnNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoUEFMOjpTZXNz
aW9uSUQgc2VzCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnN5bmNMb2NhbFN0b3JhZ2UoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fc3RvcmFn
ZU1hbmFnZXJTZXQtPndhaXRVbnRpbFN5bmNpbmdMb2NhbFN0b3JhZ2VGaW5pc2hlZCgpOwotICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgYXV0byBhZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGZvciAoYXV0
byYgbWFuYWdlciA6IG1fc3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKQorICAgICAgICBtYW5hZ2Vy
LT5zeW5jTG9jYWxTdG9yYWdlKFthZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpyZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjQ3MiwxMCArMjQ0NSw4IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBVCiAgICAgaWYgKG9sZE9yaWdpbi5pc0VtcHR5KCkgfHwg
bmV3T3JpZ2luLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGRhdGFUeXBl
cy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKLSAgICAgICAgaWYg
KG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgICAgICBt
X3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZW5hbWVPcmlnaW4oc2Vzc2lvbklELCBvbGROYW1lLCBuZXdO
YW1lLCBbYWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBt
X3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1h
bmFnZXJzLmVuZCgpKQorICAgICAgICBpdGVyYXRvci0+dmFsdWUtPm1vdmVEYXRhKG9sZE9yaWdp
biwgbmV3T3JpZ2luLCBbYWdncmVnYXRvcl0geyB9KTsKIAogICAgIGlmIChkYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpKSB7CiAgICAgICAgIGF1
dG8gcGF0aCA9IG1faWRiRGF0YWJhc2VQYXRocy5nZXQoc2Vzc2lvbklEKTsKQEAgLTI3NjIsMjEg
KzI3MzMsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVLZXB0QWxpdmVMb2FkKE5ldHdv
cmtSZXNvdXJjZUxvYWRlciYgbG9hZGVyKQogICAgICAgICBzZXNzaW9uLT5yZW1vdmVLZXB0QWxp
dmVMb2FkKGxvYWRlcik7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmdldExvY2FsU3RvcmFn
ZU9yaWdpbkRldGFpbHMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICghbV9zdG9yYWdlTWFuYWdlclNl
dC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewotICAgICAgICBMT0dfRVJST1IoIkNhbm5vdCBnZXQg
bG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbiBmb3IgYW4gdW5rbm93biBzZXNzaW9uIik7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKHNlc3Np
b25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpjb25uZWN0aW9uVG9XZWJQcm9jZXNzQ2xvc2VkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIG1fc3RvcmFnZU1hbmFnZXJT
ZXQtPnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7Ci0KICAgICBpZiAoYXV0byogc2VydmVy
ID0gbV93ZWJJREJTZXJ2ZXJzLmdldChzZXNzaW9uSUQpKQogICAgICAgICBzZXJ2ZXItPnJlbW92
ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCA5YmM1N2VlMzdlYjYwOWMzOTdlZDdlM2QyMmY1NWUw
NjRkMDJlMDE3Li41NjFmNzcxY2QzNzkxNjBiOTRkZmMyMWZhZDFlNjQ1NmZmYmQ1M2U2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xMDcs
NyArMTA3LDYgQEAgY2xhc3MgTmV0d29ya1Byb3hpbWl0eU1hbmFnZXI7CiBjbGFzcyBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBOZXR3b3JrU3RvcmFnZU1hbmFnZXI7CiBjbGFzcyBQcm9j
ZXNzQXNzZXJ0aW9uOwotY2xhc3MgU3RvcmFnZU1hbmFnZXJTZXQ7CiBjbGFzcyBXZWJQYWdlTmV0
d29ya1BhcmFtZXRlcnM7CiBjbGFzcyBXZWJTV1NlcnZlckNvbm5lY3Rpb247CiBjbGFzcyBXZWJT
V1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb247CkBAIC0yOTUsNyArMjk0LDYgQEAgcHVibGljOgog
ICAgIGJvb2wgc2Vzc2lvbklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihQQUw6OlNlc3Npb25JRCkg
Y29uc3Q7CiAKICAgICB2b2lkIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NDbG9zZWQoSVBDOjpDb25u
ZWN0aW9uJiwgUEFMOjpTZXNzaW9uSUQpOwotICAgIHZvaWQgZ2V0TG9jYWxTdG9yYWdlT3JpZ2lu
RGV0YWlscyhQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8TG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJik7CiAKICNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIE5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5h
Z2VyJiBuZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlcigpIHsgcmV0dXJuIG1fbmV0d29ya0Nv
bnRlbnRSdWxlTGlzdE1hbmFnZXI7IH0KQEAgLTU1Miw3ICs1NTAsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIHVpbnQ2
NF90IGRlZmF1bHRRdW90YSwgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YSwgY29uc3Qg
U3RyaW5nJiBjYWNoZVJvb3RQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKICAgICB2
b2lkIHJlbW92ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEKTsKIAot
ICAgIHZvaWQgYWRkU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKFBBTDo6U2Vzc2lvbklELCBjb25z
dCBTdHJpbmcmIHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpOworICAgIHZvaWQgYWRk
U3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBh
dGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdl
UGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgdm9pZCByZW1vdmVTdG9yYWdl
TWFuYWdlckZvclNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwogCiAgICAgLy8gQ29ubmVjdGlvbnMg
dG8gV2ViUHJvY2Vzc2VzLgpAQCAtNTc1LDggKzU3Myw2IEBAIHByaXZhdGU6CiAgICAgSGFzaE1h
cDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTZXNzaW9uPj4gbV9uZXR3
b3JrU2Vzc2lvbnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4+IG1fbmV0d29ya1N0b3JhZ2VTZXNzaW9u
czsKIAotICAgIFJlZjxTdG9yYWdlTWFuYWdlclNldD4gbV9zdG9yYWdlTWFuYWdlclNldDsKLQog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1By
b2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5t
ZXNzYWdlcy5pbgppbmRleCA4ZDM0ZTcxMzk2NmM3ZTkwYWI0MzViMWJmZGQzZTNkM2I2YzIwODNj
Li4yOWQzZDk3ZTkwMDExYmUwNTJlOWJlMzM5NzhhMDUyY2NlOWY2NDU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMu
aW4KQEAgLTE3Myw3ICsxNzMsNiBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lS
ZWNlaXZlciB7CiAgICAgTWFya1ByaXZhdGVDbGlja01lYXN1cmVtZW50c0FzRXhwaXJlZEZvclRl
c3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiAoKSBBc3luYwogICAgIFNldFBDTUZy
YXVkUHJldmVudGlvblZhbHVlc0ZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBT
dHJpbmcgc2VjcmV0VG9rZW4sIFN0cmluZyB1bmxpbmthYmxlVG9rZW4sIFN0cmluZyBzaWduYXR1
cmUsIFN0cmluZyBrZXlJRCkgLT4gKCkgQXN5bmMKICAgICBTZXRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudEFwcEJ1bmRsZUlERm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmlu
ZyBhcHBCdW5kbGVJREZvclRlc3RpbmcpIC0+ICgpIEFzeW5jCi0gICAgR2V0TG9jYWxTdG9yYWdl
T3JpZ2luRGV0YWlscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChWZWN0b3I8V2ViS2l0
OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+IGRldGFpbHMpIEFz
eW5jCiAKICAgICBTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhTZWNvbmRz
IHNlY29uZHMpIC0+ICgpIFN5bmNocm9ub3VzCiAgICAgUmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hU
aW1lb3V0Rm9yVGVzdGluZygpIC0+ICgpIFN5bmNocm9ub3VzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWUwOGJiYjQwZGFlNGMyNDQxMjUyODEwOWEzMTcyMWI0ZGMyNjJiZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9M
b2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VNYW5hZ2VyLmgiCisKKyNp
bmNsdWRlICJNZW1vcnlTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0b3JhZ2VBcmVh
LmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFSZWdpc3RyeS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
U1FMaXRlRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRh
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBTdWdnZXN0ZWQgYnkgaHR0cHM6Ly93d3cu
dzMub3JnL1RSL3dlYnN0b3JhZ2UvI2Rpc2stc3BhY2UKK2NvbnN0ZXhwciB1bnNpZ25lZCBsb2Nh
bFN0b3JhZ2VRdW90YUluQnl0ZXMgPSA1ICogTUI7CisKK2Jvb2wgTG9jYWxTdG9yYWdlTWFuYWdl
cjo6aGFzTG9jYWxTdG9yYWdlRGF0YShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYgb3JpZ2luKQoreworICAgIHJldHVybiBGaWxlU3lzdGVtOjpmaWxlRXhp
c3RzKFNRTGl0ZVN0b3JhZ2VBcmVhOjpkYXRhYmFzZVBhdGgocGF0aCwgb3JpZ2luKSk7Cit9CisK
K3ZvaWQgTG9jYWxTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRGF0YShXYWxsVGlt
ZSB0aW1lLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYg
b3JpZ2luKQoreworICAgIGF1dG8gZGF0YWJhc2VQYXRoID0gU1FMaXRlU3RvcmFnZUFyZWE6OmRh
dGFiYXNlUGF0aChwYXRoLCBvcmlnaW4pOworICAgIGlmIChhdXRvIG1vZGlmaWNhdGlvblRpbWUg
PSBGaWxlU3lzdGVtOjpmaWxlTW9kaWZpY2F0aW9uVGltZShkYXRhYmFzZVBhdGgpOyBtb2RpZmlj
YXRpb25UaW1lICYmICptb2RpZmljYXRpb25UaW1lID49IHRpbWUpCisgICAgICAgIFdlYkNvcmU6
OlNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShkYXRhYmFzZVBhdGgpOworfQor
Cit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6Om1vdmVMb2NhbFN0b3JhZ2VEYXRhKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBzb3VyY2VPcmlnaW4sIGNv
bnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgdGFyZ2V0T3JpZ2luKQoreworICAgIFdlYkNvcmU6
OlNRTGl0ZUZpbGVTeXN0ZW06Om1vdmVEYXRhYmFzZUZpbGUoU1FMaXRlU3RvcmFnZUFyZWE6OmRh
dGFiYXNlUGF0aChwYXRoLCBzb3VyY2VPcmlnaW4pLCBTUUxpdGVTdG9yYWdlQXJlYTo6ZGF0YWJh
c2VQYXRoKHBhdGgsIHRhcmdldE9yaWdpbikpOworfQorCitWZWN0b3I8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhPiBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpnZXRPcmlnaW5zT2ZMb2NhbFN0b3Jh
Z2VEYXRhKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhPiBvcmlnaW5zOworICAgIGZvciAoYXV0byYgZmlsZU5hbWUgOiBGaWxlU3lz
dGVtOjpsaXN0RGlyZWN0b3J5KHBhdGgpKSB7CisgICAgICAgIGlmIChhdXRvIG9yaWdpbiA9IFNR
TGl0ZVN0b3JhZ2VBcmVhOjpmaWxlTmFtZVRvT3JpZ2luKGZpbGVOYW1lKSkKKyAgICAgICAgICAg
IG9yaWdpbnMuYXBwZW5kKCpvcmlnaW4pOworICAgIH0KKworICAgIHJldHVybiBvcmlnaW5zOwor
fQorCitMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVh
UmVnaXN0cnkmIHJlZ2lzdHJ5LCBjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgOiBtX3JlZ2lzdHJ5
KHJlZ2lzdHJ5KQorICAgICwgbV9wYXRoKHBhdGgpCit7Cit9CisKK2Jvb2wgTG9jYWxTdG9yYWdl
TWFuYWdlcjo6aXNBY3RpdmUoKQoreworICAgIHJldHVybiBtX3N0b3JhZ2VBcmVhICYmIG1fc3Rv
cmFnZUFyZWEtPmhhc0xpc3RlbmVycygpOworfQorCitib29sIExvY2FsU3RvcmFnZU1hbmFnZXI6
Omhhc0RhdGFJbk1lbW9yeSgpCit7CisgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEgJiYgIW1fc3Rv
cmFnZUFyZWEtPmlzRW1wdHkoKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjbGVh
ckRhdGEoKQoreworICAgIGlmIChtX3N0b3JhZ2VBcmVhKQorICAgICAgICBtX3N0b3JhZ2VBcmVh
LT5jbGVhcigpOworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6OmNsb3NlKCkKK3sKKyAg
ICBpZiAobV9zdG9yYWdlQXJlYSAmJiBpczxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fc3RvcmFnZUFy
ZWEpKQorICAgICAgICBkb3duY2FzdDxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fc3RvcmFnZUFyZWEp
LmNsb3NlKCk7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlTWFuYWdlcjo6aGFuZGxlTG93TWVtb3J5
V2FybmluZygpCit7CisgICAgaWYgKG1fc3RvcmFnZUFyZWEgJiYgaXM8U1FMaXRlU3RvcmFnZUFy
ZWE+KCptX3N0b3JhZ2VBcmVhKSkKKyAgICAgICAgZG93bmNhc3Q8U1FMaXRlU3RvcmFnZUFyZWE+
KCptX3N0b3JhZ2VBcmVhKS5oYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7Cit9CisKK3ZvaWQgTG9j
YWxTdG9yYWdlTWFuYWdlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit7CisgICAgaWYgKG1fc3RvcmFn
ZUFyZWEgJiYgaXM8U1FMaXRlU3RvcmFnZUFyZWE+KCptX3N0b3JhZ2VBcmVhKSkKKyAgICAgICAg
ZG93bmNhc3Q8U1FMaXRlU3RvcmFnZUFyZWE+KCptX3N0b3JhZ2VBcmVhKS5jb21taXRUcmFuc2Fj
dGlvbklmTmVjZXNzYXJ5KCk7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlTWFuYWdlcjo6Y29ubmVj
dGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24pCit7CisgICAg
bV9zdG9yYWdlQXJlYS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7CisgICAgaWYgKG1fc3Rv
cmFnZUFyZWEtPmhhc0xpc3RlbmVycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlZ2lz
dHJ5LnVucmVnaXN0ZXJTdG9yYWdlQXJlYShtX3N0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCkpOwor
ICAgIG1fc3RvcmFnZUFyZWEgPSBudWxscHRyOworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFn
ZXI6OmVuc3VyZVN0b3JhZ2VBcmVhKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIHBhdGgsIHN0ZDo6b3B0aW9uYWw8UmVmPFdvcmtRdWV1ZT4+IHdvcmtR
dWV1ZSkKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFwYXRoLmlzRW1wdHkoKSAmJiB3b3JrUXVldWUpCisgICAgICAgIG1fc3RvcmFnZUFyZWEg
PSBtYWtlVW5pcXVlPFNRTGl0ZVN0b3JhZ2VBcmVhPihsb2NhbFN0b3JhZ2VRdW90YUluQnl0ZXMs
IG9yaWdpbiwgcGF0aCwgV1RGTW92ZSgqd29ya1F1ZXVlKSk7CisgICAgZWxzZQorICAgICAgICBt
X3N0b3JhZ2VBcmVhID0gbWFrZVVuaXF1ZTxNZW1vcnlTdG9yYWdlQXJlYT4ob3JpZ2luLCBTdG9y
YWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlOjpMb2NhbCk7CisgICAgbV9yZWdpc3RyeS5yZWdpc3Rl
clN0b3JhZ2VBcmVhKG1fc3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKSwgKm1fc3RvcmFnZUFyZWEp
OworfQorCitTdG9yYWdlQXJlYUlkZW50aWZpZXIgTG9jYWxTdG9yYWdlTWFuYWdlcjo6Y29ubmVj
dFRvTG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24s
IGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBSZWY8V29ya1F1ZXVlPiYmIHdv
cmtRdWV1ZSkKK3sKKyAgICBlbnN1cmVTdG9yYWdlQXJlYShvcmlnaW4sIG1fcGF0aCwgc3RkOjpt
YWtlX29wdGlvbmFsKFdURk1vdmUod29ya1F1ZXVlKSkpOworICAgIEFTU0VSVChtX3BhdGguaXNF
bXB0eSgpIHx8IG1fc3RvcmFnZUFyZWEtPnR5cGUoKSA9PSBTdG9yYWdlQXJlYUJhc2U6OlR5cGU6
OlNRTGl0ZSk7CisKKyAgICBtX3N0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25uZWN0aW9uKTsK
KyAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpOworfQorCitTdG9yYWdlQXJl
YUlkZW50aWZpZXIgTG9jYWxTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxT
dG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIGNvbnN0IFdl
YkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQoreworICAgIGVuc3VyZVN0b3JhZ2VBcmVhKG9y
aWdpbiwgU3RyaW5nIHsgfSwgeyB9KTsKKyAgICBBU1NFUlQobV9zdG9yYWdlQXJlYS0+dHlwZSgp
ID09IFN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6TWVtb3J5KTsKKworICAgIG1fc3RvcmFnZUFyZWEt
PmFkZExpc3RlbmVyKGNvbm5lY3Rpb24pOworICAgIHJldHVybiBtX3N0b3JhZ2VBcmVhLT5pZGVu
dGlmaWVyKCk7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlTWFuYWdlcjo6ZGlzY29ubmVjdEZyb21T
dG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VB
cmVhSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIGlmICghbV9zdG9yYWdlQXJlYSB8fCBt
X3N0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCkgIT0gaWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgY29ubmVjdGlvbkNsb3NlZChjb25uZWN0aW9uKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjU0ODQ2NTc1NzY4MTUy
MTM3ZGUyMjI2MDBjNmVlZjJjZDQ3ODU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuaApAQCAtMCwwICsx
LDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdG9yYWdlQXJl
YUlkZW50aWZpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworc3RydWN0IENsaWVudE9yaWdp
bjsKK3N0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBTdG9yYWdlQXJlYUJhc2U7CitjbGFzcyBTdG9yYWdlQXJlYVJlZ2lzdHJ5OworCitj
bGFzcyBMb2NhbFN0b3JhZ2VNYW5hZ2VyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBoYXNMb2NhbFN0b3JhZ2VEYXRhKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgc3RhdGljIHZvaWQg
ZGVsZXRlTG9jYWxTdG9yYWdlRGF0YShXYWxsVGltZSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICBzdGF0aWMgdm9pZCBtb3ZlTG9jYWxTdG9y
YWdlRGF0YShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYg
c291cmNlT3JpZ2luLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIHRhcmdldE9yaWdpbik7
CisgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGdldE9yaWdp
bnNPZkxvY2FsU3RvcmFnZURhdGEoY29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAgIExvY2FsU3Rv
cmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYsIGNvbnN0IFN0cmluZyYgcGF0aCk7Cisg
ICAgYm9vbCBpc0FjdGl2ZSgpOworICAgIGJvb2wgaGFzRGF0YUluTWVtb3J5KCk7CisgICAgdm9p
ZCBjbGVhckRhdGEoKTsKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBoYW5kbGVMb3dNZW1v
cnlXYXJuaW5nKCk7CisgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKCk7CisgICAgdm9pZCBjb25u
ZWN0aW9uQ2xvc2VkKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQpOworCisgICAgU3RvcmFnZUFy
ZWFJZGVudGlmaWVyIGNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpV
bmlxdWVJRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgUmVmPFdvcmtRdWV1ZT4mJik7
CisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFn
ZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luJik7CisgICAgdm9pZCBkaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlv
bjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSWRlbnRpZmllcik7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBlbnN1cmVTdG9yYWdlQXJlYShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBjb25zdCBT
dHJpbmcmLCBzdGQ6Om9wdGlvbmFsPFJlZjxXb3JrUXVldWU+Pik7CisKKyAgICBTdG9yYWdlQXJl
YVJlZ2lzdHJ5JiBtX3JlZ2lzdHJ5OworICAgIFN0cmluZyBtX3BhdGg7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFN0b3JhZ2VBcmVhQmFzZT4gbV9zdG9yYWdlQXJlYTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiMDY5YWRmOGVk
ZjEyMTVkNWFhMjZlMzUyZWQyYzQ4OWY3MTVmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuY3BwCkBAIC0w
LDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ik1lbW9yeVN0b3JhZ2VBcmVhLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK01lbW9yeVN0b3JhZ2VBcmVhOjpNZW1vcnlTdG9yYWdl
QXJlYShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgU3RvcmFnZUFyZWFCYXNl
OjpTdG9yYWdlVHlwZSB0eXBlKQorICAgIDogU3RvcmFnZUFyZWFCYXNlKFdlYkNvcmU6OlN0b3Jh
Z2VNYXA6Om5vUXVvdGEsIG9yaWdpbikKKyAgICAsIG1fc3RvcmFnZVR5cGUodHlwZSkKK3sKKyAg
ICBtX21hcCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6U3RvcmFnZU1hcD4oV2ViQ29yZTo6U3RvcmFn
ZU1hcDo6bm9RdW90YSk7Cit9CisKK2Jvb2wgTWVtb3J5U3RvcmFnZUFyZWE6OmlzRW1wdHkoKQor
eworICAgIHJldHVybiAhbV9tYXAtPmxlbmd0aCgpOworfQorCit2b2lkIE1lbW9yeVN0b3JhZ2VB
cmVhOjpjbGVhcigpCit7CisgICAgbV9tYXAtPmNsZWFyKCk7CisgICAgbm90aWZ5TGlzdGVuZXJz
QWJvdXRDbGVhcigpOworfQorCitIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNZW1vcnlTdG9yYWdl
QXJlYTo6YWxsSXRlbXMoKQoreworICAgIHJldHVybiBtX21hcC0+aXRlbXMoKTsKK30KKworRXhw
ZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBNZW1vcnlTdG9yYWdlQXJlYTo6c2V0SXRlbShJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZp
ZXIgc3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBTdHJpbmcgb2xkVmFsdWU7Cisg
ICAgYm9vbCBoYXNRdW90YUVycm9yID0gZmFsc2U7CisgICAgbV9tYXAtPnNldEl0ZW0oa2V5LCB2
YWx1ZSwgb2xkVmFsdWUsIGhhc1F1b3RhRXJyb3IpOworICAgIGlmIChoYXNRdW90YUVycm9yKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpRdW90YUV4Y2VlZGVk
KTsKKworICAgIGRpc3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBr
ZXksIG9sZFZhbHVlLCB2YWx1ZSwgdXJsU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07Cit9CisK
K0V4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gTWVtb3J5U3RvcmFnZUFyZWE6OnJlbW92ZUl0
ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJ
ZGVudGlmaWVyIHN0b3JhZ2VBcmVhSW1wbElELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpCit7CisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIG1fbWFwLT5yZW1v
dmVJdGVtKGtleSwgb2xkVmFsdWUpOworICAgIGRpc3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24sIHN0
b3JhZ2VBcmVhSW1wbElELCBrZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsKKwor
ICAgIHJldHVybiB7IH07Cit9CisKK0V4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gTWVtb3J5
U3RvcmFnZUFyZWE6OmNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwg
U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcpCit7CisgICAgaWYgKCFtX21hcC0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6Okl0ZW1Ob3RGb3VuZCk7CisKKyAgICBtX21hcC0+
Y2xlYXIoKTsKKyAgICBkaXNwYXRjaEV2ZW50cyhjb25uZWN0aW9uLCBpbXBsSWRlbnRpZmllciwg
U3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsKKworICAgIHJldHVybiB7
IH07Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxNZW1vcnlTdG9yYWdlQXJlYT4gTWVtb3J5U3RvcmFn
ZUFyZWE6OmNsb25lKCkgY29uc3QKK3sKKyAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbWFrZVVuaXF1
ZTxNZW1vcnlTdG9yYWdlQXJlYT4ob3JpZ2luKCksIG1fc3RvcmFnZVR5cGUpOworICAgICpzdG9y
YWdlQXJlYS0+bV9tYXAgPSAqbV9tYXA7CisKKyAgICByZXR1cm4gc3RvcmFnZUFyZWE7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisKKworCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5oIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDcxNDI1NmMyYzUyNGMxZGIzZmQwYWZjMzU2NzZkNmNmYzY4NDlmYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdl
QXJlYS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlN0b3JhZ2VBcmVhQmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBT
dG9yYWdlTWFwOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTWVtb3J5U3RvcmFn
ZUFyZWEgZmluYWwgOiBwdWJsaWMgU3RvcmFnZUFyZWFCYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBNZW1vcnlTdG9yYWdlQXJlYShjb25zdCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mLCBTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlID0gU3RvcmFnZUFy
ZWFCYXNlOjpTdG9yYWdlVHlwZTo6U2Vzc2lvbik7CisKKyAgICBib29sIGlzRW1wdHkoKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyKCkgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeVN0
b3JhZ2VBcmVhPiBjbG9uZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIC8vIFN0b3JhZ2VBcmVh
QmFzZQorICAgIFN0b3JhZ2VBcmVhQmFzZTo6VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gU3RvcmFnZUFyZWFCYXNlOjpUeXBlOjpNZW1vcnk7IH07CisgICAgU3RvcmFnZUFyZWFCYXNl
OjpTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3RvcmFn
ZVR5cGU7IH0KKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBhbGxJdGVtcygpIGZpbmFsOwor
ICAgIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gc2V0SXRlbShJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGZpbmFsOworICAg
IEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGZpbmFsOworICAgIEV4cGVjdGVkPHZvaWQsIFN0b3Jh
Z2VFcnJvcj4gY2xlYXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBs
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGZpbmFsOworCisgICAgbXV0YWJs
ZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U3RvcmFnZU1hcD4gbV9tYXA7CisgICAgU3RvcmFn
ZUFyZWFCYXNlOjpTdG9yYWdlVHlwZSBtX3N0b3JhZ2VUeXBlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKworCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggYzEwYWNi
ZGQ2NGZlMDRlZmYxNmExYzhiNzRkMmJmYzE5NTNkYmQ3My4uNjhjYzg4MmRhMzBkOWEzZjI1NTYw
YzBkMTQ2NzFlMzU2NmVmZGU0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKQEAgLTI4
LDEyICsyOCwxOSBAQAogCiAjaW5jbHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIkxv
Y2FsU3RvcmFnZU1hbmFnZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJPcmlnaW5TdG9yYWdlTWFu
YWdlci5oIgorI2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhQmFzZS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJTdG9yYWdlQXJlYVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDxw
YWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oPgogI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1
ZGUgPHd0Zi9TdXNwZW5kYWJsZVdvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50Q29kZXJzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKQEAg
LTkzLDIwICsxMDAsMjIgQEAgc3RhdGljIHZvaWQgZGVsZXRlT3JpZ2luRmlsZUlmTmVjZXNzYXJ5
KGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUo
ZmlsZVBhdGgpOwogfQogCi1SZWY8TmV0d29ya1N0b3JhZ2VNYW5hZ2VyPiBOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYg
cGF0aCkKK1JlZjxOZXR3b3JrU3RvcmFnZU1hbmFnZXI+IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBzdGQ6
Om9wdGlvbmFsPFN0cmluZz4gY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBOZXR3b3JrU3RvcmFnZU1hbmFnZXIoc2Vzc2lvbklELCBwYXRoKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyKHNlc3Npb25JRCwg
cGF0aCwgY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkpOwogfQogCi1OZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFN0cmluZyYgcGF0aCkKK05ldHdvcmtTdG9yYWdlTWFuYWdlcjo6TmV0d29ya1N0b3JhZ2VNYW5h
Z2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBzdGQ6Om9w
dGlvbmFsPFN0cmluZz4gY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkKICAgICA6IG1fc2Vzc2lvbklE
KHNlc3Npb25JRCkKLSAgICAsIG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5X
ZWJLaXQuU3RvcmFnZSIpKQorICAgICwgbV9xdWV1ZShTdXNwZW5kYWJsZVdvcmtRdWV1ZTo6Y3Jl
YXRlKCJjb20uYXBwbGUuV2ViS2l0LlN0b3JhZ2UiKSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogCi0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBSZWYgeyAqdGhpcyB9LCBwYXRoID0gcGF0aC5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsK
KyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlz
IH0sIHBhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpLCBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoID0g
Y3Jvc3NUaHJlYWRDb3B5KGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgpXSgpIG11dGFibGUgewogICAg
ICAgICBtX2ZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkgPSBtYWtlVW5pcXVlPEZpbGVT
eXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnk+KCk7CisgICAgICAgIG1fc3RvcmFnZUFyZWFSZWdp
c3RyeSA9IG1ha2VVbmlxdWU8U3RvcmFnZUFyZWFSZWdpc3RyeT4oKTsKICAgICAgICAgbV9wYXRo
ID0gcGF0aDsKKyAgICAgICAgbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoID0gY3VzdG9tTG9jYWxT
dG9yYWdlUGF0aDsKICAgICAgICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICBhdXRvIHNhbHRQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1f
cGF0aCwgInNhbHQiKTsKICAgICAgICAgICAgIG1fc2FsdCA9IEZpbGVTeXN0ZW06OnJlYWRPck1h
a2VTYWx0KHNhbHRQYXRoKS52YWx1ZV9vcihGaWxlU3lzdGVtOjpTYWx0KCkpOwpAQCAtMTMzLDcg
KzE0Miw2IEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbG9zZSgpCiAKICAgICBtX3F1
ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dKCkgbXV0
YWJsZSB7CiAgICAgICAgIG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMuY2xlYXIoKTsKLSAg
ICAgICAgbV9zZXNzaW9uT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmNsZWFyKCk7CiAgICAgICAgIG1f
ZmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSA9IG51bGxwdHI7CiAKICAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRU
aGlzKV0geyB9KTsKQEAgLTIzMiw5ICsyNDAsNiBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6Y2xlYXJTdG9yYWdlRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgYwog
ICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJz
LnZhbHVlcygpKQogICAgICAgICAgICAgbWFuYWdlci0+c2V0UGVyc2lzdGVkKGZhbHNlKTsKIAot
ICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX3Nlc3Npb25PcmlnaW5TdG9yYWdlTWFuYWdl
cnMudmFsdWVzKCkpCi0gICAgICAgICAgICBtYW5hZ2VyLT5zZXRQZXJzaXN0ZWQoZmFsc2UpOwot
CiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
ICAgICAgICB9KTsKQEAgLTM4MiwxNCArMzg3LDYgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OmdldEhhbmRsZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OkZpbGUK
ICAgICBjb21wbGV0aW9uSGFuZGxlcihoYW5kbGUtPmdldEhhbmRsZShjb25uZWN0aW9uLnVuaXF1
ZUlEKCksIFdURk1vdmUobmFtZSkpKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2Vic2l0
ZURhdGFUeXBlPiB0b1dlYnNpdGVEYXRhVHlwZShjb25zdCBTdHJpbmcmIHN0b3JhZ2VUeXBlKQot
ewotICAgIGlmIChzdG9yYWdlVHlwZSA9PSAiRmlsZVN5c3RlbSIpCi0gICAgICAgIHJldHVybiBX
ZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW07Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
fQotCiB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Zm9yRWFjaE9yaWdpbkRpcmVjdG9yeShj
b25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYgYXBwbHkpCiB7CiAgICAgZm9yIChh
dXRvJiB0b3BPcmlnaW4gOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KG1fcGF0aCkpIHsKQEAg
LTQwMSw2ICszOTgsOSBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Zm9yRWFjaE9yaWdp
bkRpcmVjdG9yeShjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cgogICAgICAgICB9CiAKICAg
ICAgICAgZm9yIChhdXRvJiBvcGVuaW5nT3JpZ2luIDogb3BlbmluZ09yaWdpbnMpIHsKKyAgICAg
ICAgICAgIGlmIChvcGVuaW5nT3JpZ2luID09ICIuRFNfU3RvcmUiKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCiAgICAgICAgICAgICBhdXRvIG9wZW5pbmdPcmlnaW5EaXJlY3RvcnkgPSBG
aWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQodG9wT3JpZ2luRGlyZWN0b3J5LCBv
cGVuaW5nT3JpZ2luKTsKICAgICAgICAgICAgIGFwcGx5KG9wZW5pbmdPcmlnaW5EaXJlY3Rvcnkp
OwogICAgICAgICB9CkBAIC00MTIsMjAgKzQxMiw0MCBAQCBWZWN0b3I8V2Vic2l0ZURhdGE6OkVu
dHJ5PiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YUZyb21EaXNrKE9wdGlvblNldDxX
ZQogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgSGFzaE1hcDxXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGEsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+PiBvcmlnaW5U
eXBlczsKKyAgICAvLyBGZXRjaCB2aWEgZXhpc3RpbmcgT3JpZ2luU3RvcmFnZU1hbmFnZXJzLgor
ICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiB2aXNpdGVkT3JpZ2luczsKKyAgICBm
b3IgKGF1dG8mIFtvcmlnaW4sIG1hbmFnZXJdIDogbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vy
cykgeworICAgICAgICBPcmlnaW5TdG9yYWdlRGF0YU9wdGlvbnMgb3B0aW9ucyB7IG1fY3VzdG9t
TG9jYWxTdG9yYWdlUGF0aCwgb3JpZ2luLCBzdGQ6Om51bGxvcHQgfTsKKyAgICAgICAgYXV0byB0
eXBlcyA9IG1hbmFnZXItPmZldGNoRGF0YSh0YXJnZXRUeXBlcywgV1RGTW92ZShvcHRpb25zKSk7
CisgICAgICAgIG9yaWdpblR5cGVzLmFkZChvcmlnaW4uY2xpZW50T3JpZ2luLCBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQodHlwZXMpOworICAgICAg
ICBvcmlnaW5UeXBlcy5hZGQob3JpZ2luLnRvcE9yaWdpbiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4geyB9KS5pdGVyYXRvci0+dmFsdWUuYWRkKHR5cGVzKTsKKyAgICAgICAgdmlzaXRlZE9y
aWdpbnMuYWRkKG9yaWdpbik7CisgICAgfQorCisgICAgLy8gRmV0Y2ggdmlhIG5ld2x5IGNyZWF0
ZWQgT3JpZ2luU3RvcmFnZU1hbmFnZXJzIGJhc2VkIG9uIGRpc2sgZGF0YS4KICAgICBmb3JFYWNo
T3JpZ2luRGlyZWN0b3J5KFsmXShhdXRvIGRpcmVjdG9yeSkgbXV0YWJsZSB7Ci0gICAgICAgIGF1
dG8gb3JpZ2luID0gcmVhZE9yaWdpbkZyb21GaWxlKG9yaWdpbkZpbGVQYXRoKGRpcmVjdG9yeSkp
OwotICAgICAgICBpZiAoIW9yaWdpbikKKyAgICAgICAgYXV0byByZWFkT3JpZ2luID0gcmVhZE9y
aWdpbkZyb21GaWxlKG9yaWdpbkZpbGVQYXRoKGRpcmVjdG9yeSkpOworICAgICAgICBpZiAoIXJl
YWRPcmlnaW4pCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgZm9yIChhdXRvJiBzdG9y
YWdlVHlwZSA6IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkoZGlyZWN0b3J5KSkgewotICAgICAg
ICAgICAgaWYgKGF1dG8gdHlwZSA9IHRvV2Vic2l0ZURhdGFUeXBlKHN0b3JhZ2VUeXBlKTsgdHlw
ZSAmJiB0YXJnZXRUeXBlcy5jb250YWlucygqdHlwZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBS
ZXR1cm4gYm90aCB0b3Agb3JpZ2luIGFuZCBvcGVuaW5nIG9yaWdpbiBmb3IgdGhpcyBkYXRhLgot
ICAgICAgICAgICAgICAgIG9yaWdpblR5cGVzLmFkZChvcmlnaW4tPmNsaWVudE9yaWdpbiwgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4geyB9KS5pdGVyYXRvci0+dmFsdWUuYWRkKCp0eXBlKTsK
LSAgICAgICAgICAgICAgICBvcmlnaW5UeXBlcy5hZGQob3JpZ2luLT50b3BPcmlnaW4sIE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+IHsgfSkuaXRlcmF0b3ItPnZhbHVlLmFkZCgqdHlwZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byBvcmlnaW4gPSByZWFkT3JpZ2lu
LnZhbHVlKCk7CisgICAgICAgIGlmICh2aXNpdGVkT3JpZ2lucy5jb250YWlucyhvcmlnaW4pKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIE9yaWdpblN0b3JhZ2VEYXRhT3B0aW9ucyBv
cHRpb25zIHsgbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoLCBvcmlnaW4sIHN0ZDo6bnVsbG9wdCB9
OworICAgICAgICBhdXRvIHR5cGVzID0gbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihvcmlnaW4p
LmZldGNoRGF0YSh0YXJnZXRUeXBlcywgV1RGTW92ZShvcHRpb25zKSk7CisgICAgICAgIHJlbW92
ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShvcmlnaW4pOworICAgICAgICBvcmlnaW5U
eXBlcy5hZGQob3JpZ2luLmNsaWVudE9yaWdpbiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
eyB9KS5pdGVyYXRvci0+dmFsdWUuYWRkKHR5cGVzKTsKKyAgICAgICAgb3JpZ2luVHlwZXMuYWRk
KG9yaWdpbi50b3BPcmlnaW4sIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHsgfSkuaXRlcmF0
b3ItPnZhbHVlLmFkZCh0eXBlcyk7CiAgICAgfSk7CiAKKyAgICAvLyBGZXRjaCBMb2NhbFN0b3Jn
ZSBvcmlnaW5zIHNpbmNlIGl0IG1heSB1c2UgY3VzdG9tIHBhdGguCisgICAgaWYgKG1fY3VzdG9t
TG9jYWxTdG9yYWdlUGF0aCkgeworICAgICAgICBhdXRvIG9yaWdpbnMgPSBMb2NhbFN0b3JhZ2VN
YW5hZ2VyOjpnZXRPcmlnaW5zT2ZMb2NhbFN0b3JhZ2VEYXRhKCptX2N1c3RvbUxvY2FsU3RvcmFn
ZVBhdGgpOworICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IG9yaWdpbnMpCisgICAgICAgICAg
ICBvcmlnaW5UeXBlcy5hZGQob3JpZ2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB7IH0p
Lml0ZXJhdG9yLT52YWx1ZS5hZGQoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpOworICAg
IH0KKwogICAgIFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+IGVudHJpZXM7CiAgICAgZm9yIChh
dXRvIFtvcmlnaW4sIHR5cGVzXSA6IG9yaWdpblR5cGVzKSB7CiAgICAgICAgIGZvciAoYXV0byB0
eXBlIDogdHlwZXMpCkBAIC00NTUsMjUgKzQ3NSwyNiBAQCBWZWN0b3I8V2ViQ29yZTo6Q2xpZW50
T3JpZ2luPiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZURhdGFPbkRpc2soT3B0aW9uU2V0
PAogICAgIFZlY3RvcjxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IGRlbGV0ZWRPcmlnaW5zOwogICAg
IGZvckVhY2hPcmlnaW5EaXJlY3RvcnkoWyZdKGF1dG8gZGlyZWN0b3J5KSBtdXRhYmxlIHsKICAg
ICAgICAgYXV0byBmaWxlUGF0aCA9IG9yaWdpbkZpbGVQYXRoKGRpcmVjdG9yeSk7Ci0gICAgICAg
IGF1dG8gb3JpZ2luID0gcmVhZE9yaWdpbkZyb21GaWxlKGZpbGVQYXRoKTsKLSAgICAgICAgaWYg
KCFvcmlnaW4pIHsKKyAgICAgICAgYXV0byByZWFkT3JpZ2luID0gcmVhZE9yaWdpbkZyb21GaWxl
KGZpbGVQYXRoKTsKKyAgICAgICAgaWYgKCFyZWFkT3JpZ2luKSB7CiAgICAgICAgICAgICAvLyBJ
ZiBvcmlnaW4gY2Fubm90IGJlIHJldHJpZXZlZCwgYnV0IHdlIGFyZSBhc2tlZCB0byByZW1vdmUg
ZGF0YSBmb3IgYWxsIG9yaWdpbnMsIHJlbW92ZSBpdC4KICAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFN0b3JhZ2UsICJOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZURhdGFPbkRpc2sg
ZmFpbGVkIHRvIHJlYWQgb3JpZ2luIGZyb20gJyVzJyIsIGZpbGVQYXRoLnV0ZjgoKS5kYXRhKCkp
OwogICAgICAgICAgICAgaWYgKGZpbHRlcihXZWJDb3JlOjpDbGllbnRPcmlnaW4geyB9KSkgewog
ICAgICAgICAgICAgICAgIGF1dG8gdGVtcE9yaWdpblN0b3JhZ2VNYW5hZ2VyID0gbWFrZVVuaXF1
ZTxPcmlnaW5TdG9yYWdlTWFuYWdlcj4oU3RyaW5nIHsgZGlyZWN0b3J5IH0pOwotICAgICAgICAg
ICAgICAgIHRlbXBPcmlnaW5TdG9yYWdlTWFuYWdlci0+ZGVsZXRlRGF0YSh0eXBlcywgbW9kaWZp
ZWRTaW5jZVRpbWUpOworICAgICAgICAgICAgICAgIHRlbXBPcmlnaW5TdG9yYWdlTWFuYWdlci0+
ZGVsZXRlRGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZVRpbWUsIE9yaWdpblN0b3JhZ2VEYXRhT3B0
aW9ucyB7IG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxv
cHQgfSk7CiAgICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZUlmTmVjZXNzYXJ5KGZpbGVQ
YXRoKTsKICAgICAgICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9yeShk
aXJlY3RvcnkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKCFmaWx0ZXIoKm9yaWdpbikpCisgICAgICAgIGF1dG8gb3JpZ2luID0g
cmVhZE9yaWdpbi52YWx1ZSgpOworICAgICAgICBpZiAoIWZpbHRlcihvcmlnaW4pKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIGRlbGV0ZWRPcmlnaW5zLmFwcGVuZCgqb3JpZ2luKTsK
LSAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcigqb3JpZ2luKS5kZWxldGVEYXRhKHR5
cGVzLCBtb2RpZmllZFNpbmNlVGltZSk7Ci0gICAgICAgIHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5h
Z2VySWZQb3NzaWJsZSgqb3JpZ2luKTsKKyAgICAgICAgZGVsZXRlZE9yaWdpbnMuYXBwZW5kKG9y
aWdpbik7CisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5kZWxldGVE
YXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlVGltZSwgT3JpZ2luU3RvcmFnZURhdGFPcHRpb25zIHsg
bV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoLCBvcmlnaW4sIHN0ZDo6bnVsbG9wdCB9KTsKKyAgICAg
ICAgcmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxlKG9yaWdpbik7CiAgICAgICAg
IGRlbGV0ZU9yaWdpbkZpbGVJZk5lY2Vzc2FyeShmaWxlUGF0aCk7CiAgICAgICAgIEZpbGVTeXN0
ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KGRpcmVjdG9yeSk7CiAgICAgfSk7CkBAIC01NDEsNSAr
NTYyLDE2NiBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YUZvclJlZ2lz
dHJhYmxlRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdAogICAgIH0pOwogfQogCit2b2lkIE5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6bW92ZURhdGEoY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhJiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdGFyZ2V0
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoIW1fY2xvc2VkKTsKKworICAg
IG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwg
c291cmNlID0gY3Jvc3NUaHJlYWRDb3B5KHNvdXJjZSksIHRhcmdldCA9IGNyb3NzVGhyZWFkQ29w
eSh0YXJnZXQpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgeworICAgICAgICBhdXRvIHNvdXJjZU9yaWdpbiA9IFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiB7IHNvdXJjZSwgc291cmNlIH07CisgICAgICAgIGF1dG8gdGFyZ2V0T3JpZ2luID0g
V2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgdGFyZ2V0LCB0YXJnZXQgfTsKKyAgICAgICAgCisgICAg
ICAgIC8vIENsZWFyIGV4aXN0aW5nIGRhdGEgZm9yIHRhcmdldCBvcmlnaW4uCisgICAgICAgIE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzID0geyBXZWJzaXRlRGF0YVR5cGU6OkZpbGVT
eXN0ZW0sIFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlLCBXZWJzaXRlRGF0YVR5cGU6OlNl
c3Npb25TdG9yYWdlICB9OworICAgICAgICBPcmlnaW5TdG9yYWdlRGF0YU9wdGlvbnMgb3B0aW9u
cyB7IG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgc291cmNlT3JpZ2luLCB0YXJnZXRPcmlnaW4g
fTsKKyAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcih0YXJnZXRPcmlnaW4pLmRlbGV0
ZURhdGEodHlwZXMsIC1XYWxsVGltZTo6aW5maW5pdHkoKSwgT3JpZ2luU3RvcmFnZURhdGFPcHRp
b25zIHsgbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoLCBzb3VyY2VPcmlnaW4sIHN0ZDo6bnVsbG9w
dCB9KTsKKyAgICAgICAgcmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxlKHRhcmdl
dE9yaWdpbik7CisKKyAgICAgICAgLy8gTW92ZSBkYXRhIGZyb20gc291cmNlIG9yaWdpbiB0byB0
YXJnZXQgb3JpZ2luLgorICAgICAgICBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKHNvdXJjZU9y
aWdpbikubW92ZURhdGEob3JpZ2luRGlyZWN0b3J5UGF0aChtX3BhdGgsIHRhcmdldE9yaWdpbiwg
bV9zYWx0KSwgT3JpZ2luU3RvcmFnZURhdGFPcHRpb25zIHsgbV9jdXN0b21Mb2NhbFN0b3JhZ2VQ
YXRoLCBzb3VyY2VPcmlnaW4sIHRhcmdldE9yaWdpbiB9KTsKKyAgICAgICAgcmVtb3ZlT3JpZ2lu
U3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxlKHNvdXJjZU9yaWdpbik7CisKKyAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsK
K30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnN1c3BlbmQoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBtX3F1ZXVlLT5zdXNwZW5kKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
UmVmIHsgKnRoaXMgfV0geworICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3Jp
Z2luU3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBsb2Nh
bFN0b3JhZ2VNYW5hZ2VyID0gbWFuYWdlci0+ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkp
CisgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTWFuYWdlci0+c3luY0xvY2FsU3RvcmFnZSgp
OworICAgICAgICB9CisgICAgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2
b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVzdW1lKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgbV9xdWV1ZS0+cmVzdW1lKCk7Cit9CisKK3ZvaWQgTmV0d29y
a1N0b3JhZ2VNYW5hZ2VyOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCkKK3sKKyAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSB7CisgICAgICAgIGZvciAoYXV0byYgbWFuYWdlciA6
IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvIGxvY2FsU3RvcmFnZU1hbmFnZXIgPSBtYW5hZ2VyLT5leGlzdGluZ0xvY2FsU3RvcmFn
ZU1hbmFnZXIoKSkKKyAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2VNYW5hZ2VyLT5oYW5kbGVM
b3dNZW1vcnlXYXJuaW5nKCk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0
aGlzIH0sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7CisgICAgICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1fbG9jYWxPcmlnaW5TdG9y
YWdlTWFuYWdlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGxvY2FsU3RvcmFn
ZU1hbmFnZXIgPSBtYW5hZ2VyLT5leGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKSkKKyAgICAg
ICAgICAgICAgICBsb2NhbFN0b3JhZ2VNYW5hZ2VyLT5zeW5jTG9jYWxTdG9yYWdlKCk7CisgICAg
ICAgIH0KKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Y29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFN0
b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGEmIHRvcE9yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQXJlYUlkZW50aWZp
ZXIpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgV2ViQ29yZTo6Q2xpZW50T3JpZ2luIG9yaWdpbiA9IHsgdG9wT3JpZ2luLCB0
b3BPcmlnaW4gfTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihsb2NhbE9yaWdpblN0b3JhZ2VNYW5h
Z2VyKG9yaWdpbikubG9jYWxTdG9yYWdlTWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LCBt
X2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgpLmNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoY29ubmVj
dGlvbi51bmlxdWVJRCgpLCBvcmlnaW4sIG1fcXVldWUuY29weVJlZigpKSk7Cit9CisKK3ZvaWQg
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVh
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIs
IGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdG9wT3JpZ2luLCBjb25zdCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIG9wZW5pbmdPcmlnaW4sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoU3RvcmFnZUFyZWFJZGVudGlmaWVyKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luID0geyB0b3BPcmlnaW4sIG9wZW5pbmdPcmln
aW4gfTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9y
aWdpbikubG9jYWxTdG9yYWdlTWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LCBtX2N1c3Rv
bUxvY2FsU3RvcmFnZVBhdGgpLmNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEoY29u
bmVjdGlvbi51bmlxdWVJRCgpLCBvcmlnaW4pKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1h
bmFnZXI6OmNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdG9wT3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFN0b3JhZ2VBcmVhSWRlbnRpZmllcik+JiYgY29tcGxldGlvbkhhbmRsZXIpCisKK3sKKyAgICBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luID0geyB0b3BPcmlnaW4sIHRvcE9yaWdpbiB9Owor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5z
ZXNzaW9uU3RvcmFnZU1hbmFnZXIoKm1fc3RvcmFnZUFyZWFSZWdpc3RyeSkuY29ubmVjdFRvU2Vz
c2lvblN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgb3JpZ2luLCBpZGVudGlmaWVy
KSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkaXNjb25uZWN0RnJvbVN0b3Jh
Z2VBcmVhKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJZGVudGlmaWVy
IGlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBh
dXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9yYWdlQXJlYShp
ZGVudGlmaWVyKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoc3RvcmFnZUFyZWEtPnN0b3JhZ2VUeXBlKCkgPT0gU3RvcmFnZUFyZWFCYXNlOjpTdG9y
YWdlVHlwZTo6TG9jYWwpCisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIoc3RvcmFn
ZUFyZWEtPm9yaWdpbigpKS5sb2NhbFN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VBcmVhUmVnaXN0
cnksIG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkuZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShj
b25uZWN0aW9uLnVuaXF1ZUlEKCksIGlkZW50aWZpZXIpOworICAgIGVsc2UKKyAgICAgICAgbG9j
YWxPcmlnaW5TdG9yYWdlTWFuYWdlcihzdG9yYWdlQXJlYS0+b3JpZ2luKCkpLnNlc3Npb25TdG9y
YWdlTWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5KS5kaXNjb25uZWN0RnJvbVN0b3JhZ2VB
cmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgTmV0d29y
a1N0b3JhZ2VNYW5hZ2VyOjpjbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgZnJvbUlkZW50aWZp
ZXIsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHRvSWRlbnRpZmllcikKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1fbG9j
YWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNl
c3Npb25TdG9yYWdlTWFuYWdlciA9IG1hbmFnZXItPmV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyKCkpCisgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZU1hbmFnZXItPmNsb25lU3RvcmFnZUFy
ZWEoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBmcm9tSWRlbnRpZmllciwgdG9JZGVudGlmaWVyKTsK
KyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpnZXRWYWx1ZXMoU3RvcmFn
ZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBtX3N0
b3JhZ2VBcmVhUmVnaXN0cnktPmdldFN0b3JhZ2VBcmVhKGlkZW50aWZpZXIpOworICAgIGlmICgh
c3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiB7IH0pOworCisgICAgY29tcGxldGlvbkhhbmRsZXIoc3RvcmFnZUFyZWEt
PmFsbEl0ZW1zKCkpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c2V0SXRlbShJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlm
aWVyLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIGltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBz
dG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgYXV0byBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFSZWdpc3RyeS0+Z2V0U3Rv
cmFnZUFyZWEoaWRlbnRpZmllcik7CisgICAgYm9vbCBxdW90YUVycm9yID0gZmFsc2U7CisgICAg
aWYgKHN0b3JhZ2VBcmVhKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc3RvcmFnZUFyZWEtPnNl
dEl0ZW0oY29ubmVjdGlvbi51bmlxdWVJRCgpLCBpbXBsSWRlbnRpZmllciwga2V5LCB2YWx1ZSwg
dXJsU3RyaW5nKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBxdW90YUVycm9y
ID0gKHJlc3VsdC5lcnJvcigpID09IFN0b3JhZ2VFcnJvcjo6UXVvdGFFeGNlZWRlZCk7CisgICAg
fQorCisgICAgY29ubmVjdGlvbi5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlkU2V0
SXRlbShzdG9yYWdlTWFwU2VlZCwga2V5LCBxdW90YUVycm9yKSwgaWRlbnRpZmllcik7Cit9CisK
K3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0b3JhZ2VBcmVh
SW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdl
QXJlYVJlZ2lzdHJ5LT5nZXRTdG9yYWdlQXJlYShpZGVudGlmaWVyKTsKKyAgICBpZiAoc3RvcmFn
ZUFyZWEpCisgICAgICAgIHN0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGNvbm5lY3Rpb24udW5pcXVl
SUQoKSwgaW1wbElkZW50aWZpZXIsIGtleSwgdXJsU3RyaW5nKTsKKworICAgIGNvbm5lY3Rpb24u
c2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFJlbW92ZUl0ZW0oc3RvcmFnZU1hcFNl
ZWQsIGtleSksIGlkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Y2xlYXIoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIg
aWRlbnRpZmllciwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWlu
dDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBzdG9yYWdlQXJlYSA9IG1fc3Rv
cmFnZUFyZWFSZWdpc3RyeS0+Z2V0U3RvcmFnZUFyZWEoaWRlbnRpZmllcik7CisgICAgaWYgKHN0
b3JhZ2VBcmVhKQorICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoY29ubmVjdGlvbi51bmlxdWVJ
RCgpLCBpbXBsSWRlbnRpZmllciwgdXJsU3RyaW5nKTsKKworICAgIGNvbm5lY3Rpb24uc2VuZChN
ZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZENsZWFyKHN0b3JhZ2VNYXBTZWVkKSwgaWRlbnRp
Zmllcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
LmgKaW5kZXggMmFkZGYyYjVlMjBhZDM2ZDI4ZTQ0NTk3ZWE0MTNmZmU4OTYxYTQwZi4uMDA3NWM5
NTM2NTE5Mjg5OTJiZTVkNTdmNWY4NDMyMDkwNTQ3ZWU1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFn
ZXIuaApAQCAtMjgsNiArMjgsOSBAQAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRl
ICJGaWxlU3lzdGVtU3RvcmFnZUVycm9yLmgiCiAjaW5jbHVkZSAiT3JpZ2luU3RvcmFnZU1hbmFn
ZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJTdG9y
YWdlQXJlYUltcGxJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZUlkZW50
aWZpZXIuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xp
ZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmll
ci5oPgpAQCAtNDYsMTAgKzQ5LDExIEBAIHN0cnVjdCBDbGllbnRPcmlnaW47CiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeTsKK2NsYXNz
IFN0b3JhZ2VBcmVhUmVnaXN0cnk7CiAKIGNsYXNzIE5ldHdvcmtTdG9yYWdlTWFuYWdlciBmaW5h
bCA6IHB1YmxpYyBJUEM6OkNvbm5lY3Rpb246OldvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlciB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrU3RvcmFnZU1hbmFnZXI+IGNyZWF0ZShQQUw6
OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtT
dG9yYWdlTWFuYWdlcj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBhdGgs
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKTsKIAogICAgIHZv
aWQgc3RhcnRSZWNlaXZpbmdNZXNzYWdlRnJvbUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uJik7
CiAgICAgdm9pZCBzdG9wUmVjZWl2aW5nTWVzc2FnZUZyb21Db25uZWN0aW9uKElQQzo6Q29ubmVj
dGlvbiYpOwpAQCAtNjEsOSArNjUsMTQgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlRGF0YShP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YT4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZGVs
ZXRlRGF0YU1vZGlmaWVkU2luY2UoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1l
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZGVsZXRlRGF0YUZvclJl
Z2lzdHJhYmxlRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9y
PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSGFz
aFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik+JiYpOworICAgIHZvaWQgbW92ZURh
dGEoY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBzb3VyY2UsIGNvbnN0IFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOworICAgIHZvaWQgc3VzcGVuZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAg
IHZvaWQgcmVzdW1lKCk7CisgICAgdm9pZCBoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7CisgICAg
dm9pZCBzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKIHBy
aXZhdGU6Ci0gICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBT
dHJpbmcmIHBhdGgpOworICAgIE5ldHdvcmtTdG9yYWdlTWFuYWdlcihQQUw6OlNlc3Npb25JRCwg
Y29uc3QgU3RyaW5nJiBwYXRoLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gY3VzdG9tTG9jYWxTdG9y
YWdlUGF0aCk7CiAgICAgfk5ldHdvcmtTdG9yYWdlTWFuYWdlcigpOwogICAgIE9yaWdpblN0b3Jh
Z2VNYW5hZ2VyJiBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKGNvbnN0IFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYpOwogICAgIHZvaWQgcmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxl
KGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOwpAQCAtNzUsOCArODQsOSBAQCBwcml2YXRl
OgogCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIgKGltcGxlbWVudGVkIGJ5IGdlbmVyYXRl
ZCBjb2RlKQogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJik7CisgICAgYm9vbCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2Rl
cik7CiAKLSAgICAvLyBNZXNzYWdlIGhhbmRsZXJzCisgICAgLy8gTWVzc2FnZSBoYW5kbGVycyBm
b3IgRmlsZVN5c3RlbQogICAgIHZvaWQgcGVyc2lzdGVkKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9y
aWdpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgcGVyc2lz
dChjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmKTsKICAgICB2b2lkIGZpbGVTeXN0ZW1HZXREaXJlY3RvcnkoSVBDOjpDb25uZWN0aW9u
JiwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChF
eHBlY3RlZDxXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgRmlsZVN5c3RlbVN0
b3JhZ2VFcnJvcj4pPiYmKTsKQEAgLTg4LDIyICs5OCwzMyBAQCBwcml2YXRlOgogICAgIHZvaWQg
cmVtb3ZlRW50cnkoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCBkZWxldGVSZWN1cnNpdmVseSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChzdGQ6Om9wdGlvbmFsPEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCBy
ZXNvbHZlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBXZWJDb3JlOjpGaWxl
U3lzdGVtSGFuZGxlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeHBlY3RlZDxW
ZWN0b3I8U3RyaW5nPiwgRmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsKICAgICB2b2lkIGdl
dEZpbGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoRXhwZWN0ZWQ8U3RyaW5nLCBGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOwot
CiAgICAgdXNpbmcgQWNjZXNzSGFuZGxlSW5mbyA9IHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxlU3lz
dGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50aWZpZXIsIElQQzo6U2hhcmVkRmlsZUhhbmRsZT47CiAg
ICAgdm9pZCBjcmVhdGVTeW5jQWNjZXNzSGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJ
ZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cGVjdGVkPEFjY2Vzc0hhbmRsZUlu
Zm8sIEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCBjbG9zZUFjY2Vzc0hh
bmRsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgV2ViQ29yZTo6RmlsZVN5
c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0
ZDo6b3B0aW9uYWw8RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsKICAgICB2b2lkIGdldEhh
bmRsZU5hbWVzKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBGaWxlU3lzdGVtU3RvcmFnZUVy
cm9yPik+JiYpOwogICAgIHZvaWQgZ2V0SGFuZGxlKElQQzo6Q29ubmVjdGlvbiYsIFdlYkNvcmU6
OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBTdHJpbmcmJiBuYW1lLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEV4cGVjdGVkPHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRl
bnRpZmllciwgYm9vbD4sIEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CisgICAgCisgICAg
Ly8gTWVzc2FnZSBoYW5kbGVycyBmb3IgV2ViU3RvcmFnZQorICAgIHZvaWQgY29ubmVjdFRvTG9j
YWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmll
ciwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChTdG9yYWdlQXJlYUlkZW50aWZpZXIpPiYmKTsKKyAgICB2b2lkIGNvbm5lY3RUb1RyYW5z
aWVudExvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlk
ZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFy
ZWFJZGVudGlmaWVyKT4mJik7CisgICAgdm9pZCBjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEo
SVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFy
ZWFJZGVudGlmaWVyKT4mJik7CisgICAgdm9pZCBkaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKElQ
Qzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllcik7CisgICAgdm9pZCBjbG9uZVNl
c3Npb25TdG9yYWdlTmFtZXNwYWNlKElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VOYW1lc3BhY2VJ
ZGVudGlmaWVyLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAgdm9pZCBnZXRWYWx1
ZXMoU3RvcmFnZUFyZWFJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik+JiYpOworICAgIHZvaWQgc2V0SXRlbShJUEM6OkNvbm5l
Y3Rpb24mLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIs
IHVpbnQ2NF90IHNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBj
b25zdCBTdHJpbmcmIHVybFN0cmluZyk7CisgICAgdm9pZCByZW1vdmVJdGVtKElQQzo6Q29ubmVj
dGlvbiYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwg
dWludDY0X3Qgc2VlZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
KTsKKyAgICB2b2lkIGNsZWFyKElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VBcmVhSWRlbnRpZmll
ciwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc2VlZCwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpOwogCiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7Ci0gICAgUmVm
PFdvcmtRdWV1ZT4gbV9xdWV1ZTsKKyAgICBSZWY8U3VzcGVuZGFibGVXb3JrUXVldWU+IG1fcXVl
dWU7CiAgICAgU3RyaW5nIG1fcGF0aDsKICAgICBGaWxlU3lzdGVtOjpTYWx0IG1fc2FsdDsKICAg
ICBib29sIG1fY2xvc2VkIHsgZmFsc2UgfTsKICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9y
aWdpbiwgc3RkOjp1bmlxdWVfcHRyPE9yaWdpblN0b3JhZ2VNYW5hZ2VyPj4gbV9sb2NhbE9yaWdp
blN0b3JhZ2VNYW5hZ2VyczsKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdpbiwgc3Rk
Ojp1bmlxdWVfcHRyPE9yaWdpblN0b3JhZ2VNYW5hZ2VyPj4gbV9zZXNzaW9uT3JpZ2luU3RvcmFn
ZU1hbmFnZXJzOwogICAgIFdlYWtIYXNoU2V0PElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9u
czsgLy8gTWFpbiB0aHJlYWQgb25seS4KICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsZVN5c3RlbVN0
b3JhZ2VIYW5kbGVSZWdpc3RyeT4gbV9maWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5Owor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlQXJlYVJlZ2lzdHJ5PiBtX3N0b3JhZ2VBcmVhUmVn
aXN0cnk7CisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0
aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1h
bmFnZXIubWVzc2FnZXMuaW4KaW5kZXggNGU0MDVjNmVlYWQzMjZlMjViNDMxNjQyMDcwODA5NWZh
NjBkYzgzOC4uMDQyMmI2MzQ3NTFkMDM4NWY4NGUwMWY2NGFjNjFkYWYzMWMxNWU4OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdl
TWFuYWdlci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0zNSw5ICszNSwxOCBA
QAogICAgIFJlc29sdmUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRp
ZmllciwgV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgdGFyZ2V0SWRlbnRpZmll
cikgLT4gKEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdl
RXJyb3I+IHJlc3VsdCkgQXN5bmMKICAgICBNb3ZlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVy
IGRlc3RpbmF0aW9uSWRlbnRpZmllciwgU3RyaW5nIG5ld05hbWUpIC0+IChzdGQ6Om9wdGlvbmFs
PFdlYktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYwogICAgIEdldEZp
bGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKEV4
cGVjdGVkPFN0cmluZywgV2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQpIEFz
eW5jCi0KICAgICBDcmVhdGVTeW5jQWNjZXNzSGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5k
bGVJZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChFeHBlY3RlZDxzdGQ6OnBhaXI8V2ViQ29yZTo6
RmlsZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyLCBJUEM6OlNoYXJlZEZpbGVIYW5k
bGU+LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkgQXN5bmMKICAgICBD
bG9zZUFjY2Vzc0hhbmRsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBpZGVu
dGlmaWVyLCBXZWJDb3JlOjpGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50aWZpZXIgYWNj
ZXNzSGFuZGxlSWRlbnRpZmllcikgLT4gKHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpGaWxlU3lzdGVt
U3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5jCiAgICAgR2V0SGFuZGxlTmFtZXMoV2ViQ29yZTo6
RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKEV4cGVjdGVkPFZlY3Rv
cjxTdHJpbmc+LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkgQXN5bmMK
ICAgICBHZXRIYW5kbGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRp
ZmllciwgU3RyaW5nIG5hbWUpIC0+IChFeHBlY3RlZDxzdGQ6OnBhaXI8V2ViQ29yZTo6RmlsZVN5
c3RlbUhhbmRsZUlkZW50aWZpZXIsIGJvb2w+LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJy
b3I+IHJlc3VsdCkgQXN5bmMgV2FudHNDb25uZWN0aW9uCisKKyAgICBDb25uZWN0VG9Mb2NhbFN0
b3JhZ2VBcmVhKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgc3RvcmFnZU5hbWVz
cGFjZUlELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHNlY3VyaXR5T3JpZ2lu
RGF0YSkgLT4gKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpIFN5bmNo
cm9ub3VzIFdhbnRzQ29ubmVjdGlvbgorICAgIENvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFn
ZUFyZWEoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBzdG9yYWdlTmFtZXNwYWNl
SUQsIHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgdG9wTGV2ZWxTZWN1cml0eU9y
aWdpbkRhdGEsIHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgc2VjdXJpdHlPcmln
aW5EYXRhKSAtPiAoV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikgU3lu
Y2hyb25vdXMgV2FudHNDb25uZWN0aW9uCisgICAgQ29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVh
KFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgc3RvcmFnZU5hbWVzcGFjZUlELCBz
dHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHNlY3VyaXR5T3JpZ2luRGF0YSkgLT4g
KFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpIFN5bmNocm9ub3VzIFdh
bnRzQ29ubmVjdGlvbgorICAgIERpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoV2ViS2l0OjpTdG9y
YWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikgV2FudHNDb25uZWN0aW9uCisgICAgQ2xvbmVT
ZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVy
IGZyb21TdG9yYWdlTmFtZXNwYWNlSUQsIFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZp
ZXIgdG9TdG9yYWdlTmFtZXNwYWNlSUQpIFdhbnRzQ29ubmVjdGlvbgorICAgIEdldFZhbHVlcyhX
ZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAoSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gdmFsdWVzKSBTeW5jaHJvbm91cworICAgIFNldEl0ZW0oV2ViS2l0OjpTdG9y
YWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTdG9yYWdlQXJlYUltcGxJZGVu
dGlmaWVyIGltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgU3RyaW5nIGtl
eSwgU3RyaW5nIHZhbHVlLCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50c0Nvbm5lY3Rpb24KKyAgICBS
ZW1vdmVJdGVtKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktp
dDo6U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3Rv
cmFnZU1hcFNlZWQsIFN0cmluZyBrZXksIFN0cmluZyB1cmxTdHJpbmcpIFdhbnRzQ29ubmVjdGlv
bgorICAgIENsZWFyKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdl
YktpdDo6U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qg
c3RvcmFnZU1hcFNlZWQsIFN0cmluZyB1cmxTdHJpbmcpIFdhbnRzQ29ubmVjdGlvbgogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3Jh
Z2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Pcmln
aW5TdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggOGNkNjU1YmUyNTA1YTViMzM0NmFhMzM1NWRmOGIy
NjgxZjExNWVlZS4uYzY3Y2U2MWVhMzE0YWI2ODJhNjNhMDMzNzE0MGYzMmVkN2NiMWRmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3Jh
Z2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
T3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0yOCw2ICsyOCwxMCBAQAogCiAjaW5jbHVkZSAi
RmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW1T
dG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNs
dWRlICJTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVJlZ2lz
dHJ5LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCkBAIC01MywxMyArNTcsMjcgQEAgcHVibGljOgogCiAgICAgZW51bSBjbGFzcyBTdG9yYWdl
VHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBGaWxlU3lzdGVtLAorICAgICAgICBMb2NhbFN0b3Jh
Z2UsCisgICAgICAgIFNlc3Npb25TdG9yYWdlLAogICAgIH07CiAKKyAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxXZWJzaXRlRGF0YVR5cGU+IHRvV2Vic2l0ZURhdGFUeXBlKGNvbnN0IFN0cmluZyYg
c3RvcmFnZUlkZW50aWZpZXIpCisgICAgeworICAgICAgICBpZiAoc3RvcmFnZUlkZW50aWZpZXIg
PT0gIkZpbGVTeXN0ZW0iKQorICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhVHlwZTo6Rmls
ZVN5c3RlbTsKKworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwogICAgIHN0
YXRpYyBTdHJpbmcgdG9TdG9yYWdlSWRlbnRpZmllcihTdG9yYWdlVHlwZSB0eXBlKQogICAgIHsK
ICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgU3RvcmFnZVR5cGU6OkZpbGVT
eXN0ZW06CiAgICAgICAgICAgICByZXR1cm4gIkZpbGVTeXN0ZW0iX3M7CisgICAgICAgIGNhc2Ug
U3RvcmFnZVR5cGU6OkxvY2FsU3RvcmFnZToKKyAgICAgICAgICAgIHJldHVybiAiTG9jYWxTdG9y
YWdlIl9zOworICAgICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpTZXNzaW9uU3RvcmFnZToKKyAgICAg
ICAgICAgIHJldHVybiAiU2Vzc2lvblN0b3JhZ2UiX3M7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtODQsMTggKzEwMiwxMDQgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gKm1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOwogICAgIH0KIAorICAg
IExvY2FsU3RvcmFnZU1hbmFnZXImIGxvY2FsU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdp
c3RyeSYgcmVnaXN0cnksIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjdXN0b21QYXRoKQorICAgIHsK
KyAgICAgICAgaWYgKCFtX2xvY2FsU3RvcmFnZU1hbmFnZXIpCisgICAgICAgICAgICBtX2xvY2Fs
U3RvcmFnZU1hbmFnZXIgPSBtYWtlVW5pcXVlPExvY2FsU3RvcmFnZU1hbmFnZXI+KHJlZ2lzdHJ5
LCBjdXN0b21QYXRoID8gKmN1c3RvbVBhdGggOiBTdHJpbmcgeyB9KTsKKworICAgICAgICByZXR1
cm4gKm1fbG9jYWxTdG9yYWdlTWFuYWdlcjsKKyAgICB9CisKKyAgICBMb2NhbFN0b3JhZ2VNYW5h
Z2VyKiBleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fbG9jYWxTdG9yYWdlTWFuYWdlci5nZXQoKTsKKyAgICB9CisKKyAgICBTZXNzaW9uU3RvcmFn
ZU1hbmFnZXImIHNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdp
c3RyeSkKKyAgICB7CisgICAgICAgIGlmICghbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIpCisgICAg
ICAgICAgICBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlciA9IG1ha2VVbmlxdWU8U2Vzc2lvblN0b3Jh
Z2VNYW5hZ2VyPihyZWdpc3RyeSk7CisKKyAgICAgICAgcmV0dXJuICptX3Nlc3Npb25TdG9yYWdl
TWFuYWdlcjsKKyAgICB9CisKKyAgICBTZXNzaW9uU3RvcmFnZU1hbmFnZXIqIGV4aXN0aW5nU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Nlc3Npb25TdG9y
YWdlTWFuYWdlci5nZXQoKTsKKyAgICB9CisKICAgICBib29sIGlzQWN0aXZlKCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAhIW1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOworICAgICAgICByZXR1
cm4gbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIgfHwgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyIHx8
IG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOworICAgIH0KKworICAgIE9wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+IGZldGNoRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgT3Jp
Z2luU3RvcmFnZURhdGFPcHRpb25zJiYgb3B0aW9ucykKKyAgICB7CisgICAgICAgIGF1dG8gcmVz
dWx0ID0gZmV0Y2hEYXRhSW5NZW1vcnkodHlwZXMpOworICAgICAgICByZXN1bHQuYWRkKGZldGNo
RGF0YUZyb21EaXNrKHR5cGVzLCBXVEZNb3ZlKG9wdGlvbnMpKSk7CisKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKLSAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2VUaW1lKQorICAgIHZvaWQgZGVs
ZXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgV2FsbFRpbWUgbW9kaWZp
ZWRTaW5jZVRpbWUsIE9yaWdpblN0b3JhZ2VEYXRhT3B0aW9ucyYmIG9wdGlvbnMpCiAgICAgewog
ICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtKSkK
ICAgICAgICAgICAgIGRlbGV0ZUZpbGVTeXN0ZW1TdG9yYWdlRGF0YShtb2RpZmllZFNpbmNlVGlt
ZSk7CisKKyAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxT
dG9yYWdlKSkKKyAgICAgICAgICAgIGRlbGV0ZUxvY2FsU3RvcmFnZURhdGEobW9kaWZpZWRTaW5j
ZVRpbWUsIG9wdGlvbnMuY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgb3B0aW9ucy5vcmlnaW4pOwor
CisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9y
YWdlKSAmJiBtb2RpZmllZFNpbmNlVGltZSA9PSAtV2FsbFRpbWU6OmluZmluaXR5KCkpCisgICAg
ICAgICAgICBkZWxldGVTZXNzaW9uU3RvcmFnZURhdGEoKTsKKyAgICB9CisKKyAgICB2b2lkIG1v
dmVEYXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgT3JpZ2luU3RvcmFnZURhdGFPcHRpb25zJiYgb3B0
aW9ucykKKyAgICB7CisgICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0
cjsKKyAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdlcikKKyAgICAgICAgICAgIG1fbG9j
YWxTdG9yYWdlTWFuYWdlci0+Y2xvc2UoKTsKKworICAgICAgICBpZiAoIUZpbGVTeXN0ZW06Om1v
dmVGaWxlKG1fcm9vdFBhdGgsIHBhdGgpKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJPcmlnaW5T
dG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6bW92ZUR0YSBmYWlsZWQgdG8gdXBkYXRlIHBh
dGggdG8gJyVzJyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgbW92ZUxvY2FsU3Rv
cmFnZURhdGEob3B0aW9ucy5jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoLCBvcHRpb25zLm9yaWdpbiwg
b3B0aW9ucy50YXJnZXRPcmlnaW4pOwogICAgIH0KIAogcHJpdmF0ZToKKyAgICBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGFJbk1lbW9yeShPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiB0eXBlcykKKyAgICB7CisgICAgICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHJl
c3VsdCB7IH07CisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6Okxv
Y2FsU3RvcmFnZSkpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZU1hbmFnZXIgJiYg
bV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9y
YWdlKSkgeworICAgICAgICAgICAgaWYgKG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyICYmIG1fc2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSkKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiBmZXRjaERhdGFGcm9tRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBl
cywgT3JpZ2luU3RvcmFnZURhdGFPcHRpb25zJiYgb3B0aW9ucykKKyAgICB7CisgICAgICAgIE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHJlc3VsdCB7IH07CisgICAgICAgIGZvciAoYXV0byYg
c3RvcmFnZVR5cGUgOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KG1fcm9vdFBhdGgpKSB7Cisg
ICAgICAgICAgICBpZiAoYXV0byB0eXBlID0gdG9XZWJzaXRlRGF0YVR5cGUoc3RvcmFnZVR5cGUp
OyB0eXBlICYmIHR5cGVzLmNvbnRhaW5zKCp0eXBlKSkKKyAgICAgICAgICAgICAgICByZXN1bHQu
YWRkKCp0eXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkgJiYgIXJlc3VsdC5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKKyAgICAgICAgICAgIGF1dG8gcGF0aCA9IG9wdGlvbnMu
Y3VzdG9tTG9jYWxTdG9yYWdlUGF0aDsKKyAgICAgICAgICAgIGF1dG8gb3JpZ2luID0gb3B0aW9u
cy5vcmlnaW47CisgICAgICAgICAgICBpZiAocGF0aCAmJiBvcmlnaW4gJiYgTG9jYWxTdG9yYWdl
TWFuYWdlcjo6aGFzTG9jYWxTdG9yYWdlRGF0YSgqcGF0aCwgKm9yaWdpbikpCisgICAgICAgICAg
ICAgICAgcmVzdWx0LmFkZChXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSk7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIHZvaWQgZGVsZXRlRmls
ZVN5c3RlbVN0b3JhZ2VEYXRhKFdhbGxUaW1lIG1vZGlmaWVkU2luY2VUaW1lKQogICAgIHsKICAg
ICAgICAgbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIgPSBudWxscHRyOwpAQCAtMTA0LDEwICsy
MDgsNDMgQEAgcHJpdmF0ZToKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlQWxsRmlsZXNNb2Rp
ZmllZFNpbmNlKGZpbGVTeXN0ZW1TdG9yYWdlUGF0aCwgbW9kaWZpZWRTaW5jZVRpbWUpOwogICAg
IH0KIAorICAgIHZvaWQgZGVsZXRlTG9jYWxTdG9yYWdlRGF0YShXYWxsVGltZSBtb2RpZmllZFNp
bmNlVGltZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGN1c3RvbVBhdGgsIHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBvcmlnaW4pCisgICAgeworICAgICAgICBpZiAobV9sb2Nh
bFN0b3JhZ2VNYW5hZ2VyKSB7CisgICAgICAgICAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmNs
ZWFyRGF0YSgpOworCisgICAgICAgICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTWFuYWdlci0+aXNB
Y3RpdmUoKSkKKyAgICAgICAgICAgICAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXIgPSBudWxscHRy
OworICAgICAgICB9CisKKyAgICAgICAgYXV0byBsb2NhbFN0b3JhZ2VQYXRoID0gdHlwZVN0b3Jh
Z2VQYXRoKFN0b3JhZ2VUeXBlOjpMb2NhbFN0b3JhZ2UpOworICAgICAgICBGaWxlU3lzdGVtOjpk
ZWxldGVBbGxGaWxlc01vZGlmaWVkU2luY2UobG9jYWxTdG9yYWdlUGF0aCwgbW9kaWZpZWRTaW5j
ZVRpbWUpOworICAgICAgICBpZiAoY3VzdG9tUGF0aCAmJiBvcmlnaW4pCisgICAgICAgICAgICBM
b2NhbFN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKG1vZGlmaWVkU2luY2VU
aW1lLCAqY3VzdG9tUGF0aCwgKm9yaWdpbik7CisgICAgfQorCisgICAgdm9pZCBkZWxldGVTZXNz
aW9uU3RvcmFnZURhdGEoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlTWFu
YWdlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3Nlc3Npb25TdG9yYWdlTWFu
YWdlci0+Y2xlYXJEYXRhKCk7CisgICAgICAgIGlmICghbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIt
PmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlciA9IG51bGxw
dHI7CisgICAgfQorICAgIAorICAgIHZvaWQgbW92ZUxvY2FsU3RvcmFnZURhdGEoc3RkOjpvcHRp
b25hbDxTdHJpbmc+IHBhdGgsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBv
cmlnaW4sIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiB0YXJnZXRPcmlnaW4p
CisgICAgeworICAgICAgICBpZiAocGF0aCAmJiBvcmlnaW4gJiYgdGFyZ2V0T3JpZ2luKQorICAg
ICAgICAgICAgTG9jYWxTdG9yYWdlTWFuYWdlcjo6bW92ZUxvY2FsU3RvcmFnZURhdGEoKnBhdGgs
ICpvcmlnaW4sICp0YXJnZXRPcmlnaW4pOworICAgIH0KKyAgICAKICAgICBTdHJpbmcgbV9yb290
UGF0aDsKICAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwogICAgIFN0b3JhZ2VCdWNrZXRNb2RlIG1f
bW9kZSB7IFN0b3JhZ2VCdWNrZXRNb2RlOjpCZXN0RWZmb3J0IH07CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcj4gbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI7
CisgICAgc3RkOjp1bmlxdWVfcHRyPExvY2FsU3RvcmFnZU1hbmFnZXI+IG1fbG9jYWxTdG9yYWdl
TWFuYWdlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyPiBtX3Nl
c3Npb25TdG9yYWdlTWFuYWdlcjsKIH07CiAKIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpPcmlnaW5T
dG9yYWdlTWFuYWdlcihTdHJpbmcmJiBwYXRoKQpAQCAtMTM3LDE1ICsyNzQsMjkgQEAgRmlsZVN5
c3RlbVN0b3JhZ2VNYW5hZ2VyJiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZmlsZVN5c3RlbVN0b3Jh
Z2VNYW5hZ2VyKEZpbGVTeXMKICAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmZpbGVTeXN0ZW1T
dG9yYWdlTWFuYWdlcihyZWdpc3RyeSk7CiB9CiAKLWJvb2wgT3JpZ2luU3RvcmFnZU1hbmFnZXI6
OmlzQWN0aXZlKCkKK0xvY2FsU3RvcmFnZU1hbmFnZXImIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjps
b2NhbFN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5LCBzdGQ6Om9w
dGlvbmFsPFN0cmluZz4gY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkKIHsKLSAgICByZXR1cm4gZGVm
YXVsdEJ1Y2tldCgpLmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5sb2Nh
bFN0b3JhZ2VNYW5hZ2VyKHJlZ2lzdHJ5LCBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKTsKIH0KIAot
dm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiB0eXBlcywgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSkKK0xvY2FsU3RvcmFnZU1hbmFn
ZXIqIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKQog
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIGRlZmF1bHRCdWNrZXQoKS5k
ZWxldGVEYXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlKTsKKyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tl
dCgpLmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcigpOworfQorCitTZXNzaW9uU3RvcmFnZU1h
bmFnZXImIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpzZXNzaW9uU3RvcmFnZU1hbmFnZXIoU3RvcmFn
ZUFyZWFSZWdpc3RyeSYgcmVnaXN0cnkpCit7CisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5z
ZXNzaW9uU3RvcmFnZU1hbmFnZXIocmVnaXN0cnkpOworfQorCitTZXNzaW9uU3RvcmFnZU1hbmFn
ZXIqIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigp
Cit7CisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5leGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFu
YWdlcigpOworfQorCitib29sIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSgpCit7Cisg
ICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5pc0FjdGl2ZSgpOwogfQogCiB2b2lkIE9yaWdpblN0
b3JhZ2VNYW5hZ2VyOjpzZXRQZXJzaXN0ZWQoYm9vbCB2YWx1ZSkKQEAgLTE1Niw1ICszMDcsMjYg
QEAgdm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6c2V0UGVyc2lzdGVkKGJvb2wgdmFsdWUpCiAg
ICAgZGVmYXVsdEJ1Y2tldCgpLnNldE1vZGUodmFsdWUgPyBTdG9yYWdlQnVja2V0TW9kZTo6UGVy
c2lzdGVudCA6IFN0b3JhZ2VCdWNrZXRNb2RlOjpCZXN0RWZmb3J0KTsKIH0KIAorT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4gT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YShPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgT3JpZ2luU3RvcmFnZURhdGFPcHRpb25zJiYgb3B0
aW9ucykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVybiBk
ZWZhdWx0QnVja2V0KCkuZmV0Y2hEYXRhKHR5cGVzLCBXVEZNb3ZlKG9wdGlvbnMpKTsKK30KKwor
dm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiB0eXBlcywgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgT3JpZ2luU3RvcmFnZURhdGFP
cHRpb25zJiYgb3B0aW9ucykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGRlZmF1bHRCdWNrZXQoKS5kZWxldGVEYXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlLCBXVEZN
b3ZlKG9wdGlvbnMpKTsKK30KKwordm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6bW92ZURhdGEo
Y29uc3QgU3RyaW5nJiBuZXdQYXRoLCBPcmlnaW5TdG9yYWdlRGF0YU9wdGlvbnMmJiBvcHRpb25z
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgZGVmYXVsdEJ1Y2tl
dCgpLm1vdmVEYXRhKG5ld1BhdGgsIFdURk1vdmUob3B0aW9ucykpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuaAppbmRleCA3YWRmYTViMDNiNmJhNmUz
Zjg2OTgwYjEyZDJmOGE0NGQ5ZTRlNjRiLi4zZmI4YWFmYzBlNzkzYmJhMGRiOWQ2Y2ZkMThlNTkw
M2UzZDUwNzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuaApAQCAtMjYsMTggKzI2LDI0IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci1zdHJ1Y3QgQ2xpZW50T3JpZ2luOwotfQotCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeTsKIGNsYXNzIEZp
bGVTeXN0ZW1TdG9yYWdlTWFuYWdlcjsKK2NsYXNzIExvY2FsU3RvcmFnZU1hbmFnZXI7CitjbGFz
cyBTZXNzaW9uU3RvcmFnZU1hbmFnZXI7CitjbGFzcyBTdG9yYWdlQXJlYVJlZ2lzdHJ5OwogZW51
bSBjbGFzcyBXZWJzaXRlRGF0YVR5cGUgOiB1aW50MzJfdDsKIAorc3RydWN0IE9yaWdpblN0b3Jh
Z2VEYXRhT3B0aW9ucyB7CisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGN1c3RvbUxvY2FsU3Rv
cmFnZVBhdGg7CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IG9yaWdp
bjsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gdGFyZ2V0T3JpZ2lu
OworfTsKKwogY2xhc3MgT3JpZ2luU3RvcmFnZU1hbmFnZXIgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgpAQCAtNDgsOCArNTQsMTQgQEAgcHVibGljOgogICAgIGJvb2wg
cGVyc2lzdGVkKCkgY29uc3QgeyByZXR1cm4gbV9wZXJzaXN0ZWQ7IH0KICAgICB2b2lkIHNldFBl
cnNpc3RlZChib29sIHZhbHVlKTsKICAgICBGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXImIGZpbGVT
eXN0ZW1TdG9yYWdlTWFuYWdlcihGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5Jik7Cisg
ICAgTG9jYWxTdG9yYWdlTWFuYWdlciYgbG9jYWxTdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJl
Z2lzdHJ5Jiwgc3RkOjpvcHRpb25hbDxTdHJpbmc+KTsKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2Vy
KiBleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKTsKKyAgICBTZXNzaW9uU3RvcmFnZU1hbmFn
ZXImIHNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5Jik7CisgICAgU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigpOwogICAg
IGJvb2wgaXNBY3RpdmUoKTsKLSAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4sIFdhbGxUaW1lKTsKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBmZXRj
aERhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9yaWdpblN0b3JhZ2VEYXRhT3B0aW9u
cyYmKTsKKyAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdh
bGxUaW1lLCBPcmlnaW5TdG9yYWdlRGF0YU9wdGlvbnMmJik7CisgICAgdm9pZCBtb3ZlRGF0YShj
b25zdCBTdHJpbmcmIG5ld1BhdGgsIE9yaWdpblN0b3JhZ2VEYXRhT3B0aW9ucyYmKTsKIAogcHJp
dmF0ZToKICAgICBlbnVtIGNsYXNzIFN0b3JhZ2VCdWNrZXRNb2RlIDogYm9vbDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJl
YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFn
ZUFyZWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiOGIxYzBiZTY5ZjVhODIzMjg1OTg0YmQ4NmYzZTE2M2M2
YzRjYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0b3JhZ2VBcmVhLmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZUZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1NRTGl0ZVN0YXRlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlVHJhbnNhY3Rpb24u
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NvbnN0ZXhwciBTZWNvbmRzIHRyYW5zYWN0aW9uRHVyYXRpb24geyA1MDBfbXMgfTsKK2Nv
bnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtU2l6ZUZvclZhbHVlc0tlcHRJbk1lbW9yeSB7IDEgKiBL
QiB9OworY29uc3RleHByIGF1dG8gY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50QWx0ZXJuYXRpdmUg
PSAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgSXRlbVRhYmxlIChrZXkgVEVYVCBVTklRVUUg
T04gQ09ORkxJQ1QgUkVQTEFDRSwgdmFsdWUgQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlM
KSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZUl0ZW1UYWJsZVN0YXRlbWVudCA9ICJDUkVBVEUg
VEFCTEUgSXRlbVRhYmxlIChrZXkgVEVYVCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwgdmFs
dWUgQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSJfczsKKworc3RkOjpvcHRpb25hbDxX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IFNRTGl0ZVN0b3JhZ2VBcmVhOjpmaWxlTmFtZVRv
T3JpZ2luKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCit7CisgICAgYXV0byBzdWZmaXhMZW5ndGgg
PSBzdHJsZW4oIi5sb2NhbHN0b3JhZ2UiKTsKKyAgICBhdXRvIGZpbGVOYW1lTGVuZ3RoID0gZmls
ZU5hbWUubGVuZ3RoKCk7CisgICAgaWYgKGZpbGVOYW1lTGVuZ3RoIDw9IHN1ZmZpeExlbmd0aCkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gb3JpZ2luSWRlbnRpZmll
ciA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZUxlbmd0aCAtIHN1ZmZpeExlbmd0aCk7
CisgICAgcmV0dXJuIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFiYXNlSWRl
bnRpZmllcihvcmlnaW5JZGVudGlmaWVyKTsKK30KKworc3RhdGljIFN0cmluZyBvcmlnaW5Ub0Zp
bGVOYW1lKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQoreworICAgIHJldHVy
biBvcmlnaW4uY2xpZW50T3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpICsgIi5sb2NhbHN0b3Jh
Z2UiOworfQorCitTdHJpbmcgU1FMaXRlU3RvcmFnZUFyZWE6OmRhdGFiYXNlUGF0aChjb25zdCBT
dHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pCit7
CisgICAgaWYgKGRpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOworCisgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChk
aXJlY3RvcnksIG9yaWdpblRvRmlsZU5hbWUob3JpZ2luKSk7Cit9CisKK0FTQ0lJTGl0ZXJhbCBT
UUxpdGVTdG9yYWdlQXJlYTo6c3RhdGVtZW50U3RyaW5nKFN0YXRlbWVudFR5cGUgdHlwZSkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OkNvdW50
SXRlbXM6CisgICAgICAgIHJldHVybiAiU0VMRUNUIENPVU5UKCopIEZST00gSXRlbVRhYmxlIl9z
OworICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6RGVsZXRlSXRlbToKKyAgICAgICAgcmV0dXJuICJE
RUxFVEUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iX3M7CisgICAgY2FzZSBTdGF0ZW1lbnRU
eXBlOjpEZWxldGVBbGxJdGVtczoKKyAgICAgICAgcmV0dXJuICJERUxFVEUgRlJPTSBJdGVtVGFi
bGUiX3M7CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpHZXRJdGVtOgorICAgICAgICByZXR1cm4g
IlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyJfczsKKyAgICBjYXNlIFN0
YXRlbWVudFR5cGU6OkdldEFsbEl0ZW1zOgorICAgICAgICByZXR1cm4gIlNFTEVDVCBrZXksIHZh
bHVlIEZST00gSXRlbVRhYmxlIl9zOworICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6U2V0SXRlbToK
KyAgICAgICAgcmV0dXJuICJJTlNFUlQgSU5UTyBJdGVtVGFibGUgVkFMVUVTICg/LCA/KSJfczsK
KyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OkludmFsaWQ6CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAiIl9zOworfQorCitTUUxp
dGVTdG9yYWdlQXJlYTo6U1FMaXRlU3RvcmFnZUFyZWEodW5zaWduZWQgcXVvdGEsIGNvbnN0IFdl
YkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGgsIFJlZjxXb3Jr
UXVldWU+JiYgd29ya1F1ZXVlKQorICAgIDogU3RvcmFnZUFyZWFCYXNlKHF1b3RhLCBvcmlnaW4p
CisgICAgLCBtX3BhdGgoZGF0YWJhc2VQYXRoKHBhdGgsIG9yaWdpbikpCisgICAgLCBtX3F1ZXVl
KFdURk1vdmUod29ya1F1ZXVlKSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRp
Y19jYXN0PHNpemVfdD4oU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7ICsraSkKKyAgICAgICAgbV9j
YWNoZWRTdGF0ZW1lbnRzLmFwcGVuZChudWxscHRyKTsKK30KKwordm9pZCBTUUxpdGVTdG9yYWdl
QXJlYTo6Y2xvc2UoKQoreworICAgIG1fY2FjaGUgPSBzdGQ6Om51bGxvcHQ7CisgICAgY29tbWl0
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKTsgKytpKQorICAgICAgICBt
X2NhY2hlZFN0YXRlbWVudHNbaV0gPSBudWxscHRyOworICAgIG1fZGF0YWJhc2UgPSBudWxscHRy
OworfQorCitTUUxpdGVTdG9yYWdlQXJlYTo6flNRTGl0ZVN0b3JhZ2VBcmVhKCkKK3sKKyAgICBi
b29sIGRhdGFiYXNlSXNFbXB0eSA9IGlzRW1wdHkoKTsKKyAgICBjbG9zZSgpOworICAgIGlmIChk
YXRhYmFzZUlzRW1wdHkpCisgICAgICAgIFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0
ZURhdGFiYXNlRmlsZShtX3BhdGgpOworfQorCitib29sIFNRTGl0ZVN0b3JhZ2VBcmVhOjppc0Vt
cHR5KCkKK3sKKyAgICBpZiAobV9jYWNoZSkKKyAgICAgICAgcmV0dXJuIG1fY2FjaGUtPmlzRW1w
dHkoKTsKKworICAgIGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZTo6
Q291bnRJdGVtcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRl
U3RvcmFnZUFyZWE6OmlzRW1wdHkgZmFpbGVkIG9uIGV4ZWN1dGluZyBzdGF0ZW1lbnQgKCVkKSAt
ICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuICFzdGF0ZW1lbnQt
PmNvbHVtbkludCgwKTsKK30KKwordm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y2xlYXIoKQorewor
ICAgIGNsb3NlKCk7CisgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJh
c2VGaWxlKG1fcGF0aCk7CisgICAgbm90aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcigpOworfQorCiti
b29sIFNRTGl0ZVN0b3JhZ2VBcmVhOjpjcmVhdGVUYWJsZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBp
ZiAoIW1fZGF0YWJhc2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyBzdGF0
ZW1lbnQgPSBtX2RhdGFiYXNlLT50YWJsZVNRTCgiSXRlbVRhYmxlIl9zKTsKKyAgICBpZiAoc3Rh
dGVtZW50ID09IGNyZWF0ZUl0ZW1UYWJsZVN0YXRlbWVudCB8fCBzdGF0ZW1lbnQgPT0gY3JlYXRl
SXRlbVRhYmxlU3RhdGVtZW50QWx0ZXJuYXRpdmUpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgLy8gVGFibGUgZXhpc3RzIGJ1dCBzdGF0ZW1lbnQgaXMgd3Jvbmc7IGRyb3AgaXQuCisgICAg
aWYgKCFzdGF0ZW1lbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS0+ZXhl
Y3V0ZUNvbW1hbmQoIkRST1AgVEFCTEUgSXRlbVRhYmxlIl9zKSkgeworICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpjcmVhdGVUYWJsZUlm
TmVjZXNzYXJ5IGZhaWxlZCB0byBkcm9wIGV4aXN0aW5nIGl0ZW0gdGFibGUgKCVkKSAtICVzIiwg
bV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRhYmxl
IGRvZXMgbm90IGV4aXN0LgorICAgIGlmICghbV9kYXRhYmFzZS0+ZXhlY3V0ZUNvbW1hbmQoY3Jl
YXRlSXRlbVRhYmxlU3RhdGVtZW50KSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9y
YWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmNyZWF0ZVRhYmxlSWZOZWNlc3NhcnkgZmFpbGVkIHRv
IGNyZWF0ZSBpdGVtIHRhYmxlICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBt
X2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTUUxpdGVTdG9yYWdlQXJlYTo6cHJlcGFy
ZURhdGFiYXNlKCkKK3sKKyAgICBpZiAobV9kYXRhYmFzZSAmJiBtX2RhdGFiYXNlLT5pc09wZW4o
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX2RhdGFiYXNlID0gbWFrZVVuaXF1ZTxX
ZWJDb3JlOjpTUUxpdGVEYXRhYmFzZT4oKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm9wZW4obV9w
YXRoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFn
ZUFyZWE6OnByZXBhcmVEYXRhYmFzZSBmYWlsZWQgdG8gb3BlbiBkYXRhYmFzZSBhdCAnJXMnIiwg
bV9wYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtX2RhdGFiYXNlID0gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisgICAgLy8gU2luY2UgYSBXb3Jr
UXVldWUgaXNuJ3QgYm91bmQgdG8gYSBzcGVjaWZpYyB0aHJlYWQsIHdlIG5lZWQgdG8gZGlzYWJs
ZSB0aHJlYWRpbmcgY2hlY2suCisgICAgLy8gV2Ugd2lsbCBuZXZlciBhY2Nlc3MgdGhlIGRhdGFi
YXNlIGZyb20gZGlmZmVyZW50IHRocmVhZHMgc2ltdWx0YW5lb3VzbHkuCisgICAgbV9kYXRhYmFz
ZS0+ZGlzYWJsZVRocmVhZGluZ0NoZWNrcygpOworCisgICAgaWYgKCFjcmVhdGVUYWJsZUlmTmVj
ZXNzYXJ5KCkpIHsKKyAgICAgICAgbV9kYXRhYmFzZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocXVvdGEoKSAhPSBXZWJDb3JlOjpTdG9yYWdlTWFw
Ojpub1F1b3RhKQorICAgICAgICBtX2RhdGFiYXNlLT5zZXRNYXhpbXVtU2l6ZShxdW90YSgpKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNRTGl0ZVN0b3JhZ2VBcmVhOjpzdGFydFRy
YW5zYWN0aW9uSWZOZWNlc3NhcnkoKQoreworICAgIGlmICghbV90cmFuc2FjdGlvbikKKyAgICAg
ICAgbV90cmFuc2FjdGlvbiA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24+
KCptX2RhdGFiYXNlKTsKKworICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fdHJhbnNhY3Rpb24tPmJlZ2luKCk7CisgICAgbV9xdWV1
ZS0+ZGlzcGF0Y2hBZnRlcih0cmFuc2FjdGlvbkR1cmF0aW9uLCBbd2Vha1RoaXMgPSBXZWFrUHRy
IHsgKnRoaXMgfV0geworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+bV90cmFu
c2FjdGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAgICAgYXV0byB0cmFuc2Fj
dGlvbiA9IHN0ZDo6ZXhjaGFuZ2Uod2Vha1RoaXMtPm1fdHJhbnNhY3Rpb24sIG51bGxwdHIpOwor
ICAgICAgICB0cmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgfSk7Cit9CisKK1dlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIFNRTGl0ZVN0b3JhZ2VBcmVhOjpjYWNoZWRTdGF0
ZW1lbnQoU3RhdGVtZW50VHlwZSB0eXBlKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlKTsKKyAg
ICBBU1NFUlQodHlwZSA8IFN0YXRlbWVudFR5cGU6OkludmFsaWQpOworCisgICAgYXV0byBpbmRl
eCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHR5cGUpOworICAgIGlmICghbV9jYWNoZWRTdGF0ZW1l
bnRzW2luZGV4XSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZGF0YWJhc2UtPnByZXBhcmVI
ZWFwU3RhdGVtZW50KHN0YXRlbWVudFN0cmluZyh0eXBlKSk7CisgICAgICAgIGlmIChyZXN1bHQp
CisgICAgICAgICAgICBtX2NhY2hlZFN0YXRlbWVudHNbaW5kZXhdID0gcmVzdWx0LnZhbHVlKCku
bW92ZVRvVW5pcXVlUHRyKCk7CisgICAgfQorCisgICAgcmV0dXJuIFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgbV9jYWNoZWRTdGF0ZW1lbnRzW2luZGV4XS5nZXQoKSB9
OworfQorCitFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJvcj4gU1FMaXRlU3RvcmFnZUFyZWE6
OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgaWYgKG1fY2FjaGUpIHsKKyAgICAg
ICAgYXV0byBpdGVyYXRvciA9IG1fY2FjaGUtPmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGl0ZXJh
dG9yID09IG1fY2FjaGUtPmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisg
ICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJu
IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZ2V0SXRlbUZyb21EYXRhYmFz
ZShrZXkpOworfQorCitFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJvcj4gU1FMaXRlU3RvcmFn
ZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgaWYg
KCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3Jh
Z2VFcnJvcjo6RGF0YWJhc2UpOworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1l
bnQoU3RhdGVtZW50VHlwZTo6R2V0SXRlbSk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBrZXkpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3Jh
Z2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0SXRlbUZyb21EYXRhYmFzZSBmYWlsZWQgb24gY3Jl
YXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2Rh
dGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChT
dG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9CisKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVt
ZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1
cm4gc3RhdGVtZW50LT5jb2x1bW5CbG9iQXNTdHJpbmcoMCk7CisgICAgaWYgKHJlc3VsdCAhPSBT
UUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRl
U3RvcmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2UgZmFpbGVkIG9uIHN0ZXBwaW5nIHN0YXRl
bWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFz
dEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9y
OjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VF
cnJvcjo6SXRlbU5vdEZvdW5kKTsKK30KKworSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gU1FMaXRl
U3RvcmFnZUFyZWE6OmFsbEl0ZW1zKCkKK3sKKyAgICBpZiAoIXByZXBhcmVEYXRhYmFzZSgpKQor
ICAgICAgICByZXR1cm4gSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4geyB9OworCisgICAgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gaXRlbXM7CisgICAgaWYgKG1fY2FjaGUpIHsKKyAgICAgICAgaXRl
bXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NhY2hlLT5zaXplKCkpOworICAgICAgICBmb3Ig
KGF1dG8mIFtrZXksIHZhbHVlXSA6ICptX2NhY2hlKSB7CisgICAgICAgICAgICBpZiAoIXZhbHVl
LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgaXRlbXMuYWRkKGtleSwgdmFsdWUpOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
YXV0byByZXN1bHQgPSBnZXRJdGVtRnJvbURhdGFiYXNlKGtleSkpCisgICAgICAgICAgICAgICAg
aXRlbXMuYWRkKGtleSwgcmVzdWx0LnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBpdGVtczsKKyAgICB9CisKKyAgICAvLyBJbXBvcnQgZnJvbSBkYXRhYmFzZS4KKyAgICBhdXRv
IHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlOjpHZXRBbGxJdGVtcyk7
CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFn
ZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRBbGxJdGVtcyBmYWlsZWQgb24gY3JlYXRpbmcgc3Rh
dGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgbV9jYWNo
ZSA9IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsgfTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVt
ZW50LT5zdGVwKCk7CisgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAg
IFN0cmluZyBrZXkgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMCk7CisgICAgICAgIFN0cmluZyB2
YWx1ZSA9IHN0YXRlbWVudC0+Y29sdW1uQmxvYkFzU3RyaW5nKDEpOworICAgICAgICBpZiAoIWtl
eS5pc051bGwoKSAmJiAhdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1fY2FjaGUtPmFk
ZChrZXksIHZhbHVlLnNpemVJbkJ5dGVzKCkgPiBtYXhpbXVtU2l6ZUZvclZhbHVlc0tlcHRJbk1l
bW9yeSA/IFN0cmluZygpIDogdmFsdWUpOworICAgICAgICAgICAgaXRlbXMuYWRkKFdURk1vdmUo
a2V5KSwgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gc3Rh
dGVtZW50LT5zdGVwKCk7CisgICAgfQorCisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpn
ZXRBbGxJdGVtcyBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2Rh
dGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworCisgICAg
cmV0dXJuIGl0ZW1zOworfQorCitFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IFNRTGl0ZVN0
b3JhZ2VBcmVhOjpzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwg
U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQorewor
ICAgIGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKworICAgIHN0YXJ0VHJhbnNhY3Rpb25JZk5lY2Vz
c2FyeSgpOworCisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIGlmIChhdXRvIHZhbHVlT3JFcnJv
ciA9IGdldEl0ZW0oa2V5KSkKKyAgICAgICAgb2xkVmFsdWUgPSB2YWx1ZU9yRXJyb3IudmFsdWUo
KTsKKworICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFN0YXRlbWVudFR5cGU6
OlNldEl0ZW0pOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+YmluZFRleHQoMSwg
a2V5KSB8fCBzdGF0ZW1lbnQtPmJpbmRCbG9iKDIsIHZhbHVlKSkgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OnNldEl0ZW0gZmFpbGVkIG9u
IGNyZWF0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwg
bV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgaW50IHJlc3VsdCA9IHN0
YXRlbWVudC0+c3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX0ZVTEwpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OlF1b3RhRXhjZWVkZWQpOworICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
U3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtIGZhaWxlZCBvbiBzdGVwcGluZyBz
dGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2Ut
Pmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VF
cnJvcjo6RGF0YWJhc2UpOworICAgIH0KKyAgICAKKyAgICBpZiAobV9jYWNoZSkKKyAgICAgICAg
bV9jYWNoZS0+c2V0KGtleSwgdmFsdWUuc2l6ZUluQnl0ZXMoKSA+IG1heGltdW1TaXplRm9yVmFs
dWVzS2VwdEluTWVtb3J5ID8gU3RyaW5nKCkgOiB2YWx1ZSk7CisKKyAgICBkaXNwYXRjaEV2ZW50
cyhjb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJRCwga2V5LCBvbGRWYWx1ZSwgdmFsdWUsIHVy
bFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OworfQorCitFeHBlY3RlZDx2b2lkLCBTdG9yYWdl
RXJyb3I+IFNRTGl0ZVN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUlt
cGxJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAg
IGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChT
dG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKworICAgIHN0YXJ0VHJhbnNhY3Rpb25JZk5lY2Vzc2Fy
eSgpOworICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICBpZiAoYXV0byB2YWx1ZU9yRXJyb3IgPSBn
ZXRJdGVtKGtleSkpCisgICAgICAgIG9sZFZhbHVlID0gdmFsdWVPckVycm9yLnZhbHVlKCk7Cisg
ICAgZWxzZQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpJdGVt
Tm90Rm91bmQpOworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVt
ZW50VHlwZTo6RGVsZXRlSXRlbSk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5i
aW5kVGV4dCgxLCBrZXkpIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6cmVt
b3ZlSXRlbSBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFi
YXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisg
ICAgaWYgKG1fY2FjaGUpCisgICAgICAgIG1fY2FjaGUtPnJlbW92ZShrZXkpOworCisgICAgZGlz
cGF0Y2hFdmVudHMoY29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIGtleSwgb2xkVmFsdWUs
IFN0cmluZygpLCB1cmxTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworRXhwZWN0ZWQ8
dm9pZCwgU3RvcmFnZUVycm9yPiBTUUxpdGVTdG9yYWdlQXJlYTo6Y2xlYXIoSVBDOjpDb25uZWN0
aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIHN0b3Jh
Z2VBcmVhSW1wbElELCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBpZiAoIXByZXBh
cmVEYXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9y
OjpEYXRhYmFzZSk7CisKKyAgICBpZiAobV9jYWNoZSAmJiBtX2NhY2hlLT5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6Okl0ZW1Ob3RGb3VuZCk7
CisKKyAgICBpZiAobV9jYWNoZSkKKyAgICAgICAgbV9jYWNoZS0+Y2xlYXIoKTsKKworICAgIHN0
YXJ0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVk
U3RhdGVtZW50KFN0YXRlbWVudFR5cGU6OkRlbGV0ZUFsbEl0ZW1zKTsKKyAgICBpZiAoIXN0YXRl
bWVudCB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmNsZWFyIGZhaWxlZCBv
biBleGVjdXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigp
LCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9CisKKyAgICBpZiAobV9kYXRhYmFz
ZS0+bGFzdENoYW5nZXMoKSA8PSAwKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3Rv
cmFnZUVycm9yOjpJdGVtTm90Rm91bmQpOworCisgICAgZGlzcGF0Y2hFdmVudHMoY29ubmVjdGlv
biwgc3RvcmFnZUFyZWFJbXBsSUQsIFN0cmluZygpLCBTdHJpbmcoKSwgU3RyaW5nKCksIHVybFN0
cmluZyk7CisKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIFNRTGl0ZVN0b3JhZ2VBcmVhOjpj
b21taXRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAoYXV0byB0cmFuc2FjdGlv
biA9IHN0ZDo6ZXhjaGFuZ2UobV90cmFuc2FjdGlvbiwgbnVsbHB0cikpCisgICAgICAgIHRyYW5z
YWN0aW9uLT5jb21taXQoKTsKK30KKwordm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6aGFuZGxlTG93
TWVtb3J5V2FybmluZygpCit7CisgICAgaWYgKG1fZGF0YWJhc2UgJiYgbV9kYXRhYmFzZS0+aXNP
cGVuKCkpCisgICAgICAgIG1fZGF0YWJhc2UtPnJlbGVhc2VNZW1vcnkoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGJkMzgxZjc3MzAw
OTdlMjk2OTdlZGM4NjE3NzVmMGU5MTdmYzE3YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5oCkBAIC0wLDAg
KzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0b3JhZ2VB
cmVhQmFzZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBTUUxpdGVTdG9yYWdlQXJlYSBmaW5hbCA6IHB1YmxpYyBTdG9yYWdl
QXJlYUJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0
YXRpYyBTdHJpbmcgZGF0YWJhc2VQYXRoKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGE+IGZpbGVOYW1lVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSk7CisKKyAgICBTUUxpdGVTdG9yYWdlQXJlYSh1bnNpZ25lZCBxdW90YSwgY29uc3QgV2Vi
Q29yZTo6Q2xpZW50T3JpZ2luJiwgY29uc3QgU3RyaW5nJiBwYXRoLCBSZWY8V29ya1F1ZXVlPiYm
KTsKKyAgICB+U1FMaXRlU3RvcmFnZUFyZWEoKTsKKworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2
b2lkIGhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKKyAgICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9u
SWZOZWNlc3NhcnkoKTsKKworcHJpdmF0ZToKKyAgICAvLyBTdG9yYWdlQXJlYUJhc2UKKyAgICBU
eXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTdG9yYWdlQXJlYUJhc2U6OlR5cGU6OlNR
TGl0ZTsgfTsKKyAgICBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGU6OkxvY2FsOyB9OworICAgIGJvb2wgaXNF
bXB0eSgpIGZpbmFsOworICAgIHZvaWQgY2xlYXIoKSBmaW5hbDsKKyAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBhbGxJdGVtcygpIGZpbmFsOworICAgIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VF
cnJvcj4gc2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJ
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3Qg
U3RyaW5nJiB1cmxTdHJpbmcpIGZpbmFsOworICAgIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJv
cj4gcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJ
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGZp
bmFsOworICAgIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gY2xlYXIoSVBDOjpDb25uZWN0
aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcpIGZpbmFsOworCisgICAgYm9vbCBjcmVhdGVUYWJsZUlmTmVjZXNzYXJ5KCk7Cisg
ICAgYm9vbCBwcmVwYXJlRGF0YWJhc2UoKTsKKyAgICB2b2lkIHN0YXJ0VHJhbnNhY3Rpb25JZk5l
Y2Vzc2FyeSgpOworCisgICAgZW51bSBjbGFzcyBTdGF0ZW1lbnRUeXBlIDogdWludDhfdCB7Cisg
ICAgICAgIENvdW50SXRlbXMsCisgICAgICAgIERlbGV0ZUl0ZW0sCisgICAgICAgIERlbGV0ZUFs
bEl0ZW1zLAorICAgICAgICBHZXRJdGVtLAorICAgICAgICBHZXRBbGxJdGVtcywKKyAgICAgICAg
U2V0SXRlbSwKKyAgICAgICAgSW52YWxpZAorICAgIH07CisgICAgQVNDSUlMaXRlcmFsIHN0YXRl
bWVudFN0cmluZyhTdGF0ZW1lbnRUeXBlKSBjb25zdDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnRBdXRvUmVzZXRTY29wZSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZSk7CisgICAg
RXhwZWN0ZWQ8U3RyaW5nLCBTdG9yYWdlRXJyb3I+IGdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkp
OworICAgIEV4cGVjdGVkPFN0cmluZywgU3RvcmFnZUVycm9yPiBnZXRJdGVtRnJvbURhdGFiYXNl
KGNvbnN0IFN0cmluZyYga2V5KTsKKworICAgIFN0cmluZyBtX3BhdGg7CisgICAgUmVmPFdvcmtR
dWV1ZT4gbV9xdWV1ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlRGF0YWJh
c2U+IG1fZGF0YWJhc2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVRyYW5z
YWN0aW9uPiBtX3RyYW5zYWN0aW9uOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50Pj4gbV9jYWNoZWRTdGF0ZW1lbnRzOworICAgIHN0ZDo6b3B0aW9u
YWw8SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4+IG1fY2FjaGU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJLaXQ6OlNRTGl0ZVN0
b3JhZ2VBcmVhKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OlN0b3JhZ2VB
cmVhQmFzZSYgYXJlYSkgeyByZXR1cm4gYXJlYS50eXBlKCkgPT0gV2ViS2l0OjpTdG9yYWdlQXJl
YUJhc2U6OlR5cGU6OlNRTGl0ZTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9T
ZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1MGE4NzA2ZjY3NTM0ZGY3ODU5
ZWZhNmU5ZjBmMWMyOGNlOWQ1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMCwwICsx
LDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZXNz
aW9uU3RvcmFnZU1hbmFnZXIuaCIKKworI2luY2x1ZGUgIk1lbW9yeVN0b3JhZ2VBcmVhLmgiCisj
aW5jbHVkZSAiU3RvcmFnZUFyZWFSZWdpc3RyeS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpTZXNzaW9uU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFS
ZWdpc3RyeSYgcmVnaXN0cnkpCisgICAgOiBtX3JlZ2lzdHJ5KHJlZ2lzdHJ5KQoreworfQorCiti
b29sIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6aXNBY3RpdmUoKQoreworICAgIHJldHVybiBXVEY6
OmFueU9mKG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpLCBbJl0gKGF1dG8mIHN0b3JhZ2VBcmVhKSB7
CisgICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS0+aGFzTGlzdGVuZXJzKCk7CisgICAgfSk7Cit9
CisKK2Jvb2wgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpoYXNEYXRhSW5NZW1vcnkoKQoreworICAg
IHJldHVybiBXVEY6OmFueU9mKG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpLCBbJl0gKGF1dG8mIHN0
b3JhZ2VBcmVhKSB7CisgICAgICAgIHJldHVybiAhc3RvcmFnZUFyZWEtPmlzRW1wdHkoKTsKKyAg
ICB9KTsKK30KKwordm9pZCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNsZWFyRGF0YSgpCit7Cisg
ICAgZm9yIChhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpKQorICAg
ICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoKTsKK30KKwordm9pZCBTZXNzaW9uU3RvcmFnZU1hbmFn
ZXI6OmNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9u
KQoreworICAgIGZvciAoYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhcy52YWx1ZXMo
KSkKKyAgICAgICAgc3RvcmFnZUFyZWEtPnJlbW92ZUxpc3RlbmVyKGNvbm5lY3Rpb24pOworfQor
CitTdG9yYWdlQXJlYUlkZW50aWZpZXIgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjphZGRTdG9yYWdl
QXJlYShzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhLCBJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlm
aWVyIG5hbWVzcGFjZUlkZW50aWZpZXIpCit7CisgICAgYXV0byBpZGVudGlmaWVyID0gc3RvcmFn
ZUFyZWEtPmlkZW50aWZpZXIoKTsKKyAgICBtX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RvcmFnZUFyZWEo
aWRlbnRpZmllciwgKnN0b3JhZ2VBcmVhKTsKKyAgICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIo
Y29ubmVjdGlvbik7CisgICAgbV9zdG9yYWdlQXJlYXNCeU5hbWVzcGFjZS5zZXQobmFtZXNwYWNl
SWRlbnRpZmllciwgaWRlbnRpZmllcik7CisgICAgbV9zdG9yYWdlQXJlYXMuc2V0KGlkZW50aWZp
ZXIsIFdURk1vdmUoc3RvcmFnZUFyZWEpKTsKKworICAgIHJldHVybiBpZGVudGlmaWVyOworfQor
CitTdG9yYWdlQXJlYUlkZW50aWZpZXIgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9T
ZXNzaW9uU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBj
b25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50
aWZpZXIgbmFtZXNwYWNlSWRlbnRpZmllcikKK3sKKyAgICBhdXRvIGlkZW50aWZpZXIgPSBtX3N0
b3JhZ2VBcmVhc0J5TmFtZXNwYWNlLmdldChuYW1lc3BhY2VJZGVudGlmaWVyKTsKKyAgICBpZiAo
aWRlbnRpZmllci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFzLmNv
bnRhaW5zKGlkZW50aWZpZXIpKTsKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CisgICAgfQor
CisgICAgYXV0byBuZXdTdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8TWVtb3J5U3RvcmFnZUFyZWE+
KG9yaWdpbik7CisgICAgcmV0dXJuIGFkZFN0b3JhZ2VBcmVhKFdURk1vdmUobmV3U3RvcmFnZUFy
ZWEpLCBjb25uZWN0aW9uLCBuYW1lc3BhY2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBTZXNzaW9u
U3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9u
OjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikK
K3sKKyAgICBpZiAoYXV0byogc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhcy5nZXQoaWRlbnRp
ZmllcikpCisgICAgICAgIHN0b3JhZ2VBcmVhLT5yZW1vdmVMaXN0ZW5lcihjb25uZWN0aW9uKTsK
K30KKwordm9pZCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNsb25lU3RvcmFnZUFyZWEoSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmll
ciBzb3VyY2VOYW1lc3BhY2VJZGVudGlmaWVyLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciB0
YXJnZXROYW1lc3BhY2VJZGVudGlmaWVyKQoreworICAgIGF1dG8gaWRlbnRpZmllciA9IG1fc3Rv
cmFnZUFyZWFzQnlOYW1lc3BhY2UuZ2V0KHNvdXJjZU5hbWVzcGFjZUlkZW50aWZpZXIpOworICAg
IGlmICghaWRlbnRpZmllci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChh
dXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlQXJlYXMuZmluZChpZGVudGlmaWVyKTsgaXRlcmF0b3Ig
IT0gbV9zdG9yYWdlQXJlYXMuZW5kKCkpIHsKKyAgICAgICAgYXV0byBuZXdTdG9yYWdlQXJlYSA9
IGl0ZXJhdG9yLT52YWx1ZS0+Y2xvbmUoKTsKKyAgICAgICAgYWRkU3RvcmFnZUFyZWEoV1RGTW92
ZShuZXdTdG9yYWdlQXJlYSksIGNvbm5lY3Rpb24sIHRhcmdldE5hbWVzcGFjZUlkZW50aWZpZXIp
OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKworCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VN
YW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Y2NmFmYmU0NTIzY2NiZDhhZmY5ODY1NTYyYThiODIzNmVk
YjI5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50aWZpZXIuaCIKKyNp
bmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgTWVtb3J5U3RvcmFnZUFyZWE7CitjbGFzcyBTdG9yYWdlQXJlYVJlZ2lzdHJ5
OworCitjbGFzcyBTZXNzaW9uU3RvcmFnZU1hbmFnZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIFNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJl
Z2lzdHJ5Jik7CisgICAgYm9vbCBpc0FjdGl2ZSgpOworICAgIGJvb2wgaGFzRGF0YUluTWVtb3J5
KCk7CisgICAgdm9pZCBjbGVhckRhdGEoKTsKKyAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoSVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7CisKKyAgICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgY29u
bmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIGNvbnN0
IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyKTsKKyAg
ICB2b2lkIGRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJ
RCwgU3RvcmFnZUFyZWFJZGVudGlmaWVyKTsKKyAgICB2b2lkIGNsb25lU3RvcmFnZUFyZWEoSVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFN0b3Jh
Z2VOYW1lc3BhY2VJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICBTdG9yYWdlQXJlYUlkZW50
aWZpZXIgYWRkU3RvcmFnZUFyZWEoc3RkOjp1bmlxdWVfcHRyPE1lbW9yeVN0b3JhZ2VBcmVhPiwg
SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIpOwor
CisgICAgU3RvcmFnZUFyZWFSZWdpc3RyeSYgbV9yZWdpc3RyeTsKKyAgICBIYXNoTWFwPFN0b3Jh
Z2VBcmVhSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeVN0b3JhZ2VBcmVhPj4gbV9z
dG9yYWdlQXJlYXM7CisgICAgSGFzaE1hcDxTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgU3Rv
cmFnZUFyZWFJZGVudGlmaWVyPiBtX3N0b3JhZ2VBcmVhc0J5TmFtZXNwYWNlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZmJmNzU4
NDdjNThlMzFkMThmOGE1Zjc1ODMyMTgzNTQwMDYzZTNiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHAKQEAg
LTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTdG9yYWdlQXJlYUJhc2UuaCIKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1N0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZUFyZWFC
YXNlKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikK
KyAgICA6IG1faWRlbnRpZmllcihTdG9yYWdlQXJlYUlkZW50aWZpZXI6OmdlbmVyYXRlKCkpCisg
ICAgLCBtX3F1b3RhKHF1b3RhKQorICAgICwgbV9vcmlnaW4ob3JpZ2luKQoreworfQorCitTdG9y
YWdlQXJlYUJhc2U6On5TdG9yYWdlQXJlYUJhc2UoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgU3RvcmFn
ZUFyZWFCYXNlOjphZGRMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rp
b24pCit7CisgICAgQVNTRVJUKCFtX2xpc3RlbmVycy5jb250YWlucyhjb25uZWN0aW9uKSk7CisK
KyAgICBtX2xpc3RlbmVycy5hZGQoY29ubmVjdGlvbik7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFC
YXNlOjpyZW1vdmVMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24p
Cit7CisgICAgbV9saXN0ZW5lcnMucmVtb3ZlKGNvbm5lY3Rpb24pOworfQorCitib29sIFN0b3Jh
Z2VBcmVhQmFzZTo6aGFzTGlzdGVuZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fbGlzdGVu
ZXJzLmlzRW1wdHkoKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYUJhc2U6Om5vdGlmeUxpc3RlbmVy
c0Fib3V0Q2xlYXIoKQoreworICAgIGZvciAoYXV0byYgY29ubmVjdGlvbiA6IG1fbGlzdGVuZXJz
KQorICAgICAgICBJUEM6OkNvbm5lY3Rpb246OnNlbmQoY29ubmVjdGlvbiwgTWVzc2FnZXM6OlN0
b3JhZ2VBcmVhTWFwOjpDbGVhckNhY2hlKCksIG1faWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30K
Kwordm9pZCBTdG9yYWdlQXJlYUJhc2U6OmRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6
VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzb3Vy
Y2VJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFs
dWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25z
dAoreworICAgIEFTU0VSVChzb3VyY2VJbXBsSWRlbnRpZmllcik7CisKKyAgICBmb3IgKGF1dG8m
IGNvbm5lY3Rpb24gOiBtX2xpc3RlbmVycykgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFN0b3Jh
Z2VBcmVhSW1wbElkZW50aWZpZXI+IGltcGxJZGVudGlmaWVyOworICAgICAgICBpZiAoY29ubmVj
dGlvbiA9PSBzb3VyY2VDb25uZWN0aW9uKQorICAgICAgICAgICAgaW1wbElkZW50aWZpZXIgPSBz
b3VyY2VJbXBsSWRlbnRpZmllcjsKKyAgICAgICAgSVBDOjpDb25uZWN0aW9uOjpzZW5kKGNvbm5l
Y3Rpb24sIE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlzcGF0Y2hTdG9yYWdlRXZlbnQoaW1w
bElkZW50aWZpZXIsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCB1cmxTdHJpbmcpLCBtX2lkZW50
aWZpZXIudG9VSW50NjQoKSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9y
YWdlQXJlYUJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9y
YWdlQXJlYUJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OTA1MWIxNGIzNTk5ZmFkZWM4NGJhZTcwYWQ4NmVl
MDAwY2Q3ZTg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJTdG9y
YWdlQXJlYUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KKyNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgQ2xpZW50T3JpZ2luOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBjbGFzcyBTdG9yYWdlRXJyb3IgOiB1aW50OF90
IHsKKyAgICBEYXRhYmFzZSwKKyAgICBJdGVtTm90Rm91bmQsCisgICAgUXVvdGFFeGNlZWRlZCwK
K307CisKK2NsYXNzIFN0b3JhZ2VBcmVhQmFzZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTdG9y
YWdlQXJlYUJhc2U+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdG9yYWdlQXJlYUJhc2Up
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFN0b3JhZ2VBcmVh
QmFzZSh1bnNpZ25lZCBxdW90YSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAg
dmlydHVhbCB+U3RvcmFnZUFyZWFCYXNlKCk7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50
OF90IHsgU1FMaXRlLCBNZW1vcnkgfTsKKyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0g
MDsKKyAgICBlbnVtIGNsYXNzIFN0b3JhZ2VUeXBlIDogYm9vbCB7IFNlc3Npb24sIExvY2FsIH07
CisgICAgdmlydHVhbCBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNFbXB0eSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7
CisKKyAgICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJu
IG1faWRlbnRpZmllcjsgfQorICAgIFdlYkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4oKSBjb25z
dCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIHVuc2lnbmVkIHF1b3RhKCkgY29uc3QgeyByZXR1
cm4gbV9xdW90YTsgfQorICAgIHZvaWQgYWRkTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCk7CisgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlE
KTsKKyAgICBib29sIGhhc0xpc3RlbmVycygpIGNvbnN0OworICAgIHZvaWQgbm90aWZ5TGlzdGVu
ZXJzQWJvdXRDbGVhcigpOworCisgICAgdmlydHVhbCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBh
bGxJdGVtcygpID0gMDsKKyAgICB2aXJ0dWFsIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4g
c2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpID0gMDsKKyAgICB2aXJ0dWFsIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJv
cj4gcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJ
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpID0g
MDsKKyAgICB2aXJ0dWFsIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gY2xlYXIoSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZGlzcGF0Y2hFdmVu
dHMoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYg
bmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIHVuc2lnbmVkIG1fcXVv
dGE7CisgICAgV2ViQ29yZTo6Q2xpZW50T3JpZ2luIG1fb3JpZ2luOworICAgIEhhc2hTZXQ8SVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRD4gbV9saXN0ZW5lcnM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjViZTY4Yzlk
Y2U1YmZjZWU1YmNjN2I4YjY2NmNhZDE1MTQ1MTE1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcApA
QCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlN0b3JhZ2VBcmVhUmVnaXN0cnkuaCIKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhQmFzZS5o
IgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworU3RvcmFnZUFyZWFSZWdpc3RyeTo6U3RvcmFnZUFy
ZWFSZWdpc3RyeSgpID0gZGVmYXVsdDsKKwordm9pZCBTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpyZWdp
c3RlclN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBTdG9yYWdl
QXJlYUJhc2UmIHN0b3JhZ2VBcmVhKQoreworICAgIEFTU0VSVCghbV9zdG9yYWdlQXJlYXMuY29u
dGFpbnMoaWRlbnRpZmllcikpOworCisgICAgbV9zdG9yYWdlQXJlYXMuYWRkKGlkZW50aWZpZXIs
IHN0b3JhZ2VBcmVhKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYVJlZ2lzdHJ5Ojp1bnJlZ2lzdGVy
U3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgQVNT
RVJUKG1fc3RvcmFnZUFyZWFzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKKworICAgIG1fc3RvcmFn
ZUFyZWFzLnJlbW92ZShpZGVudGlmaWVyKTsKK30KKworU3RvcmFnZUFyZWFCYXNlKiBTdG9yYWdl
QXJlYVJlZ2lzdHJ5OjpnZXRTdG9yYWdlQXJlYShTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRp
ZmllcikKK3sKKyAgICBpZiAoYXV0byBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFzLmdldChp
ZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLmdldCgpOworCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFSZWdpc3RyeTo6Zm9yRWFjaFN0b3Jh
Z2VBcmVhKGNvbnN0IEZ1bmN0aW9uPHZvaWQoU3RvcmFnZUFyZWFCYXNlJik+JiBhcHBseSkKK3sK
KyAgICBIYXNoU2V0PFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4gaWRlbnRpZmllcnNUb1JlbW92ZTsK
KyAgICBmb3IgKGF1dG8gW2lkZW50aWZpZXIsIHN0b3JhZ2VBcmVhXSA6IG1fc3RvcmFnZUFyZWFz
KSB7CisgICAgICAgIGlmICghc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgICAgIGlkZW50aWZpZXJz
VG9SZW1vdmUuYWRkKGlkZW50aWZpZXIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKworICAgICAgICBhcHBseSgqc3RvcmFnZUFyZWEpOworICAgIH0KKworICAgIGZvciAoYXV0
byBpZGVudGlmaWVyIDogaWRlbnRpZmllcnNUb1JlbW92ZSkKKyAgICAgICAgbV9zdG9yYWdlQXJl
YXMucmVtb3ZlKGlkZW50aWZpZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYVJl
Z2lzdHJ5LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFy
ZWFSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwYzNlYTQ3ZTVjZjQzMzAwZmM3NDgyNGJhYTkyZmU2
MDMyYmJmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJT
dG9yYWdlQXJlYUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU3RvcmFnZUFyZWFCYXNlOworCitjbGFzcyBTdG9yYWdl
QXJlYVJlZ2lzdHJ5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBTdG9yYWdlQXJlYVJlZ2lzdHJ5KCk7CisgICAgdm9pZCByZWdpc3RlclN0b3JhZ2VBcmVhKFN0
b3JhZ2VBcmVhSWRlbnRpZmllciwgU3RvcmFnZUFyZWFCYXNlJik7CisgICAgdm9pZCB1bnJlZ2lz
dGVyU3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVyKTsKKyAgICBTdG9yYWdlQXJlYUJh
c2UqIGdldFN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhSWRlbnRpZmllcik7CisgICAgdm9pZCBmb3JF
YWNoU3RvcmFnZUFyZWEoY29uc3QgRnVuY3Rpb248dm9pZChTdG9yYWdlQXJlYUJhc2UmKT4mKTsK
KworcHJpdmF0ZToKKyAgICBIYXNoTWFwPFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgV2Vha1B0cjxT
dG9yYWdlQXJlYUJhc2U+PiBtX3N0b3JhZ2VBcmVhczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQt
c291cmNlcy5zaCBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy9nZW5lcmF0ZS11bmlmaWVkLXNvdXJj
ZXMuc2gKaW5kZXggYjZkNDBhZDllOTU0N2JkNDBkZTg1YzljODVhMzVjMWUyNWNkZjE5MS4uNGYx
YWM4M2NiM2EyMjZlY2NkMDc4Mzk4Mzc5MjNjYmM0NGJhYjkyMyAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYktpdC9TY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtdW5pZmllZC1zb3VyY2VzLnNoCkBAIC0xNCw3ICsxNCw3
IEBAIGlmIFsgLXogIiR7QlVJTERfU0NSSVBUU19ESVJ9IiBdOyB0aGVuCiAgICAgZmkKIGZpCiAK
LVVuaWZpZWRTb3VyY2VDcHBGaWxlQ291bnQ9MTExCitVbmlmaWVkU291cmNlQ3BwRmlsZUNvdW50
PTExMgogVW5pZmllZFNvdXJjZU1tRmlsZUNvdW50PTgwCiAKIGlmIFsgJCMgLWVxIDAgXTsgdGhl
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQv
U291cmNlcy50eHQKaW5kZXggMDVhODViMDE5NjA0MjAxNmFiNjg1ZjIwZDRiZWY3M2M0NjI2NTYw
Ny4uNDJmYjYxYjE3NzUxZTExOTczMmZhYWIyNmUxNThhNTI2MzU1MzUyMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0
CkBAIC0xNDMsOCArMTQzLDE0IEBAIE5ldHdvcmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dT
ZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmNwcCBAbm8tdW5pZnkKIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9GaWxlU3lzdGVtU3RvcmFnZUhhbmRsZS5jcHAKIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvRmls
ZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5jcHAKK05ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlTWFuYWdlci5jcHAKK05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3Rv
cmFnZUFyZWEuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdl
ci5jcHAKIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwCitO
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcAorTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHAKK05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFy
ZWFSZWdpc3RyeS5jcHAKIAogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VE
YXRhYmFzZS5jcHAKIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggMzUzZTVmNDY2ZjZhY2JhNzZlYmZjZjM5
ZDI3M2JhYTNjMTU2MmY5Mi4uMjVjZTQ2YTdmODIyMGNiNGI2YTMwMGY5YWU3NjI2NWU1ZGEzM2Jj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwCkBAIC0xNTcyLDE2ICsxNTcyLDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoY29uc3QgU3RyaW5nJiBpbmRl
eGVkRGF0YWIKICAgICAgICAgRmlsZVN5c3RlbTo6Y3JlYXRlU3ltYm9saWNMaW5rKGluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSwgb2xkVmVyc2lvbkRpcmVjdG9yeSk7CiB9CiAKLXZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAg
aWYgKCFjYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzOjpHZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKHNlc3Npb25J
RCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpwcmVjb25uZWN0VG8oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJQYWdlUHJv
eHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciB3ZWJQ
YWdlSUQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgV2ViQ29yZTo6
U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHN0ZDo6b3B0
aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzTmF2aWdhdGluZ1RvQXBwQm91bmRE
b21haW4sIExhc3ROYXZpZ2F0aW9uV2FzQXBwSW5pdGlhdGVkIGxhc3ROYXZpZ2F0aW9uV2FzQXBw
SW5pdGlhdGVkKQogewogICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCAhdXJsLnByb3RvY29sSXNJ
bkhUVFBGYW1pbHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggOTA5NzkzZTM3NTY4YzA0MmIxMDAy
YTI2YWEwMjc0Nzg0YTkxZTRjYS4uNzIyZDk3MzFhMDEyZGUzNGZiNmMzMzJiOTExNDVkZDAzMDJm
NTYzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTE5NjksMTggKzE5NjksNiBAQCBBUEk6OkhUVFBD
b29raWVTdG9yZSYgV2Vic2l0ZURhdGFTdG9yZTo6Y29va2llU3RvcmUoKQogICAgIHJldHVybiAq
bV9jb29raWVTdG9yZTsKIH0KIAotdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3Jh
Z2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tl
cjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFp
c1BlcnNpc3RlbnQoKSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbmV0d29ya1Byb2Nlc3MoKS5nZXRMb2NhbFN0b3JhZ2VE
ZXRhaWxzKG1fc2Vzc2lvbklELCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oYXV0byYmIGRldGFpbHMpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShkZXRhaWxzKSk7Ci0gICAgfSk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggMWRlMjVh
NjYwNTdmMmQ2NmM2Mjk5ZTVlYmJiODE0NmJlZTliODFlMy4uMzRhZTVhZjYwNzNjMjU5MTQyMGYy
MDljZTBmNzUzMmJhYmRjODNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaApAQCAtMTY3LDcgKzE2Nyw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIHJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdh
bGxUaW1lIG1vZGlmaWVkU2luY2UsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cik7CiAgICAgdm9pZCByZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBjb25z
dCBWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+JiwgRnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKTsKIAotICAgIHZvaWQgZ2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2
b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYp
PiYmKTsKICAgICB2b2lkIHNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhDYWNo
ZU1vZGVsKTsKICAgICB2b2lkIHNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyhTZWNv
bmRzKTsKICAgICB2b2lkIHJlc2V0U2VydmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VuaWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0
IGIvU291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAppbmRleCA1
MDg5OGU0NjMwMTczMTk0YWU0ZWY3Y2NlNDNhZThlYjQ2NzNhODZiLi4yYWQ3OTY0NWQ2ZWY2ODNk
YWQ0ZWIwNzZmNWRkNzI0NzJiZjg2MGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VuaWZp
ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvVW5pZmllZFNv
dXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKQEAgLTE3LDYgKzE3LDcgQEAgJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJj
ZTExLW1tLm0KICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5p
ZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMS5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMTAuY3Bw
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291
cmNlcy9VbmlmaWVkU291cmNlMTExLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTExMi5jcHAKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1Vu
aWZpZWRTb3VyY2UxMi1tbS5tbQogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTEyLmNwcAogJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNv
dXJjZTEzLW1tLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCBmYmY0ODc5ZThjYzM2M2FjZThhYWRiMTMxNzU4ZTE3MWJmNTQ0YjdhLi5i
Y2Q1NDRlOTQyMzA2YTJiYTI2OGI1NzE0M2JlYzEyZTRhMjRiZGQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE1MDgsNiArMTUwOCwx
MyBAQAogCQk5M0U3OTk4NTI3NTZGQTU1MDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VD
b25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OTgyMjc1NkZBNTQwMDc0MDA4QSAvKiBXZWJGaWxlU3lz
dGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk5M0U3OTk4
NzI3NTZGQUI0MDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2Fn
ZXNSZXBsaWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0U3OTk4MzI3NTZGQTU0MDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0
aW9uTWVzc2FnZXNSZXBsaWVzLmggKi87IH07CiAJCTkzRTc5OTg4Mjc1NkZBQzIwMDc0MDA4QSAv
KiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5ODEyNzU2RkE1MzAwNzQwMDhB
IC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi87IH07CisJCTkz
RTc5OUM3Mjc2MDI3NDYwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTlDNjI3NjAyNzM3MDA3
NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3RyeS5oICovOyB9OworCQk5M0U3OTlDRTI3NjA0OTdC
MDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTlDQTI3NjA0OTdBMDA3NDAwOEEgLyogU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyLmggKi87IH07CisJCTkzRTc5OUNGMjc2MDQ5N0IwMDc0MDA4QSAv
KiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0U3OTlDQjI3NjA0OTdBMDA3NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFu
YWdlci5oICovOyB9OworCQk5M0U3OTlEMjI3NjBBQTVCMDA3NDAwOEEgLyogVW5pZmllZFNvdXJj
ZTExMi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0U3OTlEMTI3NjBBQTVBMDA3NDAwOEEgLyogVW5pZmllZFNvdXJjZTExMi5jcHAgKi87IH07CisJ
CTkzRTc5OURBMjc2MTIxMDgwMDc0MDA4QSAvKiBTUUxpdGVTdG9yYWdlQXJlYS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5RDQyNzYxMjEwNzAw
NzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmggKi87IH07CisJCTkzRTc5OURCMjc2MTIxMDgw
MDc0MDA4QSAvKiBNZW1vcnlTdG9yYWdlQXJlYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5RDUyNzYxMjEwNzAwNzQwMDhBIC8qIE1lbW9yeVN0
b3JhZ2VBcmVhLmggKi87IH07CisJCTkzRTc5OURDMjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdl
QXJlYUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzRTc5OUQ2Mjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuaCAqLzsgfTsKIAkJ
OTNGNTQ5QjQxRTMxNzRCNzAwMEU3MjM5IC8qIFdLU25hcHNob3RDb25maWd1cmF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y1NDlCMzFFMzE3
NEI3MDAwRTcyMzkgLyogV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTk1MEYyODgwMjUyNDE0RUEwMEI3NEYx
QyAvKiBXS01vdXNlRGV2aWNlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEYyODdFMjUyNDE0RTkwMEI3NEYxQyAvKiBXS01vdXNlRGV2
aWNlT2JzZXJ2ZXIuaCAqLzsgfTsKIAkJOTU2NTA4MzkyNkQ4N0EyQjAwRTE1Q0I3IC8qIEFwcGxl
TWVkaWFTZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTU2NTA4MzcyNkQ4N0EyQjAwRTE1Q0I3IC8qIEFwcGxlTWVkaWFTZXJ2aWNlc1NQ
SS5oICovOyB9OwpAQCAtNTMzMCw2ICs1MzM3LDE5IEBACiAJCTkzRTc5OTgxMjc1NkZBNTMwMDc0
MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25N
ZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0U3OTk4MjI3NTZGQTU0
MDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkZpbGVTeXN0ZW1T
dG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzRTc5OTgzMjc1NkZBNTQwMDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFn
ZUNvbm5lY3Rpb25NZXNzYWdlc1JlcGxpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXNSZXBsaWVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUM1Mjc2MDI3MzYwMDc0MDA4QSAvKiBT
dG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFN0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5M0U3OTlDNjI3NjAyNzM3MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3RyeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQXJlYVJlZ2lzdHJ5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUM5Mjc2MDQ5N0EwMDc0MDA4QSAvKiBMb2Nh
bFN0b3JhZ2VNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IExvY2FsU3RvcmFnZU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
M0U3OTlDQTI3NjA0OTdBMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlc3Npb25TdG9yYWdlTWFuYWdlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlDQjI3NjA0OTdBMDA3NDAwOEEgLyogTG9j
YWxTdG9yYWdlTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2Nh
bFN0b3JhZ2VNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUND
Mjc2MDQ5N0IwMDc0MDA4QSAvKiBTZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDEyNzYwQUE1QTAwNzQwMDhBIC8qIFVu
aWZpZWRTb3VyY2UxMTIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VW5pZmllZFNvdXJjZTExMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5
OUQzMjc2MTIxMDcwMDc0MDA4QSAvKiBTUUxpdGVTdG9yYWdlQXJlYS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxpdGVTdG9yYWdlQXJlYS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQ0Mjc2MTIxMDcwMDc0MDA4QSAvKiBTUUxpdGVT
dG9yYWdlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxpdGVTdG9y
YWdlQXJlYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlENTI3NjEyMTA3
MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWVtb3J5U3RvcmFnZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTNFNzk5RDYyNzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQXJlYUJhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDcyNzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVh
QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlQXJl
YUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlEODI3NjEyMTA4
MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTWVtb3J5U3RvcmFnZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5M0Y1NDlCMzFFMzE3NEI3MDAwRTcyMzkgLyogV0tTbmFwc2hvdENvbmZpZ3Vy
YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tTbmFwc2hvdENvbmZp
Z3VyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGNTQ5QjUxRTMxNzRE
QTAwMEU3MjM5IC8qIFdLU25hcHNob3RDb25maWd1cmF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24ubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk1MEYyODdFMjUyNDE0RTkwMEI3NEYxQyAvKiBXS01v
dXNlRGV2aWNlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tN
b3VzZURldmljZU9ic2VydmVyLmg7IHBhdGggPSBpb3MvV0tNb3VzZURldmljZU9ic2VydmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MjA5LDYgKzgyMjksNyBAQAogCQkJCTFD
QUVDQjVEMjc0NjVBRTMwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTA5LmNwcCAqLywKIAkJCQkx
Q0FFQ0I2MDI3NDY1QUUzMDBBQjc4RDAgLyogVW5pZmllZFNvdXJjZTExMC5jcHAgKi8sCiAJCQkJ
MUNBRUNCNUUyNzQ2NUFFMzAwQUI3OEQwIC8qIFVuaWZpZWRTb3VyY2UxMTEuY3BwICovLAorCQkJ
CTkzRTc5OUQxMjc2MEFBNUEwMDc0MDA4QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCAqLywKIAkJ
CSk7CiAJCQluYW1lID0gInVuaWZpZWQtc291cmNlcyI7CiAJCQlwYXRoID0gIkRlcml2ZWRTb3Vy
Y2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMiOwpAQCAtMTAyODgsMTEgKzEwMzA5LDIzIEBACiAJ
CQkJOTM1QjU3OTgyNkY1MTI3MDAwOEI0OEFDIC8qIEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVn
aXN0cnkuaCAqLywKIAkJCQk5MzFBMDc1MTI2RjA2MzEwMDA0NDc0Q0QgLyogRmlsZVN5c3RlbVN0
b3JhZ2VNYW5hZ2VyLmNwcCAqLywKIAkJCQk5MzFBMDc1MDI2RjA2MzEwMDA0NDc0Q0QgLyogRmls
ZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLmggKi8sCisJCQkJOTNFNzk5QzkyNzYwNDk3QTAwNzQwMDhB
IC8qIExvY2FsU3RvcmFnZU1hbmFnZXIuY3BwICovLAorCQkJCTkzRTc5OUNCMjc2MDQ5N0EwMDc0
MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmggKi8sCisJCQkJOTNFNzk5RDgyNzYxMjEwODAw
NzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmNwcCAqLywKKwkJCQk5M0U3OTlENTI3NjEyMTA3
MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuaCAqLywKIAkJCQk5MzA4NURDMzI2RTFCQkJE
MDAwRUM2QTcgLyogTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmNwcCAqLywKIAkJCQk5MzA4NURDNDI2
RTFCQkJEMDAwRUM2QTcgLyogTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmggKi8sCiAJCQkJOTMwODVE
QzcyNkUxQzZFRTAwMEVDNkE3IC8qIE5ldHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbiAq
LywKIAkJCQk5MzA4NURDNTI2RTFDNkNGMDAwRUM2QTcgLyogT3JpZ2luU3RvcmFnZU1hbmFnZXIu
Y3BwICovLAogCQkJCTkzMDg1REM2MjZFMUM2Q0YwMDBFQzZBNyAvKiBPcmlnaW5TdG9yYWdlTWFu
YWdlci5oICovLAorCQkJCTkzRTc5OUNDMjc2MDQ5N0IwMDc0MDA4QSAvKiBTZXNzaW9uU3RvcmFn
ZU1hbmFnZXIuY3BwICovLAorCQkJCTkzRTc5OUNBMjc2MDQ5N0EwMDc0MDA4QSAvKiBTZXNzaW9u
U3RvcmFnZU1hbmFnZXIuaCAqLywKKwkJCQk5M0U3OTlEMzI3NjEyMTA3MDA3NDAwOEEgLyogU1FM
aXRlU3RvcmFnZUFyZWEuY3BwICovLAorCQkJCTkzRTc5OUQ0Mjc2MTIxMDcwMDc0MDA4QSAvKiBT
UUxpdGVTdG9yYWdlQXJlYS5oICovLAorCQkJCTkzRTc5OUQ3Mjc2MTIxMDgwMDc0MDA4QSAvKiBT
dG9yYWdlQXJlYUJhc2UuY3BwICovLAorCQkJCTkzRTc5OUQ2Mjc2MTIxMDgwMDc0MDA4QSAvKiBT
dG9yYWdlQXJlYUJhc2UuaCAqLywKKwkJCQk5M0U3OTlDNTI3NjAyNzM2MDA3NDAwOEEgLyogU3Rv
cmFnZUFyZWFSZWdpc3RyeS5jcHAgKi8sCisJCQkJOTNFNzk5QzYyNzYwMjczNzAwNzQwMDhBIC8q
IFN0b3JhZ2VBcmVhUmVnaXN0cnkuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gc3RvcmFnZTsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMjk0Nyw2ICsxMjk4MCw3IEBACiAJCQkJNTdE
Q0VEQUUyMTRDNjAzMzAwMTZCODQ3IC8qIExvY2FsU2VydmljZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNCMjYxNEUyMjdEMTRCMTAwQjk3QTc2IC8qIExvY2FsU3RvcmFnZURhdGFiYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5M0IyNjE0RjIyN0QxNEIxMDBCOTdBNzYgLyogTG9jYWxTdG9yYWdl
RGF0YWJhc2VUcmFja2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3OTlDRjI3NjA0OTdCMDA3
NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZCRUI2
REIyMkZCOUQ0ODAwMjY5ODY3IC8qIExvY2FsU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTFBN0YyRjMxMjVCRjgyMDAwOEFFQjFEIC8qIExvZ2dpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRENEN0Y3MUQ0N0U5MkEwMDlGMDhCQyAvKiBMb2dJbml0aWFsaXphdGlvbi5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xMjk2NSw2ICsxMjk5OSw3IEBACiAJCQkJQTE1Nzk5QkQyNTg0
NDMzMjAwNTI4MjM2IC8qIE1lZGlhU2FtcGxlQ3Vyc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
NzVBOUNGMzI2MTY5QkFCMDA2REZBM0EgLyogTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JQcm94eVBy
aXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTc5OUI3MjU4NDQzMzIwMDUyODIzNiAvKiBN
ZWRpYVRyYWNrUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3OTlEQjI3NjEyMTA4MDA3
NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOTMzREVG
MTk2NUVCMzEwMDhBQzNFQSAvKiBNZW51VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
QjQ3OTA4RDI1MzE0RDgzMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUM0QzgyOTE2Qjg3NkE5MDA2OURDQ0QgLyogTWVzc2FnZUZs
YWdzLmggaW4gSGVhZGVycyAqLywKQEAgLTEzMTg0LDYgKzEzMjE5LDcgQEAKIAkJCQk1MTREOUY1
NzE5MTE5RDM1MDAwMDYzQTcgLyogU2VydmljZXNDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUZERTY1QTE5NTRBNDJCMDBDNDhGRkEgLyogU2Vzc2lvblN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTAwMkQ0OTE5NkIzNDVEMDBCOUFENDQgLyogU2Vzc2lvblN0YXRlQ29kaW5n
LmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3OTlDRTI3NjA0OTdCMDA3NDAwOEEgLyogU2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkJFQjZERjIyRkJCMTZCMDAy
Njk4NjcgLyogU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
NjQyMEU1MTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRtYXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCUY0M0E5Q0UwMjVENzJGMUMwMDk5MEUyNiAvKiBTaGFyZWFibGVCaXRtYXBVdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTMyMTIsMTEgKzEzMjQ4LDE0IEBACiAJCQkJOTNENkI3
NzIyNTRCQjUxOTAwNThERDNBIC8qIFNwZWVjaFJlY29nbml0aW9uU2VydmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5M0Q2Qjc4NDI1NENDRDBFMDA1OEREM0EgLyogU3BlZWNoUmVjb2duaXRpb25T
ZXJ2ZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNENkI3ODUyNTRDQ0Q0MzAwNThE
RDNBIC8qIFNwZWVjaFJlY29nbml0aW9uU2VydmVyTWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5M0U3OTlEQTI3NjEyMTA4MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdBM0ZFQ0EyMjFGN0MwOTcwMEYyNjdDRCAvKiBTdG9yYWdl
QWNjZXNzU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkJFQjZENzIyRkI5QkQ3MDAyNjk4
NjcgLyogU3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTc5OURDMjc2MTIxMDgw
MDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRDMzMDZG
MTZCMUQ5OTEwMDRGNjBFNyAvKiBTdG9yYWdlQXJlYUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBQ0VDRDI1MTcxNjJEQjEwMDFGQzlFRiAvKiBTdG9yYWdlQXJlYU1hcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEzMzRERUUxNkRFOEY4ODAwNkE4RTM4IC8qIFN0b3JhZ2VBcmVhTWFwTWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTc5OUM3Mjc2MDI3NDYwMDc0MDA4QSAvKiBTdG9y
YWdlQXJlYVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0IyNjE0RDIyN0QxNDlFMDBC
OTdBNzYgLyogU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNkIwNTk4MjMw
MzkwOTcwMDJGQzA2QiAvKiBTdG9yYWdlTWFuYWdlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTM2OEVFREYyMzAzQTlFRDAwQkRCMTFBIC8qIFN0b3JhZ2VNYW5hZ2VyU2V0TWVzc2FnZXMuaCBp
biBIZWFkZXJzICovLApAQCAtMTU0NjksNiArMTU1MDgsNyBAQAogCQkJCTFDQUVDQjY1Mjc0NjVB
RTQwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTA5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFD
QUVDQjY4Mjc0NjVBRTQwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTEwLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFDQUVDQjY2Mjc0NjVBRTQwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTExLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTkzRTc5OUQyMjc2MEFBNUIwMDc0MDA4QSAvKiBVbmlmaWVk
U291cmNlMTEyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzOEExRkMwMjNBNTUxQkYwMEQyMzc0
RiAvKiBVc2VySW50ZXJmYWNlSWRpb20ubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDQ5MUIwRDFF
NzMyRTREMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q0OTFCMTcxRTczNTI1NTAwMDA5MDY2IC8qIFVzZXJN
ZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
QXJlYU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
QXJlYU1hcC5jcHAKaW5kZXggMGZhNmFjMThmZDk0NzA1OTBjZjEwN2Q2YTQ0MDY2ZDkyZDlhNDM2
ZC4uMmNmN2E2ZDRiNjAwNWMxZDdlYzI1NmJkNjM4ODc2Mjk0ZTllNGNmMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNw
cApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlTWFuYWdl
ck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsLmgiCiAjaW5jbHVkZSAiU3Rv
cmFnZUFyZWFNYXBNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VNYW5hZ2VyU2V0TWVzc2Fn
ZXMuaCIKQEAgLTk1LDcgKzk2LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6c2V0SXRlbShGcmFt
ZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc291cmNlQXJlYSwgY28KICAgICBtX3Bl
bmRpbmdWYWx1ZUNoYW5nZXMuYWRkKGtleSk7CiAKICAgICBpZiAobV9tYXBJRCkKLSAgICAgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCku
Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpTZXRJdGVtKCpt
X21hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIGtleSwgdmFs
dWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOworICAgICAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
KS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpTZXRJ
dGVtKCptX21hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIGtl
eSwgdmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOwog
ICAgIGVsc2UKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVh
TWFwOjpzZXRJdGVtIGZhaWxlZCBiZWNhdXNlIHN0b3JhZ2UgbWFwIElEIGlzIGludmFsaWQiKTsK
IH0KQEAgLTExNCw3ICsxMTUsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJdGVtKFdl
YkNvcmU6OkZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzbwogICAgIG1fcGVu
ZGluZ1ZhbHVlQ2hhbmdlcy5hZGQoa2V5KTsKIAogICAgIGlmIChtX21hcElEKQotICAgICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5j
b25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OlJlbW92ZUl0ZW0o
Km1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwga2V5LCBz
b3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKKyAgICAgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29u
bmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6UmVtb3ZlSXRl
bSgqbV9tYXBJRCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBrZXks
IHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOwogICAgIGVsc2UK
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVhTWFwOjpyZW1v
dmVJdGVtIGZhaWxlZCBiZWNhdXNlIHN0b3JhZ2UgbWFwIElEIGlzIGludmFsaWQiKTsKIH0KQEAg
LTEyOSw3ICsxMzAsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpjbGVhcihXZWJDb3JlOjpGcmFt
ZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc291cmNlQQogICAgIG1fbWFwID0gbWFr
ZVVuaXF1ZTxTdG9yYWdlTWFwPihtX3F1b3RhSW5CeXRlcyk7CiAKICAgICBpZiAobV9tYXBJRCkK
LSAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpD
bGVhcigqbV9tYXBJRCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBz
b3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKKyAgICAgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29u
bmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q2xlYXIoKm1f
bWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwgc291cmNlRnJh
bWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgMCk7CiAgICAgZWxzZQogICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU3RvcmFnZUFyZWFNYXA6OmNsZWFyIGZhaWxlZCBi
ZWNhdXNlIHN0b3JhZ2UgbWFwIElEIGlzIGludmFsaWQiKTsKIH0KQEAgLTE2MCw3ICsxNjEsNyBA
QCBTdG9yYWdlTWFwJiBTdG9yYWdlQXJlYU1hcDo6ZW5zdXJlTWFwKCkKICAgICAgICAgICAgIC8v
IGZyb20gb3VyIFN0b3JhZ2VNYW5hZ2VyU2V0OjpHZXRWYWx1ZXMoKSBJUEMuIFRoaXMgSVBDIG1h
eSBiZSB2ZXJ5IHNsb3cgYmVjYXVzZSBpdCBtYXkgbmVlZCB0byBmZXRjaCB0aGUgdmFsdWVzIGZy
b20gZGlzayBhbmQgdGhlcmUgbWF5IGJlIGEgbG90IG9mIGRhdGEuCiAgICAgICAgICAgICBJUEM6
OlVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGUgdW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29w
ZTsKICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhbHVlczsKLSAgICAgICAg
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6Okdl
dFZhbHVlcygqbV9tYXBJRCksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6R2V0VmFsdWVz
OjpSZXBseSh2YWx1ZXMpLCAwKTsKKyAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpHZXRWYWx1ZXMoKm1fbWFwSUQpLCBNZXNz
YWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkdldFZhbHVlczo6UmVwbHkodmFsdWVzKSwgMCk7CiAg
ICAgICAgICAgICBtX21hcC0+aW1wb3J0SXRlbXMoV1RGTW92ZSh2YWx1ZXMpKTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU3RvcmFnZUFy
ZWFNYXA6OmVuc3VyZU1hcCBmYWlsZWQgdG8gbG9hZCBmcm9tIG5ldHdvcmsgcHJvY2VzcyBiZWNh
dXNlIHN0b3JhZ2UgbWFwIElEIGlzIGludmFsaWQiKTsKQEAgLTM0OCwyMCArMzQ5LDIzIEBAIHZv
aWQgU3RvcmFnZUFyZWFNYXA6OmNvbm5lY3QoKQogICAgIGlmIChtX21hcElEKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgbWFwSUQ7CiAgICAgc3dpdGNoICht
X3R5cGUpIHsKICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpMb2NhbDoKICAgICBjYXNlIFN0b3JhZ2VU
eXBlOjpUcmFuc2llbnRMb2NhbDoKICAgICAgICAgaWYgKFNlY3VyaXR5T3JpZ2luKiB0b3BMZXZl
bE9yaWdpbiA9IG1fbmFtZXNwYWNlLnRvcExldmVsT3JpZ2luKCkpCi0gICAgICAgICAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25u
ZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9U
cmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlc3Npb25J
RCgpLCBtX25hbWVzcGFjZS5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgdG9wTGV2ZWxPcmlnaW4tPmRh
dGEoKSwgbV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2Vy
U2V0OjpDb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhOjpSZXBseShtX21hcElEKSwg
MCk7CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtT
dG9yYWdlTWFuYWdlcjo6Q29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShtX25hbWVz
cGFjZS5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgdG9wTGV2ZWxPcmlnaW4tPmRhdGEoKSwgbV9zZWN1
cml0eU9yaWdpbi0+ZGF0YSgpKSwgTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q29u
bmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYTo6UmVwbHkobWFwSUQpLCAwKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9y
YWdlTWFuYWdlclNldDo6Q29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5zZXNzaW9uSUQoKSwgbV9uYW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCksIG1f
c2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29u
bmVjdFRvTG9jYWxTdG9yYWdlQXJlYTo6UmVwbHkobV9tYXBJRCksIDApOworICAgICAgICAgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCku
Y29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNv
bm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEobV9uYW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCks
IG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OkNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWE6OlJlcGx5KG1hcElEKSwgMCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgU3RvcmFnZVR5cGU6OlNlc3Npb246Ci0gICAgICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rp
b24oKS5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb1Nlc3Np
b25TdG9yYWdlQXJlYShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9uSUQoKSwgbV9uYW1l
c3BhY2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIE1l
c3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhOjpS
ZXBseShtX21hcElEKSwgMCk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdl
czo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEobV9u
YW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSks
IE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5lY3RUb1Nlc3Npb25TdG9yYWdl
QXJlYTo6UmVwbHkobWFwSUQpLCAwKTsKICAgICB9CiAKLSAgICBpZiAobV9tYXBJRCkKKyAgICBp
ZiAobWFwSUQuaXNWYWxpZCgpKSB7CisgICAgICAgIG1fbWFwSUQgPSBtYXBJRDsKICAgICAgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVnaXN0ZXJTdG9yYWdlQXJlYU1hcCgqdGhpcyk7Cisg
ICAgfQogfQogCiB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpkaXNjb25uZWN0KCkKQEAgLTM3Myw3ICsz
NzcsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpkaXNjb25uZWN0KCkKICAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS51bnJlZ2lzdGVyU3RvcmFnZUFyZWFNYXAoKnRoaXMpOwogCiAgICAgaWYg
KGF1dG8qIG5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LmV4aXN0aW5nTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkpCi0gICAgICAgIG5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2Vy
U2V0OjpEaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKCptX21hcElEKSwgMCk7CisgICAgICAgIG5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtTdG9yYWdlTWFuYWdlcjo6RGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYSgqbV9tYXBJRCksIDAp
OwogCiAgICAgbV9tYXBJRCA9IHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAppbmRleCBm
ODRkMDJmYzZmN2UzYmIxZTMxNDMzYzVmMDBlNjFlMGZkZWJmOTMyLi5kZWI2YTM0MzNjYWJhZmFm
N2RjYWE1NjBjZGMzYTE1ZTNhY2E3ZTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCkBAIC0y
Nyw5ICsyNyw5IEBACiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZUltcGwuaCIKIAogI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdl
TWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsLmgiCiAjaW5jbHVk
ZSAiU3RvcmFnZUFyZWFNYXAuaCIKLSNpbmNsdWRlICJTdG9yYWdlTWFuYWdlclNldE1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cFByb3h5Lmgi
CiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgpAQCAtMTE0LDcgKzExNCw3IEBAIFJlZjxTdG9yYWdl
TmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weShQYWdlJiBuZXdQYWdlKQogICAg
IEFTU0VSVChtX3N0b3JhZ2VUeXBlID09IFN0b3JhZ2VUeXBlOjpTZXNzaW9uKTsKIAogICAgIGlm
IChhdXRvIG5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LmV4aXN0aW5nTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkpCi0gICAgICAgIG5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2Vy
U2V0OjpDbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKHNlc3Npb25JRCgpLCBtX3N0b3JhZ2VO
YW1lc3BhY2VJRCwgV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKG5ld1BhZ2UpLnNlc3Npb25TdG9yYWdl
TmFtZXNwYWNlSWRlbnRpZmllcigpKSwgMCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbi0+Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Q2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShtX3N0b3JhZ2VOYW1lc3BhY2VJRCwgV2ViUGFn
ZTo6ZnJvbUNvcmVQYWdlKG5ld1BhZ2UpLnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmll
cigpKSwgMCk7CiAKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdG9yYWdlTmFtZXNwYWNlSW1w
bChtX3N0b3JhZ2VUeXBlLCBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UobmV3UGFnZSkuc2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyKCksIFdlYlBhZ2U6OmZyb21Db3JlUGFnZShuZXdQYWdl
KS5pZGVudGlmaWVyKCksIG1fdG9wTGV2ZWxPcmlnaW4uZ2V0KCksIG1fcXVvdGFJbkJ5dGVzKSk7
CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446752</attachid>
            <date>2021-12-10 10:30:01 -0800</date>
            <delta_ts>2021-12-10 10:34:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234087-20211210103000.patch</filename>
            <type>text/plain</type>
            <size>160720</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2Nzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWFkMzkxZDExMjlkNTEz
MzdhNTVjYWFjNTVjYzYwODgzOTM1YzcwMi4uYzY4N2QzMDc1MjYwZmJlMGZlNzkwOTQ5ZDg0ODJi
ZWY5MWQ5Nzk0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTEyLTEwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIFN0b3JhZ2VNYW5h
Z2VyIHdpdGggTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIHRvIG1hbmFnZSBXZWJTdG9yYWdlIGJ5IG9y
aWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVGaWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlRmlsZVN5c3RlbS5oOgorCiAyMDIxLTEyLTA5ICBBbGFuIEJ1anRhcyAgPHphbGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIEFkZCBzdXBwb3J0IGZvciBlbXB0eSBiaWRp
IGlubGluZSBib3hlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmZDYwMjI3N2FhY2IxMmJmNDc1ZDU3MzgxMWY4NDVj
MDY4NWJmYTBlLi44M2ZhOTNkZDFlMjJiN2Q4YTkwYmUyYzIwNTBlNDMyODhkZDM1Njk5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIxMCBAQAorMjAyMS0xMi0xMCAgU2lodWkgTGl1ICA8c2lodWlfbGl1
QGFwcGxlLmNvbT4KKworICAgICAgICBNZXJnZSBTdG9yYWdlTWFuYWdlciB3aXRoIE5ldHdvcmtT
dG9yYWdlTWFuYWdlciB0byBtYW5hZ2UgV2ViU3RvcmFnZSBieSBvcmlnaW4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDA4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIG5ldHdvcmsgcHJvY2Vzcywg
V2ViU3RvcmFnZSBkYXRhIGlzIG1hbmFnZWQgYnkgV2ViS2l0OjpTdG9yYWdlTWFuYWdlciBjbGFz
cy4gRWFjaCBTdG9yYWdlTWFuYWdlciBvd25zIG9uZSBvcgorICAgICAgICBtYW55IFN0b3JhZ2VO
YW1lU3BhY2VzLCBhbmQgZWFjaCBTdG9yYWdlTmFtZXNwYWNlcyBvd25zIG9uZSBvciBtb3JlIFN0
b3JhZ2VBcmVhcy4gRWFjaCBTdG9yYWdlQXJlYSBjb3JyZXBvbmRzCisgICAgICAgIHRvIG9uZSBz
dG9yYWdlIG1hcCAob25lIGxvY2FsU3RvcmFnZSBvciBzZXNzaW9uU3RvcmFnZSBvYmplY3QpLCBh
bmQgaGFzIHR3byB0eXBlcyBvZiBiYWNrZW5kOiBhIFNRTGl0ZSBkYXRhYmFzZSwKKyAgICAgICAg
b3IgYSBpbi1tZW1vcnkgaGFzaCBtYXAuIE5vdyB0aGF0IHdlIGhhdmUgTmV0d29ya1N0b3JhZ2VN
YW5hZ2VyLCB3aGljaCBtYW5hZ2VzIHN0b3JhZ2UgYnkgb3JpZ2luLiBXZSBjYW4gbWVyZ2UKKyAg
ICAgICAgU3RvcmFnZU1hbmFnZXIgd2l0aCBOZXR3b3JrU3RvcmFnZU1hbmFnZXIsIGJlY2F1c2Ug
bG9jYWxTdG9yYWdlIGFuZCBzZXNzaW9uU3RvcmFnZSBhcmUgbm90IHNoYXJlZCBiZXR3ZWVuIAor
ICAgICAgICBkaWZmZXJlbnQgb3JpZ2lucy4KKworICAgICAgICBUaGUgbmV3IHN0cnVjdHVyZSBp
czoKKyAgICAgICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIChtYW5hZ2Ugc3RvcmFnZSBmb3IgYSBz
ZXNzaW9uLCBvd25zIG9uZSBvciBtb3JlIE9yaWdpblN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICBP
cmlnaW5TdG9yYWdlTWFuYWdlciAobWFuYWdlIHN0b3JhZ2UgZm9yIGFuIG9yaWdpbiwgb3ducyBv
bmUgTG9jYWxTdG9yYWdlTWFuYWdlciBhbmQgb25lIFNlc3Npb25TdG9yYWdlTWFuYWdlcikKKyAg
ICAgICAgTG9jYWxTdG9yYWdlTWFuYWdlciAvIFNlc3Npb25TdG9yYWdlTWFuYWdlciAobWFuYWdl
IExvY2FsU3RvcmFnZSBhbmQgU2Vzc2lvblN0b3JhZ2UsIG93bnMgb25lIG9yIG1vcmUgCisgICAg
ICAgIFN0b3JhZ2VBcmVhQmFzZXMpCisgICAgICAgIE1lbW9yeVN0b3JhZ2VBcmVhIC8gU1FMaXRl
U3RvcmFnZUFyZWEgKGluaGVyaXRzIFN0b3JhZ2VBcmVhQmFzZXM7IG1hbmFnZSBvbmUgbG9jYWwg
b3Igc2Vzc2lvbiBzdG9yYWdlLCBsaWtlIAorICAgICAgICBXZWJraXQ6OlN0b3JhZ2VBcmVhKQor
CisgICAgICAgIFN0b3JhZ2VOYW1lc3BhY2UgbGF5ZXIgaXMgcmVtb3ZlZC4gRm9yIFNlc3Npb25T
dG9yYWdlLCBkaWZmZXJlbnQgU3RvcmFnZU5hbWVzcGFjZXMgbWVhbnMgZGlmZmVyZW50IHdlYiBw
YWdlcywgCisgICAgICAgIGFuZCBzYW1lIG9yaWdpbiBjYW4gaGF2ZSBkaWZmZXJlbnQgc2Vzc2lv
blN0b3JhZ2VzIG9uIGRpZmZlcmVudCBwYWdlcywgc28gd2Uga2VlcCBhIFN0b3JhZ2VOYW1lc3Bh
Y2UgPD0+CisgICAgICAgIFN0b3JhZ2VBcmVhIG1hcCBpbiBTZXNzaW9uU3RvcmFnZU1hbmFnZXIu
IEZvciBMb2NhbFN0b3JhZ2UsIGRpZmZlcm50IFN0b3JhZ2VOYW1lc3BhY2VzIG1lYW5zIGRpZmZl
cmVudCBwYWdlIAorICAgICAgICBncm91cHMuIE91ciBvcmlnaW5hbCBwbGFuIHdhcyB0aGUgc2Ft
ZSBvcmlnaW4gY2FuIGhhdmUgZGlmZmVyZW50IGxvY2FsU3RvcmFnZXMgaW4gZGlmZmVyZW50IHBh
Z2UgZ3JvdXBzLCBidXQgb3VyCisgICAgICAgIG9sZCBpbXBsZW1lbnRhdGlvbiBhY3R1YWxseSBt
YWRlIGFsbCBwYWdlIGdyb3VwcyBwb2ludCB0byB0aGUgc2FtZSBkYXRhYmFzZSBmaWxlLiBUbyBr
ZWVwIGV4aXN0aW5nIGJlaGF2aW9yIAorICAgICAgICAodGhhdCBhbGwgcGFnZSBncm91cHMgd2l0
aCBzYW1lIG9yaWdpbiBzaGFyZSB0aGUgc3RvcmFnZSksIHdlIG5vdyBrZWVwIG9uZSBTdG9yYWdl
QXJlYSBwZXIgTG9jYWxTdG9yYWdlTWFuYWdlci4KKworICAgICAgICBNb3N0bHkgcmVmYWN0b3Jp
bmcgYW5kIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
OjpOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpsb3dN
ZW1vcnlIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNyZWF0ZU5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6YWRkU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6Omhhc0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
OjpmZXRjaFdlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRl
bGV0ZVdlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0
ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
OjpkZWxldGVBbmRSZXN0cmljdFdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnByZXBhcmVUb1N1c3BlbmQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpjb25uZWN0aW9uVG9XZWJQcm9jZXNzQ2xvc2VkKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OmZpbGVOYW1lVG9PcmlnaW4pOgorICAgICAgICAoV2ViS2l0Ojpvcmln
aW5Ub0ZpbGVOYW1lKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6Z2V0
T3JpZ2luc09mTG9jYWxTdG9yYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6OmxvY2FsU3RvcmFnZUZpbGVQYXRoKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxT
dG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Okxv
Y2FsU3RvcmFnZU1hbmFnZXI6OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9y
YWdlTWFuYWdlcjo6aGFzRGF0YUluTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9y
YWdlTWFuYWdlcjo6Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFu
YWdlcjo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpoYW5k
bGVMb3dNZW1vcnlXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdl
cjo6c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFn
ZXI6OmNvbm5lY3Rpb25DbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5h
Z2VyOjplbnN1cmVTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1h
bmFnZXI6OmNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpMb2Nh
bFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKToKKyAg
ICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6ZGlzY29ubmVjdEZyb21TdG9yYWdl
QXJlYSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VNYW5h
Z2VyLmg6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3Rv
cmFnZUFyZWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6
Ok1lbW9yeVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6
OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpNZW1vcnlTdG9yYWdlQXJlYTo6Y2xlYXIpOgor
ICAgICAgICAoV2ViS2l0OjpNZW1vcnlTdG9yYWdlQXJlYTo6YWxsSXRlbXMpOgorICAgICAgICAo
V2ViS2l0OjpNZW1vcnlTdG9yYWdlQXJlYTo6c2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6Ok1l
bW9yeVN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3Rv
cmFnZUFyZWE6OmNsb25lIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L01lbW9yeVN0b3JhZ2VBcmVhLmg6IEFkZGVkLgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OnJlYWRPcmlnaW5Gcm9tRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OndyaXRl
T3JpZ2luVG9GaWxlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpvcmlnaW5EaXJlY3RvcnlQYXRo
KToKKyAgICAgICAgKFdlYktpdDo6b3JpZ2luRmlsZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnJlbW92ZU9yaWdpblN0b3JhZ2VNYW5h
Z2VySWZQb3NzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
ZGVsZXRlT3JpZ2luRGlyZWN0b3J5SWZQb3NzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtTdG9yYWdlTWFuYWdlcjo6Y2xlYXJTdG9yYWdlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Zm9yRWFjaE9yaWdpbkRpcmVjdG9yeSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Z2V0QWxsT3JpZ2lucyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZmV0Y2hEYXRhRnJvbURpc2spOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZURhdGFPbkRpc2sp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6Om1vdmVEYXRhKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzdXNwZW5kKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZXN1bWUpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmhhbmRsZUxvd01lbW9yeVdhcm5pbmcpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RUb0xvY2FsU3RvcmFn
ZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RU
b1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OmNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xvbmVTZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Z2V0
VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzZXRJdGVt
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVJdGVtKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbGVhcik6CisgICAgICAg
IChXZWJLaXQ6OnRvV2Vic2l0ZURhdGFUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6U3Rv
cmFnZUJ1Y2tldCk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9y
YWdlQnVja2V0Ojp0b1dlYnNpdGVEYXRhVHlwZSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0
b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojp0b1N0b3JhZ2VJZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmxvY2FsU3Rv
cmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3Rv
cmFnZUJ1Y2tldDo6ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktp
dDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OnNlc3Npb25TdG9yYWdlTWFu
YWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVj
a2V0OjpleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9y
aWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojppc0FjdGl2ZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojppc0VtcHR5KToKKyAg
ICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmZldGNo
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVj
a2V0OjpkZWxldGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6
OlN0b3JhZ2VCdWNrZXQ6Om1vdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFn
ZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmZldGNoRGF0YUluTWVtb3J5KToKKyAgICAgICAgKFdl
YktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmZldGNoRGF0YUZyb21E
aXNrKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNr
ZXQ6OmRlbGV0ZUxvY2FsU3RvcmFnZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9y
YWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKToKKyAg
ICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6Ok9yaWdpblN0b3JhZ2VNYW5hZ2Vy
KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmRlZmF1bHRCdWNrZXQp
OgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6bG9jYWxTdG9yYWdlTWFu
YWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ0xv
Y2FsU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6c2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFn
ZU1hbmFnZXI6OmV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktp
dDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpPcmln
aW5TdG9yYWdlTWFuYWdlcjo6ZmV0Y2hEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3Rv
cmFnZU1hbmFnZXI6OmRlbGV0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6bW92ZURhdGEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3Jp
Z2luU3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NR
TGl0ZVN0b3JhZ2VBcmVhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3Jh
Z2VBcmVhOjpzdGF0ZW1lbnRTdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVT
dG9yYWdlQXJlYTo6U1FMaXRlU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVT
dG9yYWdlQXJlYTo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6
flNRTGl0ZVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6
OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6Y2xlYXIpOgor
ICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6Y3JlYXRlVGFibGVJZk5lY2Vzc2Fy
eSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpwcmVwYXJlRGF0YWJhc2Up
OgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6c3RhcnRUcmFuc2FjdGlvbklm
TmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmNhY2hlZFN0
YXRlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRJdGVtKToK
KyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2Up
OgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6YWxsSXRlbXMpOgorICAgICAg
ICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6c2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6
OlNRTGl0ZVN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRl
U3RvcmFnZUFyZWE6OmNvbW1pdFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2Vi
S2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6aGFuZGxlTG93TWVtb3J5V2FybmluZyk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5oOiBBZGRlZC4KKyAg
ICAgICAgKGlzVHlwZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9u
U3RvcmFnZU1hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3Jh
Z2VNYW5hZ2VyOjpTZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpTZXNz
aW9uU3RvcmFnZU1hbmFnZXI6OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyOjpoYXNEYXRhSW5NZW1vcnkpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9u
U3RvcmFnZU1hbmFnZXI6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25TdG9y
YWdlTWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZCk6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25T
dG9yYWdlTWFuYWdlcjo6YWRkU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9u
U3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYSk6CisgICAgICAgIChX
ZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6ZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYSk6
CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y2xvbmVTdG9yYWdlQXJl
YSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFn
ZXIuaDogQWRkZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJl
YUJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlOjpTdG9y
YWdlQXJlYUJhc2UpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6OmFkZExpc3Rl
bmVyKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlOjpyZW1vdmVMaXN0ZW5lcik6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6aGFzTGlzdGVuZXJzIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlOjpub3RpZnlMaXN0ZW5lcnNBYm91dENs
ZWFyKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlOjpkaXNwYXRjaEV2ZW50cyBj
b25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2Uu
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6aWRlbnRpZmllciBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6b3JpZ2luIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlOjpxdW90YSBjb25zdCk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhUmVnaXN0cnk6OnJlZ2lzdGVyU3RvcmFnZUFy
ZWEpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYVJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyU3Rv
cmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpnZXRTdG9y
YWdlQXJlYSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYVJl
Z2lzdHJ5Lmg6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvZ2VuZXJhdGUtdW5pZmllZC1zb3Vy
Y2VzLnNoOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc1Byb3h5OjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAg
ICAgICogVW5pZmllZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJTdG9y
YWdlL1N0b3JhZ2VBcmVhTWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6
OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbSk6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpjbGVhcik6CisgICAgICAgIChXZWJL
aXQ6OlN0b3JhZ2VBcmVhTWFwOjplbnN1cmVNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
QXJlYU1hcDo6Y29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpkaXNj
b25uZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFj
ZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weSk6
CisKIDIwMjEtMTItMDkgIEogUGFzY29lICA8al9wYXNjb2VAYXBwbGUuY29tPgogCiAgICAgICAg
IFtXZWJBdXRobl0gUmVtb3ZlIHVzZXIgZ2VzdHVyZSByZXF1aXJlbWVudCBmb3IgdXNpbmcgcGxh
dGZvcm0gYXV0aGVudGljYXRvciBvbiB0aGUgd2ViCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKaW5kZXggNzZlNDVhZjM0ZWQwOTNmZDlmMjc2
ZGQ1ZDRiOTIyYTQxNjM0ZDlhZS4uZTdjZGNiZjVhYmQyMDY5Njg1ZTFmYWQxZDc0NDE5Y2ExMDgx
YTliYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVT
eXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lz
dGVtLmNwcApAQCAtNDMsNiArNDMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRp
YyBjb25zdGV4cHIgc3RkOjphcnJheTxjb25zdCBjaGFyICosIDM+IGRhdGFiYXNlRmlsZVN1ZmZp
eGVzIHsgIiIsICItc2htIiwgIi13YWwiIH07CisKIFNRTGl0ZUZpbGVTeXN0ZW06OlNRTGl0ZUZp
bGVTeXN0ZW0oKQogewogfQpAQCAtNzcsMTggKzc5LDIyIEBAIGJvb2wgU1FMaXRlRmlsZVN5c3Rl
bTo6ZGVsZXRlRW1wdHlEYXRhYmFzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAg
cmV0dXJuIEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KHBhdGgpOwogfQogCi1ib29s
IFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVO
YW1lKQorYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3Ry
aW5nJiBmaWxlUGF0aCkKIHsKLSAgICBhdXRvIHdhbEZpbGVOYW1lID0gbWFrZVN0cmluZyhmaWxl
TmFtZSwgIi13YWwiX3MpOwotICAgIGF1dG8gc2htRmlsZU5hbWUgPSBtYWtlU3RyaW5nKGZpbGVO
YW1lLCAiLXNobSJfcyk7CisgICAgYm9vbCBmaWxlRXhpc3RzID0gZmFsc2U7CisgICAgZm9yIChj
b25zdCBhdXRvKiBzdWZmaXggOiBkYXRhYmFzZUZpbGVTdWZmaXhlcykgeworICAgICAgICBTdHJp
bmcgcGF0aCA9IGZpbGVQYXRoICsgc3VmZml4OworICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVG
aWxlKHBhdGgpOworICAgICAgICBmaWxlRXhpc3RzIHw9IEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMo
cGF0aCk7CisgICAgfQogCi0gICAgLy8gVHJ5IHRvIGRlbGV0ZSBhbGwgdGhyZWUgZmlsZXMgd2hl
dGhlciBvciBub3QgdGhleSBhcmUgdGhlcmUuCi0gICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShm
aWxlTmFtZSk7Ci0gICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh3YWxGaWxlTmFtZSk7Ci0gICAg
RmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShzaG1GaWxlTmFtZSk7CisgICAgcmV0dXJuICFmaWxlRXhp
c3RzOworfQogCi0gICAgLy8gSWYgYW55IG9mIHRoZSB3YWwgb3Igc2htIGZpbGVzIHJlbWFpbiBh
ZnRlciB0aGUgZGVsZXRlIGF0dGVtcHQsIHRoZSBvdmVyYWxsIGRlbGV0ZSBvcGVyYXRpb24gZmFp
bGVkLgotICAgIHJldHVybiAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxlTmFtZSkgJiYgIUZp
bGVTeXN0ZW06OmZpbGVFeGlzdHMod2FsRmlsZU5hbWUpICYmICFGaWxlU3lzdGVtOjpmaWxlRXhp
c3RzKHNobUZpbGVOYW1lKTsKK3ZvaWQgU1FMaXRlRmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmls
ZShjb25zdCBTdHJpbmcmIG9sZEZpbGVQYXRoLCBjb25zdCBTdHJpbmcmIG5ld0ZpbGVQYXRoKQor
eworICAgIGZvciAoY29uc3QgYXV0byogc3VmZml4IDogZGF0YWJhc2VGaWxlU3VmZml4ZXMpCisg
ICAgICAgIEZpbGVTeXN0ZW06Om1vdmVGaWxlKG1ha2VTdHJpbmcob2xkRmlsZVBhdGgsIHN1ZmZp
eCksIG1ha2VTdHJpbmcobmV3RmlsZVBhdGgsIHN1ZmZpeCkpOwogfQogCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKQEAgLTk4LDE4ICsxMDQsMTMgQEAgYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjp0
cnVuY2F0ZURhdGFiYXNlRmlsZShzcWxpdGUzKiBkYXRhYmFzZSkKIH0KICNlbmRpZgogICAgIAot
dWludDY0X3QgU1FMaXRlRmlsZVN5c3RlbTo6ZGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lKQoteyAgICAgICAgCit1aW50NjRfdCBTUUxpdGVGaWxlU3lzdGVtOjpkYXRhYmFz
ZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCit7CiAgICAgdWludDY0X3QgdG90YWxT
aXplID0gMDsKLQotICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmlsZVN5c3RlbTo6ZmlsZVNpemUo
ZmlsZU5hbWUpKQotICAgICAgICB0b3RhbFNpemUgKz0gKmZpbGVTaXplOwotCi0gICAgaWYgKGF1
dG8gZmlsZVNpemUgPSBGaWxlU3lzdGVtOjpmaWxlU2l6ZShtYWtlU3RyaW5nKGZpbGVOYW1lLCAi
LXdhbCJfcykpKQotICAgICAgICB0b3RhbFNpemUgKz0gKmZpbGVTaXplOwotCi0gICAgaWYgKGF1
dG8gZmlsZVNpemUgPSBGaWxlU3lzdGVtOjpmaWxlU2l6ZShtYWtlU3RyaW5nKGZpbGVOYW1lLCAi
LXNobSJfcykpKQotICAgICAgICB0b3RhbFNpemUgKz0gKmZpbGVTaXplOworICAgIGZvciAoY29u
c3QgYXV0byogc3VmZml4IDogZGF0YWJhc2VGaWxlU3VmZml4ZXMpIHsKKyAgICAgICAgaWYgKGF1
dG8gZmlsZVNpemUgPSBGaWxlU3lzdGVtOjpmaWxlU2l6ZShmaWxlUGF0aCArIHN1ZmZpeCkpCisg
ICAgICAgICAgICB0b3RhbFNpemUgKz0gKmZpbGVTaXplOworICAgIH0KIAogICAgIHJldHVybiB0
b3RhbFNpemU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVT
eXN0ZW0uaAppbmRleCBjNjhkOWM3ZTdhZjk4OTc2YTFlZDNkY2I2ZjJhY2ZlNGI2Y2Y1YzJmLi45
OGU3ZWEwZDA3YTI1NDExZmE0ZjYyYWE3MjE2NTkzZjYzZTM5YzVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKQEAgLTc4LDkgKzc4LDExIEBA
IHB1YmxpYzoKICAgICAvLyBEZWxldGVzIGEgZGF0YWJhc2UgZmlsZS4KICAgICAvLwogICAgIC8v
IGZpbGVOYW1lIC0gVGhlIGZpbGUgbmFtZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9v
bCBkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIGJvb2wgZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmls
ZVBhdGgpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBjb21wdXRlSGFzaEZv
ckZpbGVOYW1lKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworICAgIC8vIE1vdmVzIGEgZGF0YWJh
c2UgZmlsZSB0byBhIG5ldyBwbGFjZS4KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBt
b3ZlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgb2xkRmlsZVBhdGgsIGNvbnN0IFN0cmluZyYg
bmV3RmlsZVBhdGgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUhh
c2hGb3JGaWxlTmFtZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKTsKIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgLy8gVHJ1bmNhdGVzIGEgZGF0YWJhc2UgZmlsZS4gVXNlZCB3aGVuIE1v
YmlsZVNhZmFyaVNldHRpbmdzIGRlbGV0ZXMgYSBkYXRhYmFzZSBmaWxlLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA0M2Y1YmJlN2Ix
YWJlMDlkZDc3NGM5MmI1YzBlNGY0MmRjZTFkZGI3Li5kMmFlNzExODRlMmU3MjE1YWNkZjc5ZDU2
ZWE4ZjA5M2E5ZjdmZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmNwcApAQCAtMTU3LDcgKzE1Nyw2IEBAIHN0YXRpYyBpbmxpbmUgTWVzc2Fn
ZVBvcnRDaGFubmVsUmVnaXN0cnkgY3JlYXRlTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnkoTmV0
d29yCiAKIE5ldHdvcmtQcm9jZXNzOjpOZXR3b3JrUHJvY2VzcyhBdXhpbGlhcnlQcm9jZXNzSW5p
dGlhbGl6YXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKICAgICA6IG1fZG93bmxvYWRNYW5h
Z2VyKCp0aGlzKQotICAgICwgbV9zdG9yYWdlTWFuYWdlclNldChTdG9yYWdlTWFuYWdlclNldDo6
Y3JlYXRlKCkpCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICAsIG1fbmV0d29y
a0NvbnRlbnRSdWxlTGlzdE1hbmFnZXIoKnRoaXMpCiAjZW5kaWYKQEAgLTMxMywxMiArMzEyLDEz
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6Omxvd01lbW9yeUhhbmRsZXIoQ3JpdGljYWwgY3JpdGlj
YWwpCiAgICAgICAgIG5ldHdvcmtTZXNzaW9uLmNsZWFyUHJlZmV0Y2hDYWNoZSgpOwogICAgIH0p
OwogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+aGFuZGxlTG93TWVtb3J5V2FybmluZygpOwot
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGZvciAoYXV0byYgc3dTZXJ2ZXIgOiBt
X3N3U2VydmVycy52YWx1ZXMoKSkKICAgICAgICAgc3dTZXJ2ZXItPmhhbmRsZUxvd01lbW9yeVdh
cm5pbmcoKTsKICNlbmRpZgorCisgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zdG9yYWdlTWFu
YWdlcnMudmFsdWVzKCkpCisgICAgICAgIG1hbmFnZXItPmhhbmRsZUxvd01lbW9yeVdhcm5pbmco
KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKQEAgLTQwMSw3ICs0
MDEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyhQcm9jZXNzSWRlbnRpZmllciBpZGVudAogCiAgICAgY29ubmVjdGlvbi5zZXRPbkxp
bmVTdGF0ZShOZXR3b3JrU3RhdGVOb3RpZmllcjo6c2luZ2xldG9uKCkub25MaW5lKCkpOwogCi0g
ICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkQ29ubmVjdGlvbihjb25uZWN0aW9uLmNvbm5lY3Rp
b24oKSk7CiAgICAgd2ViSURCU2VydmVyKHNlc3Npb25JRCkuYWRkQ29ubmVjdGlvbihjb25uZWN0
aW9uLmNvbm5lY3Rpb24oKSwgaWRlbnRpZmllcik7CiAgICAgaWYgKGF1dG8gbWFuYWdlciA9IG1f
c3RvcmFnZU1hbmFnZXJzLmdldChzZXNzaW9uSUQpKQogICAgICAgICBtYW5hZ2VyLT5zdGFydFJl
Y2VpdmluZ01lc3NhZ2VGcm9tQ29ubmVjdGlvbihjb25uZWN0aW9uLmNvbm5lY3Rpb24oKSk7CkBA
IC00MjAsNyArNDE5LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0ZURhdGFTdG9y
ZShXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMKIHsKICAgICBhdXRvIHNl
c3Npb25JRCA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRDsK
IAotICAgIGFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMu
Z2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3Rv
cnlIYW5kbGUpOworICAgIGFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihzZXNzaW9uSUQsIHBh
cmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3Jh
Z2VEaXJlY3RvcnlIYW5kbGUsIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgYWRkU2Vz
c2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLnBlck9yaWdpblN0
b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBw
YXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCiAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lv
bihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CkBAIC00MjksOCAr
NDI4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMKICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vz
c2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlv
bkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5h
ZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCiAgICAgUmVtb3RlTmV0
d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpKTsKIH0KIApAQCAtNDUzLDExICs0NTAsMTYgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQogICAgIG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzLnJlbW92ZShzZXNz
aW9uSUQpOwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRTdG9yYWdlTWFuYWdlckZvclNl
c3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGdlbmVyYWxTdG9y
YWdlUGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBnZW5lcmFsU3RvcmFnZVBhdGhIYW5k
bGUpCit2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGdlbmVyYWxTdG9yYWdlUGF0aCwg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBnZW5lcmFsU3RvcmFnZVBhdGhIYW5kbGUsIGNvbnN0
IFN0cmluZyYgbG9jYWxTdG9yYWdlUGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBsb2Nh
bFN0b3JhZ2VQYXRoSGFuZGxlKQogewogICAgIG1fc3RvcmFnZU1hbmFnZXJzLmVuc3VyZShzZXNz
aW9uSUQsIFsmXSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRs
eShnZW5lcmFsU3RvcmFnZVBhdGhIYW5kbGUpOwotICAgICAgICByZXR1cm4gTmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpjcmVhdGUoc2Vzc2lvbklELCBnZW5lcmFsU3RvcmFnZVBhdGgpOworICAgICAg
ICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gb3B0aW9uYWxMb2NhbFN0b3JhZ2VQYXRoOworICAgICAg
ICBpZiAoIWxvY2FsU3RvcmFnZVBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBvcHRpb25h
bExvY2FsU3RvcmFnZVBhdGggPSBsb2NhbFN0b3JhZ2VQYXRoOworICAgICAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGxvY2FsU3RvcmFnZVBhdGhIYW5kbGUpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShz
ZXNzaW9uSUQsIGdlbmVyYWxTdG9yYWdlUGF0aCwgb3B0aW9uYWxMb2NhbFN0b3JhZ2VQYXRoKTsK
ICAgICB9KTsKIH0KIApAQCAtNTc0LDcgKzU3Niw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRl
c3Ryb3lTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICBtX3NlcnZpY2VXb3Jr
ZXJJbmZvLnJlbW92ZShzZXNzaW9uSUQpOwogI2VuZGlmCiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2Vy
U2V0LT5yZW1vdmUoc2Vzc2lvbklEKTsKICAgICBpZiAoYXV0byBzZXJ2ZXIgPSBtX3dlYklEQlNl
cnZlcnMudGFrZShzZXNzaW9uSUQpKQogICAgICAgICBzZXJ2ZXItPmNsb3NlKCk7CiAgICAgcmVt
b3ZlU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKHNlc3Npb25JRCk7CkBAIC0xMDY0LDE1ICsxMDY1
LDE2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyVXNlckludGVyYWN0aW9uKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6Omhh
c0xvY2FsU3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBkb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgaWYgKG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Np
b25JRCkpIHsKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+Z2V0TG9jYWxTdG9yYWdlT3Jp
Z2lucyhzZXNzaW9uSUQsIFtkb21haW4sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKGF1dG8mJiBvcmlnaW5zKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdURjo6YW55T2Yob3JpZ2lucywgWyZkb21haW5dKGF1dG8mIG9yaWdp
bikgewotICAgICAgICAgICAgICAgIHJldHVybiBkb21haW4ubWF0Y2hlcyhvcmlnaW4pOwotICAg
ICAgICAgICAgfSkpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1h
bmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9zdG9yYWdlTWFu
YWdlcnMuZW5kKCkpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisK
KyAgICBhdXRvIHR5cGVzID0gT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4geyBXZWJzaXRlRGF0
YVR5cGU6OkxvY2FsU3RvcmFnZSB9OworICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZmV0Y2hEYXRhKHR5
cGVzLCBbZG9tYWluLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShhdXRvIGVudHJpZXMpIG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEY6OmFueU9mKGVudHJpZXMsIFsmZG9tYWluXShhdXRvJiBlbnRyeSkgeworICAgICAgICAgICAg
cmV0dXJuIGRvbWFpbi5tYXRjaGVzKGVudHJ5Lm9yaWdpbik7CisgICAgICAgIH0pKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxl
bnRSZXNvdXJjZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTZWNvbmRzIHNlY29uZHMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE0OTAsMjAg
KzE0OTIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdAogICAgICAgICB9KTsKICAgICB9CiAK
LSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Np
b25TdG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKSB7
Ci0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmdldFNlc3Npb25TdG9yYWdlT3JpZ2lucyhz
ZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mJiBvcmlnaW5zKSB7Ci0gICAgICAg
ICAgICB3aGlsZSAoIW9yaWdpbnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50
cnkgeyBvcmlnaW5zLnRha2VBbnkoKSwgV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSwg
MCB9KTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJT
ZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+
Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1
dG8mJiBvcmlnaW5zKSB7Ci0gICAgICAgICAgICB3aGlsZSAoIW9yaWdpbnMuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVz
LmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW5zLnRha2VBbnkoKSwgV2Vic2l0ZURh
dGFUeXBlOjpMb2NhbFN0b3JhZ2UsIDAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0KLQogI2lmIFBM
QVRGT1JNKENPQ09BKSB8fCBVU0UoU09VUCkKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250
YWlucyhXZWJzaXRlRGF0YVR5cGU6OkhTVFNDYWNoZSkpCiAgICAgICAgIGNhbGxiYWNrQWdncmVn
YXRvci0+bV93ZWJzaXRlRGF0YS5ob3N0TmFtZXNXaXRoSFNUU0NhY2hlID0gaG9zdE5hbWVzV2l0
aEhTVFNDYWNoZShzZXNzaW9uSUQpOwpAQCAtMTU1NiwxMCArMTU0NCwxMiBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0
aW9uU2V0PFdlYnNpdAogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBt
X3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1h
bmFnZXJzLmVuZCgpKSB7Ci0gICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZmV0Y2hEYXRhKHdlYnNp
dGVEYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8gZW50cmllcykgbXV0YWJsZSB7
Ci0gICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5h
cHBlbmRWZWN0b3IoV1RGTW92ZShlbnRyaWVzKSk7Ci0gICAgICAgIH0pOworICAgIGlmIChOZXR3
b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5cGVzKHdlYnNpdGVEYXRhVHlwZXMpKSB7Cisg
ICAgICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9u
SUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkgeworICAgICAgICAgICAg
aXRlcmF0b3ItPnZhbHVlLT5mZXRjaERhdGEod2Vic2l0ZURhdGFUeXBlcywgW2NhbGxiYWNrQWdn
cmVnYXRvcl0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmRWZWN0b3IoV1RGTW92ZShl
bnRyaWVzKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMTU4
NiwxMiArMTU3Niw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpCiAgICAgaWYgKHdlYnNpdGVE
YXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpET01DYWNoZSkpCiAgICAgICAgIENh
Y2hlU3RvcmFnZTo6RW5naW5lOjpjbGVhckFsbENhY2hlcygqdGhpcywgc2Vzc2lvbklELCBbY2xl
YXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlu
cyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0
LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5kZWxl
dGVTZXNzaW9uU3RvcmFnZShzZXNzaW9uSUQsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKLQot
ICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxT
dG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAg
ICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5kZWxldGVMb2NhbFN0b3JhZ2VNb2RpZmllZFNpbmNl
KHNlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwotCiAg
ICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVk
REJEYXRhYmFzZXMpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgd2ViSURC
U2VydmVyKHNlc3Npb25JRCkuY2xvc2VBbmREZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKG1v
ZGlmaWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKIApAQCAtMTYzNiw4ICsxNjIw
LDEwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpCiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAo
YXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0
b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+
ZGVsZXRlRGF0YU1vZGlmaWVkU2luY2Uod2Vic2l0ZURhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwg
W2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOworICAgIGlmIChOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmNhbkhhbmRsZVR5cGVzKHdlYnNpdGVEYXRhVHlwZXMpKSB7CisgICAgICAgIGlmIChhdXRvIGl0
ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBt
X3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKKyAgICAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZGVs
ZXRlRGF0YU1vZGlmaWVkU2luY2Uod2Vic2l0ZURhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2Ns
ZWFyVGFza3NIYW5kbGVyXSB7IH0pOworICAgIH0KIH0KIAogc3RhdGljIHZvaWQgY2xlYXJEaXNr
Q2FjaGVFbnRyaWVzKE5ldHdvcmtDYWNoZTo6Q2FjaGUqIGNhY2hlLCBjb25zdCBWZWN0b3I8U2Vj
dXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTcwMiwxMiArMTY4OCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IE9wdGlvCiAgICAgICAgICAgICBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6Y2xlYXJDYWNoZXNGb3JP
cmlnaW4oKnRoaXMsIHNlc3Npb25JRCwgU2VjdXJpdHlPcmlnaW5EYXRhIHsgb3JpZ2luRGF0YSB9
LCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAgICAgfQogCi0gICAgaWYgKHdlYnNpdGVEYXRh
VHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkgJiYgbV9zdG9y
YWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkKLSAgICAgICAgbV9zdG9yYWdlTWFu
YWdlclNldC0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2VGb3JPcmlnaW5zKHNlc3Npb25JRCwgb3JpZ2lu
RGF0YXMsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKLQotICAgIGlmICh3ZWJzaXRlRGF0YVR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSAmJiBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAgICBtX3N0b3JhZ2VNYW5hZ2Vy
U2V0LT5kZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW5zKHNlc3Npb25JRCwgb3JpZ2luRGF0YXMs
IFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKLQogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNv
bnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzKSAmJiAhc2Vzc2lvbklE
LmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHdlYklEQlNlcnZlcihzZXNzaW9uSUQpLmNsb3NlQW5k
RGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVy
XSB7IH0pOwogCkBAIC0xNzQ1LDggKzE3MjUsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVs
ZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8K
ICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdl
cnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkK
LSAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhKHdlYnNpdGVEYXRhVHlwZXMsIG9y
aWdpbkRhdGFzLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CisgICAgaWYgKE5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMod2Vic2l0ZURhdGFUeXBlcykpIHsKKyAgICAgICAg
aWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0
ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKQorICAgICAgICAgICAgaXRlcmF0b3It
PnZhbHVlLT5kZWxldGVEYXRhKHdlYnNpdGVEYXRhVHlwZXMsIG9yaWdpbkRhdGFzLCBbY2xlYXJU
YXNrc0hhbmRsZXJdIHsgfSk7CisgICAgfQogCiAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9u
ID0gdGhpcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkgewogICAgICAgICBIYXNoU2V0PFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBkb21haW5zVG9EZWxldGVOZXR3b3JrRGF0YUZvcjsK
QEAgLTE5MDMsMjggKzE4ODUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVBbmRSZXN0
cmljdFdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2VzcwogICAgICAgICB9
KTsKICAgICB9CiAKLSAgICBpZiAobV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lv
bklEKSkgewotICAgICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OlNlc3Npb25TdG9yYWdlKSkgewotICAgICAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNl
dC0+Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW3Byb3RlY3RlZFRoaXMgPSBS
ZWYgeyAqdGhpcyB9LCB0aGlzLCBzZXNzaW9uSUQsIGNhbGxiYWNrQWdncmVnYXRvciwgZG9tYWlu
c1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3JdKGF1dG8mJiBvcmlnaW5zKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9u
SUQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBhdXRv
IG9yaWdpbnNUb0RlbGV0ZSA9IGZpbHRlckZvclJlZ2lzdHJhYmxlRG9tYWlucyhvcmlnaW5zLCBk
b21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvciwgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5tX2RvbWFpbnMpOwotICAgICAgICAgICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRl
bGV0ZVNlc3Npb25TdG9yYWdlRm9yT3JpZ2lucyhzZXNzaW9uSUQsIG9yaWdpbnNUb0RlbGV0ZSwg
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpM
b2NhbFN0b3JhZ2UpKSB7Ci0gICAgICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5nZXRMb2Nh
bFN0b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW3Byb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9
LCB0aGlzLCBzZXNzaW9uSUQsIGNhbGxiYWNrQWdncmVnYXRvciwgZG9tYWluc1RvRGVsZXRlQWxs
Tm9uQ29va2llV2Vic2l0ZURhdGFGb3JdKGF1dG8mJiBvcmlnaW5zKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBhdXRvIG9yaWdpbnNUb0Rl
bGV0ZSA9IGZpbHRlckZvclJlZ2lzdHJhYmxlRG9tYWlucyhvcmlnaW5zLCBkb21haW5zVG9EZWxl
dGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvciwgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX2RvbWFp
bnMpOwotICAgICAgICAgICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRlbGV0ZUxvY2FsU3Rv
cmFnZUZvck9yaWdpbnMoc2Vzc2lvbklELCBvcmlnaW5zVG9EZWxldGUsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3JdIHsgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIGF1
dG8gcGF0aCA9IG1faWRiRGF0YWJhc2VQYXRocy5nZXQoc2Vzc2lvbklEKTsKICAgICBpZiAoIXBh
dGguaXNFbXB0eSgpICYmIHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpJbmRleGVkREJEYXRhYmFzZXMpKSB7CiAgICAgICAgIHdlYklEQlNlcnZlcihzZXNzaW9uSUQp
LmdldE9yaWdpbnMoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBzZXNzaW9u
SUQsIGNhbGxiYWNrQWdncmVnYXRvciwgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0
ZURhdGFGb3JdKGF1dG8mJiBvcmlnaW5zKSB7CkBAIC0xOTcxLDExICsxOTMxLDEzIEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFuZFJlc3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJs
ZURvbWFpbnMoUEFMOjpTZXNzCiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIGlmIChhdXRvIGl0
ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBt
X3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkgewotICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRlbGV0
ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMod2Vic2l0ZURhdGFUeXBlcywgZG9tYWluc1RvRGVs
ZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8g
ZGVsZXRlZERvbWFpbnMpIG11dGFibGUgewotICAgICAgICAgICAgZm9yIChhdXRvIGRvbWFpbiA6
IGRlbGV0ZWREb21haW5zKQotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV9k
b21haW5zLmFkZChXVEZNb3ZlKGRvbWFpbikpOwotICAgICAgICB9KTsKKyAgICBpZiAoTmV0d29y
a1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJzaXRlRGF0YVR5cGVzKSkgeworICAg
ICAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklE
KTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpIHsKKyAgICAgICAgICAgIGl0
ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyh3ZWJzaXRlRGF0
YVR5cGVzLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvciwgW2NhbGxi
YWNrQWdncmVnYXRvcl0oYXV0byBkZWxldGVkRG9tYWlucykgbXV0YWJsZSB7CisgICAgICAgICAg
ICAgICAgZm9yIChhdXRvIGRvbWFpbiA6IGRlbGV0ZWREb21haW5zKQorICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fZG9tYWlucy5hZGQoV1RGTW92ZShkb21haW4pKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9CiAgICAgfQogCiAgICAgYXV0byBkYXRhVHlwZXNG
b3JVSVByb2Nlc3MgPSBXZWJzaXRlRGF0YTo6ZmlsdGVyKHdlYnNpdGVEYXRhVHlwZXMsIFdlYnNp
dGVEYXRhUHJvY2Vzc1R5cGU6OlVJKTsKQEAgLTIzMDYsNyArMjI2OCw4IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnByZXBhcmVUb1N1c3BlbmQoYm9vbCBpc1N1c3BlbnNpb25JbW1pbmVudCwgQ29t
cGxldGlvbkhhbmRsCiAgICAgfQogI2VuZGlmCiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5z
dXNwZW5kKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgZm9yIChhdXRvJiBtYW5hZ2Vy
IDogbV9zdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpCisgICAgICAgIG1hbmFnZXItPnN1c3BlbmQo
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YXBw
bGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQpAQCAtMjM0NSw3ICsyMzA4LDggQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6cmVzdW1lKCkKICAgICBtX3Nob3VsZFN1c3BlbmRJREJTZXJ2ZXJzID0g
ZmFsc2U7CiAjZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPnJlc3VtZSgpOworICAg
IGZvciAoYXV0byYgbWFuYWdlciA6IG1fc3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKQorICAgICAg
ICBtYW5hZ2VyLT5yZXN1bWUoKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cHJlZmV0Y2hE
TlMoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKQEAgLTI0NDEsOCArMjQwNSw5IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoUEFM
OjpTZXNzaW9uSUQgc2VzCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnN5bmNMb2NhbFN0b3JhZ2Uo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1f
c3RvcmFnZU1hbmFnZXJTZXQtPndhaXRVbnRpbFN5bmNpbmdMb2NhbFN0b3JhZ2VGaW5pc2hlZCgp
OwotICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgYXV0byBhZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGZv
ciAoYXV0byYgbWFuYWdlciA6IG1fc3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKQorICAgICAgICBt
YW5hZ2VyLT5zeW5jTG9jYWxTdG9yYWdlKFthZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpyZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjQ3MiwxMCArMjQz
Nyw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVCiAgICAgaWYgKG9sZE9yaWdpbi5pc0VtcHR5
KCkgfHwgbmV3T3JpZ2luLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGRh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKLSAgICAg
ICAgaWYgKG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAg
ICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZW5hbWVPcmlnaW4oc2Vzc2lvbklELCBvbGROYW1l
LCBuZXdOYW1lLCBbYWdncmVnYXRvcl0geyB9KTsKLSAgICB9CisgICAgaWYgKGF1dG8gaXRlcmF0
b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3Rv
cmFnZU1hbmFnZXJzLmVuZCgpKQorICAgICAgICBpdGVyYXRvci0+dmFsdWUtPm1vdmVEYXRhKG9s
ZE9yaWdpbiwgbmV3T3JpZ2luLCBbYWdncmVnYXRvcl0geyB9KTsKIAogICAgIGlmIChkYXRhVHlw
ZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpKSB7CiAgICAg
ICAgIGF1dG8gcGF0aCA9IG1faWRiRGF0YWJhc2VQYXRocy5nZXQoc2Vzc2lvbklEKTsKQEAgLTI3
NjIsMjEgKzI3MjUsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVLZXB0QWxpdmVMb2Fk
KE5ldHdvcmtSZXNvdXJjZUxvYWRlciYgbG9hZGVyKQogICAgICAgICBzZXNzaW9uLT5yZW1vdmVL
ZXB0QWxpdmVMb2FkKGxvYWRlcik7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmdldExvY2Fs
U3RvcmFnZU9yaWdpbkRldGFpbHMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRl
dGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICghbV9zdG9yYWdlTWFu
YWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewotICAgICAgICBMT0dfRVJST1IoIkNhbm5v
dCBnZXQgbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbiBmb3IgYW4gdW5rbm93biBzZXNzaW9uIik7
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxz
KHNlc3Npb25JRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpjb25uZWN0aW9uVG9XZWJQcm9jZXNzQ2xvc2VkKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIG1fc3RvcmFnZU1h
bmFnZXJTZXQtPnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7Ci0KICAgICBpZiAoYXV0byog
c2VydmVyID0gbV93ZWJJREJTZXJ2ZXJzLmdldChzZXNzaW9uSUQpKQogICAgICAgICBzZXJ2ZXIt
PnJlbW92ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCA5YmM1N2VlMzdlYjYwOWMzOTdlZDdlM2Qy
MmY1NWUwNjRkMDJlMDE3Li41NjFmNzcxY2QzNzkxNjBiOTRkZmMyMWZhZDFlNjQ1NmZmYmQ1M2U2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBA
IC0xMDcsNyArMTA3LDYgQEAgY2xhc3MgTmV0d29ya1Byb3hpbWl0eU1hbmFnZXI7CiBjbGFzcyBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBOZXR3b3JrU3RvcmFnZU1hbmFnZXI7CiBjbGFz
cyBQcm9jZXNzQXNzZXJ0aW9uOwotY2xhc3MgU3RvcmFnZU1hbmFnZXJTZXQ7CiBjbGFzcyBXZWJQ
YWdlTmV0d29ya1BhcmFtZXRlcnM7CiBjbGFzcyBXZWJTV1NlcnZlckNvbm5lY3Rpb247CiBjbGFz
cyBXZWJTV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb247CkBAIC0yOTUsNyArMjk0LDYgQEAgcHVi
bGljOgogICAgIGJvb2wgc2Vzc2lvbklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihQQUw6OlNlc3Np
b25JRCkgY29uc3Q7CiAKICAgICB2b2lkIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NDbG9zZWQoSVBD
OjpDb25uZWN0aW9uJiwgUEFMOjpTZXNzaW9uSUQpOwotICAgIHZvaWQgZ2V0TG9jYWxTdG9yYWdl
T3JpZ2luRGV0YWlscyhQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJik7CiAK
ICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIE5ldHdvcmtDb250ZW50UnVsZUxp
c3RNYW5hZ2VyJiBuZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlcigpIHsgcmV0dXJuIG1fbmV0
d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXI7IH0KQEAgLTU1Miw3ICs1NTAsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQs
IHVpbnQ2NF90IGRlZmF1bHRRdW90YSwgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YSwg
Y29uc3QgU3RyaW5nJiBjYWNoZVJvb3RQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsK
ICAgICB2b2lkIHJlbW92ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklE
KTsKIAotICAgIHZvaWQgYWRkU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKFBBTDo6U2Vzc2lvbklE
LCBjb25zdCBTdHJpbmcmIHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpOworICAgIHZv
aWQgYWRkU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJp
bmcmIHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGNvbnN0IFN0cmluZyYgbG9jYWxT
dG9yYWdlUGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgdm9pZCByZW1vdmVT
dG9yYWdlTWFuYWdlckZvclNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwogCiAgICAgLy8gQ29ubmVj
dGlvbnMgdG8gV2ViUHJvY2Vzc2VzLgpAQCAtNTc1LDggKzU3Myw2IEBAIHByaXZhdGU6CiAgICAg
SGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTZXNzaW9uPj4g
bV9uZXR3b3JrU2Vzc2lvbnM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4+IG1fbmV0d29ya1N0b3JhZ2VT
ZXNzaW9uczsKIAotICAgIFJlZjxTdG9yYWdlTWFuYWdlclNldD4gbV9zdG9yYWdlTWFuYWdlclNl
dDsKLQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5tZXNzYWdlcy5pbgppbmRleCA4ZDM0ZTcxMzk2NmM3ZTkwYWI0MzViMWJmZGQzZTNkM2I2
YzIwODNjLi4yOWQzZDk3ZTkwMDExYmUwNTJlOWJlMzM5NzhhMDUyY2NlOWY2NDU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVz
c2FnZXMuaW4KQEAgLTE3Myw3ICsxNzMsNiBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBM
ZWdhY3lSZWNlaXZlciB7CiAgICAgTWFya1ByaXZhdGVDbGlja01lYXN1cmVtZW50c0FzRXhwaXJl
ZEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiAoKSBBc3luYwogICAgIFNl
dFBDTUZyYXVkUHJldmVudGlvblZhbHVlc0ZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBTdHJpbmcgc2VjcmV0VG9rZW4sIFN0cmluZyB1bmxpbmthYmxlVG9rZW4sIFN0cmluZyBz
aWduYXR1cmUsIFN0cmluZyBrZXlJRCkgLT4gKCkgQXN5bmMKICAgICBTZXRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudEFwcEJ1bmRsZUlERm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IFN0cmluZyBhcHBCdW5kbGVJREZvclRlc3RpbmcpIC0+ICgpIEFzeW5jCi0gICAgR2V0TG9jYWxT
dG9yYWdlT3JpZ2luRGV0YWlscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChWZWN0b3I8
V2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+IGRldGFp
bHMpIEFzeW5jCiAKICAgICBTZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZyhT
ZWNvbmRzIHNlY29uZHMpIC0+ICgpIFN5bmNocm9ub3VzCiAgICAgUmVzZXRTZXJ2aWNlV29ya2Vy
RmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpIC0+ICgpIFN5bmNocm9ub3VzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFu
YWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDFkZjE5MGJhODk1NDMzNzgwZGM2OWI3Y2Y4N2I1YTM5OGEz
N2ZiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VNYW5hZ2VyLmgi
CisKKyNpbmNsdWRlICJNZW1vcnlTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0b3Jh
Z2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFSZWdpc3RyeS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBT
dWdnZXN0ZWQgYnkgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYnN0b3JhZ2UvI2Rpc2stc3BhY2UK
K2NvbnN0ZXhwciB1bnNpZ25lZCBsb2NhbFN0b3JhZ2VRdW90YUluQnl0ZXMgPSA1ICogTUI7Citj
b25zdGV4cHIgYXV0byBmaWxlU3VmZml4ID0gIi5sb2NhbHN0b3JhZ2UiX3M7CisKK3N0YXRpYyBz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gZmlsZU5hbWVUb09yaWdp
bihjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQoreworICAgIGlmICghZmlsZU5hbWUuZW5kc1dpdGgo
ZmlsZVN1ZmZpeCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBhdXRvIHN1
ZmZpeExlbmd0aCA9IHN0cmxlbihmaWxlU3VmZml4KTsKKyAgICBhdXRvIGZpbGVOYW1lTGVuZ3Ro
ID0gZmlsZU5hbWUubGVuZ3RoKCk7CisgICAgaWYgKGZpbGVOYW1lTGVuZ3RoIDw9IHN1ZmZpeExl
bmd0aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gb3JpZ2luSWRl
bnRpZmllciA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZUxlbmd0aCAtIHN1ZmZpeExl
bmd0aCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbURhdGFi
YXNlSWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVyKTsKK30KKworc3RhdGljIFN0cmluZyBvcmln
aW5Ub0ZpbGVOYW1lKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQoreworICAg
IHJldHVybiBvcmlnaW4uY2xpZW50T3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpICsgIi5sb2Nh
bHN0b3JhZ2UiOworfQorCitWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBMb2Nh
bFN0b3JhZ2VNYW5hZ2VyOjpnZXRPcmlnaW5zT2ZMb2NhbFN0b3JhZ2VEYXRhKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmln
aW5zOworICAgIGZvciAoYXV0byYgZmlsZU5hbWUgOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5
KHBhdGgpKSB7CisgICAgICAgIGlmIChhdXRvIG9yaWdpbiA9IGZpbGVOYW1lVG9PcmlnaW4oZmls
ZU5hbWUpKQorICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoKm9yaWdpbik7CisgICAgfQorCisg
ICAgcmV0dXJuIG9yaWdpbnM7Cit9CisKK1N0cmluZyBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpsb2Nh
bFN0b3JhZ2VGaWxlUGF0aChjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJiBvcmlnaW4pCit7CisgICAgaWYgKGRpcmVjdG9yeS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcgeyB9OworCisgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChkaXJlY3RvcnksIG9yaWdpblRvRmlsZU5hbWUob3JpZ2luKSk7
Cit9CisKK0xvY2FsU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU1hbmFnZXIoY29uc3QgU3Ry
aW5nJiBwYXRoLCBTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKKyAgICA6IG1fcGF0aChw
YXRoKQorICAgICwgbV9yZWdpc3RyeShyZWdpc3RyeSkKK3sKK30KKworYm9vbCBMb2NhbFN0b3Jh
Z2VNYW5hZ2VyOjppc0FjdGl2ZSgpCit7CisgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEgJiYgbV9z
dG9yYWdlQXJlYS0+aGFzTGlzdGVuZXJzKCk7Cit9CisKK2Jvb2wgTG9jYWxTdG9yYWdlTWFuYWdl
cjo6aGFzRGF0YUluTWVtb3J5KCkKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYSAmJiBpczxNZW1v
cnlTdG9yYWdlQXJlYT4oKm1fc3RvcmFnZUFyZWEpKQorICAgICAgICByZXR1cm4gIW1fc3RvcmFn
ZUFyZWEtPmlzRW1wdHkoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBMb2NhbFN0
b3JhZ2VNYW5hZ2VyOjpjbGVhckRhdGEoKQoreworICAgIGlmIChtX3N0b3JhZ2VBcmVhKQorICAg
ICAgICBtX3N0b3JhZ2VBcmVhLT5jbGVhcigpOworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFn
ZXI6OmNsb3NlKCkKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYSAmJiBpczxTUUxpdGVTdG9yYWdl
QXJlYT4oKm1fc3RvcmFnZUFyZWEpKQorICAgICAgICBkb3duY2FzdDxTUUxpdGVTdG9yYWdlQXJl
YT4oKm1fc3RvcmFnZUFyZWEpLmNsb3NlKCk7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlTWFuYWdl
cjo6aGFuZGxlTG93TWVtb3J5V2FybmluZygpCit7CisgICAgaWYgKG1fc3RvcmFnZUFyZWEgJiYg
aXM8U1FMaXRlU3RvcmFnZUFyZWE+KCptX3N0b3JhZ2VBcmVhKSkKKyAgICAgICAgZG93bmNhc3Q8
U1FMaXRlU3RvcmFnZUFyZWE+KCptX3N0b3JhZ2VBcmVhKS5oYW5kbGVMb3dNZW1vcnlXYXJuaW5n
KCk7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlTWFuYWdlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit7
CisgICAgaWYgKG1fc3RvcmFnZUFyZWEgJiYgaXM8U1FMaXRlU3RvcmFnZUFyZWE+KCptX3N0b3Jh
Z2VBcmVhKSkKKyAgICAgICAgZG93bmNhc3Q8U1FMaXRlU3RvcmFnZUFyZWE+KCptX3N0b3JhZ2VB
cmVhKS5jb21taXRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Cit9CisKK3ZvaWQgTG9jYWxTdG9y
YWdlTWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNv
bm5lY3Rpb24pCit7CisgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWEpOworICAgIG1fc3RvcmFnZUFy
ZWEtPnJlbW92ZUxpc3RlbmVyKGNvbm5lY3Rpb24pOworCisgICAgaWYgKGhhc0RhdGFJbk1lbW9y
eSgpIHx8IGlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVnaXN0cnkudW5y
ZWdpc3RlclN0b3JhZ2VBcmVhKG1fc3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKSk7CisgICAgbV9z
dG9yYWdlQXJlYSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlTWFuYWdlcjo6ZW5z
dXJlU3RvcmFnZUFyZWEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIGNvbnN0
IFN0cmluZyYgcGF0aCwgc3RkOjpvcHRpb25hbDxSZWY8V29ya1F1ZXVlPj4gd29ya1F1ZXVlKQor
eworICAgIGlmIChtX3N0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXBh
dGguaXNFbXB0eSgpICYmIHdvcmtRdWV1ZSkKKyAgICAgICAgbV9zdG9yYWdlQXJlYSA9IG1ha2VV
bmlxdWU8U1FMaXRlU3RvcmFnZUFyZWE+KGxvY2FsU3RvcmFnZVF1b3RhSW5CeXRlcywgb3JpZ2lu
LCBwYXRoLCBXVEZNb3ZlKCp3b3JrUXVldWUpKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RvcmFn
ZUFyZWEgPSBtYWtlVW5pcXVlPE1lbW9yeVN0b3JhZ2VBcmVhPihvcmlnaW4sIFN0b3JhZ2VBcmVh
QmFzZTo6U3RvcmFnZVR5cGU6OkxvY2FsKTsKKyAgICBtX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RvcmFn
ZUFyZWEobV9zdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpLCAqbV9zdG9yYWdlQXJlYSk7Cit9CisK
K1N0b3JhZ2VBcmVhSWRlbnRpZmllciBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9Mb2Nh
bFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgY29uc3Qg
V2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIFJlZjxXb3JrUXVldWU+JiYgd29ya1F1ZXVl
KQoreworICAgIGVuc3VyZVN0b3JhZ2VBcmVhKG9yaWdpbiwgbV9wYXRoLCBzdGQ6Om1ha2Vfb3B0
aW9uYWwoV1RGTW92ZSh3b3JrUXVldWUpKSk7CisgICAgQVNTRVJUKG1fcGF0aC5pc0VtcHR5KCkg
fHwgbV9zdG9yYWdlQXJlYS0+dHlwZSgpID09IFN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6U1FMaXRl
KTsKKworICAgIG1fc3RvcmFnZUFyZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb24pOworICAgIHJl
dHVybiBtX3N0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCk7Cit9CisKK1N0b3JhZ2VBcmVhSWRlbnRp
ZmllciBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VB
cmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJiBvcmlnaW4pCit7CisgICAgZW5zdXJlU3RvcmFnZUFyZWEob3JpZ2luLCBT
dHJpbmcgeyB9LCB7IH0pOworICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhLT50eXBlKCkgPT0gU3Rv
cmFnZUFyZWFCYXNlOjpUeXBlOjpNZW1vcnkpOworCisgICAgbV9zdG9yYWdlQXJlYS0+YWRkTGlz
dGVuZXIoY29ubmVjdGlvbik7CisgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmlkZW50aWZpZXIo
KTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpkaXNjb25uZWN0RnJvbVN0b3JhZ2VB
cmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJZGVu
dGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgaWYgKCFtX3N0b3JhZ2VBcmVhIHx8IG1fc3RvcmFn
ZUFyZWEtPmlkZW50aWZpZXIoKSAhPSBpZGVudGlmaWVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjb25uZWN0aW9uQ2xvc2VkKGNvbm5lY3Rpb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzYTI0NjgxNGQxNzVkODQzNmI4Y2Ez
YjMzMWZjYjlkZDE2OWY5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oCkBAIC0wLDAgKzEsNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSWRlbnRp
Zmllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgQ2xpZW50T3JpZ2luOworc3Ry
dWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFN0b3JhZ2VBcmVhQmFzZTsKK2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnk7CisKK2NsYXNzIExv
Y2FsU3RvcmFnZU1hbmFnZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBnZXRPcmln
aW5zT2ZMb2NhbFN0b3JhZ2VEYXRhKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgc3RhdGljIFN0
cmluZyBsb2NhbFN0b3JhZ2VGaWxlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFdlYkNv
cmU6OkNsaWVudE9yaWdpbiYpOworCisgICAgTG9jYWxTdG9yYWdlTWFuYWdlcihjb25zdCBTdHJp
bmcmIHBhdGgsIFN0b3JhZ2VBcmVhUmVnaXN0cnkmKTsKKyAgICBib29sIGlzQWN0aXZlKCk7Cisg
ICAgYm9vbCBoYXNEYXRhSW5NZW1vcnkoKTsKKyAgICB2b2lkIGNsZWFyRGF0YSgpOworICAgIHZv
aWQgY2xvc2UoKTsKKyAgICB2b2lkIGhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKKyAgICB2b2lk
IHN5bmNMb2NhbFN0b3JhZ2UoKTsKKyAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25u
ZWN0aW9uOjpVbmlxdWVJRCk7CisKKyAgICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgY29ubmVjdFRv
TG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBjb25zdCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mLCBSZWY8V29ya1F1ZXVlPiYmKTsKKyAgICBTdG9yYWdlQXJlYUlkZW50
aWZpZXIgY29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICB2b2lkIGRpc2Nv
bm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFy
ZWFJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGVuc3VyZVN0b3JhZ2VBcmVhKGNv
bnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIGNvbnN0IFN0cmluZyYsIHN0ZDo6b3B0aW9uYWw8
UmVmPFdvcmtRdWV1ZT4+KTsKKworICAgIFN0cmluZyBtX3BhdGg7CisgICAgU3RvcmFnZUFyZWFS
ZWdpc3RyeSYgbV9yZWdpc3RyeTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZUFyZWFCYXNl
PiBtX3N0b3JhZ2VBcmVhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VB
cmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9y
YWdlQXJlYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2IwNjlhZGY4ZWRmMTIxNWQ1YWEyNmUzNTJlZDJjNDg5
ZjcxNWY5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVtb3J5U3RvcmFnZUFyZWEuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU1hcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworTWVtb3J5U3RvcmFnZUFyZWE6Ok1lbW9yeVN0b3JhZ2VBcmVhKGNvbnN0IFdlYkNvcmU6OkNs
aWVudE9yaWdpbiYgb3JpZ2luLCBTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlIHR5cGUpCisg
ICAgOiBTdG9yYWdlQXJlYUJhc2UoV2ViQ29yZTo6U3RvcmFnZU1hcDo6bm9RdW90YSwgb3JpZ2lu
KQorICAgICwgbV9zdG9yYWdlVHlwZSh0eXBlKQoreworICAgIG1fbWFwID0gbWFrZVVuaXF1ZTxX
ZWJDb3JlOjpTdG9yYWdlTWFwPihXZWJDb3JlOjpTdG9yYWdlTWFwOjpub1F1b3RhKTsKK30KKwor
Ym9vbCBNZW1vcnlTdG9yYWdlQXJlYTo6aXNFbXB0eSgpCit7CisgICAgcmV0dXJuICFtX21hcC0+
bGVuZ3RoKCk7Cit9CisKK3ZvaWQgTWVtb3J5U3RvcmFnZUFyZWE6OmNsZWFyKCkKK3sKKyAgICBt
X21hcC0+Y2xlYXIoKTsKKyAgICBub3RpZnlMaXN0ZW5lcnNBYm91dENsZWFyKCk7Cit9CisKK0hh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IE1lbW9yeVN0b3JhZ2VBcmVhOjphbGxJdGVtcygpCit7Cisg
ICAgcmV0dXJuIG1fbWFwLT5pdGVtcygpOworfQorCitFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJy
b3I+IE1lbW9yeVN0b3JhZ2VBcmVhOjpzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQg
Y29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUltcGxJRCwg
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdXJs
U3RyaW5nKQoreworICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICBib29sIGhhc1F1b3RhRXJyb3Ig
PSBmYWxzZTsKKyAgICBtX21hcC0+c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSwgaGFzUXVv
dGFFcnJvcik7CisgICAgaWYgKGhhc1F1b3RhRXJyb3IpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChTdG9yYWdlRXJyb3I6OlF1b3RhRXhjZWVkZWQpOworCisgICAgZGlzcGF0Y2hFdmVu
dHMoY29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIGtleSwgb2xkVmFsdWUsIHZhbHVlLCB1
cmxTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFn
ZUVycm9yPiBNZW1vcnlTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVu
aXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJ
bXBsSUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAg
ICBTdHJpbmcgb2xkVmFsdWU7CisgICAgbV9tYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7
CisgICAgZGlzcGF0Y2hFdmVudHMoY29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIGtleSwg
b2xkVmFsdWUsIFN0cmluZygpLCB1cmxTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwor
RXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBNZW1vcnlTdG9yYWdlQXJlYTo6Y2xlYXIoSVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlm
aWVyIGltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBpZiAo
IW1fbWFwLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VF
cnJvcjo6SXRlbU5vdEZvdW5kKTsKKworICAgIG1fbWFwLT5jbGVhcigpOworICAgIGRpc3BhdGNo
RXZlbnRzKGNvbm5lY3Rpb24sIGltcGxJZGVudGlmaWVyLCBTdHJpbmcoKSwgU3RyaW5nKCksIFN0
cmluZygpLCB1cmxTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworc3RkOjp1bmlxdWVf
cHRyPE1lbW9yeVN0b3JhZ2VBcmVhPiBNZW1vcnlTdG9yYWdlQXJlYTo6Y2xvbmUoKSBjb25zdAor
eworICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBtYWtlVW5pcXVlPE1lbW9yeVN0b3JhZ2VBcmVhPihv
cmlnaW4oKSwgbV9zdG9yYWdlVHlwZSk7CisgICAgKnN0b3JhZ2VBcmVhLT5tX21hcCA9ICptX21h
cDsKKworICAgIHJldHVybiBzdG9yYWdlQXJlYTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKworCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL01lbW9yeVN0b3JhZ2VBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNDVjZmU3OGU3ZWM0NzU3NjBi
YWY1OTU0YTdhZTUzZWIxZGViYzBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmgKQEAgLTAsMCArMSw2MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFCYXNl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFN0b3JhZ2VNYXA7Cit9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBNZW1vcnlTdG9yYWdlQXJlYSBmaW5hbCA6IHB1YmxpYyBT
dG9yYWdlQXJlYUJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIE1lbW9yeVN0b3JhZ2VBcmVhKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIFN0b3Jh
Z2VBcmVhQmFzZTo6U3RvcmFnZVR5cGUgPSBTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlOjpT
ZXNzaW9uKTsKKworICAgIGJvb2wgaXNFbXB0eSgpIGZpbmFsOworICAgIHZvaWQgY2xlYXIoKSBm
aW5hbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+IGNsb25lKCkgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgLy8gU3RvcmFnZUFyZWFCYXNlCisgICAgU3RvcmFnZUFyZWFC
YXNlOjpUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTdG9yYWdlQXJlYUJhc2U6OlR5
cGU6Ok1lbW9yeTsgfTsKKyAgICBTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlIHN0b3JhZ2VU
eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdG9yYWdlVHlwZTsgfQorICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IGFsbEl0ZW1zKCkgZmluYWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3Rv
cmFnZUVycm9yPiBzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVh
SW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBj
b25zdCBTdHJpbmcmIHVybFN0cmluZykgZmluYWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFn
ZUVycm9yPiByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVh
SW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZykgZmluYWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBjbGVhcihJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIHVybFN0cmluZykgZmluYWw7CisKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpTdG9yYWdlTWFwPiBtX21hcDsKKyAgICBTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBl
IG1fc3RvcmFnZVR5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhKQorICAgIHN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZSYgYXJlYSkgeyByZXR1
cm4gYXJlYS50eXBlKCkgPT0gV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6OlR5cGU6Ok1lbW9yeTsg
fQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmNw
cAppbmRleCBjMTBhY2JkZDY0ZmUwNGVmZjE2YTFjOGI3NGQyYmZjMTk1M2RiZDczLi43NWIxYzRi
NjIyMDQxYjg4NzFkMmI0M2M2YTFlNzBhMjc5MDkzMjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5h
Z2VyLmNwcApAQCAtMjgsMTIgKzI4LDE5IEBACiAKICNpbmNsdWRlICJGaWxlU3lzdGVtU3RvcmFn
ZUhhbmRsZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLmgi
CisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlTWFuYWdlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk9y
aWdpblN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmgi
CisjaW5jbHVkZSAiU3RvcmFnZUFyZWFCYXNlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFNYXBN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhUmVnaXN0cnkuaCIKICNpbmNsdWRlICJX
ZWJzaXRlRGF0YVR5cGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5o
PgogI2luY2x1ZGUgPHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1Nj
b3BlLmg+CisjaW5jbHVkZSA8d3RmL1N1c3BlbmRhYmxlV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8
d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9C
YXNlNjQuaD4KIApAQCAtNDMsNyArNTAsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3Jl
OjpDbGllbnRPcmlnaW4+IHJlYWRPcmlnaW5Gcm9tRmlsZShjb25zdCBTdHJpbmcmIGZpbAogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYgKCFGaWxlU3lzdGVtOjpm
aWxlRXhpc3RzKGZpbGVQYXRoKSkKKyAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpIHx8ICFGaWxl
U3lzdGVtOjpmaWxlRXhpc3RzKGZpbGVQYXRoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAogICAgIGF1dG8gb3JpZ2luRmlsZUhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKGZp
bGVQYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQpOwpAQCAtNjYsNyArNzMsNyBA
QCBzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IHJlYWRPcmlnaW5G
cm9tRmlsZShjb25zdCBTdHJpbmcmIGZpbAogCiBzdGF0aWMgdm9pZCB3cml0ZU9yaWdpblRvRmls
ZUlmTmVjZXNzYXJ5KGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYgb3JpZ2luKQogewotICAgIGlmIChGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGZpbGVQ
YXRoKSkKKyAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpIHx8IEZpbGVTeXN0ZW06OmZpbGVFeGlz
dHMoZmlsZVBhdGgpKQogICAgICAgICByZXR1cm47CiAKICAgICBGaWxlU3lzdGVtOjptYWtlQWxs
RGlyZWN0b3JpZXMoRmlsZVN5c3RlbTo6cGFyZW50UGF0aChmaWxlUGF0aCkpOwpAQCAtNzYsNyAr
ODMsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZU9yaWdpblRvRmlsZUlmTmVjZXNzYXJ5KGNvbnN0IFN0
cmluZyYgZmlsZVBhdGgsIGNvbnN0IFdlYkNvcmU6OgogICAgIH0pOwogCiAgICAgaWYgKCFGaWxl
U3lzdGVtOjppc0hhbmRsZVZhbGlkKG9yaWdpbkZpbGVIYW5kbGUpKSB7Ci0gICAgICAgIExPR19F
UlJPUigid3JpdGVPcmlnaW5Ub0ZpbGVJZk5lY2Vzc2FyeTogRmFpbGVkIHRvIG9wZW4gb3JpZ2lu
IGZpbGUiKTsKKyAgICAgICAgTE9HX0VSUk9SKCJ3cml0ZU9yaWdpblRvRmlsZUlmTmVjZXNzYXJ5
OiBGYWlsZWQgdG8gb3BlbiBvcmlnaW4gZmlsZSAnJXMnIiwgZmlsZVBhdGgudXRmOCgpLmRhdGEo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTkzLDIwICsxMDAsMjIgQEAgc3RhdGlj
IHZvaWQgZGVsZXRlT3JpZ2luRmlsZUlmTmVjZXNzYXJ5KGNvbnN0IFN0cmluZyYgZmlsZVBhdGgp
CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZmlsZVBhdGgpOwogfQogCi1SZWY8TmV0
d29ya1N0b3JhZ2VNYW5hZ2VyPiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCkKK1JlZjxOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI+IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gY3VzdG9t
TG9jYWxTdG9yYWdlUGF0aCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrU3Rv
cmFnZU1hbmFnZXIoc2Vzc2lvbklELCBwYXRoKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyKHNlc3Npb25JRCwgcGF0aCwgY3VzdG9tTG9jYWxTdG9yYWdl
UGF0aCkpOwogfQogCi1OZXR3b3JrU3RvcmFnZU1hbmFnZXI6Ok5ldHdvcmtTdG9yYWdlTWFuYWdl
cihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCkKK05ldHdvcmtT
dG9yYWdlTWFuYWdlcjo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gY3VzdG9tTG9j
YWxTdG9yYWdlUGF0aCkKICAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKLSAgICAsIG1fcXVl
dWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZSIpKQorICAgICwg
bV9xdWV1ZShTdXNwZW5kYWJsZVdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LlN0
b3JhZ2UiKSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgbV9xdWV1
ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBwYXRoID0g
cGF0aC5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHBhdGggPSBwYXRoLmlzb2xhdGVk
Q29weSgpLCBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoID0gY3Jvc3NUaHJlYWRDb3B5KGN1c3RvbUxv
Y2FsU3RvcmFnZVBhdGgpXSgpIG11dGFibGUgewogICAgICAgICBtX2ZpbGVTeXN0ZW1TdG9yYWdl
SGFuZGxlUmVnaXN0cnkgPSBtYWtlVW5pcXVlPEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0
cnk+KCk7CisgICAgICAgIG1fc3RvcmFnZUFyZWFSZWdpc3RyeSA9IG1ha2VVbmlxdWU8U3RvcmFn
ZUFyZWFSZWdpc3RyeT4oKTsKICAgICAgICAgbV9wYXRoID0gcGF0aDsKKyAgICAgICAgbV9jdXN0
b21Mb2NhbFN0b3JhZ2VQYXRoID0gY3VzdG9tTG9jYWxTdG9yYWdlUGF0aDsKICAgICAgICAgaWYg
KCFtX3BhdGguaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhdXRvIHNhbHRQYXRoID0gRmlsZVN5
c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcGF0aCwgInNhbHQiKTsKICAgICAgICAg
ICAgIG1fc2FsdCA9IEZpbGVTeXN0ZW06OnJlYWRPck1ha2VTYWx0KHNhbHRQYXRoKS52YWx1ZV9v
cihGaWxlU3lzdGVtOjpTYWx0KCkpOwpAQCAtMTIwLDYgKzEyOSwxMSBAQCBOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6On5OZXR3b3JrU3RvcmFnZU1hbmFnZXIoKQogICAgIEFTU0VSVChtX2Nsb3NlZCk7
CiB9CiAKK2Jvb2wgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyhPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcykKK3sKKyAgICByZXR1cm4gdHlwZXMuY29udGFpbnMo
V2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpIHx8IHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVE
YXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpIHx8IHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6RmlsZVN5c3RlbSk7Cit9CisKIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbG9zZSgp
CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTEzMyw3ICsxNDcsNiBAQCB2
b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xvc2UoKQogCiAgICAgbV9xdWV1ZS0+ZGlzcGF0
Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSgpIG11dGFibGUgewogICAg
ICAgICBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmNsZWFyKCk7Ci0gICAgICAgIG1fc2Vz
c2lvbk9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5jbGVhcigpOwogICAgICAgICBtX2ZpbGVTeXN0ZW1T
dG9yYWdlSGFuZGxlUmVnaXN0cnkgPSBudWxscHRyOwogCiAgICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIHsgfSk7
CkBAIC0xNzcsNyArMTkwLDcgQEAgc3RhdGljIFN0cmluZyBlbmNvZGUoY29uc3QgU3RyaW5nJiBz
dHJpbmcsIEZpbGVTeXN0ZW06OlNhbHQgc2FsdCkKIHN0YXRpYyBTdHJpbmcgb3JpZ2luRGlyZWN0
b3J5UGF0aChjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mIG9yaWdpbiwgRmlsZVN5c3RlbTo6U2FsdCBzYWx0KQogewogICAgIGlmIChyb290UGF0aC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiByb290UGF0aDsKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZyB7IH07CiAKICAgICBhdXRvIGVuY29kZWRUb3BPcmlnaW4gPSBlbmNvZGUob3JpZ2luLnRvcE9y
aWdpbi50b1N0cmluZygpLCBzYWx0KTsKICAgICBhdXRvIGVuY29kZWRPcGVuaW5nT3JpZ2luID0g
ZW5jb2RlKG9yaWdpbi5jbGllbnRPcmlnaW4udG9TdHJpbmcoKSwgc2FsdCk7CkBAIC0xODYsNiAr
MTk5LDggQEAgc3RhdGljIFN0cmluZyBvcmlnaW5EaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYg
cm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE8KIAogc3RhdGljIFN0cmluZyBvcmlnaW5G
aWxlUGF0aChjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKIHsKKyAgICBpZiAoZGlyZWN0b3J5Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyB7IH07CiAgICAgcmV0dXJuIEZpbGVTeXN0
ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChkaXJlY3RvcnksICJvcmlnaW4iX3MpOwogfQog
CkBAIC0xOTYsMTYgKzIxMSwzNyBAQCBPcmlnaW5TdG9yYWdlTWFuYWdlciYgTmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKGNvbnN0IFdlYgogICAgIHJldHVy
biAqbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5lbnN1cmUob3JpZ2luLCBbJl0gewogICAg
ICAgICBhdXRvIG9yaWdpbkRpcmVjdG9yeSA9IG9yaWdpbkRpcmVjdG9yeVBhdGgobV9wYXRoLCBv
cmlnaW4sIG1fc2FsdCk7CiAgICAgICAgIHdyaXRlT3JpZ2luVG9GaWxlSWZOZWNlc3Nhcnkob3Jp
Z2luRmlsZVBhdGgob3JpZ2luRGlyZWN0b3J5KSwgb3JpZ2luKTsKLSAgICAgICAgcmV0dXJuIG1h
a2VVbmlxdWU8T3JpZ2luU3RvcmFnZU1hbmFnZXI+KFdURk1vdmUob3JpZ2luRGlyZWN0b3J5KSk7
CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBsb2NhbFN0b3JhZ2VQYXRoOworICAgICAg
ICBpZiAobV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKQorICAgICAgICAgICAgbG9jYWxTdG9yYWdl
UGF0aCA9IExvY2FsU3RvcmFnZU1hbmFnZXI6OmxvY2FsU3RvcmFnZUZpbGVQYXRoKCptX2N1c3Rv
bUxvY2FsU3RvcmFnZVBhdGgsIG9yaWdpbik7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPE9y
aWdpblN0b3JhZ2VNYW5hZ2VyPihXVEZNb3ZlKG9yaWdpbkRpcmVjdG9yeSksIFdURk1vdmUobG9j
YWxTdG9yYWdlUGF0aCkpOwogICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotdm9pZCBOZXR3
b3JrU3RvcmFnZU1hbmFnZXI6OnJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShj
b25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK2Jvb2wgTmV0d29ya1N0b3JhZ2VN
YW5hZ2VyOjpyZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUoY29uc3QgV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX2xv
Y2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmZpbmQob3JpZ2luKTsgaXRlcmF0b3IgIT0gbV9sb2Nh
bE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkgewotICAgICAgICBpZiAoIWl0ZXJhdG9yLT52
YWx1ZS0+aXNBY3RpdmUoKSkKLSAgICAgICAgICAgIG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdl
cnMucmVtb3ZlKGl0ZXJhdG9yKTsKLSAgICB9CisgICAgYXV0byBpdGVyYXRvciA9IG1fbG9jYWxP
cmlnaW5TdG9yYWdlTWFuYWdlcnMuZmluZChvcmlnaW4pOworICAgIGlmIChpdGVyYXRvciA9PSBt
X2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmVuZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGlmIChpdGVyYXRvci0+dmFsdWUtPmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMucmVtb3ZlKGl0ZXJhdG9y
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRl
bGV0ZU9yaWdpbkRpcmVjdG9yeUlmUG9zc2libGUoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiBvcmlnaW4pCit7CisgICAgYm9vbCBpc0VtcHR5ID0gbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdl
cihvcmlnaW4pLmlzRW1wdHkoKTsKKyAgICBib29sIHJlbW92ZWQgPSByZW1vdmVPcmlnaW5TdG9y
YWdlTWFuYWdlcklmUG9zc2libGUob3JpZ2luKTsKKyAgICBpZiAoIXJlbW92ZWQgfHwgIWlzRW1w
dHkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gb3JpZ2luRGlyZWN0b3J5ID0gb3JpZ2lu
RGlyZWN0b3J5UGF0aChtX3BhdGgsIG9yaWdpbiwgbV9zYWx0KTsKKyAgICBhdXRvIGZpbGVQYXRo
ID0gb3JpZ2luRmlsZVBhdGgob3JpZ2luRGlyZWN0b3J5KTsKKyAgICBkZWxldGVPcmlnaW5GaWxl
SWZOZWNlc3NhcnkoZmlsZVBhdGgpOworICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0
b3J5KG9yaWdpbkRpcmVjdG9yeSk7CiB9CiAKIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpw
ZXJzaXN0ZWQoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yMzIsOSArMjY4LDYg
QEAgdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsZWFyU3RvcmFnZUZvclRlc3RpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGMKICAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDog
bV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKICAgICAgICAgICAgIG1hbmFn
ZXItPnNldFBlcnNpc3RlZChmYWxzZSk7CiAKLSAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDog
bV9zZXNzaW9uT3JpZ2luU3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKQotICAgICAgICAgICAgbWFu
YWdlci0+c2V0UGVyc2lzdGVkKGZhbHNlKTsKLQogICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAgICAgfSk7CkBAIC0zODIsMTQgKzQxNSw2
IEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpnZXRIYW5kbGUoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBXZWJDb3JlOjpGaWxlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoaGFuZGxl
LT5nZXRIYW5kbGUoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBXVEZNb3ZlKG5hbWUpKSk7CiB9CiAK
LXN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVEYXRhVHlwZT4gdG9XZWJzaXRlRGF0YVR5cGUo
Y29uc3QgU3RyaW5nJiBzdG9yYWdlVHlwZSkKLXsKLSAgICBpZiAoc3RvcmFnZVR5cGUgPT0gIkZp
bGVTeXN0ZW0iKQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtOwot
Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQogdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OmZvckVhY2hPcmlnaW5EaXJlY3RvcnkoY29uc3QgRnVuY3Rpb248dm9pZChjb25zdCBTdHJp
bmcmKT4mIGFwcGx5KQogewogICAgIGZvciAoYXV0byYgdG9wT3JpZ2luIDogRmlsZVN5c3RlbTo6
bGlzdERpcmVjdG9yeShtX3BhdGgpKSB7CkBAIC00MDEsMzAgKzQyNiw0NyBAQCB2b2lkIE5ldHdv
cmtTdG9yYWdlTWFuYWdlcjo6Zm9yRWFjaE9yaWdpbkRpcmVjdG9yeShjb25zdCBGdW5jdGlvbjx2
b2lkKGNvbnN0IFN0cgogICAgICAgICB9CiAKICAgICAgICAgZm9yIChhdXRvJiBvcGVuaW5nT3Jp
Z2luIDogb3BlbmluZ09yaWdpbnMpIHsKKyAgICAgICAgICAgIGlmIChvcGVuaW5nT3JpZ2luID09
ICIuRFNfU3RvcmUiKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgICAgICBh
dXRvIG9wZW5pbmdPcmlnaW5EaXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQodG9wT3JpZ2luRGlyZWN0b3J5LCBvcGVuaW5nT3JpZ2luKTsKICAgICAgICAgICAg
IGFwcGx5KG9wZW5pbmdPcmlnaW5EaXJlY3RvcnkpOwogICAgICAgICB9CiAgICAgfQogfQogCitI
YXNoU2V0PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpnZXRB
bGxPcmlnaW5zKCkKK3sKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gYWxsT3Jp
Z2luczsKKyAgICBmb3IgKGF1dG8gb3JpZ2luIDogbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vy
cy5rZXlzKCkpCisgICAgICAgIGFsbE9yaWdpbnMuYWRkKG9yaWdpbik7CisKKyAgICBmb3JFYWNo
T3JpZ2luRGlyZWN0b3J5KFsmXShhdXRvIGRpcmVjdG9yeSkgbXV0YWJsZSB7CisgICAgICAgIGlm
IChhdXRvIG9yaWdpbiA9IHJlYWRPcmlnaW5Gcm9tRmlsZShvcmlnaW5GaWxlUGF0aChkaXJlY3Rv
cnkpKSkKKyAgICAgICAgICAgIGFsbE9yaWdpbnMuYWRkKCpvcmlnaW4pOworICAgIH0pOworCisg
ICAgaWYgKG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkgeworICAgICAgICBhdXRvIG9yaWdpbnMg
PSBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpnZXRPcmlnaW5zT2ZMb2NhbFN0b3JhZ2VEYXRhKCptX2N1
c3RvbUxvY2FsU3RvcmFnZVBhdGgpOworICAgICAgICBmb3IgKGF1dG8gb3JpZ2luIDogb3JpZ2lu
cykKKyAgICAgICAgICAgIGFsbE9yaWdpbnMuYWRkKFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IG9y
aWdpbiwgb3JpZ2luIH0pOworICAgIH0KKworICAgIHJldHVybiBhbGxPcmlnaW5zOworfQorCiBW
ZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0
YUZyb21EaXNrKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHRhcmdldFR5cGVzKQogewogICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgSGFzaE1hcDxXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGEsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+PiBvcmlnaW5UeXBlczsK
LSAgICBmb3JFYWNoT3JpZ2luRGlyZWN0b3J5KFsmXShhdXRvIGRpcmVjdG9yeSkgbXV0YWJsZSB7
Ci0gICAgICAgIGF1dG8gb3JpZ2luID0gcmVhZE9yaWdpbkZyb21GaWxlKG9yaWdpbkZpbGVQYXRo
KGRpcmVjdG9yeSkpOwotICAgICAgICBpZiAoIW9yaWdpbikKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBmb3IgKGF1dG8mIHN0b3JhZ2VUeXBlIDogRmlsZVN5c3RlbTo6bGlzdERpcmVj
dG9yeShkaXJlY3RvcnkpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byB0eXBlID0gdG9XZWJzaXRl
RGF0YVR5cGUoc3RvcmFnZVR5cGUpOyB0eXBlICYmIHRhcmdldFR5cGVzLmNvbnRhaW5zKCp0eXBl
KSkgewotICAgICAgICAgICAgICAgIC8vIFJldHVybiBib3RoIHRvcCBvcmlnaW4gYW5kIG9wZW5p
bmcgb3JpZ2luIGZvciB0aGlzIGRhdGEuCi0gICAgICAgICAgICAgICAgb3JpZ2luVHlwZXMuYWRk
KG9yaWdpbi0+Y2xpZW50T3JpZ2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB7IH0pLml0
ZXJhdG9yLT52YWx1ZS5hZGQoKnR5cGUpOwotICAgICAgICAgICAgICAgIG9yaWdpblR5cGVzLmFk
ZChvcmlnaW4tPnRvcE9yaWdpbiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4geyB9KS5pdGVy
YXRvci0+dmFsdWUuYWRkKCp0eXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0p
OworICAgIGF1dG8gYWxsT3JpZ2lucyA9IGdldEFsbE9yaWdpbnMoKTsKKyAgICBmb3IgKGF1dG8g
b3JpZ2luIDogYWxsT3JpZ2lucykgeworICAgICAgICBhdXRvIHR5cGVzID0gbG9jYWxPcmlnaW5T
dG9yYWdlTWFuYWdlcihvcmlnaW4pLmZldGNoRGF0YSh0YXJnZXRUeXBlcyk7CisgICAgICAgIG9y
aWdpblR5cGVzLmFkZChvcmlnaW4uY2xpZW50T3JpZ2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQodHlwZXMpOworICAgICAgICBvcmlnaW5UeXBl
cy5hZGQob3JpZ2luLnRvcE9yaWdpbiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4geyB9KS5p
dGVyYXRvci0+dmFsdWUuYWRkKHR5cGVzKTsKKyAgICAgICAgcmVtb3ZlT3JpZ2luU3RvcmFnZU1h
bmFnZXJJZlBvc3NpYmxlKG9yaWdpbik7CisgICAgfQogCiAgICAgVmVjdG9yPFdlYnNpdGVEYXRh
OjpFbnRyeT4gZW50cmllczsKICAgICBmb3IgKGF1dG8gW29yaWdpbiwgdHlwZXNdIDogb3JpZ2lu
VHlwZXMpIHsKQEAgLTQ0OCwzNSArNDkwLDIwIEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
OjpmZXRjaERhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIENvbXBsZXRpCiAg
ICAgfSk7CiB9CiAKLVZlY3RvcjxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IE5ldHdvcmtTdG9yYWdl
TWFuYWdlcjo6ZGVsZXRlRGF0YU9uRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBl
cywgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZVRpbWUsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3Qg
V2ViQ29yZTo6Q2xpZW50T3JpZ2luJik+JiBmaWx0ZXIpCitIYXNoU2V0PFdlYkNvcmU6OkNsaWVu
dE9yaWdpbj4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrKE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzLCBXYWxsVGltZSBtb2RpZmllZFNpbmNlVGltZSwgY29u
c3QgRnVuY3Rpb248Ym9vbChjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKT4mIGZpbHRlcikK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIFZlY3RvcjxXZWJDb3Jl
OjpDbGllbnRPcmlnaW4+IGRlbGV0ZWRPcmlnaW5zOwotICAgIGZvckVhY2hPcmlnaW5EaXJlY3Rv
cnkoWyZdKGF1dG8gZGlyZWN0b3J5KSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBmaWxlUGF0aCA9
IG9yaWdpbkZpbGVQYXRoKGRpcmVjdG9yeSk7Ci0gICAgICAgIGF1dG8gb3JpZ2luID0gcmVhZE9y
aWdpbkZyb21GaWxlKGZpbGVQYXRoKTsKLSAgICAgICAgaWYgKCFvcmlnaW4pIHsKLSAgICAgICAg
ICAgIC8vIElmIG9yaWdpbiBjYW5ub3QgYmUgcmV0cmlldmVkLCBidXQgd2UgYXJlIGFza2VkIHRv
IHJlbW92ZSBkYXRhIGZvciBhbGwgb3JpZ2lucywgcmVtb3ZlIGl0LgotICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIk5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0
YU9uRGlzayBmYWlsZWQgdG8gcmVhZCBvcmlnaW4gZnJvbSAnJXMnIiwgZmlsZVBhdGgudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyKFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7
IH0pKSB7Ci0gICAgICAgICAgICAgICAgYXV0byB0ZW1wT3JpZ2luU3RvcmFnZU1hbmFnZXIgPSBt
YWtlVW5pcXVlPE9yaWdpblN0b3JhZ2VNYW5hZ2VyPihTdHJpbmcgeyBkaXJlY3RvcnkgfSk7Ci0g
ICAgICAgICAgICAgICAgdGVtcE9yaWdpblN0b3JhZ2VNYW5hZ2VyLT5kZWxldGVEYXRhKHR5cGVz
LCBtb2RpZmllZFNpbmNlVGltZSk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZUlm
TmVjZXNzYXJ5KGZpbGVQYXRoKTsKLSAgICAgICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVF
bXB0eURpcmVjdG9yeShkaXJlY3RvcnkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFmaWx0ZXIoKm9yaWdpbikpCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgSGFzaFNldDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IGRlbGV0ZWRP
cmlnaW5zOworICAgIGF1dG8gYWxsT3JpZ2lucyA9IGdldEFsbE9yaWdpbnMoKTsKKyAgICBmb3Ig
KGF1dG8gb3JpZ2luIDogYWxsT3JpZ2lucykgeworICAgICAgICBpZiAoIWZpbHRlcihvcmlnaW4p
KQorICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgZGVsZXRlZE9yaWdpbnMuYXBwZW5k
KCpvcmlnaW4pOwotICAgICAgICBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKCpvcmlnaW4pLmRl
bGV0ZURhdGEodHlwZXMsIG1vZGlmaWVkU2luY2VUaW1lKTsKLSAgICAgICAgcmVtb3ZlT3JpZ2lu
U3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxlKCpvcmlnaW4pOwotICAgICAgICBkZWxldGVPcmlnaW5G
aWxlSWZOZWNlc3NhcnkoZmlsZVBhdGgpOwotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVFbXB0
eURpcmVjdG9yeShkaXJlY3RvcnkpOwotICAgIH0pOworICAgICAgICBkZWxldGVkT3JpZ2lucy5h
ZGQob3JpZ2luKTsKKyAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihvcmlnaW4pLmRl
bGV0ZURhdGEodHlwZXMsIG1vZGlmaWVkU2luY2VUaW1lKTsKKyAgICAgICAgZGVsZXRlT3JpZ2lu
RGlyZWN0b3J5SWZQb3NzaWJsZShvcmlnaW4pOworICAgIH0KIAogICAgIHJldHVybiBkZWxldGVk
T3JpZ2luczsKIH0KQEAgLTU0MSw1ICs1NjgsMTY4IEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5h
Z2VyOjpkZWxldGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKE9wdGlvblNldDxXZWJzaXRlRGF0
CiAgICAgfSk7CiB9CiAKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjptb3ZlRGF0YShjb25z
dCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIHNvdXJjZSwgY29uc3QgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhJiB0YXJnZXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFT
U0VSVCghbV9jbG9zZWQpOworCisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBzb3VyY2UgPSBjcm9zc1RocmVhZENvcHkoc291cmNlKSwg
dGFyZ2V0ID0gY3Jvc3NUaHJlYWRDb3B5KHRhcmdldCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gc291cmNl
T3JpZ2luID0gV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgc291cmNlLCBzb3VyY2UgfTsKKyAgICAg
ICAgYXV0byB0YXJnZXRPcmlnaW4gPSBXZWJDb3JlOjpDbGllbnRPcmlnaW4geyB0YXJnZXQsIHRh
cmdldCB9OworICAgICAgICAKKyAgICAgICAgLy8gQ2xlYXIgZXhpc3RpbmcgZGF0YSBvZiB0YXJn
ZXQgb3JpZ2luLgorICAgICAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcyA9IHsg
V2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtLCBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFn
ZSwgV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSAgfTsKKyAgICAgICAgbG9jYWxPcmln
aW5TdG9yYWdlTWFuYWdlcih0YXJnZXRPcmlnaW4pLmRlbGV0ZURhdGEodHlwZXMsIC1XYWxsVGlt
ZTo6aW5maW5pdHkoKSk7CisgICAgICAgIHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3Nz
aWJsZSh0YXJnZXRPcmlnaW4pOworCisgICAgICAgIC8vIE1vdmUgZGF0YSBmcm9tIHNvdXJjZSBv
cmlnaW4gdG8gdGFyZ2V0IG9yaWdpbi4KKyAgICAgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG5l
d0xvY2FsU3RvcmFnZVBhdGg7CisgICAgICAgIGlmIChtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgp
CisgICAgICAgICAgICBuZXdMb2NhbFN0b3JhZ2VQYXRoID0gTG9jYWxTdG9yYWdlTWFuYWdlcjo6
bG9jYWxTdG9yYWdlRmlsZVBhdGgoKm1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgdGFyZ2V0T3Jp
Z2luKTsKKyAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihzb3VyY2VPcmlnaW4pLm1v
dmVEYXRhKG9yaWdpbkRpcmVjdG9yeVBhdGgobV9wYXRoLCB0YXJnZXRPcmlnaW4sIG1fc2FsdCks
IFdURk1vdmUobmV3TG9jYWxTdG9yYWdlUGF0aCkpOworICAgICAgICByZW1vdmVPcmlnaW5TdG9y
YWdlTWFuYWdlcklmUG9zc2libGUoc291cmNlT3JpZ2luKTsKKworICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOworfQor
Cit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c3VzcGVuZChDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIG1fcXVldWUtPnN1c3BlbmQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYg
eyAqdGhpcyB9XSB7CisgICAgICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1fbG9jYWxPcmlnaW5T
dG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGxvY2FsU3Rv
cmFnZU1hbmFnZXIgPSBtYW5hZ2VyLT5leGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKSkKKyAg
ICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2VNYW5hZ2VyLT5zeW5jTG9jYWxTdG9yYWdlKCk7Cisg
ICAgICAgIH0KKyAgICB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQg
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZXN1bWUoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBtX3F1ZXVlLT5yZXN1bWUoKTsKK30KKwordm9pZCBOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKQoreworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IFJlZiB7ICp0aGlzIH1dIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9s
b2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKGF1
dG8gbG9jYWxTdG9yYWdlTWFuYWdlciA9IG1hbmFnZXItPmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFu
YWdlcigpKQorICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZU1hbmFnZXItPmhhbmRsZUxvd01l
bW9yeVdhcm5pbmcoKTsKKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6c3luY0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMg
fSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9sb2NhbE9yaWdpblN0b3JhZ2VN
YW5hZ2Vycy52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gbG9jYWxTdG9yYWdlTWFu
YWdlciA9IG1hbmFnZXItPmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcigpKQorICAgICAgICAg
ICAgICAgIGxvY2FsU3RvcmFnZU1hbmFnZXItPnN5bmNMb2NhbFN0b3JhZ2UoKTsKKyAgICAgICAg
fQorCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25u
ZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFn
ZU5hbWVzcGFjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYg
dG9wT3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBcmVhSWRlbnRpZmllcik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luID0geyB0b3BPcmlnaW4sIHRvcE9y
aWdpbiB9OworICAgIGNvbXBsZXRpb25IYW5kbGVyKGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIo
b3JpZ2luKS5sb2NhbFN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VBcmVhUmVnaXN0cnkpLmNvbm5l
Y3RUb0xvY2FsU3RvcmFnZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBvcmlnaW4sIG1fcXVl
dWUuY29weVJlZigpKSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0
VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YSYgdG9wT3JpZ2luLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIG9wZW5p
bmdPcmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFyZWFJZGVudGlmaWVyKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2lu
ID0geyB0b3BPcmlnaW4sIG9wZW5pbmdPcmlnaW4gfTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihs
b2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbikubG9jYWxTdG9yYWdlTWFuYWdlcigqbV9z
dG9yYWdlQXJlYVJlZ2lzdHJ5KS5jb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKGNv
bm5lY3Rpb24udW5pcXVlSUQoKSwgb3JpZ2luKSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VN
YW5hZ2VyOjpjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIHRvcE9yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChTdG9yYWdlQXJlYUlkZW50aWZpZXIpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorCit7CisgICAg
V2ViQ29yZTo6Q2xpZW50T3JpZ2luIG9yaWdpbiA9IHsgdG9wT3JpZ2luLCB0b3BPcmlnaW4gfTsK
KyAgICBjb21wbGV0aW9uSGFuZGxlcihsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbiku
c2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VBcmVhUmVnaXN0cnkpLmNvbm5lY3RUb1Nl
c3Npb25TdG9yYWdlQXJlYShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIG9yaWdpbiwgaWRlbnRpZmll
cikpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGlzY29ubmVjdEZyb21TdG9y
YWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSWRlbnRpZmll
ciBpZGVudGlmaWVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
YXV0byBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFSZWdpc3RyeS0+Z2V0U3RvcmFnZUFyZWEo
aWRlbnRpZmllcik7CisgICAgaWYgKCFzdG9yYWdlQXJlYSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKHN0b3JhZ2VBcmVhLT5zdG9yYWdlVHlwZSgpID09IFN0b3JhZ2VBcmVhQmFzZTo6U3Rv
cmFnZVR5cGU6OkxvY2FsKQorICAgICAgICBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKHN0b3Jh
Z2VBcmVhLT5vcmlnaW4oKSkubG9jYWxTdG9yYWdlTWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lz
dHJ5KS5kaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaWRl
bnRpZmllcik7CisgICAgZWxzZQorICAgICAgICBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKHN0
b3JhZ2VBcmVhLT5vcmlnaW4oKSkuc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VBcmVh
UmVnaXN0cnkpLmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJRCgp
LCBpZGVudGlmaWVyKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBTdG9yYWdl
TmFtZXNwYWNlSWRlbnRpZmllciBmcm9tSWRlbnRpZmllciwgU3RvcmFnZU5hbWVzcGFjZUlkZW50
aWZpZXIgdG9JZGVudGlmaWVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy52
YWx1ZXMoKSkgeworICAgICAgICBpZiAoYXV0byogc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyID0gbWFu
YWdlci0+ZXhpc3RpbmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIoKSkKKyAgICAgICAgICAgIHNlc3Np
b25TdG9yYWdlTWFuYWdlci0+Y2xvbmVTdG9yYWdlQXJlYShjb25uZWN0aW9uLnVuaXF1ZUlEKCks
IGZyb21JZGVudGlmaWVyLCB0b0lkZW50aWZpZXIpOworICAgIH0KK30KKwordm9pZCBOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyhTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgYXV0byBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFSZWdpc3RyeS0+Z2V0U3Rv
cmFnZUFyZWEoaWRlbnRpZmllcik7CisgICAgaWYgKCFzdG9yYWdlQXJlYSkKKyAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsgfSk7CisKKyAg
ICBjb21wbGV0aW9uSGFuZGxlcihzdG9yYWdlQXJlYS0+YWxsSXRlbXMoKSk7Cit9CisKK3ZvaWQg
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzZXRJdGVtKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50
aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHN0b3JhZ2VBcmVh
ID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9yYWdlQXJlYShpZGVudGlmaWVyKTsKKyAg
ICBib29sIHF1b3RhRXJyb3IgPSBmYWxzZTsKKyAgICBpZiAoc3RvcmFnZUFyZWEpIHsKKyAgICAg
ICAgYXV0byByZXN1bHQgPSBzdG9yYWdlQXJlYS0+c2V0SXRlbShjb25uZWN0aW9uLnVuaXF1ZUlE
KCksIGltcGxJZGVudGlmaWVyLCBrZXksIHZhbHVlLCB1cmxTdHJpbmcpOworICAgICAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgICAgIHF1b3RhRXJyb3IgPSAocmVzdWx0LmVycm9yKCkgPT0gU3Rv
cmFnZUVycm9yOjpRdW90YUV4Y2VlZGVkKTsKKyAgICB9CisKKyAgICBjb25uZWN0aW9uLnNlbmQo
TWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRTZXRJdGVtKHN0b3JhZ2VNYXBTZWVkLCBrZXks
IHF1b3RhRXJyb3IpLCBpZGVudGlmaWVyKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OnJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRp
ZmllciwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhUmVnaXN0cnktPmdldFN0b3JhZ2VB
cmVhKGlkZW50aWZpZXIpOworICAgIGlmIChzdG9yYWdlQXJlYSkKKyAgICAgICAgc3RvcmFnZUFy
ZWEtPnJlbW92ZUl0ZW0oY29ubmVjdGlvbi51bmlxdWVJRCgpLCBpbXBsSWRlbnRpZmllciwga2V5
LCB1cmxTdHJpbmcpOworCisgICAgY29ubmVjdGlvbi5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJl
YU1hcDo6RGlkUmVtb3ZlSXRlbShzdG9yYWdlTWFwU2VlZCwga2V5KSwgaWRlbnRpZmllcik7Cit9
CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbGVhcihJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBTdG9yYWdlQXJlYUlt
cGxJZGVudGlmaWVyIGltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9y
YWdlQXJlYShpZGVudGlmaWVyKTsKKyAgICBpZiAoc3RvcmFnZUFyZWEpCisgICAgICAgIHN0b3Jh
Z2VBcmVhLT5jbGVhcihjb25uZWN0aW9uLnVuaXF1ZUlEKCksIGltcGxJZGVudGlmaWVyLCB1cmxT
dHJpbmcpOworCisgICAgY29ubmVjdGlvbi5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6
RGlkQ2xlYXIoc3RvcmFnZU1hcFNlZWQpLCBpZGVudGlmaWVyKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaAppbmRleCAyYWRkZjJiNWUyMGFkMzZk
MjhlNDQ1OTdlYTQxM2ZmZTg5NjFhNDBmLi5iYTY1NmM1OTE1OWZiMDlhYmVkNWIwNDY2YTg5MTNh
M2RkMzg0M2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oCkBAIC0yOCw2ICsyOCw5IEBACiAj
aW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3Iu
aCIKICNpbmNsdWRlICJPcmlnaW5TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VB
cmVhSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIuaCIK
KyNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIldlYnNp
dGVEYXRhLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLmg+CkBAIC00NiwxMCArNDksMTIgQEAg
c3RydWN0IENsaWVudE9yaWdpbjsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBGaWxlU3lz
dGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5OworY2xhc3MgU3RvcmFnZUFyZWFSZWdpc3RyeTsKIAog
Y2xhc3MgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIGZpbmFsIDogcHVibGljIElQQzo6Q29ubmVjdGlv
bjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE5l
dHdvcmtTdG9yYWdlTWFuYWdlcj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcm
IHBhdGgpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1N0b3JhZ2VNYW5hZ2VyPiBjcmVhdGUoUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGN1
c3RvbUxvY2FsU3RvcmFnZVBhdGgpOworICAgIHN0YXRpYyBib29sIGNhbkhhbmRsZVR5cGVzKE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+KTsKIAogICAgIHZvaWQgc3RhcnRSZWNlaXZpbmdNZXNz
YWdlRnJvbUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uJik7CiAgICAgdm9pZCBzdG9wUmVjZWl2
aW5nTWVzc2FnZUZyb21Db25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiYpOwpAQCAtNjEsMjIgKzY2
LDMwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGRlbGV0ZURhdGFNb2RpZmllZFNpbmNl
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKICAgICB2b2lkIGRlbGV0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMoT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbj4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4+JiYpPiYmKTsKKyAgICB2b2lkIG1vdmVEYXRhKGNvbnN0IFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luRGF0YSYgc291cmNlLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGEmIHRhcmdldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHN1c3Bl
bmQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHJlc3VtZSgpOworICAg
IHZvaWQgaGFuZGxlTG93TWVtb3J5V2FybmluZygpOworICAgIHZvaWQgc3luY0xvY2FsU3RvcmFn
ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiBwcml2YXRlOgotICAgIE5ldHdvcmtT
dG9yYWdlTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBO
ZXR3b3JrU3RvcmFnZU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCwg
c3RkOjpvcHRpb25hbDxTdHJpbmc+IGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgpOwogICAgIH5OZXR3
b3JrU3RvcmFnZU1hbmFnZXIoKTsKICAgICBPcmlnaW5TdG9yYWdlTWFuYWdlciYgbG9jYWxPcmln
aW5TdG9yYWdlTWFuYWdlcihjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKLSAgICB2b2lk
IHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGll
bnRPcmlnaW4mKTsKKyAgICBib29sIHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJs
ZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICB2b2lkIGRlbGV0ZU9yaWdpbkRp
cmVjdG9yeUlmUG9zc2libGUoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CiAgICAgRmls
ZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSYgZmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdp
c3RyeSgpOwogCiAgICAgdm9pZCBmb3JFYWNoT3JpZ2luRGlyZWN0b3J5KGNvbnN0IEZ1bmN0aW9u
PHZvaWQoY29uc3QgU3RyaW5nJik+Jik7CisgICAgSGFzaFNldDxXZWJDb3JlOjpDbGllbnRPcmln
aW4+IGdldEFsbE9yaWdpbnMoKTsKICAgICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBmZXRj
aERhdGFGcm9tRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPik7Ci0gICAgVmVjdG9yPFdl
YkNvcmU6OkNsaWVudE9yaWdpbj4gZGVsZXRlRGF0YU9uRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiwgV2FsbFRpbWUsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJik+Jik7CisgICAgSGFzaFNldDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IGRlbGV0
ZURhdGFPbkRpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lLCBjb25zdCBG
dW5jdGlvbjxib29sKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpPiYpOwogCiAgICAgLy8g
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgKGltcGxlbWVudGVkIGJ5IGdlbmVyYXRlZCBjb2RlKQogICAg
IHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7
CisgICAgYm9vbCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2Rlcik7CiAKLSAgICAv
LyBNZXNzYWdlIGhhbmRsZXJzCisgICAgLy8gTWVzc2FnZSBoYW5kbGVycyBmb3IgRmlsZVN5c3Rl
bQogICAgIHZvaWQgcGVyc2lzdGVkKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgcGVyc2lzdChjb25zdCBXZWJD
b3JlOjpDbGllbnRPcmlnaW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAg
ICB2b2lkIGZpbGVTeXN0ZW1HZXREaXJlY3RvcnkoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgV2Vi
Q29yZTo6Q2xpZW50T3JpZ2luJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeHBlY3RlZDxXZWJD
b3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgRmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4p
PiYmKTsKQEAgLTg4LDIyICsxMDEsMzMgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZUVudHJ5
KFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wgZGVsZXRlUmVjdXJzaXZlbHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRp
b25hbDxGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOwogICAgIHZvaWQgcmVzb2x2ZShXZWJD
b3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRs
ZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwZWN0ZWQ8VmVjdG9yPFN0cmlu
Zz4sIEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCBnZXRGaWxlKFdlYkNv
cmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4
cGVjdGVkPFN0cmluZywgRmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsKLQogICAgIHVzaW5n
IEFjY2Vzc0hhbmRsZUluZm8gPSBzdGQ6OnBhaXI8V2ViQ29yZTo6RmlsZVN5c3RlbVN5bmNBY2Nl
c3NIYW5kbGVJZGVudGlmaWVyLCBJUEM6OlNoYXJlZEZpbGVIYW5kbGU+OwogICAgIHZvaWQgY3Jl
YXRlU3luY0FjY2Vzc0hhbmRsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChFeHBlY3RlZDxBY2Nlc3NIYW5kbGVJbmZvLCBGaWxlU3lz
dGVtU3RvcmFnZUVycm9yPik+JiYpOwogICAgIHZvaWQgY2xvc2VBY2Nlc3NIYW5kbGUoV2ViQ29y
ZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZpbGVTeXN0ZW1TeW5jQWNj
ZXNzSGFuZGxlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFs
PEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCBnZXRIYW5kbGVOYW1lcyhX
ZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChFeHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgRmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsK
ICAgICB2b2lkIGdldEhhbmRsZShJUEM6OkNvbm5lY3Rpb24mLCBXZWJDb3JlOjpGaWxlU3lzdGVt
SGFuZGxlSWRlbnRpZmllciwgU3RyaW5nJiYgbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChF
eHBlY3RlZDxzdGQ6OnBhaXI8V2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIGJv
b2w+LCBGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOworICAgIAorICAgIC8vIE1lc3NhZ2Ug
aGFuZGxlcnMgZm9yIFdlYlN0b3JhZ2UKKyAgICB2b2lkIGNvbm5lY3RUb0xvY2FsU3RvcmFnZUFy
ZWEoSVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFn
ZUFyZWFJZGVudGlmaWVyKT4mJik7CisgICAgdm9pZCBjb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0
b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGEmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBcmVhSWRlbnRpZmll
cik+JiYpOworICAgIHZvaWQgY29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKElQQzo6Q29ubmVj
dGlvbiYsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGEmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBcmVhSWRlbnRpZmll
cik+JiYpOworICAgIHZvaWQgZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rp
b24mLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIpOworICAgIHZvaWQgY2xvbmVTZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZShJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwg
U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZ2V0VmFsdWVzKFN0b3JhZ2VB
cmVhSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiYpPiYmKTsKKyAgICB2b2lkIHNldEl0ZW0oSVBDOjpDb25uZWN0aW9uJiwgU3Rv
cmFnZUFyZWFJZGVudGlmaWVyLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBz
ZWVkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpOworICAgIHZvaWQgcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb24mLCBTdG9y
YWdlQXJlYUlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHNl
ZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CisgICAgdm9p
ZCBjbGVhcihJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIsIFN0b3JhZ2VB
cmVhSW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHNlZWQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
KTsKIAogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwotICAgIFJlZjxXb3JrUXVldWU+
IG1fcXVldWU7CisgICAgUmVmPFN1c3BlbmRhYmxlV29ya1F1ZXVlPiBtX3F1ZXVlOwogICAgIFN0
cmluZyBtX3BhdGg7CiAgICAgRmlsZVN5c3RlbTo6U2FsdCBtX3NhbHQ7CiAgICAgYm9vbCBtX2Ns
b3NlZCB7IGZhbHNlIH07CiAgICAgSGFzaE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIHN0ZDo6
dW5pcXVlX3B0cjxPcmlnaW5TdG9yYWdlTWFuYWdlcj4+IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFu
YWdlcnM7Ci0gICAgSGFzaE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0
cjxPcmlnaW5TdG9yYWdlTWFuYWdlcj4+IG1fc2Vzc2lvbk9yaWdpblN0b3JhZ2VNYW5hZ2VyczsK
ICAgICBXZWFrSGFzaFNldDxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbnM7IC8vIE1haW4g
dGhyZWFkIG9ubHkuCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxl
UmVnaXN0cnk+IG1fZmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8U3RvcmFnZUFyZWFSZWdpc3RyeT4gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5OworICAg
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGg7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLm1lc3Nh
Z2VzLmluCmluZGV4IDRlNDA1YzZlZWFkMzI2ZTI1YjQzMTY0MjA3MDgwOTVmYTYwZGM4MzguLjA0
MjJiNjM0NzUxZDAzODVmODRlMDFmNjRhYzYxZGFmMzFjMTVlODggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIubWVz
c2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdv
cmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbgpAQCAtMzUsOSArMzUsMTggQEAKICAgICBSZXNv
bHZlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNv
cmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIHRhcmdldElkZW50aWZpZXIpIC0+IChFeHBl
Y3RlZDxWZWN0b3I8U3RyaW5nPiwgV2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1
bHQpIEFzeW5jCiAgICAgTW92ZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBkZXN0aW5hdGlv
bklkZW50aWZpZXIsIFN0cmluZyBuZXdOYW1lKSAtPiAoc3RkOjpvcHRpb25hbDxXZWJLaXQ6OkZp
bGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkgQXN5bmMKICAgICBHZXRGaWxlKFdlYkNvcmU6
OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChFeHBlY3RlZDxTdHJp
bmcsIFdlYktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYwotCiAgICAg
Q3JlYXRlU3luY0FjY2Vzc0hhbmRsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmll
ciBpZGVudGlmaWVyKSAtPiAoRXhwZWN0ZWQ8c3RkOjpwYWlyPFdlYkNvcmU6OkZpbGVTeXN0ZW1T
eW5jQWNjZXNzSGFuZGxlSWRlbnRpZmllciwgSVBDOjpTaGFyZWRGaWxlSGFuZGxlPiwgV2ViS2l0
OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5jCiAgICAgQ2xvc2VBY2Nlc3NI
YW5kbGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgV2Vi
Q29yZTo6RmlsZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyIGFjY2Vzc0hhbmRsZUlk
ZW50aWZpZXIpIC0+IChzdGQ6Om9wdGlvbmFsPFdlYktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJv
cj4gcmVzdWx0KSBBc3luYwogICAgIEdldEhhbmRsZU5hbWVzKFdlYkNvcmU6OkZpbGVTeXN0ZW1I
YW5kbGVJZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChFeHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwg
V2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5jCiAgICAgR2V0SGFu
ZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0cmlu
ZyBuYW1lKSAtPiAoRXhwZWN0ZWQ8c3RkOjpwYWlyPFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJ
ZGVudGlmaWVyLCBib29sPiwgV2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQp
IEFzeW5jIFdhbnRzQ29ubmVjdGlvbgorCisgICAgQ29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShX
ZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHN0b3JhZ2VOYW1lc3BhY2VJRCwgc3Ry
dWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBzZWN1cml0eU9yaWdpbkRhdGEpIC0+IChX
ZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKSBTeW5jaHJvbm91cyBXYW50
c0Nvbm5lY3Rpb24KKyAgICBDb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKFdlYktp
dDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgc3RvcmFnZU5hbWVzcGFjZUlELCBzdHJ1Y3Qg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHRvcExldmVsU2VjdXJpdHlPcmlnaW5EYXRhLCBz
dHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHNlY3VyaXR5T3JpZ2luRGF0YSkgLT4g
KFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpIFN5bmNocm9ub3VzIFdh
bnRzQ29ubmVjdGlvbgorICAgIENvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYShXZWJLaXQ6OlN0
b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHN0b3JhZ2VOYW1lc3BhY2VJRCwgc3RydWN0IFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBzZWN1cml0eU9yaWdpbkRhdGEpIC0+IChXZWJLaXQ6OlN0
b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rp
b24KKyAgICBEaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVu
dGlmaWVyIGlkZW50aWZpZXIpIFdhbnRzQ29ubmVjdGlvbgorICAgIENsb25lU2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBmcm9tU3RvcmFn
ZU5hbWVzcGFjZUlELCBXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHRvU3RvcmFn
ZU5hbWVzcGFjZUlEKSBXYW50c0Nvbm5lY3Rpb24KKyAgICBHZXRWYWx1ZXMoV2ViS2l0OjpTdG9y
YWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
IHZhbHVlcykgU3luY2hyb25vdXMKKyAgICBTZXRJdGVtKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBs
SWRlbnRpZmllciwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIFN0cmluZyBrZXksIFN0cmluZyB2
YWx1ZSwgU3RyaW5nIHVybFN0cmluZykgV2FudHNDb25uZWN0aW9uCisgICAgUmVtb3ZlSXRlbShX
ZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJLaXQ6OlN0b3JhZ2VB
cmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVk
LCBTdHJpbmcga2V5LCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50c0Nvbm5lY3Rpb24KKyAgICBDbGVh
cihXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJLaXQ6OlN0b3Jh
Z2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBT
ZWVkLCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50c0Nvbm5lY3Rpb24KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1h
bmFnZXIuY3BwCmluZGV4IDhjZDY1NWJlMjUwNWE1YjMzNDZhYTMzNTVkZjhiMjY4MWYxMTVlZWUu
LjIzM2UyMWY4MmUzMmFjMDUxOGE2YzhiNDZkZTJlNmY5ZmMzMmExNzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3Jh
Z2VNYW5hZ2VyLmNwcApAQCAtMjgsMTcgKzI4LDI0IEBACiAKICNpbmNsdWRlICJGaWxlU3lzdGVt
U3RvcmFnZUhhbmRsZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VNYW5h
Z2VyLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIlNlc3Np
b25TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhUmVnaXN0cnkuaCIKKyNp
bmNsdWRlICJXZWJzaXRlRGF0YVR5cGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZUZpbGVT
eXN0ZW0uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0YXRpYyBjb25zdGV4cHIgYXV0byBv
cmlnaW5GaWxlTmFtZSA9ICJvcmlnaW4iX3M7CiBlbnVtIGNsYXNzIE9yaWdpblN0b3JhZ2VNYW5h
Z2VyOjpTdG9yYWdlQnVja2V0TW9kZSA6IGJvb2wgeyBCZXN0RWZmb3J0LCBQZXJzaXN0ZW50IH07
CiAKIGNsYXNzIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0IHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBTdG9yYWdlQnVja2V0KGNvbnN0IFN0
cmluZyYgcm9vdFBhdGgsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKKyAgICBTdG9yYWdlQnVj
a2V0KGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgc3Rk
OjpvcHRpb25hbDxTdHJpbmc+IGxvY2FsU3RvcmFnZVBhdGgpCiAgICAgICAgIDogbV9yb290UGF0
aChyb290UGF0aCkKICAgICAgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAgICAg
LCBtX2xvY2FsU3RvcmFnZVBhdGgobG9jYWxTdG9yYWdlUGF0aCkKICAgICB7CiAgICAgfQogCkBA
IC01MywxMyArNjAsMjcgQEAgcHVibGljOgogCiAgICAgZW51bSBjbGFzcyBTdG9yYWdlVHlwZSA6
IHVpbnQ4X3QgewogICAgICAgICBGaWxlU3lzdGVtLAorICAgICAgICBMb2NhbFN0b3JhZ2UsCisg
ICAgICAgIFNlc3Npb25TdG9yYWdlLAogICAgIH07CiAKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25h
bDxXZWJzaXRlRGF0YVR5cGU+IHRvV2Vic2l0ZURhdGFUeXBlKGNvbnN0IFN0cmluZyYgc3RvcmFn
ZUlkZW50aWZpZXIpCisgICAgeworICAgICAgICBpZiAoc3RvcmFnZUlkZW50aWZpZXIgPT0gIkZp
bGVTeXN0ZW0iKQorICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3Rl
bTsKKworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwogICAgIHN0YXRpYyBT
dHJpbmcgdG9TdG9yYWdlSWRlbnRpZmllcihTdG9yYWdlVHlwZSB0eXBlKQogICAgIHsKICAgICAg
ICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgU3RvcmFnZVR5cGU6OkZpbGVTeXN0ZW06
CiAgICAgICAgICAgICByZXR1cm4gIkZpbGVTeXN0ZW0iX3M7CisgICAgICAgIGNhc2UgU3RvcmFn
ZVR5cGU6OkxvY2FsU3RvcmFnZToKKyAgICAgICAgICAgIHJldHVybiAiTG9jYWxTdG9yYWdlIl9z
OworICAgICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpTZXNzaW9uU3RvcmFnZToKKyAgICAgICAgICAg
IHJldHVybiAiU2Vzc2lvblN0b3JhZ2UiX3M7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtODQsMTggKzEwNSwxMTcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gKm1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOwogICAgIH0KIAorICAgIExvY2Fs
U3RvcmFnZU1hbmFnZXImIGxvY2FsU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYg
cmVnaXN0cnkpCisgICAgeworICAgICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTWFuYWdlcikKKyAg
ICAgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlciA9IG1ha2VVbmlxdWU8TG9jYWxTdG9yYWdl
TWFuYWdlcj4obV9sb2NhbFN0b3JhZ2VQYXRoID8gKm1fbG9jYWxTdG9yYWdlUGF0aCA6IFN0cmlu
ZyB7IH0sIHJlZ2lzdHJ5KTsKKworICAgICAgICByZXR1cm4gKm1fbG9jYWxTdG9yYWdlTWFuYWdl
cjsKKyAgICB9CisKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ0xvY2FsU3RvcmFn
ZU1hbmFnZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWxTdG9yYWdlTWFuYWdlci5n
ZXQoKTsKKyAgICB9CisKKyAgICBTZXNzaW9uU3RvcmFnZU1hbmFnZXImIHNlc3Npb25TdG9yYWdl
TWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKKyAgICB7CisgICAgICAgIGlm
ICghbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIpCisgICAgICAgICAgICBtX3Nlc3Npb25TdG9yYWdl
TWFuYWdlciA9IG1ha2VVbmlxdWU8U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyPihyZWdpc3RyeSk7CisK
KyAgICAgICAgcmV0dXJuICptX3Nlc3Npb25TdG9yYWdlTWFuYWdlcjsKKyAgICB9CisKKyAgICBT
ZXNzaW9uU3RvcmFnZU1hbmFnZXIqIGV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlci5nZXQoKTsKKyAgICB9
CisKICAgICBib29sIGlzQWN0aXZlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAhIW1fZmlsZVN5
c3RlbVN0b3JhZ2VNYW5hZ2VyOworICAgICAgICByZXR1cm4gbV9maWxlU3lzdGVtU3RvcmFnZU1h
bmFnZXIgfHwgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyIHx8IG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
OworICAgIH0KKworICAgIGJvb2wgaXNFbXB0eSgpCisgICAgeworICAgICAgICBhdXRvIGZpbGVz
ID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShtX3Jvb3RQYXRoKTsKKyAgICAgICAgYXV0byBo
YXNWYWxpZEZpbGUgPSBXVEY6OmFueU9mKGZpbGVzLCBbJl0oYXV0byBmaWxlKSB7CisgICAgICAg
ICAgICByZXR1cm4gZmlsZSAhPSAiLkRTX1N0b3JlIl9zICYmIGZpbGUgIT0gb3JpZ2luRmlsZU5h
bWU7CisgICAgICAgIH0pOworICAgICAgICBpZiAoaGFzVmFsaWRGaWxlKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZVBhdGgpCisgICAgICAg
ICAgICByZXR1cm4gRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cygqbV9sb2NhbFN0b3JhZ2VQYXRoKTsK
KworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiBmZXRjaERhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCisgICAg
eworICAgICAgICBhdXRvIHJlc3VsdCA9IGZldGNoRGF0YUluTWVtb3J5KHR5cGVzKTsKKyAgICAg
ICAgcmVzdWx0LmFkZChmZXRjaERhdGFGcm9tRGlzayh0eXBlcykpOworCisgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCiAgICAgdm9pZCBkZWxldGVEYXRhKE9wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+IHR5cGVzLCBXYWxsVGltZSBtb2RpZmllZFNpbmNlVGltZSkKICAgICB7CiAgICAg
ICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW0pKQogICAg
ICAgICAgICAgZGVsZXRlRmlsZVN5c3RlbVN0b3JhZ2VEYXRhKG1vZGlmaWVkU2luY2VUaW1lKTsK
KworICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3Jh
Z2UpKQorICAgICAgICAgICAgZGVsZXRlTG9jYWxTdG9yYWdlRGF0YShtb2RpZmllZFNpbmNlVGlt
ZSk7CisKKyAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lv
blN0b3JhZ2UpICYmIG1vZGlmaWVkU2luY2VUaW1lID09IC1XYWxsVGltZTo6aW5maW5pdHkoKSkK
KyAgICAgICAgICAgIGRlbGV0ZVNlc3Npb25TdG9yYWdlRGF0YSgpOworICAgIH0KKworICAgIHZv
aWQgbW92ZURhdGEoY29uc3QgU3RyaW5nJiBwYXRoLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbG9j
YWxTdG9yYWdlUGF0aCkKKyAgICB7CisgICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2Vy
ID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdlcikKKyAgICAgICAg
ICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+Y2xvc2UoKTsKKworICAgICAgICBGaWxlU3lzdGVt
Ojptb3ZlRmlsZShtX3Jvb3RQYXRoLCBwYXRoKTsKKworICAgICAgICBpZiAobV9sb2NhbFN0b3Jh
Z2VQYXRoICYmIGxvY2FsU3RvcmFnZVBhdGgpCisgICAgICAgICAgICBXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjptb3ZlRGF0YWJhc2VGaWxlKCptX2xvY2FsU3RvcmFnZVBhdGgsICpsb2NhbFN0
b3JhZ2VQYXRoKTsKICAgICB9CiAKIHByaXZhdGU6CisgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gZmV0Y2hEYXRhSW5NZW1vcnkoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMp
CisgICAgeworICAgICAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiByZXN1bHQgeyB9Owor
ICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2Up
KSB7CisgICAgICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VNYW5hZ2VyICYmIG1fbG9jYWxTdG9y
YWdlTWFuYWdlci0+aGFzRGF0YUluTWVtb3J5KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFk
ZChXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkpIHsKKyAg
ICAgICAgICAgIGlmIChtX3Nlc3Npb25TdG9yYWdlTWFuYWdlciAmJiBtX3Nlc3Npb25TdG9yYWdl
TWFuYWdlci0+aGFzRGF0YUluTWVtb3J5KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChX
ZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZmV0
Y2hEYXRhRnJvbURpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCisgICAgewor
ICAgICAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiByZXN1bHQgeyB9OworICAgICAgICBm
b3IgKGF1dG8mIHN0b3JhZ2VUeXBlIDogRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShtX3Jvb3RQ
YXRoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gdHlwZSA9IHRvV2Vic2l0ZURhdGFUeXBlKHN0
b3JhZ2VUeXBlKTsgdHlwZSAmJiB0eXBlcy5jb250YWlucygqdHlwZSkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFkZCgqdHlwZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpICYmICFyZXN1bHQuY29udGFpbnMo
V2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpKSB7CisgICAgICAgICAgICBpZiAobV9sb2Nh
bFN0b3JhZ2VQYXRoICYmIEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoKm1fbG9jYWxTdG9yYWdlUGF0
aCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3Rv
cmFnZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAg
IHZvaWQgZGVsZXRlRmlsZVN5c3RlbVN0b3JhZ2VEYXRhKFdhbGxUaW1lIG1vZGlmaWVkU2luY2VU
aW1lKQogICAgIHsKICAgICAgICAgbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIgPSBudWxscHRy
OwpAQCAtMTA0LDE0ICsyMjQsNDMgQEAgcHJpdmF0ZToKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVs
ZXRlQWxsRmlsZXNNb2RpZmllZFNpbmNlKGZpbGVTeXN0ZW1TdG9yYWdlUGF0aCwgbW9kaWZpZWRT
aW5jZVRpbWUpOwogICAgIH0KIAorICAgIHZvaWQgZGVsZXRlTG9jYWxTdG9yYWdlRGF0YShXYWxs
VGltZSB0aW1lKQorICAgIHsKKyAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdlcikgewor
ICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLT5jbGVhckRhdGEoKTsKKworICAgICAg
ICAgICAgaWYgKCFtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmlzQWN0aXZlKCkpCisgICAgICAgICAg
ICAgICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChtX2xvY2FsU3RvcmFnZVBhdGgpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIG1vZGlm
aWNhdGlvblRpbWUgPSBGaWxlU3lzdGVtOjpmaWxlTW9kaWZpY2F0aW9uVGltZSgqbV9sb2NhbFN0
b3JhZ2VQYXRoKTsgbW9kaWZpY2F0aW9uVGltZSAmJiAqbW9kaWZpY2F0aW9uVGltZSA+PSB0aW1l
KQorICAgICAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFi
YXNlRmlsZSgqbV9sb2NhbFN0b3JhZ2VQYXRoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKCkKKyAgICB7CisgICAgICAgIGlmICghbV9zZXNz
aW9uU3RvcmFnZU1hbmFnZXIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9zZXNz
aW9uU3RvcmFnZU1hbmFnZXItPmNsZWFyRGF0YSgpOworICAgICAgICBpZiAoIW1fc2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1h
bmFnZXIgPSBudWxscHRyOworICAgIH0KKyAgICAKICAgICBTdHJpbmcgbV9yb290UGF0aDsKICAg
ICBTdHJpbmcgbV9pZGVudGlmaWVyOwogICAgIFN0b3JhZ2VCdWNrZXRNb2RlIG1fbW9kZSB7IFN0
b3JhZ2VCdWNrZXRNb2RlOjpCZXN0RWZmb3J0IH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbGVT
eXN0ZW1TdG9yYWdlTWFuYWdlcj4gbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPExvY2FsU3RvcmFnZU1hbmFnZXI+IG1fbG9jYWxTdG9yYWdlTWFuYWdlcjsK
KyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbV9sb2NhbFN0b3JhZ2VQYXRoOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxTZXNzaW9uU3RvcmFnZU1hbmFnZXI+IG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
OwogfTsKIAotT3JpZ2luU3RvcmFnZU1hbmFnZXI6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyKFN0cmlu
ZyYmIHBhdGgpCitPcmlnaW5TdG9yYWdlTWFuYWdlcjo6T3JpZ2luU3RvcmFnZU1hbmFnZXIoU3Ry
aW5nJiYgcGF0aCwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGxvY2FsU3RvcmFnZVBhdGgpCiAgICAg
OiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKKyAgICAsIG1fbG9jYWxTdG9yYWdlUGF0aChXVEZNb3Zl
KGxvY2FsU3RvcmFnZVBhdGgpKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwog
fQpAQCAtMTI3LDcgKzI3Niw3IEBAIHZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3Rp
b25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uCiBPcmlnaW5TdG9y
YWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldCYgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmRlZmF1bHRC
dWNrZXQoKQogewogICAgIGlmICghbV9kZWZhdWx0QnVja2V0KQotICAgICAgICBtX2RlZmF1bHRC
dWNrZXQgPSBtYWtlVW5pcXVlPFN0b3JhZ2VCdWNrZXQ+KG1fcGF0aCwgImRlZmF1bHQiX3MpOwor
ICAgICAgICBtX2RlZmF1bHRCdWNrZXQgPSBtYWtlVW5pcXVlPFN0b3JhZ2VCdWNrZXQ+KG1fcGF0
aCwgImRlZmF1bHQiX3MsIG1fbG9jYWxTdG9yYWdlUGF0aCk7CiAKICAgICByZXR1cm4gKm1fZGVm
YXVsdEJ1Y2tldDsKIH0KQEAgLTEzNywxNSArMjg2LDM0IEBAIEZpbGVTeXN0ZW1TdG9yYWdlTWFu
YWdlciYgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcihGaWxl
U3lzCiAgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIo
cmVnaXN0cnkpOwogfQogCitMb2NhbFN0b3JhZ2VNYW5hZ2VyJiBPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6bG9jYWxTdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKK3sK
KyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmxvY2FsU3RvcmFnZU1hbmFnZXIocmVnaXN0cnkp
OworfQorCitMb2NhbFN0b3JhZ2VNYW5hZ2VyKiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZXhpc3Rp
bmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkKK3sKKyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmV4
aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcigpOworfQorCitTZXNzaW9uU3RvcmFnZU1hbmFnZXIm
IE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpzZXNzaW9uU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFS
ZWdpc3RyeSYgcmVnaXN0cnkpCit7CisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5zZXNzaW9u
U3RvcmFnZU1hbmFnZXIocmVnaXN0cnkpOworfQorCitTZXNzaW9uU3RvcmFnZU1hbmFnZXIqIE9y
aWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigpCit7Cisg
ICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5leGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigp
OworfQorCiBib29sIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSgpCiB7CiAgICAgcmV0
dXJuIGRlZmF1bHRCdWNrZXQoKS5pc0FjdGl2ZSgpOwogfQogCi12b2lkIE9yaWdpblN0b3JhZ2VN
YW5hZ2VyOjpkZWxldGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzLCBXYWxs
VGltZSBtb2RpZmllZFNpbmNlKQorYm9vbCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6aXNFbXB0eSgp
CiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgZGVmYXVsdEJ1Y2tldCgp
LmRlbGV0ZURhdGEodHlwZXMsIG1vZGlmaWVkU2luY2UpOworICAgIHJldHVybiBkZWZhdWx0QnVj
a2V0KCkuaXNFbXB0eSgpOwogfQogCiB2b2lkIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpzZXRQZXJz
aXN0ZWQoYm9vbCB2YWx1ZSkKQEAgLTE1Niw1ICszMjQsMjYgQEAgdm9pZCBPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6c2V0UGVyc2lzdGVkKGJvb2wgdmFsdWUpCiAgICAgZGVmYXVsdEJ1Y2tldCgpLnNl
dE1vZGUodmFsdWUgPyBTdG9yYWdlQnVja2V0TW9kZTo6UGVyc2lzdGVudCA6IFN0b3JhZ2VCdWNr
ZXRNb2RlOjpCZXN0RWZmb3J0KTsKIH0KIAorT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gT3Jp
Z2luU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0
eXBlcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVybiBk
ZWZhdWx0QnVja2V0KCkuZmV0Y2hEYXRhKHR5cGVzKTsKK30KKwordm9pZCBPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6ZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgV2Fs
bFRpbWUgbW9kaWZpZWRTaW5jZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGRlZmF1bHRCdWNrZXQoKS5kZWxldGVEYXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlKTsK
K30KKwordm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6bW92ZURhdGEoY29uc3QgU3RyaW5nJiBu
ZXdQYXRoLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbG9jYWxTdG9yYWdlUGF0aCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGRlZmF1bHRCdWNrZXQoKS5tb3ZlRGF0
YShuZXdQYXRoLCBXVEZNb3ZlKGxvY2FsU3RvcmFnZVBhdGgpKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmgKaW5kZXggN2FkZmE1YjAzYjZiYTZlM2Y4
Njk4MGIxMmQyZjhhNDRkOWU0ZTY0Yi4uMDZmODY3NzI3NWFhMDNkNjE5NTY2MTUxM2ZiYTI4MTJj
ZjAwNDczZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L09yaWdpblN0b3JhZ2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmgKQEAgLTI2LDMwICsyNiwzNyBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9D
bGllbnRPcmlnaW4uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotbmFtZXNw
YWNlIFdlYkNvcmUgewotc3RydWN0IENsaWVudE9yaWdpbjsKLX0KLQogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnk7CiBjbGFzcyBGaWxl
U3lzdGVtU3RvcmFnZU1hbmFnZXI7CitjbGFzcyBMb2NhbFN0b3JhZ2VNYW5hZ2VyOworY2xhc3Mg
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOworY2xhc3MgU3RvcmFnZUFyZWFSZWdpc3RyeTsKIGVudW0g
Y2xhc3MgV2Vic2l0ZURhdGFUeXBlIDogdWludDMyX3Q7CiAKIGNsYXNzIE9yaWdpblN0b3JhZ2VN
YW5hZ2VyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBs
aWNpdCBPcmlnaW5TdG9yYWdlTWFuYWdlcihTdHJpbmcmJiBwYXRoKTsKKyAgICBPcmlnaW5TdG9y
YWdlTWFuYWdlcihTdHJpbmcmJiBwYXRoLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbG9jYWxTdG9y
YWdlUGF0aCk7CiAgICAgfk9yaWdpblN0b3JhZ2VNYW5hZ2VyKCk7CiAKICAgICB2b2lkIGNvbm5l
Y3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7CiAgICAgYm9vbCBwZXJzaXN0
ZWQoKSBjb25zdCB7IHJldHVybiBtX3BlcnNpc3RlZDsgfQogICAgIHZvaWQgc2V0UGVyc2lzdGVk
KGJvb2wgdmFsdWUpOwogICAgIEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlciYgZmlsZVN5c3RlbVN0
b3JhZ2VNYW5hZ2VyKEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkmKTsKKyAgICBMb2Nh
bFN0b3JhZ2VNYW5hZ2VyJiBsb2NhbFN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkm
KTsKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIo
KTsKKyAgICBTZXNzaW9uU3RvcmFnZU1hbmFnZXImIHNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9y
YWdlQXJlYVJlZ2lzdHJ5Jik7CisgICAgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ1Nl
c3Npb25TdG9yYWdlTWFuYWdlcigpOwogICAgIGJvb2wgaXNBY3RpdmUoKTsKKyAgICBib29sIGlz
RW1wdHkoKTsKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGEoT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4pOwogICAgIHZvaWQgZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUpOworICAgIHZvaWQgbW92ZURhdGEoY29uc3QgU3RyaW5n
JiBuZXdQYXRoLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbG9jYWxTdG9yYWdlUGF0aCk7CiAKIHBy
aXZhdGU6CiAgICAgZW51bSBjbGFzcyBTdG9yYWdlQnVja2V0TW9kZSA6IGJvb2w7CkBAIC02Miw2
ICs2OSw4IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2VCdWNrZXQ+IG1f
ZGVmYXVsdEJ1Y2tldDsKICAgICBTdHJpbmcgbV9wYXRoOwogICAgIGJvb2wgbV9wZXJzaXN0ZWQg
eyBmYWxzZSB9OworCisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG1fbG9jYWxTdG9yYWdlUGF0
aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWJhYjE0NmJjNzIwNjQwZDEwZmEzMTYxNjg1ZjJlOTk3OTdkOTY4MgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9y
YWdlQXJlYS5jcHAKQEAgLTAsMCArMSwzODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU1FMaXRlU3RvcmFnZUFyZWEuaCIKKworI2luY2x1ZGUgPFdlYkNv
cmUvU1FMaXRlRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2FjdGlvbi5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU3RvcmFnZU1hcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY29uc3RleHByIFNl
Y29uZHMgdHJhbnNhY3Rpb25EdXJhdGlvbiB7IDUwMF9tcyB9OworY29uc3RleHByIHVuc2lnbmVk
IG1heGltdW1TaXplRm9yVmFsdWVzS2VwdEluTWVtb3J5IHsgMSAqIEtCIH07Citjb25zdGV4cHIg
YXV0byBjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnRBbHRlcm5hdGl2ZSA9ICJDUkVBVEUgVEFCTEUg
SUYgTk9UIEVYSVNUUyBJdGVtVGFibGUgKGtleSBURVhUIFVOSVFVRSBPTiBDT05GTElDVCBSRVBM
QUNFLCB2YWx1ZSBCTE9CIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIl9zOworY29uc3RleHBy
IGF1dG8gY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50ID0gIkNSRUFURSBUQUJMRSBJdGVtVGFibGUg
KGtleSBURVhUIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLCB2YWx1ZSBCTE9CIE5PVCBOVUxM
IE9OIENPTkZMSUNUIEZBSUwpIl9zOworCitBU0NJSUxpdGVyYWwgU1FMaXRlU3RvcmFnZUFyZWE6
OnN0YXRlbWVudFN0cmluZyhTdGF0ZW1lbnRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpDb3VudEl0ZW1zOgorICAgICAgICBy
ZXR1cm4gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJsZSJfczsKKyAgICBjYXNlIFN0YXRl
bWVudFR5cGU6OkRlbGV0ZUl0ZW06CisgICAgICAgIHJldHVybiAiREVMRVRFIEZST00gSXRlbVRh
YmxlIFdIRVJFIGtleT0/Il9zOworICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6RGVsZXRlQWxsSXRl
bXM6CisgICAgICAgIHJldHVybiAiREVMRVRFIEZST00gSXRlbVRhYmxlIl9zOworICAgIGNhc2Ug
U3RhdGVtZW50VHlwZTo6R2V0SXRlbToKKyAgICAgICAgcmV0dXJuICJTRUxFQ1QgdmFsdWUgRlJP
TSBJdGVtVGFibGUgV0hFUkUga2V5PT8iX3M7CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpHZXRB
bGxJdGVtczoKKyAgICAgICAgcmV0dXJuICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJs
ZSJfczsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OlNldEl0ZW06CisgICAgICAgIHJldHVybiAi
SU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPykiX3M7CisgICAgY2FzZSBTdGF0ZW1l
bnRUeXBlOjpJbnZhbGlkOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIiJfczsKK30KKworU1FMaXRlU3RvcmFnZUFyZWE6OlNR
TGl0ZVN0b3JhZ2VBcmVhKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoLCBSZWY8V29ya1F1ZXVlPiYmIHdvcmtRdWV1
ZSkKKyAgICA6IFN0b3JhZ2VBcmVhQmFzZShxdW90YSwgb3JpZ2luKQorICAgICwgbV9wYXRoKHBh
dGgpCisgICAgLCBtX3F1ZXVlKFdURk1vdmUod29ya1F1ZXVlKSkKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHNpemVfdD4oU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7
ICsraSkKKyAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzLmFwcGVuZChudWxscHRyKTsKK30KKwor
dm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y2xvc2UoKQoreworICAgIG1fY2FjaGUgPSBzdGQ6Om51
bGxvcHQ7CisgICAgY29tbWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZW1lbnRUeXBlOjpJbnZhbGlk
KTsgKytpKQorICAgICAgICBtX2NhY2hlZFN0YXRlbWVudHNbaV0gPSBudWxscHRyOworICAgIG1f
ZGF0YWJhc2UgPSBudWxscHRyOworfQorCitTUUxpdGVTdG9yYWdlQXJlYTo6flNRTGl0ZVN0b3Jh
Z2VBcmVhKCkKK3sKKyAgICBib29sIGRhdGFiYXNlSXNFbXB0eSA9IGlzRW1wdHkoKTsKKyAgICBj
bG9zZSgpOworICAgIGlmIChkYXRhYmFzZUlzRW1wdHkpCisgICAgICAgIFdlYkNvcmU6OlNRTGl0
ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShtX3BhdGgpOworfQorCitib29sIFNRTGl0
ZVN0b3JhZ2VBcmVhOjppc0VtcHR5KCkKK3sKKyAgICBpZiAobV9jYWNoZSkKKyAgICAgICAgcmV0
dXJuIG1fY2FjaGUtPmlzRW1wdHkoKTsKKworICAgIGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1l
bnQoU3RhdGVtZW50VHlwZTo6Q291bnRJdGVtcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmlzRW1wdHkgZmFpbGVkIG9uIGV4ZWN1dGlu
ZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJh
c2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
cmV0dXJuICFzdGF0ZW1lbnQtPmNvbHVtbkludCgwKTsKK30KKwordm9pZCBTUUxpdGVTdG9yYWdl
QXJlYTo6Y2xlYXIoKQoreworICAgIGNsb3NlKCk7CisgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5
c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKG1fcGF0aCk7CisgICAgbm90aWZ5TGlzdGVuZXJzQWJv
dXRDbGVhcigpOworfQorCitib29sIFNRTGl0ZVN0b3JhZ2VBcmVhOjpjcmVhdGVUYWJsZUlmTmVj
ZXNzYXJ5KCkKK3sKKyAgICBpZiAoIW1fZGF0YWJhc2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFN0cmluZyBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT50YWJsZVNRTCgiSXRlbVRhYmxl
Il9zKTsKKyAgICBpZiAoc3RhdGVtZW50ID09IGNyZWF0ZUl0ZW1UYWJsZVN0YXRlbWVudCB8fCBz
dGF0ZW1lbnQgPT0gY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50QWx0ZXJuYXRpdmUpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgLy8gVGFibGUgZXhpc3RzIGJ1dCBzdGF0ZW1lbnQgaXMgd3Jv
bmc7IGRyb3AgaXQuCisgICAgaWYgKCFzdGF0ZW1lbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIGlm
ICghbV9kYXRhYmFzZS0+ZXhlY3V0ZUNvbW1hbmQoIkRST1AgVEFCTEUgSXRlbVRhYmxlIl9zKSkg
eworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VB
cmVhOjpjcmVhdGVUYWJsZUlmTmVjZXNzYXJ5IGZhaWxlZCB0byBkcm9wIGV4aXN0aW5nIGl0ZW0g
dGFibGUgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxh
c3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIFRhYmxlIGRvZXMgbm90IGV4aXN0LgorICAgIGlmICghbV9kYXRhYmFzZS0+
ZXhlY3V0ZUNvbW1hbmQoY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50KSkgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmNyZWF0ZVRhYmxlSWZO
ZWNlc3NhcnkgZmFpbGVkIHRvIGNyZWF0ZSBpdGVtIHRhYmxlICglZCkgLSAlcyIsIG1fZGF0YWJh
c2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTUUxpdGVT
dG9yYWdlQXJlYTo6cHJlcGFyZURhdGFiYXNlKCkKK3sKKyAgICBpZiAobV9kYXRhYmFzZSAmJiBt
X2RhdGFiYXNlLT5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX2RhdGFi
YXNlID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZT4oKTsKKyAgICBpZiAoIW1f
ZGF0YWJhc2UtPm9wZW4obV9wYXRoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9y
YWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OnByZXBhcmVEYXRhYmFzZSBmYWlsZWQgdG8gb3BlbiBk
YXRhYmFzZSBhdCAnJXMnIiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtX2RhdGFi
YXNlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisg
ICAgLy8gU2luY2UgYSBXb3JrUXVldWUgaXNuJ3QgYm91bmQgdG8gYSBzcGVjaWZpYyB0aHJlYWQs
IHdlIG5lZWQgdG8gZGlzYWJsZSB0aHJlYWRpbmcgY2hlY2suCisgICAgLy8gV2Ugd2lsbCBuZXZl
ciBhY2Nlc3MgdGhlIGRhdGFiYXNlIGZyb20gZGlmZmVyZW50IHRocmVhZHMgc2ltdWx0YW5lb3Vz
bHkuCisgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZVRocmVhZGluZ0NoZWNrcygpOworCisgICAgaWYg
KCFjcmVhdGVUYWJsZUlmTmVjZXNzYXJ5KCkpIHsKKyAgICAgICAgbV9kYXRhYmFzZSA9IG51bGxw
dHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocXVvdGEoKSAhPSBX
ZWJDb3JlOjpTdG9yYWdlTWFwOjpub1F1b3RhKQorICAgICAgICBtX2RhdGFiYXNlLT5zZXRNYXhp
bXVtU2l6ZShxdW90YSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNRTGl0ZVN0
b3JhZ2VBcmVhOjpzdGFydFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKQoreworICAgIGlmICghbV90
cmFuc2FjdGlvbikKKyAgICAgICAgbV90cmFuc2FjdGlvbiA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6
U1FMaXRlVHJhbnNhY3Rpb24+KCptX2RhdGFiYXNlKTsKKworICAgIGlmIChtX3RyYW5zYWN0aW9u
LT5pblByb2dyZXNzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdHJhbnNhY3Rpb24tPmJl
Z2luKCk7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2hBZnRlcih0cmFuc2FjdGlvbkR1cmF0aW9uLCBb
d2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfV0geworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8
ICF3ZWFrVGhpcy0+bV90cmFuc2FjdGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICAgICAgYXV0byB0cmFuc2FjdGlvbiA9IHN0ZDo6ZXhjaGFuZ2Uod2Vha1RoaXMtPm1fdHJhbnNh
Y3Rpb24sIG51bGxwdHIpOworICAgICAgICB0cmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgfSk7
Cit9CisKK1dlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIFNRTGl0ZVN0b3Jh
Z2VBcmVhOjpjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZSB0eXBlKQoreworICAgIEFTU0VS
VChtX2RhdGFiYXNlKTsKKyAgICBBU1NFUlQodHlwZSA8IFN0YXRlbWVudFR5cGU6OkludmFsaWQp
OworCisgICAgYXV0byBpbmRleCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHR5cGUpOworICAgIGlm
ICghbV9jYWNoZWRTdGF0ZW1lbnRzW2luZGV4XSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IG1f
ZGF0YWJhc2UtPnByZXBhcmVIZWFwU3RhdGVtZW50KHN0YXRlbWVudFN0cmluZyh0eXBlKSk7Cisg
ICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBtX2NhY2hlZFN0YXRlbWVudHNbaW5kZXhd
ID0gcmVzdWx0LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgfQorCisgICAgcmV0dXJu
IFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgbV9jYWNoZWRTdGF0ZW1l
bnRzW2luZGV4XS5nZXQoKSB9OworfQorCitFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJvcj4g
U1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgaWYg
KG1fY2FjaGUpIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fY2FjaGUtPmZpbmQoa2V5KTsK
KyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fY2FjaGUtPmVuZCgpKQorICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4g
Z2V0SXRlbUZyb21EYXRhYmFzZShrZXkpOworfQorCitFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VF
cnJvcj4gU1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBrZXkpCit7CisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworCisgICAgYXV0byBzdGF0ZW1l
bnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZTo6R2V0SXRlbSk7CisgICAgaWYgKCFz
dGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBrZXkpKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0SXRlbUZyb21EYXRh
YmFzZSBmYWlsZWQgb24gY3JlYXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2Ut
Pmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9CisKKyAgICBp
bnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVf
Uk9XKQorICAgICAgICByZXR1cm4gc3RhdGVtZW50LT5jb2x1bW5CbG9iQXNTdHJpbmcoMCk7Cisg
ICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2UgZmFpbGVk
IG9uIHN0ZXBwaW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3Io
KSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6SXRlbU5vdEZvdW5kKTsKK30KKworSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gU1FMaXRlU3RvcmFnZUFyZWE6OmFsbEl0ZW1zKCkKK3sKKyAgICBpZiAoIXBy
ZXBhcmVEYXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4g
eyB9OworCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaXRlbXM7CisgICAgaWYgKG1fY2Fj
aGUpIHsKKyAgICAgICAgaXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NhY2hlLT5zaXpl
KCkpOworICAgICAgICBmb3IgKGF1dG8mIFtrZXksIHZhbHVlXSA6ICptX2NhY2hlKSB7CisgICAg
ICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgaXRlbXMuYWRk
KGtleSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBnZXRJdGVtRnJvbURhdGFiYXNlKGtleSkp
CisgICAgICAgICAgICAgICAgaXRlbXMuYWRkKGtleSwgcmVzdWx0LnZhbHVlKCkpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBpdGVtczsKKyAgICB9CisKKyAgICAvLyBJbXBvcnQgZnJvbSBk
YXRhYmFzZS4KKyAgICBhdXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRU
eXBlOjpHZXRBbGxJdGVtcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRBbGxJdGVtcyBmYWls
ZWQgb24gY3JlYXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJv
cigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgbV9jYWNoZSA9IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsgfTsKKyAgICBp
bnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJ
VEVfUk9XKSB7CisgICAgICAgIFN0cmluZyBrZXkgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMCk7
CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IHN0YXRlbWVudC0+Y29sdW1uQmxvYkFzU3RyaW5nKDEp
OworICAgICAgICBpZiAoIWtleS5pc051bGwoKSAmJiAhdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgIG1fY2FjaGUtPmFkZChrZXksIHZhbHVlLnNpemVJbkJ5dGVzKCkgPiBtYXhpbXVtU2l6
ZUZvclZhbHVlc0tlcHRJbk1lbW9yeSA/IFN0cmluZygpIDogdmFsdWUpOworICAgICAgICAgICAg
aXRlbXMuYWRkKFdURk1vdmUoa2V5KSwgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICB9CisKKyAg
ICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgfQorCisgICAgaWYgKHJlc3Vs
dCAhPSBTUUxJVEVfRE9ORSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNR
TGl0ZVN0b3JhZ2VBcmVhOjpnZXRBbGxJdGVtcyBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRlbWVu
dCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOworCisgICAgcmV0dXJuIGl0ZW1zOworfQorCitFeHBlY3RlZDx2b2lkLCBTdG9y
YWdlRXJyb3I+IFNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUlt
cGxJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nKQoreworICAgIGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKworICAgIHN0YXJ0
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIGlm
IChhdXRvIHZhbHVlT3JFcnJvciA9IGdldEl0ZW0oa2V5KSkKKyAgICAgICAgb2xkVmFsdWUgPSB2
YWx1ZU9yRXJyb3IudmFsdWUoKTsKKworICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVt
ZW50KFN0YXRlbWVudFR5cGU6OlNldEl0ZW0pOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRl
bWVudC0+YmluZFRleHQoMSwga2V5KSB8fCBzdGF0ZW1lbnQtPmJpbmRCbG9iKDIsIHZhbHVlKSkg
eworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6
OnNldEl0ZW0gZmFpbGVkIG9uIGNyZWF0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFi
YXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisg
ICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FM
SVRFX0ZVTEwpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OlF1
b3RhRXhjZWVkZWQpOworICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtIGZh
aWxlZCBvbiBzdGVwcGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworICAgIH0KKyAgICAKKyAgICBpZiAo
bV9jYWNoZSkKKyAgICAgICAgbV9jYWNoZS0+c2V0KGtleSwgdmFsdWUuc2l6ZUluQnl0ZXMoKSA+
IG1heGltdW1TaXplRm9yVmFsdWVzS2VwdEluTWVtb3J5ID8gU3RyaW5nKCkgOiB2YWx1ZSk7CisK
KyAgICBkaXNwYXRjaEV2ZW50cyhjb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJRCwga2V5LCBv
bGRWYWx1ZSwgdmFsdWUsIHVybFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OworfQorCitFeHBl
Y3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IFNRTGl0ZVN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKElQ
Qzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRp
ZmllciBzdG9yYWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nKQoreworICAgIGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKworICAgIHN0YXJ0VHJh
bnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICBpZiAoYXV0
byB2YWx1ZU9yRXJyb3IgPSBnZXRJdGVtKGtleSkpCisgICAgICAgIG9sZFZhbHVlID0gdmFsdWVP
ckVycm9yLnZhbHVlKCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
U3RvcmFnZUVycm9yOjpJdGVtTm90Rm91bmQpOworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNo
ZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZTo6RGVsZXRlSXRlbSk7CisgICAgaWYgKCFzdGF0ZW1l
bnQgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBrZXkpIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxp
dGVTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRlbWVudCAo
JWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9y
TXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRh
YmFzZSk7CisgICAgfQorCisgICAgaWYgKG1fY2FjaGUpCisgICAgICAgIG1fY2FjaGUtPnJlbW92
ZShrZXkpOworCisgICAgZGlzcGF0Y2hFdmVudHMoY29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBs
SUQsIGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCB1cmxTdHJpbmcpOworCisgICAgcmV0dXJuIHsg
fTsKK30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBTUUxpdGVTdG9yYWdlQXJlYTo6
Y2xlYXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlt
cGxJZGVudGlmaWVyIHN0b3JhZ2VBcmVhSW1wbElELCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykK
K3sKKyAgICBpZiAoIXByZXBhcmVEYXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisKKyAgICBpZiAobV9jYWNoZSAmJiBtX2Nh
Y2hlLT5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJy
b3I6Okl0ZW1Ob3RGb3VuZCk7CisKKyAgICBpZiAobV9jYWNoZSkKKyAgICAgICAgbV9jYWNoZS0+
Y2xlYXIoKTsKKworICAgIHN0YXJ0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworICAgIGF1dG8g
c3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFN0YXRlbWVudFR5cGU6OkRlbGV0ZUFsbEl0ZW1z
KTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFy
ZWE6OmNsZWFyIGZhaWxlZCBvbiBleGVjdXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0
YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9CisK
KyAgICBpZiAobV9kYXRhYmFzZS0+bGFzdENoYW5nZXMoKSA8PSAwKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpJdGVtTm90Rm91bmQpOworCisgICAgZGlzcGF0
Y2hFdmVudHMoY29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIFN0cmluZygpLCBTdHJpbmco
KSwgU3RyaW5nKCksIHVybFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIFNR
TGl0ZVN0b3JhZ2VBcmVhOjpjb21taXRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCkKK3sKKyAgICBp
ZiAoYXV0byB0cmFuc2FjdGlvbiA9IHN0ZDo6ZXhjaGFuZ2UobV90cmFuc2FjdGlvbiwgbnVsbHB0
cikpCisgICAgICAgIHRyYW5zYWN0aW9uLT5jb21taXQoKTsKK30KKwordm9pZCBTUUxpdGVTdG9y
YWdlQXJlYTo6aGFuZGxlTG93TWVtb3J5V2FybmluZygpCit7CisgICAgaWYgKG1fZGF0YWJhc2Ug
JiYgbV9kYXRhYmFzZS0+aXNPcGVuKCkpCisgICAgICAgIG1fZGF0YWJhc2UtPnJlbGVhc2VNZW1v
cnkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZWUyMmNkYjYyMzc4ZjJhODFjNjAzZDc3YmJhODYzNmM1YmFjNjI2MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9y
YWdlQXJlYS5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIlN0b3JhZ2VBcmVhQmFzZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0
YWJhc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3Bl
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTUUxpdGVTdG9yYWdlQXJlYSBmaW5h
bCA6IHB1YmxpYyBTdG9yYWdlQXJlYUJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIFNRTGl0ZVN0b3JhZ2VBcmVhKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBjb25zdCBTdHJpbmcmIHBhdGgsIFJlZjxXb3JrUXVldWU+
JiYpOworICAgIH5TUUxpdGVTdG9yYWdlQXJlYSgpOworCisgICAgdm9pZCBjbG9zZSgpOworICAg
IHZvaWQgaGFuZGxlTG93TWVtb3J5V2FybmluZygpOworICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rp
b25JZk5lY2Vzc2FyeSgpOworCitwcml2YXRlOgorICAgIC8vIFN0b3JhZ2VBcmVhQmFzZQorICAg
IFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6
U1FMaXRlOyB9OworICAgIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZTo6TG9jYWw7IH07CisgICAgYm9vbCBp
c0VtcHR5KCkgZmluYWw7CisgICAgdm9pZCBjbGVhcigpIGZpbmFsOworICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IGFsbEl0ZW1zKCkgZmluYWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFn
ZUVycm9yPiBzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1w
bElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25z
dCBTdHJpbmcmIHVybFN0cmluZykgZmluYWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVy
cm9yPiByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1w
bElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykg
ZmluYWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBjbGVhcihJUEM6OkNvbm5l
Y3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZykgZmluYWw7CisKKyAgICBib29sIGNyZWF0ZVRhYmxlSWZOZWNlc3NhcnkoKTsK
KyAgICBib29sIHByZXBhcmVEYXRhYmFzZSgpOworICAgIHZvaWQgc3RhcnRUcmFuc2FjdGlvbklm
TmVjZXNzYXJ5KCk7CisKKyAgICBlbnVtIGNsYXNzIFN0YXRlbWVudFR5cGUgOiB1aW50OF90IHsK
KyAgICAgICAgQ291bnRJdGVtcywKKyAgICAgICAgRGVsZXRlSXRlbSwKKyAgICAgICAgRGVsZXRl
QWxsSXRlbXMsCisgICAgICAgIEdldEl0ZW0sCisgICAgICAgIEdldEFsbEl0ZW1zLAorICAgICAg
ICBTZXRJdGVtLAorICAgICAgICBJbnZhbGlkCisgICAgfTsKKyAgICBBU0NJSUxpdGVyYWwgc3Rh
dGVtZW50U3RyaW5nKFN0YXRlbWVudFR5cGUpIGNvbnN0OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudEF1dG9SZXNldFNjb3BlIGNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlKTsKKyAg
ICBFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJvcj4gZ2V0SXRlbShjb25zdCBTdHJpbmcmIGtl
eSk7CisgICAgRXhwZWN0ZWQ8U3RyaW5nLCBTdG9yYWdlRXJyb3I+IGdldEl0ZW1Gcm9tRGF0YWJh
c2UoY29uc3QgU3RyaW5nJiBrZXkpOworCisgICAgU3RyaW5nIG1fcGF0aDsKKyAgICBSZWY8V29y
a1F1ZXVlPiBtX3F1ZXVlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVEYXRh
YmFzZT4gbV9kYXRhYmFzZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlVHJh
bnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+PiBtX2NhY2hlZFN0YXRlbWVudHM7CisgICAgc3RkOjpvcHRp
b25hbDxIYXNoTWFwPFN0cmluZywgU3RyaW5nPj4gbV9jYWNoZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYktpdDo6U1FMaXRl
U3RvcmFnZUFyZWEpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYktpdDo6U3RvcmFn
ZUFyZWFCYXNlJiBhcmVhKSB7IHJldHVybiBhcmVhLnR5cGUoKSA9PSBXZWJLaXQ6OlN0b3JhZ2VB
cmVhQmFzZTo6VHlwZTo6U1FMaXRlOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9T
ZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1MGE4NzA2ZjY3NTM0ZGY3ODU5
ZWZhNmU5ZjBmMWMyOGNlOWQ1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMCwwICsx
LDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZXNz
aW9uU3RvcmFnZU1hbmFnZXIuaCIKKworI2luY2x1ZGUgIk1lbW9yeVN0b3JhZ2VBcmVhLmgiCisj
aW5jbHVkZSAiU3RvcmFnZUFyZWFSZWdpc3RyeS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpTZXNzaW9uU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFS
ZWdpc3RyeSYgcmVnaXN0cnkpCisgICAgOiBtX3JlZ2lzdHJ5KHJlZ2lzdHJ5KQoreworfQorCiti
b29sIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6aXNBY3RpdmUoKQoreworICAgIHJldHVybiBXVEY6
OmFueU9mKG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpLCBbJl0gKGF1dG8mIHN0b3JhZ2VBcmVhKSB7
CisgICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS0+aGFzTGlzdGVuZXJzKCk7CisgICAgfSk7Cit9
CisKK2Jvb2wgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpoYXNEYXRhSW5NZW1vcnkoKQoreworICAg
IHJldHVybiBXVEY6OmFueU9mKG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpLCBbJl0gKGF1dG8mIHN0
b3JhZ2VBcmVhKSB7CisgICAgICAgIHJldHVybiAhc3RvcmFnZUFyZWEtPmlzRW1wdHkoKTsKKyAg
ICB9KTsKK30KKwordm9pZCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNsZWFyRGF0YSgpCit7Cisg
ICAgZm9yIChhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpKQorICAg
ICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoKTsKK30KKwordm9pZCBTZXNzaW9uU3RvcmFnZU1hbmFn
ZXI6OmNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9u
KQoreworICAgIGZvciAoYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhcy52YWx1ZXMo
KSkKKyAgICAgICAgc3RvcmFnZUFyZWEtPnJlbW92ZUxpc3RlbmVyKGNvbm5lY3Rpb24pOworfQor
CitTdG9yYWdlQXJlYUlkZW50aWZpZXIgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjphZGRTdG9yYWdl
QXJlYShzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhLCBJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlm
aWVyIG5hbWVzcGFjZUlkZW50aWZpZXIpCit7CisgICAgYXV0byBpZGVudGlmaWVyID0gc3RvcmFn
ZUFyZWEtPmlkZW50aWZpZXIoKTsKKyAgICBtX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RvcmFnZUFyZWEo
aWRlbnRpZmllciwgKnN0b3JhZ2VBcmVhKTsKKyAgICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIo
Y29ubmVjdGlvbik7CisgICAgbV9zdG9yYWdlQXJlYXNCeU5hbWVzcGFjZS5zZXQobmFtZXNwYWNl
SWRlbnRpZmllciwgaWRlbnRpZmllcik7CisgICAgbV9zdG9yYWdlQXJlYXMuc2V0KGlkZW50aWZp
ZXIsIFdURk1vdmUoc3RvcmFnZUFyZWEpKTsKKworICAgIHJldHVybiBpZGVudGlmaWVyOworfQor
CitTdG9yYWdlQXJlYUlkZW50aWZpZXIgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9T
ZXNzaW9uU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBj
b25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50
aWZpZXIgbmFtZXNwYWNlSWRlbnRpZmllcikKK3sKKyAgICBhdXRvIGlkZW50aWZpZXIgPSBtX3N0
b3JhZ2VBcmVhc0J5TmFtZXNwYWNlLmdldChuYW1lc3BhY2VJZGVudGlmaWVyKTsKKyAgICBpZiAo
aWRlbnRpZmllci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFzLmNv
bnRhaW5zKGlkZW50aWZpZXIpKTsKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CisgICAgfQor
CisgICAgYXV0byBuZXdTdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8TWVtb3J5U3RvcmFnZUFyZWE+
KG9yaWdpbik7CisgICAgcmV0dXJuIGFkZFN0b3JhZ2VBcmVhKFdURk1vdmUobmV3U3RvcmFnZUFy
ZWEpLCBjb25uZWN0aW9uLCBuYW1lc3BhY2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBTZXNzaW9u
U3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9u
OjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikK
K3sKKyAgICBpZiAoYXV0byogc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhcy5nZXQoaWRlbnRp
ZmllcikpCisgICAgICAgIHN0b3JhZ2VBcmVhLT5yZW1vdmVMaXN0ZW5lcihjb25uZWN0aW9uKTsK
K30KKwordm9pZCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNsb25lU3RvcmFnZUFyZWEoSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmll
ciBzb3VyY2VOYW1lc3BhY2VJZGVudGlmaWVyLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciB0
YXJnZXROYW1lc3BhY2VJZGVudGlmaWVyKQoreworICAgIGF1dG8gaWRlbnRpZmllciA9IG1fc3Rv
cmFnZUFyZWFzQnlOYW1lc3BhY2UuZ2V0KHNvdXJjZU5hbWVzcGFjZUlkZW50aWZpZXIpOworICAg
IGlmICghaWRlbnRpZmllci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChh
dXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlQXJlYXMuZmluZChpZGVudGlmaWVyKTsgaXRlcmF0b3Ig
IT0gbV9zdG9yYWdlQXJlYXMuZW5kKCkpIHsKKyAgICAgICAgYXV0byBuZXdTdG9yYWdlQXJlYSA9
IGl0ZXJhdG9yLT52YWx1ZS0+Y2xvbmUoKTsKKyAgICAgICAgYWRkU3RvcmFnZUFyZWEoV1RGTW92
ZShuZXdTdG9yYWdlQXJlYSksIGNvbm5lY3Rpb24sIHRhcmdldE5hbWVzcGFjZUlkZW50aWZpZXIp
OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKworCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VN
YW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Y2NmFmYmU0NTIzY2NiZDhhZmY5ODY1NTYyYThiODIzNmVk
YjI5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50aWZpZXIuaCIKKyNp
bmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgTWVtb3J5U3RvcmFnZUFyZWE7CitjbGFzcyBTdG9yYWdlQXJlYVJlZ2lzdHJ5
OworCitjbGFzcyBTZXNzaW9uU3RvcmFnZU1hbmFnZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIFNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJl
Z2lzdHJ5Jik7CisgICAgYm9vbCBpc0FjdGl2ZSgpOworICAgIGJvb2wgaGFzRGF0YUluTWVtb3J5
KCk7CisgICAgdm9pZCBjbGVhckRhdGEoKTsKKyAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoSVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7CisKKyAgICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgY29u
bmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIGNvbnN0
IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyKTsKKyAg
ICB2b2lkIGRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJ
RCwgU3RvcmFnZUFyZWFJZGVudGlmaWVyKTsKKyAgICB2b2lkIGNsb25lU3RvcmFnZUFyZWEoSVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFN0b3Jh
Z2VOYW1lc3BhY2VJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICBTdG9yYWdlQXJlYUlkZW50
aWZpZXIgYWRkU3RvcmFnZUFyZWEoc3RkOjp1bmlxdWVfcHRyPE1lbW9yeVN0b3JhZ2VBcmVhPiwg
SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIpOwor
CisgICAgU3RvcmFnZUFyZWFSZWdpc3RyeSYgbV9yZWdpc3RyeTsKKyAgICBIYXNoTWFwPFN0b3Jh
Z2VBcmVhSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeVN0b3JhZ2VBcmVhPj4gbV9z
dG9yYWdlQXJlYXM7CisgICAgSGFzaE1hcDxTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgU3Rv
cmFnZUFyZWFJZGVudGlmaWVyPiBtX3N0b3JhZ2VBcmVhc0J5TmFtZXNwYWNlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZmJmNzU4
NDdjNThlMzFkMThmOGE1Zjc1ODMyMTgzNTQwMDYzZTNiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHAKQEAg
LTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTdG9yYWdlQXJlYUJhc2UuaCIKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1N0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZUFyZWFC
YXNlKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikK
KyAgICA6IG1faWRlbnRpZmllcihTdG9yYWdlQXJlYUlkZW50aWZpZXI6OmdlbmVyYXRlKCkpCisg
ICAgLCBtX3F1b3RhKHF1b3RhKQorICAgICwgbV9vcmlnaW4ob3JpZ2luKQoreworfQorCitTdG9y
YWdlQXJlYUJhc2U6On5TdG9yYWdlQXJlYUJhc2UoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgU3RvcmFn
ZUFyZWFCYXNlOjphZGRMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rp
b24pCit7CisgICAgQVNTRVJUKCFtX2xpc3RlbmVycy5jb250YWlucyhjb25uZWN0aW9uKSk7CisK
KyAgICBtX2xpc3RlbmVycy5hZGQoY29ubmVjdGlvbik7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFC
YXNlOjpyZW1vdmVMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24p
Cit7CisgICAgbV9saXN0ZW5lcnMucmVtb3ZlKGNvbm5lY3Rpb24pOworfQorCitib29sIFN0b3Jh
Z2VBcmVhQmFzZTo6aGFzTGlzdGVuZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fbGlzdGVu
ZXJzLmlzRW1wdHkoKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYUJhc2U6Om5vdGlmeUxpc3RlbmVy
c0Fib3V0Q2xlYXIoKQoreworICAgIGZvciAoYXV0byYgY29ubmVjdGlvbiA6IG1fbGlzdGVuZXJz
KQorICAgICAgICBJUEM6OkNvbm5lY3Rpb246OnNlbmQoY29ubmVjdGlvbiwgTWVzc2FnZXM6OlN0
b3JhZ2VBcmVhTWFwOjpDbGVhckNhY2hlKCksIG1faWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30K
Kwordm9pZCBTdG9yYWdlQXJlYUJhc2U6OmRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6
VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzb3Vy
Y2VJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFs
dWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25z
dAoreworICAgIEFTU0VSVChzb3VyY2VJbXBsSWRlbnRpZmllcik7CisKKyAgICBmb3IgKGF1dG8m
IGNvbm5lY3Rpb24gOiBtX2xpc3RlbmVycykgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFN0b3Jh
Z2VBcmVhSW1wbElkZW50aWZpZXI+IGltcGxJZGVudGlmaWVyOworICAgICAgICBpZiAoY29ubmVj
dGlvbiA9PSBzb3VyY2VDb25uZWN0aW9uKQorICAgICAgICAgICAgaW1wbElkZW50aWZpZXIgPSBz
b3VyY2VJbXBsSWRlbnRpZmllcjsKKyAgICAgICAgSVBDOjpDb25uZWN0aW9uOjpzZW5kKGNvbm5l
Y3Rpb24sIE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlzcGF0Y2hTdG9yYWdlRXZlbnQoaW1w
bElkZW50aWZpZXIsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCB1cmxTdHJpbmcpLCBtX2lkZW50
aWZpZXIudG9VSW50NjQoKSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9y
YWdlQXJlYUJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9y
YWdlQXJlYUJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OTA1MWIxNGIzNTk5ZmFkZWM4NGJhZTcwYWQ4NmVl
MDAwY2Q3ZTg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJTdG9y
YWdlQXJlYUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KKyNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgQ2xpZW50T3JpZ2luOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBjbGFzcyBTdG9yYWdlRXJyb3IgOiB1aW50OF90
IHsKKyAgICBEYXRhYmFzZSwKKyAgICBJdGVtTm90Rm91bmQsCisgICAgUXVvdGFFeGNlZWRlZCwK
K307CisKK2NsYXNzIFN0b3JhZ2VBcmVhQmFzZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTdG9y
YWdlQXJlYUJhc2U+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdG9yYWdlQXJlYUJhc2Up
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFN0b3JhZ2VBcmVh
QmFzZSh1bnNpZ25lZCBxdW90YSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAg
dmlydHVhbCB+U3RvcmFnZUFyZWFCYXNlKCk7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50
OF90IHsgU1FMaXRlLCBNZW1vcnkgfTsKKyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0g
MDsKKyAgICBlbnVtIGNsYXNzIFN0b3JhZ2VUeXBlIDogYm9vbCB7IFNlc3Npb24sIExvY2FsIH07
CisgICAgdmlydHVhbCBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNFbXB0eSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7
CisKKyAgICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJu
IG1faWRlbnRpZmllcjsgfQorICAgIFdlYkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4oKSBjb25z
dCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIHVuc2lnbmVkIHF1b3RhKCkgY29uc3QgeyByZXR1
cm4gbV9xdW90YTsgfQorICAgIHZvaWQgYWRkTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCk7CisgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlE
KTsKKyAgICBib29sIGhhc0xpc3RlbmVycygpIGNvbnN0OworICAgIHZvaWQgbm90aWZ5TGlzdGVu
ZXJzQWJvdXRDbGVhcigpOworCisgICAgdmlydHVhbCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBh
bGxJdGVtcygpID0gMDsKKyAgICB2aXJ0dWFsIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4g
c2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpID0gMDsKKyAgICB2aXJ0dWFsIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJv
cj4gcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJ
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpID0g
MDsKKyAgICB2aXJ0dWFsIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gY2xlYXIoSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZGlzcGF0Y2hFdmVu
dHMoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYg
bmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIHVuc2lnbmVkIG1fcXVv
dGE7CisgICAgV2ViQ29yZTo6Q2xpZW50T3JpZ2luIG1fb3JpZ2luOworICAgIEhhc2hTZXQ8SVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRD4gbV9saXN0ZW5lcnM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzljYjNmYzhj
NzMyY2I5YzhlZmRkZDNlNjQ5OTg0YTRmZjcwZTY0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcApA
QCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlN0b3JhZ2VBcmVhUmVnaXN0cnkuaCIKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhQmFzZS5o
IgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworU3RvcmFnZUFyZWFSZWdpc3RyeTo6U3RvcmFnZUFy
ZWFSZWdpc3RyeSgpID0gZGVmYXVsdDsKKwordm9pZCBTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpyZWdp
c3RlclN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBTdG9yYWdl
QXJlYUJhc2UmIHN0b3JhZ2VBcmVhKQoreworICAgIEFTU0VSVCghbV9zdG9yYWdlQXJlYXMuY29u
dGFpbnMoaWRlbnRpZmllcikpOworCisgICAgbV9zdG9yYWdlQXJlYXMuYWRkKGlkZW50aWZpZXIs
IHN0b3JhZ2VBcmVhKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYVJlZ2lzdHJ5Ojp1bnJlZ2lzdGVy
U3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgQVNT
RVJUKG1fc3RvcmFnZUFyZWFzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKKworICAgIG1fc3RvcmFn
ZUFyZWFzLnJlbW92ZShpZGVudGlmaWVyKTsKK30KKworU3RvcmFnZUFyZWFCYXNlKiBTdG9yYWdl
QXJlYVJlZ2lzdHJ5OjpnZXRTdG9yYWdlQXJlYShTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRp
ZmllcikKK3sKKyAgICBpZiAoYXV0byBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFzLmdldChp
ZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLmdldCgpOworCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuaCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYVJlZ2lzdHJ5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjQwMGQyYmJmNGIxNGQ0OTk5YzA0MzJmMDljNGI0YjRiNGUyOGNmNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9T
dG9yYWdlQXJlYVJlZ2lzdHJ5LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVh
SWRlbnRpZmllci5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBTdG9yYWdlQXJlYUJhc2U7CisKK2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0
cnkgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFN0b3JhZ2VB
cmVhUmVnaXN0cnkoKTsKKyAgICB2b2lkIHJlZ2lzdGVyU3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJ
ZGVudGlmaWVyLCBTdG9yYWdlQXJlYUJhc2UmKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTdG9yYWdl
QXJlYShTdG9yYWdlQXJlYUlkZW50aWZpZXIpOworICAgIFN0b3JhZ2VBcmVhQmFzZSogZ2V0U3Rv
cmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICBIYXNoTWFw
PFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgV2Vha1B0cjxTdG9yYWdlQXJlYUJhc2U+PiBtX3N0b3Jh
Z2VBcmVhczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaCBiL1NvdXJjZS9XZWJL
aXQvU2NyaXB0cy9nZW5lcmF0ZS11bmlmaWVkLXNvdXJjZXMuc2gKaW5kZXggYjZkNDBhZDllOTU0
N2JkNDBkZTg1YzljODVhMzVjMWUyNWNkZjE5MS4uNGYxYWM4M2NiM2EyMjZlY2NkMDc4Mzk4Mzc5
MjNjYmM0NGJhYjkyMyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL2dlbmVyYXRl
LXVuaWZpZWQtc291cmNlcy5zaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUt
dW5pZmllZC1zb3VyY2VzLnNoCkBAIC0xNCw3ICsxNCw3IEBAIGlmIFsgLXogIiR7QlVJTERfU0NS
SVBUU19ESVJ9IiBdOyB0aGVuCiAgICAgZmkKIGZpCiAKLVVuaWZpZWRTb3VyY2VDcHBGaWxlQ291
bnQ9MTExCitVbmlmaWVkU291cmNlQ3BwRmlsZUNvdW50PTExMgogVW5pZmllZFNvdXJjZU1tRmls
ZUNvdW50PTgwCiAKIGlmIFsgJCMgLWVxIDAgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggMDVhODVi
MDE5NjA0MjAxNmFiNjg1ZjIwZDRiZWY3M2M0NjI2NTYwNy4uNDJmYjYxYjE3NzUxZTExOTczMmZh
YWIyNmUxNThhNTI2MzU1MzUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0xNDMsOCArMTQzLDE0IEBAIE5l
dHdvcmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9u
LmNwcCBAbm8tdW5pZnkKIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvRmlsZVN5c3RlbVN0b3JhZ2VN
YW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9GaWxlU3lzdGVtU3RvcmFnZUhhbmRs
ZS5jcHAKIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdp
c3RyeS5jcHAKK05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5jcHAK
K05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuY3BwCiBOZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NR
TGl0ZVN0b3JhZ2VBcmVhLmNwcAorTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFn
ZU1hbmFnZXIuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHAK
K05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAKIAogTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKIE5ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHAKaW5kZXggMzUzZTVmNDY2ZjZhY2JhNzZlYmZjZjM5ZDI3M2JhYTNjMTU2MmY5Mi4uMjVjZTQ2
YTdmODIyMGNiNGI2YTMwMGY5YWU3NjI2NWU1ZGEzM2JjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0x
NTcyLDE2ICsxNTcyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVTeW1MaW5r
Rm9yRmlsZVVwZ3JhZGUoY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0YWIKICAgICAgICAgRmlsZVN5
c3RlbTo6Y3JlYXRlU3ltYm9saWNMaW5rKGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgb2xkVmVy
c2lvbkRpcmVjdG9yeSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TG9jYWxT
dG9yYWdlRGV0YWlscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4m
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFjYW5TZW5kTWVzc2FnZSgpKSB7
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpHZXRM
b2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKHNlc3Npb25JRCksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpwcmVjb25uZWN0VG8oUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94
eUlELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciB3ZWJQYWdlSUQsIGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kg
c3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHN0ZDo6b3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91
bmREb21haW4+IGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4sIExhc3ROYXZpZ2F0aW9uV2Fz
QXBwSW5pdGlhdGVkIGxhc3ROYXZpZ2F0aW9uV2FzQXBwSW5pdGlhdGVkKQogewogICAgIGlmICgh
dXJsLmlzVmFsaWQoKSB8fCAhdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5jcHAKaW5kZXggOTA5NzkzZTM3NTY4YzA0MmIxMDAyYTI2YWEwMjc0Nzg0YTkxZTRjYS4uNzIy
ZDk3MzFhMDEyZGUzNGZiNmMzMzJiOTExNDVkZDAzMDJmNTYzYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAK
QEAgLTE5NjksMTggKzE5NjksNiBAQCBBUEk6OkhUVFBDb29raWVTdG9yZSYgV2Vic2l0ZURhdGFT
dG9yZTo6Y29va2llU3RvcmUoKQogICAgIHJldHVybiAqbV9jb29raWVTdG9yZTsKIH0KIAotdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQo
VmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFpc1BlcnNpc3RlbnQoKSkgewotICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bmV0d29ya1Byb2Nlc3MoKS5nZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKG1fc2Vzc2lvbklELCBbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRldGFp
bHMpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkZXRhaWxzKSk7Ci0gICAg
fSk7Ci19Ci0KIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXV0byBjYWxsYmFja0Fn
Z3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggMWRlMjVhNjYwNTdmMmQ2NmM2Mjk5ZTVlYmJiODE0
NmJlZTliODFlMy4uMzRhZTVhZjYwNzNjMjU5MTQyMGYyMDljZTBmNzUzMmJhYmRjODNlMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuaApAQCAtMTY3LDcgKzE2Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZURh
dGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UsIEZ1
bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgdm9pZCByZW1vdmVEYXRh
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBjb25zdCBWZWN0b3I8V2Vic2l0ZURhdGFSZWNv
cmQ+JiwgRnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIHZvaWQg
Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmKTsKICAgICB2b2lkIHNldENhY2hl
TW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhDYWNoZU1vZGVsKTsKICAgICB2b2lkIHNldFNl
cnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZyhTZWNvbmRzKTsKICAgICB2b2lkIHJlc2V0U2Vy
dmljZVdvcmtlclRpbWVvdXRGb3JUZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VuaWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYktpdC9VbmlmaWVk
U291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAppbmRleCA1MDg5OGU0NjMwMTczMTk0YWU0ZWY3Y2Nl
NDNhZThlYjQ2NzNhODZiLi4yYWQ3OTY0NWQ2ZWY2ODNkYWQ0ZWIwNzZmNWRkNzI0NzJiZjg2MGI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VuaWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVs
aXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvVW5pZmllZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QK
QEAgLTE3LDYgKzE3LDcgQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTExLW1tLm0KICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3Vy
Y2UxMS5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5p
ZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMTAuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTExLmNw
cAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNv
dXJjZXMvVW5pZmllZFNvdXJjZTExMi5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMi1tbS5tbQogJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMv
VW5pZmllZFNvdXJjZTEyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTEzLW1tLm1tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmYmY0ODc5ZThj
YzM2M2FjZThhYWRiMTMxNzU4ZTE3MWJmNTQ0YjdhLi5iY2Q1NDRlOTQyMzA2YTJiYTI2OGI1NzE0
M2JlYzEyZTRhMjRiZGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTE1MDgsNiArMTUwOCwxMyBAQAogCQk5M0U3OTk4NTI3NTZGQTU1
MDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5
OTgyMjc1NkZBNTQwMDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNz
YWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk5M0U3OTk4NzI3NTZGQUI0MDA3NDAwOEEgLyogV2Vi
RmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTk4MzI3NTZGQTU0MDA3NDAw
OEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXNSZXBsaWVzLmggKi87
IH07CiAJCTkzRTc5OTg4Mjc1NkZBQzIwMDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNv
bm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNFNzk5ODEyNzU2RkE1MzAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdl
Q29ubmVjdGlvbk1lc3NhZ2VzLmggKi87IH07CisJCTkzRTc5OUM3Mjc2MDI3NDYwMDc0MDA4QSAv
KiBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0U3OTlDNjI3NjAyNzM3MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdp
c3RyeS5oICovOyB9OworCQk5M0U3OTlDRTI3NjA0OTdCMDA3NDAwOEEgLyogU2Vzc2lvblN0b3Jh
Z2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0U3OTlDQTI3NjA0OTdBMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmggKi87
IH07CisJCTkzRTc5OUNGMjc2MDQ5N0IwMDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTlDQjI3
NjA0OTdBMDA3NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFuYWdlci5oICovOyB9OworCQk5M0U3OTlE
MjI3NjBBQTVCMDA3NDAwOEEgLyogVW5pZmllZFNvdXJjZTExMi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTlEMTI3NjBBQTVBMDA3NDAwOEEg
LyogVW5pZmllZFNvdXJjZTExMi5jcHAgKi87IH07CisJCTkzRTc5OURBMjc2MTIxMDgwMDc0MDA4
QSAvKiBTUUxpdGVTdG9yYWdlQXJlYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTNFNzk5RDQyNzYxMjEwNzAwNzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VB
cmVhLmggKi87IH07CisJCTkzRTc5OURCMjc2MTIxMDgwMDc0MDA4QSAvKiBNZW1vcnlTdG9yYWdl
QXJlYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNF
Nzk5RDUyNzYxMjEwNzAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmggKi87IH07CisJCTkz
RTc5OURDMjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUQ2Mjc2MTIxMDgwMDc0MDA4
QSAvKiBTdG9yYWdlQXJlYUJhc2UuaCAqLzsgfTsKIAkJOTNGNTQ5QjQxRTMxNzRCNzAwMEU3MjM5
IC8qIFdLU25hcHNob3RDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y1NDlCMzFFMzE3NEI3MDAwRTcyMzkgLyogV0tTbmFwc2hv
dENvbmZpZ3VyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7
IH07IH07CiAJCTk1MEYyODgwMjUyNDE0RUEwMEI3NEYxQyAvKiBXS01vdXNlRGV2aWNlT2JzZXJ2
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEYy
ODdFMjUyNDE0RTkwMEI3NEYxQyAvKiBXS01vdXNlRGV2aWNlT2JzZXJ2ZXIuaCAqLzsgfTsKIAkJ
OTU2NTA4MzkyNkQ4N0EyQjAwRTE1Q0I3IC8qIEFwcGxlTWVkaWFTZXJ2aWNlc1NQSS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTU2NTA4MzcyNkQ4N0Ey
QjAwRTE1Q0I3IC8qIEFwcGxlTWVkaWFTZXJ2aWNlc1NQSS5oICovOyB9OwpAQCAtNTMzMCw2ICs1
MzM3LDE5IEBACiAJCTkzRTc5OTgxMjc1NkZBNTMwMDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3Rv
cmFnZUNvbm5lY3Rpb25NZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5M0U3OTk4MjI3NTZGQTU0MDA3NDAwOEEgLyogV2ViRmlsZVN5c3Rl
bVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VS
ZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRTc5OTgzMjc1NkZB
NTQwMDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlc1JlcGxp
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRmlsZVN5c3RlbVN0b3Jh
Z2VDb25uZWN0aW9uTWVzc2FnZXNSZXBsaWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTkzRTc5OUM1Mjc2MDI3MzYwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VBcmVhUmVnaXN0cnku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlDNjI3NjAyNzM3MDA3NDAw
OEEgLyogU3RvcmFnZUFyZWFSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTdG9yYWdlQXJlYVJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTkzRTc5OUM5Mjc2MDQ5N0EwMDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2FsU3RvcmFnZU1hbmFnZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlDQTI3NjA0OTdBMDA3NDAwOEEg
LyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNlc3Npb25TdG9yYWdlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5M0U3OTlDQjI3NjA0OTdBMDA3NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFuYWdlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUNDMjc2MDQ5N0IwMDc0MDA4QSAvKiBTZXNz
aW9uU3RvcmFnZU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTNFNzk5RDEyNzYwQUE1QTAwNzQwMDhBIC8qIFVuaWZpZWRTb3VyY2UxMTIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5pZmllZFNvdXJjZTExMi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQzMjc2MTIxMDcwMDc0MDA4QSAvKiBT
UUxpdGVTdG9yYWdlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTUUxpdGVTdG9yYWdlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkz
RTc5OUQ0Mjc2MTIxMDcwMDc0MDA4QSAvKiBTUUxpdGVTdG9yYWdlQXJlYS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxpdGVTdG9yYWdlQXJlYS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5M0U3OTlENTI3NjEyMTA3MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFn
ZUFyZWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVtb3J5U3RvcmFnZUFy
ZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDYyNzYxMjEwODAwNzQw
MDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdG9yYWdlQXJlYUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5
RDcyNzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlQXJlYUJhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5M0U3OTlEODI3NjEyMTA4MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFn
ZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVtb3J5U3Rv
cmFnZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y1NDlCMzFFMzE3
NEI3MDAwRTcyMzkgLyogV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTNGNTQ5QjUxRTMxNzREQTAwMEU3MjM5IC8qIFdLU25hcHNob3RD
b25maWd1cmF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V0tTbmFwc2hvdENvbmZpZ3VyYXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk1MEYyODdFMjUyNDE0RTkwMEI3NEYxQyAvKiBXS01vdXNlRGV2aWNlT2JzZXJ2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tNb3VzZURldmljZU9ic2VydmVyLmg7IHBh
dGggPSBpb3MvV0tNb3VzZURldmljZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC04MjA5LDYgKzgyMjksNyBAQAogCQkJCTFDQUVDQjVEMjc0NjVBRTMwMEFCNzhEMCAv
KiBVbmlmaWVkU291cmNlMTA5LmNwcCAqLywKIAkJCQkxQ0FFQ0I2MDI3NDY1QUUzMDBBQjc4RDAg
LyogVW5pZmllZFNvdXJjZTExMC5jcHAgKi8sCiAJCQkJMUNBRUNCNUUyNzQ2NUFFMzAwQUI3OEQw
IC8qIFVuaWZpZWRTb3VyY2UxMTEuY3BwICovLAorCQkJCTkzRTc5OUQxMjc2MEFBNUEwMDc0MDA4
QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCAqLywKIAkJCSk7CiAJCQluYW1lID0gInVuaWZpZWQt
c291cmNlcyI7CiAJCQlwYXRoID0gIkRlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJj
ZXMiOwpAQCAtMTAyODgsMTEgKzEwMzA5LDIzIEBACiAJCQkJOTM1QjU3OTgyNkY1MTI3MDAwOEI0
OEFDIC8qIEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkuaCAqLywKIAkJCQk5MzFBMDc1
MTI2RjA2MzEwMDA0NDc0Q0QgLyogRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLmNwcCAqLywKIAkJ
CQk5MzFBMDc1MDI2RjA2MzEwMDA0NDc0Q0QgLyogRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLmgg
Ki8sCisJCQkJOTNFNzk5QzkyNzYwNDk3QTAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFnZXIu
Y3BwICovLAorCQkJCTkzRTc5OUNCMjc2MDQ5N0EwMDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5h
Z2VyLmggKi8sCisJCQkJOTNFNzk5RDgyNzYxMjEwODAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VB
cmVhLmNwcCAqLywKKwkJCQk5M0U3OTlENTI3NjEyMTA3MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFn
ZUFyZWEuaCAqLywKIAkJCQk5MzA4NURDMzI2RTFCQkJEMDAwRUM2QTcgLyogTmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyLmNwcCAqLywKIAkJCQk5MzA4NURDNDI2RTFCQkJEMDAwRUM2QTcgLyogTmV0d29y
a1N0b3JhZ2VNYW5hZ2VyLmggKi8sCiAJCQkJOTMwODVEQzcyNkUxQzZFRTAwMEVDNkE3IC8qIE5l
dHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbiAqLywKIAkJCQk5MzA4NURDNTI2RTFDNkNG
MDAwRUM2QTcgLyogT3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwICovLAogCQkJCTkzMDg1REM2MjZF
MUM2Q0YwMDBFQzZBNyAvKiBPcmlnaW5TdG9yYWdlTWFuYWdlci5oICovLAorCQkJCTkzRTc5OUND
Mjc2MDQ5N0IwMDc0MDA4QSAvKiBTZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwICovLAorCQkJCTkz
RTc5OUNBMjc2MDQ5N0EwMDc0MDA4QSAvKiBTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCAqLywKKwkJ
CQk5M0U3OTlEMzI3NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuY3BwICovLAor
CQkJCTkzRTc5OUQ0Mjc2MTIxMDcwMDc0MDA4QSAvKiBTUUxpdGVTdG9yYWdlQXJlYS5oICovLAor
CQkJCTkzRTc5OUQ3Mjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuY3BwICovLAor
CQkJCTkzRTc5OUQ2Mjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuaCAqLywKKwkJ
CQk5M0U3OTlDNTI3NjAyNzM2MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAgKi8s
CisJCQkJOTNFNzk5QzYyNzYwMjczNzAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuaCAq
LywKIAkJCSk7CiAJCQlwYXRoID0gc3RvcmFnZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CkBAIC0xMjk0Nyw2ICsxMjk4MCw3IEBACiAJCQkJNTdEQ0VEQUUyMTRDNjAzMzAwMTZCODQ3IC8q
IExvY2FsU2VydmljZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNCMjYxNEUyMjdEMTRCMTAwQjk3
QTc2IC8qIExvY2FsU3RvcmFnZURhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0IyNjE0
RjIyN0QxNEIxMDBCOTdBNzYgLyogTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5M0U3OTlDRjI3NjA0OTdCMDA3NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFu
YWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZCRUI2REIyMkZCOUQ0ODAwMjY5ODY3IC8qIExv
Y2FsU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBN0YyRjMxMjVCRjgy
MDAwOEFFQjFEIC8qIExvZ2dpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRENEN0Y3MUQ0N0U5
MkEwMDlGMDhCQyAvKiBMb2dJbml0aWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMjk2
NSw2ICsxMjk5OSw3IEBACiAJCQkJQTE1Nzk5QkQyNTg0NDMzMjAwNTI4MjM2IC8qIE1lZGlhU2Ft
cGxlQ3Vyc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzVBOUNGMzI2MTY5QkFCMDA2REZBM0Eg
LyogTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3JQcm94eVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUExNTc5OUI3MjU4NDQzMzIwMDUyODIzNiAvKiBNZWRpYVRyYWNrUmVhZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5M0U3OTlEQjI3NjEyMTA4MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFy
ZWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOTMzREVGMTk2NUVCMzEwMDhBQzNFQSAvKiBNZW51
VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjQ3OTA4RDI1MzE0RDgzMDBFQzExQUIg
LyogTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUM0
QzgyOTE2Qjg3NkE5MDA2OURDQ0QgLyogTWVzc2FnZUZsYWdzLmggaW4gSGVhZGVycyAqLywKQEAg
LTEzMTg0LDYgKzEzMjE5LDcgQEAKIAkJCQk1MTREOUY1NzE5MTE5RDM1MDAwMDYzQTcgLyogU2Vy
dmljZXNDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZERTY1QTE5NTRBNDJCMDBD
NDhGRkEgLyogU2Vzc2lvblN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTAwMkQ0OTE5NkIz
NDVEMDBCOUFENDQgLyogU2Vzc2lvblN0YXRlQ29kaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk5
M0U3OTlDRTI3NjA0OTdCMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0NkJFQjZERjIyRkJCMTZCMDAyNjk4NjcgLyogU2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNjQyMEU1MTJEQ0UyRkYwMENBQUUyQyAv
KiBTaGFyZWFibGVCaXRtYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0M0E5Q0UwMjVENzJGMUMw
MDk5MEUyNiAvKiBTaGFyZWFibGVCaXRtYXBVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLApAQCAt
MTMyMTIsMTEgKzEzMjQ4LDE0IEBACiAJCQkJOTNENkI3NzIyNTRCQjUxOTAwNThERDNBIC8qIFNw
ZWVjaFJlY29nbml0aW9uU2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Q2Qjc4NDI1NEND
RDBFMDA1OEREM0EgLyogU3BlZWNoUmVjb2duaXRpb25TZXJ2ZXJNZXNzYWdlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTNENkI3ODUyNTRDQ0Q0MzAwNThERDNBIC8qIFNwZWVjaFJlY29nbml0aW9u
U2VydmVyTWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3OTlEQTI3NjEy
MTA4MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTdB
M0ZFQ0EyMjFGN0MwOTcwMEYyNjdDRCAvKiBTdG9yYWdlQWNjZXNzU3RhdHVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0NkJFQjZENzIyRkI5QkQ3MDAyNjk4NjcgLyogU3RvcmFnZUFyZWEuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTkzRTc5OURDMjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRDMzMDZGMTZCMUQ5OTEwMDRGNjBFNyAvKiBTdG9y
YWdlQXJlYUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQ0VDRDI1MTcxNjJEQjEwMDFGQzlF
RiAvKiBTdG9yYWdlQXJlYU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzMzRERUUxNkRFOEY4
ODAwNkE4RTM4IC8qIFN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTkzRTc5OUM3Mjc2MDI3NDYwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5M0IyNjE0RDIyN0QxNDlFMDBCOTdBNzYgLyogU3RvcmFnZU1hbmFnZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzNkIwNTk4MjMwMzkwOTcwMDJGQzA2QiAvKiBTdG9yYWdl
TWFuYWdlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM2OEVFREYyMzAzQTlFRDAwQkRCMTFB
IC8qIFN0b3JhZ2VNYW5hZ2VyU2V0TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTU0Njks
NiArMTU1MDgsNyBAQAogCQkJCTFDQUVDQjY1Mjc0NjVBRTQwMEFCNzhEMCAvKiBVbmlmaWVkU291
cmNlMTA5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDQUVDQjY4Mjc0NjVBRTQwMEFCNzhEMCAv
KiBVbmlmaWVkU291cmNlMTEwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDQUVDQjY2Mjc0NjVB
RTQwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTExLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkz
RTc5OUQyMjc2MEFBNUIwMDc0MDA4QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUUzOEExRkMwMjNBNTUxQkYwMEQyMzc0RiAvKiBVc2VySW50ZXJmYWNlSWRpb20u
bW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDQ5MUIwRDFFNzMyRTREMDAwMDkwNjYgLyogVXNlck1l
ZGlhQ2FwdHVyZU1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Q0Q0OTFCMTcxRTczNTI1NTAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAKaW5kZXggMGZhNmFj
MThmZDk0NzA1OTBjZjEwN2Q2YTQ0MDY2ZDkyZDlhNDM2ZC4uMmNmN2E2ZDRiNjAwNWMxZDdlYzI1
NmJkNjM4ODc2Mjk0ZTllNGNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5o
IgorI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
U3RvcmFnZUFyZWFJbXBsLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFNYXBNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIlN0b3JhZ2VNYW5hZ2VyU2V0TWVzc2FnZXMuaCIKQEAgLTk1LDcgKzk2LDcgQEAg
dm9pZCBTdG9yYWdlQXJlYU1hcDo6c2V0SXRlbShGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VB
cmVhSW1wbCogc291cmNlQXJlYSwgY28KICAgICBtX3BlbmRpbmdWYWx1ZUNoYW5nZXMuYWRkKGtl
eSk7CiAKICAgICBpZiAobV9tYXBJRCkKLSAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
ZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2Fn
ZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpTZXRJdGVtKCptX21hcElELCBzb3VyY2VBcmVhLT5pZGVu
dGlmaWVyKCksIG1fY3VycmVudFNlZWQsIGtleSwgdmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVu
dCgpLT51cmwoKS5zdHJpbmcoKSksIDApOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpTZXRJdGVtKCptX21hcElELCBzb3VyY2VBcmVh
LT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIGtleSwgdmFsdWUsIHNvdXJjZUZyYW1lLT5k
b2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOwogICAgIGVsc2UKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVtIGZhaWxlZCBiZWNh
dXNlIHN0b3JhZ2UgbWFwIElEIGlzIGludmFsaWQiKTsKIH0KQEAgLTExNCw3ICsxMTUsNyBAQCB2
b2lkIFN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJdGVtKFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VGcmFt
ZSwgU3RvcmFnZUFyZWFJbXBsKiBzbwogICAgIG1fcGVuZGluZ1ZhbHVlQ2hhbmdlcy5hZGQoa2V5
KTsKIAogICAgIGlmIChtX21hcElEKQotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5l
bnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdl
czo6U3RvcmFnZU1hbmFnZXJTZXQ6OlJlbW92ZUl0ZW0oKm1fbWFwSUQsIHNvdXJjZUFyZWEtPmlk
ZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwga2V5LCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+
dXJsKCkuc3RyaW5nKCkpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5z
dXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6UmVtb3ZlSXRlbSgqbV9tYXBJRCwgc291cmNlQXJlYS0+
aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgp
LT51cmwoKS5zdHJpbmcoKSksIDApOwogICAgIGVsc2UKICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJdGVtIGZhaWxlZCBiZWNhdXNlIHN0
b3JhZ2UgbWFwIElEIGlzIGludmFsaWQiKTsKIH0KQEAgLTEyOSw3ICsxMzAsNyBAQCB2b2lkIFN0
b3JhZ2VBcmVhTWFwOjpjbGVhcihXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VB
cmVhSW1wbCogc291cmNlQQogICAgIG1fbWFwID0gbWFrZVVuaXF1ZTxTdG9yYWdlTWFwPihtX3F1
b3RhSW5CeXRlcyk7CiAKICAgICBpZiAobV9tYXBJRCkKLSAgICAgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNl
bmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDbGVhcigqbV9tYXBJRCwgc291cmNlQXJl
YS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+
dXJsKCkuc3RyaW5nKCkpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5z
dXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q2xlYXIoKm1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50
aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0
cmluZygpKSwgMCk7CiAgICAgZWxzZQogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdl
LCAiU3RvcmFnZUFyZWFNYXA6OmNsZWFyIGZhaWxlZCBiZWNhdXNlIHN0b3JhZ2UgbWFwIElEIGlz
IGludmFsaWQiKTsKIH0KQEAgLTE2MCw3ICsxNjEsNyBAQCBTdG9yYWdlTWFwJiBTdG9yYWdlQXJl
YU1hcDo6ZW5zdXJlTWFwKCkKICAgICAgICAgICAgIC8vIGZyb20gb3VyIFN0b3JhZ2VNYW5hZ2Vy
U2V0OjpHZXRWYWx1ZXMoKSBJUEMuIFRoaXMgSVBDIG1heSBiZSB2ZXJ5IHNsb3cgYmVjYXVzZSBp
dCBtYXkgbmVlZCB0byBmZXRjaCB0aGUgdmFsdWVzIGZyb20gZGlzayBhbmQgdGhlcmUgbWF5IGJl
IGEgbG90IG9mIGRhdGEuCiAgICAgICAgICAgICBJUEM6OlVuYm91bmRlZFN5bmNocm9ub3VzSVBD
U2NvcGUgdW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29wZTsKICAgICAgICAgICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IHZhbHVlczsKLSAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3lu
YyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkdldFZhbHVlcygqbV9tYXBJRCksIE1lc3Nh
Z2VzOjpTdG9yYWdlTWFuYWdlclNldDo6R2V0VmFsdWVzOjpSZXBseSh2YWx1ZXMpLCAwKTsKKyAg
ICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VN
YW5hZ2VyOjpHZXRWYWx1ZXMoKm1fbWFwSUQpLCBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6
OkdldFZhbHVlczo6UmVwbHkodmFsdWVzKSwgMCk7CiAgICAgICAgICAgICBtX21hcC0+aW1wb3J0
SXRlbXMoV1RGTW92ZSh2YWx1ZXMpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU3RvcmFnZUFyZWFNYXA6OmVuc3VyZU1hcCBmYWlsZWQg
dG8gbG9hZCBmcm9tIG5ldHdvcmsgcHJvY2VzcyBiZWNhdXNlIHN0b3JhZ2UgbWFwIElEIGlzIGlu
dmFsaWQiKTsKQEAgLTM0OCwyMCArMzQ5LDIzIEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmNvbm5l
Y3QoKQogICAgIGlmIChtX21hcElEKQogICAgICAgICByZXR1cm47CiAKKyAgICBTdG9yYWdlQXJl
YUlkZW50aWZpZXIgbWFwSUQ7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFN0b3Jh
Z2VUeXBlOjpMb2NhbDoKICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpUcmFuc2llbnRMb2NhbDoKICAg
ICAgICAgaWYgKFNlY3VyaXR5T3JpZ2luKiB0b3BMZXZlbE9yaWdpbiA9IG1fbmFtZXNwYWNlLnRv
cExldmVsT3JpZ2luKCkpCi0gICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1
cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2Fn
ZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVh
KFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlc3Npb25JRCgpLCBtX25hbWVzcGFjZS5zdG9yYWdl
TmFtZXNwYWNlSUQoKSwgdG9wTGV2ZWxPcmlnaW4tPmRhdGEoKSwgbV9zZWN1cml0eU9yaWdpbi0+
ZGF0YSgpKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9UcmFuc2llbnRM
b2NhbFN0b3JhZ2VBcmVhOjpSZXBseShtX21hcElEKSwgMCk7CisgICAgICAgICAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0
aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q29ubmVjdFRv
VHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShtX25hbWVzcGFjZS5zdG9yYWdlTmFtZXNwYWNlSUQo
KSwgdG9wTGV2ZWxPcmlnaW4tPmRhdGEoKSwgbV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwgTWVz
c2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9y
YWdlQXJlYTo6UmVwbHkobWFwSUQpLCAwKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29u
bmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRv
TG9jYWxTdG9yYWdlQXJlYShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9uSUQoKSwgbV9u
YW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSks
IE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYTo6
UmVwbHkobV9tYXBJRCksIDApOworICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
ZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1l
c3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEo
bV9uYW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEo
KSksIE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5lY3RUb0xvY2FsU3RvcmFn
ZUFyZWE6OlJlcGx5KG1hcElEKSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RvcmFn
ZVR5cGU6OlNlc3Npb246Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6
U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYShXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5zZXNzaW9uSUQoKSwgbV9uYW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFjZUlE
KCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNl
dDo6Q29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhOjpSZXBseShtX21hcElEKSwgMCk7CisgICAg
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
OjpDb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEobV9uYW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFj
ZUlEKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OkNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYTo6UmVwbHkobWFwSUQpLCAwKTsK
ICAgICB9CiAKLSAgICBpZiAobV9tYXBJRCkKKyAgICBpZiAobWFwSUQuaXNWYWxpZCgpKSB7Cisg
ICAgICAgIG1fbWFwSUQgPSBtYXBJRDsKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cmVnaXN0ZXJTdG9yYWdlQXJlYU1hcCgqdGhpcyk7CisgICAgfQogfQogCiB2b2lkIFN0b3JhZ2VB
cmVhTWFwOjpkaXNjb25uZWN0KCkKQEAgLTM3Myw3ICszNzcsNyBAQCB2b2lkIFN0b3JhZ2VBcmVh
TWFwOjpkaXNjb25uZWN0KCkKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51bnJlZ2lzdGVy
U3RvcmFnZUFyZWFNYXAoKnRoaXMpOwogCiAgICAgaWYgKGF1dG8qIG5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmV4aXN0aW5nTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlv
bigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpEaXNjb25uZWN0RnJvbVN0b3Jh
Z2VBcmVhKCptX21hcElEKSwgMCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi0+
Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6RGlzY29u
bmVjdEZyb21TdG9yYWdlQXJlYSgqbV9tYXBJRCksIDApOwogCiAgICAgbV9tYXBJRCA9IHsgfTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VOYW1lc3BhY2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAppbmRleCBmODRkMDJmYzZmN2UzYmIxZTMxNDMzYzVm
MDBlNjFlMGZkZWJmOTMyLi5kZWI2YTM0MzNjYWJhZmFmN2RjYWE1NjBjZGMzYTE1ZTNhY2E3ZTcy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
TmFtZXNwYWNlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCkBAIC0yNyw5ICsyNyw5IEBACiAjaW5jbHVkZSAi
U3RvcmFnZU5hbWVzcGFjZUltcGwuaCIKIAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbi5oIgorI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiU3RvcmFnZUFyZWFJbXBsLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFNYXAuaCIKLSNp
bmNsdWRlICJTdG9yYWdlTWFuYWdlclNldE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5o
IgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cFByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5o
IgpAQCAtMTE0LDcgKzExNCw3IEBAIFJlZjxTdG9yYWdlTmFtZXNwYWNlPiBTdG9yYWdlTmFtZXNw
YWNlSW1wbDo6Y29weShQYWdlJiBuZXdQYWdlKQogICAgIEFTU0VSVChtX3N0b3JhZ2VUeXBlID09
IFN0b3JhZ2VUeXBlOjpTZXNzaW9uKTsKIAogICAgIGlmIChhdXRvIG5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmV4aXN0aW5nTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlv
bigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDbG9uZVNlc3Npb25TdG9yYWdl
TmFtZXNwYWNlKHNlc3Npb25JRCgpLCBtX3N0b3JhZ2VOYW1lc3BhY2VJRCwgV2ViUGFnZTo6ZnJv
bUNvcmVQYWdlKG5ld1BhZ2UpLnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcigpKSwg
MCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVz
cGFjZShtX3N0b3JhZ2VOYW1lc3BhY2VJRCwgV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKG5ld1BhZ2Up
LnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcigpKSwgMCk7CiAKICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTdG9yYWdlTmFtZXNwYWNlSW1wbChtX3N0b3JhZ2VUeXBlLCBXZWJQYWdl
Ojpmcm9tQ29yZVBhZ2UobmV3UGFnZSkuc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVy
KCksIFdlYlBhZ2U6OmZyb21Db3JlUGFnZShuZXdQYWdlKS5pZGVudGlmaWVyKCksIG1fdG9wTGV2
ZWxPcmlnaW4uZ2V0KCksIG1fcXVvdGFJbkJ5dGVzKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446756</attachid>
            <date>2021-12-10 10:34:39 -0800</date>
            <delta_ts>2021-12-10 11:06:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234087-20211210103438.patch</filename>
            <type>text/plain</type>
            <size>164562</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2ODU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDE5ZTUxYmY4NWIwNDFm
ZTk5N2Y3NmVjM2I2OGRlMTQyYTU1MWNlYi4uYWZlZDdlMDQ0YWJmMjQwNmM0YWZkMGJkMTcxZTYz
OThlYjk4NGYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTEyLTEwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIFN0b3JhZ2VNYW5h
Z2VyIHdpdGggTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIHRvIG1hbmFnZSBXZWJTdG9yYWdlIGJ5IG9y
aWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVGaWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlRmlsZVN5c3RlbS5oOgorCiAyMDIxLTEyLTA5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBVc2Ugc2ltcGxlciBpZGlvbXMgZm9yIHN0ZDo6bGVzcyBhbmQg
c3RkOjpncmVhdGVyIHBvc3NpYmxlIGluIG1vZGVybiBDKysKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYmM3NWExOTY0
MzRmZjUwNTc5OWU3ODIzOWUyYTZhOTYwNGZiNzAyYS4uZjU2MmUwYjZjOGYyNWM4Njg0NmZkMGQ2
YWVkZDczMDY5ZmIxODRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMTAgQEAKKzIwMjEtMTItMTAg
IFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgTWVyZ2UgU3RvcmFn
ZU1hbmFnZXIgd2l0aCBOZXR3b3JrU3RvcmFnZU1hbmFnZXIgdG8gbWFuYWdlIFdlYlN0b3JhZ2Ug
Ynkgb3JpZ2luCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzQwODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbiBuZXR3b3JrIHByb2Nlc3MsIFdlYlN0b3JhZ2UgZGF0YSBpcyBtYW5hZ2VkIGJ5IFdlYktp
dDo6U3RvcmFnZU1hbmFnZXIgY2xhc3MuIEVhY2ggU3RvcmFnZU1hbmFnZXIgb3ducyBvbmUgb3IK
KyAgICAgICAgbWFueSBTdG9yYWdlTmFtZVNwYWNlcywgYW5kIGVhY2ggU3RvcmFnZU5hbWVzcGFj
ZXMgb3ducyBvbmUgb3IgbW9yZSBTdG9yYWdlQXJlYXMuIEVhY2ggU3RvcmFnZUFyZWEgY29ycmVw
b25kcworICAgICAgICB0byBvbmUgc3RvcmFnZSBtYXAgKG9uZSBsb2NhbFN0b3JhZ2Ugb3Igc2Vz
c2lvblN0b3JhZ2Ugb2JqZWN0KSwgYW5kIGhhcyB0d28gdHlwZXMgb2YgYmFja2VuZDogYSBTUUxp
dGUgZGF0YWJhc2UsCisgICAgICAgIG9yIGEgaW4tbWVtb3J5IGhhc2ggbWFwLiBOb3cgdGhhdCB3
ZSBoYXZlIE5ldHdvcmtTdG9yYWdlTWFuYWdlciwgd2hpY2ggbWFuYWdlcyBzdG9yYWdlIGJ5IG9y
aWdpbi4gV2UgY2FuIG1lcmdlCisgICAgICAgIFN0b3JhZ2VNYW5hZ2VyIHdpdGggTmV0d29ya1N0
b3JhZ2VNYW5hZ2VyLCBiZWNhdXNlIGxvY2FsU3RvcmFnZSBhbmQgc2Vzc2lvblN0b3JhZ2UgYXJl
IG5vdCBzaGFyZWQgYmV0d2VlbiAKKyAgICAgICAgZGlmZmVyZW50IG9yaWdpbnMuCisKKyAgICAg
ICAgVGhlIG5ldyBzdHJ1Y3R1cmUgaXM6CisgICAgICAgIE5ldHdvcmtTdG9yYWdlTWFuYWdlciAo
bWFuYWdlIHN0b3JhZ2UgZm9yIGEgc2Vzc2lvbiwgb3ducyBvbmUgb3IgbW9yZSBPcmlnaW5TdG9y
YWdlTWFuYWdlcikKKyAgICAgICAgT3JpZ2luU3RvcmFnZU1hbmFnZXIgKG1hbmFnZSBzdG9yYWdl
IGZvciBhbiBvcmlnaW4sIG93bnMgb25lIExvY2FsU3RvcmFnZU1hbmFnZXIgYW5kIG9uZSBTZXNz
aW9uU3RvcmFnZU1hbmFnZXIpCisgICAgICAgIExvY2FsU3RvcmFnZU1hbmFnZXIgLyBTZXNzaW9u
U3RvcmFnZU1hbmFnZXIgKG1hbmFnZSBMb2NhbFN0b3JhZ2UgYW5kIFNlc3Npb25TdG9yYWdlLCBv
d25zIG9uZSBvciBtb3JlIAorICAgICAgICBTdG9yYWdlQXJlYUJhc2VzKQorICAgICAgICBNZW1v
cnlTdG9yYWdlQXJlYSAvIFNRTGl0ZVN0b3JhZ2VBcmVhIChpbmhlcml0cyBTdG9yYWdlQXJlYUJh
c2VzOyBtYW5hZ2Ugb25lIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZSwgbGlrZSAKKyAgICAgICAg
V2Via2l0OjpTdG9yYWdlQXJlYSkKKworICAgICAgICBTdG9yYWdlTmFtZXNwYWNlIGxheWVyIGlz
IHJlbW92ZWQuIEZvciBTZXNzaW9uU3RvcmFnZSwgZGlmZmVyZW50IFN0b3JhZ2VOYW1lc3BhY2Vz
IG1lYW5zIGRpZmZlcmVudCB3ZWIgcGFnZXMsIAorICAgICAgICBhbmQgc2FtZSBvcmlnaW4gY2Fu
IGhhdmUgZGlmZmVyZW50IHNlc3Npb25TdG9yYWdlcyBvbiBkaWZmZXJlbnQgcGFnZXMsIHNvIHdl
IGtlZXAgYSBTdG9yYWdlTmFtZXNwYWNlIDw9PgorICAgICAgICBTdG9yYWdlQXJlYSBtYXAgaW4g
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLiBGb3IgTG9jYWxTdG9yYWdlLCBkaWZmZXJudCBTdG9yYWdl
TmFtZXNwYWNlcyBtZWFucyBkaWZmZXJlbnQgcGFnZSAKKyAgICAgICAgZ3JvdXBzLiBPdXIgb3Jp
Z2luYWwgcGxhbiB3YXMgdGhlIHNhbWUgb3JpZ2luIGNhbiBoYXZlIGRpZmZlcmVudCBsb2NhbFN0
b3JhZ2VzIGluIGRpZmZlcmVudCBwYWdlIGdyb3VwcywgYnV0IG91cgorICAgICAgICBvbGQgaW1w
bGVtZW50YXRpb24gYWN0dWFsbHkgbWFkZSBhbGwgcGFnZSBncm91cHMgcG9pbnQgdG8gdGhlIHNh
bWUgZGF0YWJhc2UgZmlsZS4gVG8ga2VlcCBleGlzdGluZyBiZWhhdmlvciAKKyAgICAgICAgKHRo
YXQgYWxsIHBhZ2UgZ3JvdXBzIHdpdGggc2FtZSBvcmlnaW4gc2hhcmUgdGhlIHN0b3JhZ2UpLCB3
ZSBub3cga2VlcCBvbmUgU3RvcmFnZUFyZWEgcGVyIExvY2FsU3RvcmFnZU1hbmFnZXIuCisKKyAg
ICAgICAgTW9zdGx5IHJlZmFjdG9yaW5nIGFuZCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgor
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6bG93TWVtb3J5SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZXN0cm95U2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpoYXNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlQW5kUmVzdHJpY3RXZWJzaXRlRGF0YUZvclJl
Z2lzdHJhYmxlRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwcmVw
YXJlVG9TdXNwZW5kKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJlc3VtZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y29ubmVjdGlvblRvV2ViUHJvY2Vz
c0Nsb3NlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpnZXRMb2NhbFN0b3Jh
Z2VPcmlnaW5EZXRhaWxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdl
TWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpmaWxlTmFtZVRvT3JpZ2luKToK
KyAgICAgICAgKFdlYktpdDo6b3JpZ2luVG9GaWxlTmFtZSk6CisgICAgICAgIChXZWJLaXQ6Okxv
Y2FsU3RvcmFnZU1hbmFnZXI6OmdldE9yaWdpbnNPZkxvY2FsU3RvcmFnZURhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VGaWxlUGF0aCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU1hbmFnZXIp
OgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OmNsZWFyRGF0YSk6CisgICAgICAgIChX
ZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TG9j
YWxTdG9yYWdlTWFuYWdlcjo6aGFuZGxlTG93TWVtb3J5V2FybmluZyk6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKToKKyAgICAgICAgKFdl
YktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6ZW5zdXJlU3RvcmFnZUFyZWEpOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToK
KyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50
TG9jYWxTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6
OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpNZW1vcnlTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJL
aXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6TWVtb3J5
U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6
OmFsbEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OnNldEl0ZW0p
OgorICAgICAgICAoV2ViS2l0OjpNZW1vcnlTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSk6CisgICAg
ICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpjbG9uZSBjb25zdCk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5oOiBBZGRlZC4KKyAgICAg
ICAgKGlzVHlwZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3Rv
cmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpyZWFkT3JpZ2luRnJvbUZpbGUpOgor
ICAgICAgICAoV2ViS2l0Ojp3cml0ZU9yaWdpblRvRmlsZUlmTmVjZXNzYXJ5KToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcik6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYktp
dDo6b3JpZ2luRGlyZWN0b3J5UGF0aCk6CisgICAgICAgIChXZWJLaXQ6Om9yaWdpbkZpbGVQYXRo
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpsb2NhbE9yaWdpblN0
b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpy
ZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZU9yaWdpbkRpcmVjdG9yeUlmUG9zc2libGUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsZWFyU3RvcmFnZUZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZvckVhY2hP
cmlnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmdldEFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmZldGNoRGF0YUZyb21EaXNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5h
Z2VyOjpkZWxldGVEYXRhT25EaXNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VN
YW5hZ2VyOjptb3ZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6c3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVz
dW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpoYW5kbGVMb3dN
ZW1vcnlXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpz
eW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
Ojpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9TZXNzaW9uU3RvcmFn
ZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5l
Y3RGcm9tU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrU3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
dG9yYWdlTWFuYWdlcjo6c2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdl
TWFuYWdlcjo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFu
YWdlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0Ojp0b1dlYnNpdGVEYXRhVHlwZSk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFn
ZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFu
YWdlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdp
blN0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFn
ZXI6OlN0b3JhZ2VCdWNrZXQ6OlN0b3JhZ2VCdWNrZXQpOgorICAgICAgICAoV2ViS2l0OjpPcmln
aW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6dG9XZWJzaXRlRGF0YVR5cGUpOgorICAg
ICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6dG9TdG9y
YWdlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpT
dG9yYWdlQnVja2V0Ojpsb2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3Jp
Z2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFu
YWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVj
a2V0OjpzZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9y
YWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZXhpc3RpbmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIp
OgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6
aXNBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFn
ZUJ1Y2tldDo6aXNFbXB0eSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpTdG9yYWdlQnVja2V0OjpmZXRjaERhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9y
YWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6
Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojptb3ZlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpmZXRjaERhdGFJ
bk1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0OjpmZXRjaERhdGFGcm9tRGlzayk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3Jh
Z2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKToKKyAgICAg
ICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0ZVNl
c3Npb25TdG9yYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpPcmlnaW5TdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VN
YW5hZ2VyOjpkZWZhdWx0QnVja2V0KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1h
bmFnZXI6OmxvY2FsU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9y
YWdlTWFuYWdlcjo6ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktp
dDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OnNlc3Npb25TdG9yYWdlTWFuYWdlcik6CisgICAgICAg
IChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFu
YWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YSk6CisgICAg
ICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhKToKKyAgICAgICAg
KFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6Om1vdmVEYXRhKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmg6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6c3RhdGVtZW50U3RyaW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OlNRTGl0ZVN0b3JhZ2VBcmVhKToKKyAg
ICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmNsb3NlKToKKyAgICAgICAgKFdlYktp
dDo6U1FMaXRlU3RvcmFnZUFyZWE6On5TUUxpdGVTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJL
aXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRl
U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6
OmNyZWF0ZVRhYmxlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdl
QXJlYTo6cHJlcGFyZURhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFy
ZWE6OnN0YXJ0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0
ZVN0b3JhZ2VBcmVhOjpjYWNoZWRTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVT
dG9yYWdlQXJlYTo6Z2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVh
OjpnZXRJdGVtRnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFy
ZWE6OmFsbEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnNldEl0
ZW0pOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSk6Cisg
ICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjb21taXRUcmFuc2FjdGlvbklmTmVj
ZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmhhbmRsZUxvd01l
bW9yeVdhcm5pbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3Rv
cmFnZUFyZWEuaDogQWRkZWQuCisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKToK
KyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6aGFzRGF0YUluTWVtb3J5KToKKyAg
ICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjbGVhckRhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3Rpb25DbG9zZWQpOgorICAg
ICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmFkZFN0b3JhZ2VBcmVhKToKKyAg
ICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9TZXNzaW9uU3Rv
cmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmRpc2Nv
bm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1h
bmFnZXI6OmNsb25lU3RvcmFnZUFyZWEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZUFyZWFCYXNlKToKKyAgICAgICAgKFdlYktpdDo6U3Rv
cmFnZUFyZWFCYXNlOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVh
QmFzZTo6cmVtb3ZlTGlzdGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6
Omhhc0xpc3RlbmVycyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6
bm90aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVh
QmFzZTo6ZGlzcGF0Y2hFdmVudHMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
QXJlYUJhc2U6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJl
YUJhc2U6Om9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6
cXVvdGEgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFy
ZWFSZWdpc3RyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYVJlZ2lz
dHJ5OjpyZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFS
ZWdpc3RyeTo6dW5yZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZUFyZWFSZWdpc3RyeTo6Z2V0U3RvcmFnZUFyZWEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3Jh
Z2VEZXRhaWxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAqIFVuaWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVs
aXN0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZUFyZWFNYXA6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6
Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6ZW5zdXJlTWFwKToKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmNvbm5lY3QpOgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYU1hcDo6ZGlzY29ubmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZU5hbWVzcGFjZUltcGw6OmNvcHkpOgorCiAyMDIxLTEyLTA5ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2Ugc2ltcGxlciBpZGlvbXMgZm9yIHN0ZDo6bGVzcyBh
bmQgc3RkOjpncmVhdGVyIHBvc3NpYmxlIGluIG1vZGVybiBDKysKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAppbmRleCA3NmU0NWFmMzRlZDA5
M2ZkOWYyNzZkZDVkNGI5MjJhNDE2MzRkOWFlLi5lN2NkY2JmNWFiZDIwNjk2ODVlMWZhZDFkNzQ0
MTljYTEwODFhOWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0
ZUZpbGVTeXN0ZW0uY3BwCkBAIC00Myw2ICs0Myw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PGNvbnN0IGNoYXIgKiwgMz4gZGF0YWJhc2VG
aWxlU3VmZml4ZXMgeyAiIiwgIi1zaG0iLCAiLXdhbCIgfTsKKwogU1FMaXRlRmlsZVN5c3RlbTo6
U1FMaXRlRmlsZVN5c3RlbSgpCiB7CiB9CkBAIC03NywxOCArNzksMjIgQEAgYm9vbCBTUUxpdGVG
aWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCkKICAgICByZXR1cm4gRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkocGF0aCk7CiB9
CiAKLWJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUpCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShj
b25zdCBTdHJpbmcmIGZpbGVQYXRoKQogewotICAgIGF1dG8gd2FsRmlsZU5hbWUgPSBtYWtlU3Ry
aW5nKGZpbGVOYW1lLCAiLXdhbCJfcyk7Ci0gICAgYXV0byBzaG1GaWxlTmFtZSA9IG1ha2VTdHJp
bmcoZmlsZU5hbWUsICItc2htIl9zKTsKKyAgICBib29sIGZpbGVFeGlzdHMgPSBmYWxzZTsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8qIHN1ZmZpeCA6IGRhdGFiYXNlRmlsZVN1ZmZpeGVzKSB7CisgICAg
ICAgIFN0cmluZyBwYXRoID0gZmlsZVBhdGggKyBzdWZmaXg7CisgICAgICAgIEZpbGVTeXN0ZW06
OmRlbGV0ZUZpbGUocGF0aCk7CisgICAgICAgIGZpbGVFeGlzdHMgfD0gRmlsZVN5c3RlbTo6Zmls
ZUV4aXN0cyhwYXRoKTsKKyAgICB9CiAKLSAgICAvLyBUcnkgdG8gZGVsZXRlIGFsbCB0aHJlZSBm
aWxlcyB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSB0aGVyZS4KLSAgICBGaWxlU3lzdGVtOjpkZWxl
dGVGaWxlKGZpbGVOYW1lKTsKLSAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHdhbEZpbGVOYW1l
KTsKLSAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHNobUZpbGVOYW1lKTsKKyAgICByZXR1cm4g
IWZpbGVFeGlzdHM7Cit9CiAKLSAgICAvLyBJZiBhbnkgb2YgdGhlIHdhbCBvciBzaG0gZmlsZXMg
cmVtYWluIGFmdGVyIHRoZSBkZWxldGUgYXR0ZW1wdCwgdGhlIG92ZXJhbGwgZGVsZXRlIG9wZXJh
dGlvbiBmYWlsZWQuCi0gICAgcmV0dXJuICFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGZpbGVOYW1l
KSAmJiAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh3YWxGaWxlTmFtZSkgJiYgIUZpbGVTeXN0ZW06
OmZpbGVFeGlzdHMoc2htRmlsZU5hbWUpOwordm9pZCBTUUxpdGVGaWxlU3lzdGVtOjptb3ZlRGF0
YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgb2xkRmlsZVBhdGgsIGNvbnN0IFN0cmluZyYgbmV3Rmls
ZVBhdGgpCit7CisgICAgZm9yIChjb25zdCBhdXRvKiBzdWZmaXggOiBkYXRhYmFzZUZpbGVTdWZm
aXhlcykKKyAgICAgICAgRmlsZVN5c3RlbTo6bW92ZUZpbGUobWFrZVN0cmluZyhvbGRGaWxlUGF0
aCwgc3VmZml4KSwgbWFrZVN0cmluZyhuZXdGaWxlUGF0aCwgc3VmZml4KSk7CiB9CiAKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQpAQCAtOTgsMTggKzEwNCwxMyBAQCBib29sIFNRTGl0ZUZpbGVT
eXN0ZW06OnRydW5jYXRlRGF0YWJhc2VGaWxlKHNxbGl0ZTMqIGRhdGFiYXNlKQogfQogI2VuZGlm
CiAgICAgCi11aW50NjRfdCBTUUxpdGVGaWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXplKGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUpCi17ICAgICAgICAKK3VpbnQ2NF90IFNRTGl0ZUZpbGVTeXN0ZW06
OmRhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKK3sKICAgICB1aW50NjRf
dCB0b3RhbFNpemUgPSAwOwotCi0gICAgaWYgKGF1dG8gZmlsZVNpemUgPSBGaWxlU3lzdGVtOjpm
aWxlU2l6ZShmaWxlTmFtZSkpCi0gICAgICAgIHRvdGFsU2l6ZSArPSAqZmlsZVNpemU7Ci0KLSAg
ICBpZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06OmZpbGVTaXplKG1ha2VTdHJpbmcoZmls
ZU5hbWUsICItd2FsIl9zKSkpCi0gICAgICAgIHRvdGFsU2l6ZSArPSAqZmlsZVNpemU7Ci0KLSAg
ICBpZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06OmZpbGVTaXplKG1ha2VTdHJpbmcoZmls
ZU5hbWUsICItc2htIl9zKSkpCi0gICAgICAgIHRvdGFsU2l6ZSArPSAqZmlsZVNpemU7CisgICAg
Zm9yIChjb25zdCBhdXRvKiBzdWZmaXggOiBkYXRhYmFzZUZpbGVTdWZmaXhlcykgeworICAgICAg
ICBpZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06OmZpbGVTaXplKGZpbGVQYXRoICsgc3Vm
Zml4KSkKKyAgICAgICAgICAgIHRvdGFsU2l6ZSArPSAqZmlsZVNpemU7CisgICAgfQogCiAgICAg
cmV0dXJuIHRvdGFsU2l6ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVGaWxlU3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlRmlsZVN5c3RlbS5oCmluZGV4IGM2OGQ5YzdlN2FmOTg5NzZhMWVkM2RjYjZmMmFjZmU0YjZj
ZjVjMmYuLjk4ZTdlYTBkMDdhMjU0MTFmYTRmNjJhYTcyMTY1OTNmNjNlMzljNWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaApAQCAtNzgsOSAr
NzgsMTEgQEAgcHVibGljOgogICAgIC8vIERlbGV0ZXMgYSBkYXRhYmFzZSBmaWxlLgogICAgIC8v
CiAgICAgLy8gZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLgotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBib29sIGRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3Ry
aW5nJiBmaWxlUGF0aCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGNvbXB1
dGVIYXNoRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisgICAgLy8gTW92ZXMg
YSBkYXRhYmFzZSBmaWxlIHRvIGEgbmV3IHBsYWNlLgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyB2b2lkIG1vdmVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRGaWxlUGF0aCwgY29uc3Qg
U3RyaW5nJiBuZXdGaWxlUGF0aCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBj
b21wdXRlSGFzaEZvckZpbGVOYW1lKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpOwogCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBUcnVuY2F0ZXMgYSBkYXRhYmFzZSBmaWxlLiBVc2Vk
IHdoZW4gTW9iaWxlU2FmYXJpU2V0dGluZ3MgZGVsZXRlcyBhIGRhdGFiYXNlIGZpbGUsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDFl
ZjMzYTZlNjI3MzcxMDQ0Nzc1MWE1NzNjMjc0ODk3ZWQyOTQwYTYuLmU2ZTA4NjQ0YTNiMzMwNzI3
NWI2MzViODExYzRlODEwMWJjZjcyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0xNTgsNyArMTU4LDYgQEAgc3RhdGljIGlubGlu
ZSBNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeSBjcmVhdGVNZXNzYWdlUG9ydENoYW5uZWxSZWdp
c3RyeShOZXR3b3IKIAogTmV0d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9jZXNzKEF1eGlsaWFyeVBy
b2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogICAgIDogbV9kb3du
bG9hZE1hbmFnZXIoKnRoaXMpCi0gICAgLCBtX3N0b3JhZ2VNYW5hZ2VyU2V0KFN0b3JhZ2VNYW5h
Z2VyU2V0OjpjcmVhdGUoKSkKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgICwg
bV9uZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlcigqdGhpcykKICNlbmRpZgpAQCAtMzE0LDEy
ICszMTMsMTMgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6bG93TWVtb3J5SGFuZGxlcihDcml0aWNh
bCBjcml0aWNhbCkKICAgICAgICAgbmV0d29ya1Nlc3Npb24uY2xlYXJQcmVmZXRjaENhY2hlKCk7
CiAgICAgfSk7CiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5oYW5kbGVMb3dNZW1vcnlXYXJu
aW5nKCk7Ci0KICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgZm9yIChhdXRvJiBzd1Nl
cnZlciA6IG1fc3dTZXJ2ZXJzLnZhbHVlcygpKQogICAgICAgICBzd1NlcnZlci0+aGFuZGxlTG93
TWVtb3J5V2FybmluZygpOwogI2VuZGlmCisKKyAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX3N0
b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAgbWFuYWdlci0+aGFuZGxlTG93TWVtb3J5
V2FybmluZygpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQpAQCAt
NDAyLDcgKzQwMiw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNyZWF0ZU5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzKFByb2Nlc3NJZGVudGlmaWVyIGlkZW50CiAKICAgICBjb25uZWN0aW9u
LnNldE9uTGluZVN0YXRlKE5ldHdvcmtTdGF0ZU5vdGlmaWVyOjpzaW5nbGV0b24oKS5vbkxpbmUo
KSk7CiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGRDb25uZWN0aW9uKGNvbm5lY3Rpb24u
Y29ubmVjdGlvbigpKTsKICAgICB3ZWJJREJTZXJ2ZXIoc2Vzc2lvbklEKS5hZGRDb25uZWN0aW9u
KGNvbm5lY3Rpb24uY29ubmVjdGlvbigpLCBpZGVudGlmaWVyKTsKICAgICBpZiAoYXV0byBtYW5h
Z2VyID0gbV9zdG9yYWdlTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCkpCiAgICAgICAgIG1hbmFnZXIt
PnN0YXJ0UmVjZWl2aW5nTWVzc2FnZUZyb21Db25uZWN0aW9uKGNvbm5lY3Rpb24uY29ubmVjdGlv
bigpKTsKQEAgLTQyMSw3ICs0MjAsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRXZWJzaXRl
RGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycwogewogICAg
IGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vz
c2lvbklEOwogCi0gICAgYWRkU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKHNlc3Npb25JRCwgcGFy
YW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5nZW5lcmFsU3RvcmFn
ZURpcmVjdG9yeUhhbmRsZSk7CisgICAgYWRkU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKHNlc3Np
b25JRCwgcGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5nZW5l
cmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAg
ICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMucGVy
T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdl
UXVvdGEsIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNhY2hl
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBhZGRJbmRleGVkRGF0YWJh
c2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKQEAg
LTQzMCw4ICs0MjksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3Jl
KFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycwogICAgIGFkZFNlcnZpY2VX
b3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rl
cm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBw
YXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KICAgICBS
ZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRo
aXMsIFdURk1vdmUocGFyYW1ldGVycykpOwogfQogCkBAIC00NTQsMTEgKzQ1MSwxNiBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiAgICAgbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMucmVt
b3ZlKHNlc3Npb25JRCk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFN0b3JhZ2VNYW5h
Z2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZ2Vu
ZXJhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGdlbmVyYWxTdG9yYWdl
UGF0aEhhbmRsZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vz
c2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZ2VuZXJhbFN0b3Jh
Z2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGdlbmVyYWxTdG9yYWdlUGF0aEhhbmRs
ZSwgY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUmIGxvY2FsU3RvcmFnZVBhdGhIYW5kbGUpCiB7CiAgICAgbV9zdG9yYWdlTWFuYWdlcnMuZW5z
dXJlKHNlc3Npb25JRCwgWyZdIHsKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBl
cm1hbmVudGx5KGdlbmVyYWxTdG9yYWdlUGF0aEhhbmRsZSk7Ci0gICAgICAgIHJldHVybiBOZXR3
b3JrU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShzZXNzaW9uSUQsIGdlbmVyYWxTdG9yYWdlUGF0aCk7
CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBvcHRpb25hbExvY2FsU3RvcmFnZVBhdGg7
CisgICAgICAgIGlmICghbG9jYWxTdG9yYWdlUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IG9wdGlvbmFsTG9jYWxTdG9yYWdlUGF0aCA9IGxvY2FsU3RvcmFnZVBhdGg7CisgICAgICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkobG9jYWxTdG9yYWdlUGF0aEhh
bmRsZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Y3JlYXRlKHNlc3Npb25JRCwgZ2VuZXJhbFN0b3JhZ2VQYXRoLCBvcHRpb25hbExvY2FsU3RvcmFn
ZVBhdGgpOwogICAgIH0pOwogfQogCkBAIC01NzUsNyArNTc3LDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIG1fc2Vy
dmljZVdvcmtlckluZm8ucmVtb3ZlKHNlc3Npb25JRCk7CiAjZW5kaWYKIAotICAgIG1fc3RvcmFn
ZU1hbmFnZXJTZXQtPnJlbW92ZShzZXNzaW9uSUQpOwogICAgIGlmIChhdXRvIHNlcnZlciA9IG1f
d2ViSURCU2VydmVycy50YWtlKHNlc3Npb25JRCkpCiAgICAgICAgIHNlcnZlci0+Y2xvc2UoKTsK
ICAgICByZW1vdmVTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oc2Vzc2lvbklEKTsKQEAgLTEwNjUs
MTUgKzEwNjYsMTYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJVc2VySW50ZXJhY3Rpb24o
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3QKIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6aGFzTG9jYWxTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAobV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFp
bnMoc2Vzc2lvbklEKSkgewotICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5nZXRMb2NhbFN0
b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW2RvbWFpbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIG9yaWdpbnMpIG11dGFibGUgewotICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjphbnlPZihvcmlnaW5zLCBbJmRvbWFpbl0oYXV0
byYgb3JpZ2luKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5tYXRjaGVzKG9yaWdp
bik7Ci0gICAgICAgICAgICB9KSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9z
dG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOworICAgIGlmIChpdGVyYXRvciA9PSBtX3N0
b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsKKworICAgIGF1dG8gdHlwZXMgPSBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB7IFdl
YnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlIH07CisgICAgaXRlcmF0b3ItPnZhbHVlLT5mZXRj
aERhdGEodHlwZXMsIFtkb21haW4sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKGF1dG8gZW50cmllcykgbXV0YWJsZSB7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURjo6YW55T2YoZW50cmllcywgWyZkb21haW5dKGF1dG8mIGVudHJ5KSB7CisgICAg
ICAgICAgICByZXR1cm4gZG9tYWluLm1hdGNoZXMoZW50cnkub3JpZ2luKTsKKyAgICAgICAgfSkp
OworICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRDYWNoZU1heEFnZUNhcEZv
clByZXZhbGVudFJlc291cmNlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFNlY29uZHMgc2Vj
b25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTQ5MSwyMCArMTQ5Myw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0CiAgICAgICAgIH0pOwog
ICAgIH0KIAotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6U2Vzc2lvblN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Np
b25JRCkpIHsKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+Z2V0U2Vzc2lvblN0b3JhZ2VP
cmlnaW5zKHNlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIG9yaWdpbnMpIHsK
LSAgICAgICAgICAgIHdoaWxlICghb3JpZ2lucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVE
YXRhOjpFbnRyeSB7IG9yaWdpbnMudGFrZUFueSgpLCBXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25T
dG9yYWdlLCAwIH0pOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAod2Vic2l0ZURhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkgJiYgbV9zdG9yYWdl
TWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewotICAgICAgICBtX3N0b3JhZ2VNYW5h
Z2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0oYXV0byYmIG9yaWdpbnMpIHsKLSAgICAgICAgICAgIHdoaWxlICghb3JpZ2lucy5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRh
LmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbnMudGFrZUFueSgpLCBX
ZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSwgMCB9KTsKLSAgICAgICAgfSk7Ci0gICAgfQot
CiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShTT1VQKQogICAgIGlmICh3ZWJzaXRlRGF0YVR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SFNUU0NhY2hlKSkKICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmhvc3ROYW1lc1dpdGhIU1RTQ2FjaGUgPSBob3N0
TmFtZXNXaXRoSFNUU0NhY2hlKHNlc3Npb25JRCk7CkBAIC0xNTU3LDEwICsxNTQ1LDEyIEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBPcHRpb25TZXQ8V2Vic2l0CiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoYXV0byBpdGVy
YXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0b3IgIT0gbV9z
dG9yYWdlTWFuYWdlcnMuZW5kKCkpIHsKLSAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5mZXRjaERh
dGEod2Vic2l0ZURhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byBlbnRyaWVzKSBt
dXRhYmxlIHsKLSAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5l
bnRyaWVzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGVudHJpZXMpKTsKLSAgICAgICAgfSk7CisgICAg
aWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMod2Vic2l0ZURhdGFUeXBl
cykpIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5k
KHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKSB7CisgICAg
ICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmZldGNoRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXShhdXRvIGVudHJpZXMpIG11dGFibGUgeworICAgICAgICAgICAgICAg
IGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZFZlY3RvcihX
VEZNb3ZlKGVudHJpZXMpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CiAgICAgfQogfQog
CkBAIC0xNTg3LDEyICsxNTc3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0
ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2kKICAgICBpZiAo
d2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRPTUNhY2hlKSkKICAg
ICAgICAgQ2FjaGVTdG9yYWdlOjpFbmdpbmU6OmNsZWFyQWxsQ2FjaGVzKCp0aGlzLCBzZXNzaW9u
SUQsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKIAotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpICYmIG1fc3RvcmFnZU1h
bmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJT
ZXQtPmRlbGV0ZVNlc3Npb25TdG9yYWdlKHNlc3Npb25JRCwgW2NsZWFyVGFza3NIYW5kbGVyXSB7
IH0pOwotCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpMb2NhbFN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25J
RCkpCi0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRlbGV0ZUxvY2FsU3RvcmFnZU1vZGlm
aWVkU2luY2Uoc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsg
fSk7Ci0KICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6
OkluZGV4ZWREQkRhdGFiYXNlcykgJiYgIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAg
ICB3ZWJJREJTZXJ2ZXIoc2Vzc2lvbklEKS5jbG9zZUFuZERlbGV0ZURhdGFiYXNlc01vZGlmaWVk
U2luY2UobW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwogCkBAIC0xNjM3
LDggKzE2MjEsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2kKICAgICB9CiAjZW5kaWYKIAot
ICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQp
OyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKLSAgICAgICAgaXRlcmF0b3It
PnZhbHVlLT5kZWxldGVEYXRhTW9kaWZpZWRTaW5jZSh3ZWJzaXRlRGF0YVR5cGVzLCBtb2RpZmll
ZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CisgICAgaWYgKE5ldHdvcmtTdG9yYWdl
TWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMod2Vic2l0ZURhdGFUeXBlcykpIHsKKyAgICAgICAgaWYg
KGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJh
dG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKQorICAgICAgICAgICAgaXRlcmF0b3ItPnZh
bHVlLT5kZWxldGVEYXRhTW9kaWZpZWRTaW5jZSh3ZWJzaXRlRGF0YVR5cGVzLCBtb2RpZmllZFNp
bmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CisgICAgfQogfQogCiBzdGF0aWMgdm9pZCBj
bGVhckRpc2tDYWNoZUVudHJpZXMoTmV0d29ya0NhY2hlOjpDYWNoZSogY2FjaGUsIGNvbnN0IFZl
Y3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzAzLDEyICsxNjg5LDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgT3B0aW8KICAgICAgICAgICAgIENhY2hlU3RvcmFnZTo6RW5naW5lOjpjbGVhckNh
Y2hlc0Zvck9yaWdpbigqdGhpcywgc2Vzc2lvbklELCBTZWN1cml0eU9yaWdpbkRhdGEgeyBvcmln
aW5EYXRhIH0sIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKICAgICB9CiAKLSAgICBpZiAod2Vi
c2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSAm
JiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAgICBtX3N0
b3JhZ2VNYW5hZ2VyU2V0LT5kZWxldGVTZXNzaW9uU3RvcmFnZUZvck9yaWdpbnMoc2Vzc2lvbklE
LCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwotCi0gICAgaWYgKHdlYnNp
dGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpICYmIG1f
c3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgIG1fc3RvcmFn
ZU1hbmFnZXJTZXQtPmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbnMoc2Vzc2lvbklELCBvcmln
aW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwotCiAgICAgaWYgKHdlYnNpdGVEYXRh
VHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpICYmICFz
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgd2ViSURCU2VydmVyKHNlc3Npb25JRCku
Y2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNr
c0hhbmRsZXJdIHsgfSk7CiAKQEAgLTE3NDYsOCArMTcyNiwxMCBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBPcHRpbwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3Jh
Z2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJz
LmVuZCgpKQotICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRlbGV0ZURhdGEod2Vic2l0ZURhdGFU
eXBlcywgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKKyAgICBpZiAoTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJzaXRlRGF0YVR5cGVzKSkgewor
ICAgICAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lv
bklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCisgICAgICAgICAgICBp
dGVyYXRvci0+dmFsdWUtPmRlbGV0ZURhdGEod2Vic2l0ZURhdGFUeXBlcywgb3JpZ2luRGF0YXMs
IFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKKyAgICB9CiAKICAgICBpZiAoYXV0byogbmV0d29y
a1Nlc3Npb24gPSB0aGlzLT5uZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKSB7CiAgICAgICAgIEhh
c2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnNUb0RlbGV0ZU5ldHdvcmtE
YXRhRm9yOwpAQCAtMTkwNCwyOCArMTg4Niw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0
ZUFuZFJlc3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMoUEFMOjpTZXNzCiAg
ICAgICAgIH0pOwogICAgIH0KIAotICAgIGlmIChtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlu
cyhzZXNzaW9uSUQpKSB7Ci0gICAgICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpKSB7Ci0gICAgICAgICAgICBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5nZXRTZXNzaW9uU3RvcmFnZU9yaWdpbnMoc2Vzc2lvbklELCBbcHJvdGVjdGVk
VGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRoaXMsIHNlc3Npb25JRCwgY2FsbGJhY2tBZ2dyZWdhdG9y
LCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvcl0oYXV0byYmIG9yaWdp
bnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5z
KHNlc3Npb25JRCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAg
ICAgIGF1dG8gb3JpZ2luc1RvRGVsZXRlID0gZmlsdGVyRm9yUmVnaXN0cmFibGVEb21haW5zKG9y
aWdpbnMsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLCBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPm1fZG9tYWlucyk7Ci0gICAgICAgICAgICAgICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2VGb3JPcmlnaW5zKHNlc3Npb25JRCwgb3JpZ2luc1Rv
RGVsZXRlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKLSAgICAgICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQt
PmdldExvY2FsU3RvcmFnZU9yaWdpbnMoc2Vzc2lvbklELCBbcHJvdGVjdGVkVGhpcyA9IFJlZiB7
ICp0aGlzIH0sIHRoaXMsIHNlc3Npb25JRCwgY2FsbGJhY2tBZ2dyZWdhdG9yLCBkb21haW5zVG9E
ZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvcl0oYXV0byYmIG9yaWdpbnMpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIW1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIGF1dG8gb3Jp
Z2luc1RvRGVsZXRlID0gZmlsdGVyRm9yUmVnaXN0cmFibGVEb21haW5zKG9yaWdpbnMsIGRvbWFp
bnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLCBjYWxsYmFja0FnZ3JlZ2F0b3It
Pm1fZG9tYWlucyk7Ci0gICAgICAgICAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+ZGVsZXRl
TG9jYWxTdG9yYWdlRm9yT3JpZ2lucyhzZXNzaW9uSUQsIG9yaWdpbnNUb0RlbGV0ZSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQot
CiAgICAgYXV0byBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhzLmdldChzZXNzaW9uSUQpOwogICAg
IGlmICghcGF0aC5pc0VtcHR5KCkgJiYgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykpIHsKICAgICAgICAgd2ViSURCU2VydmVyKHNl
c3Npb25JRCkuZ2V0T3JpZ2lucyhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0s
IHNlc3Npb25JRCwgY2FsbGJhY2tBZ2dyZWdhdG9yLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29r
aWVXZWJzaXRlRGF0YUZvcl0oYXV0byYmIG9yaWdpbnMpIHsKQEAgLTE5NzIsMTEgKzE5MzIsMTMg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlQW5kUmVzdHJpY3RXZWJzaXRlRGF0YUZvclJl
Z2lzdHJhYmxlRG9tYWlucyhQQUw6OlNlc3MKICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgaWYg
KGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJh
dG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKSB7Ci0gICAgICAgIGl0ZXJhdG9yLT52YWx1
ZS0+ZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyh3ZWJzaXRlRGF0YVR5cGVzLCBkb21h
aW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvciwgW2NhbGxiYWNrQWdncmVnYXRv
cl0oYXV0byBkZWxldGVkRG9tYWlucykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8g
ZG9tYWluIDogZGVsZXRlZERvbWFpbnMpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5tX2RvbWFpbnMuYWRkKFdURk1vdmUoZG9tYWluKSk7Ci0gICAgICAgIH0pOworICAgIGlm
IChOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5cGVzKHdlYnNpdGVEYXRhVHlwZXMp
KSB7CisgICAgICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChz
ZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkgeworICAgICAg
ICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKHdl
YnNpdGVEYXRhVHlwZXMsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9y
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvIGRlbGV0ZWREb21haW5zKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8gZG9tYWluIDogZGVsZXRlZERvbWFpbnMpCisgICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV9kb21haW5zLmFkZChXVEZNb3ZlKGRv
bWFpbikpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBhdXRvIGRh
dGFUeXBlc0ZvclVJUHJvY2VzcyA9IFdlYnNpdGVEYXRhOjpmaWx0ZXIod2Vic2l0ZURhdGFUeXBl
cywgV2Vic2l0ZURhdGFQcm9jZXNzVHlwZTo6VUkpOwpAQCAtMjMwNyw3ICsyMjY5LDggQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6cHJlcGFyZVRvU3VzcGVuZChib29sIGlzU3VzcGVuc2lvbkltbWlu
ZW50LCBDb21wbGV0aW9uSGFuZGwKICAgICB9CiAjZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPnN1c3BlbmQoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBmb3IgKGF1dG8m
IG1hbmFnZXIgOiBtX3N0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAgbWFuYWdlci0+
c3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpCkBAIC0yMzQ2LDcgKzIzMDksOCBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXN1bWUoKQogICAgIG1fc2hvdWxkU3VzcGVuZElEQlNl
cnZlcnMgPSBmYWxzZTsKICNlbmRpZgogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+cmVzdW1l
KCk7CisgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkp
CisgICAgICAgIG1hbmFnZXItPnJlc3VtZSgpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpw
cmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQpAQCAtMjQ0Miw4ICsyNDA2LDkgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJJREJSb290
UGF0aChQQUw6OlNlc3Npb25JRCBzZXMKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c3luY0xvY2Fs
U3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+d2FpdFVudGlsU3luY2luZ0xvY2FsU3RvcmFnZUZp
bmlzaGVkKCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICBhdXRvIGFnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CisgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpCisg
ICAgICAgIG1hbmFnZXItPnN5bmNMb2NhbFN0b3JhZ2UoW2FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlc2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNDcz
LDEwICsyNDM4LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVuYW1lT3JpZ2luSW5XZWJzaXRl
RGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFUKICAgICBpZiAob2xkT3JpZ2lu
LmlzRW1wdHkoKSB8fCBuZXdPcmlnaW4uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkg
ewotICAgICAgICBpZiAobV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkK
LSAgICAgICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPnJlbmFtZU9yaWdpbihzZXNzaW9uSUQs
IG9sZE5hbWUsIG5ld05hbWUsIFthZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBpZiAoYXV0
byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0b3Ig
IT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCisgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+bW92
ZURhdGEob2xkT3JpZ2luLCBuZXdPcmlnaW4sIFthZ2dyZWdhdG9yXSB7IH0pOwogCiAgICAgaWYg
KGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykp
IHsKICAgICAgICAgYXV0byBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhzLmdldChzZXNzaW9uSUQp
OwpAQCAtMjc3MSwyMSArMjczNCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbW92ZUtlcHRB
bGl2ZUxvYWQoTmV0d29ya1Jlc291cmNlTG9hZGVyJiBsb2FkZXIpCiAgICAgICAgIHNlc3Npb24t
PnJlbW92ZUtlcHRBbGl2ZUxvYWQobG9hZGVyKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6
Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6
T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFtX3N0
b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKSB7Ci0gICAgICAgIExPR19FUlJP
UigiQ2Fubm90IGdldCBsb2NhbCBzdG9yYWdlIGluZm9ybWF0aW9uIGZvciBhbiB1bmtub3duIHNl
c3Npb24iKTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmdldExvY2FsU3RvcmFnZU9yaWdp
bkRldGFpbHMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NDbG9zZWQoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgbV9z
dG9yYWdlTWFuYWdlclNldC0+cmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKLQogICAgIGlm
IChhdXRvKiBzZXJ2ZXIgPSBtX3dlYklEQlNlcnZlcnMuZ2V0KHNlc3Npb25JRCkpCiAgICAgICAg
IHNlcnZlci0+cmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IDg4MDE3YzQ0YTEwNWYxYzBm
ZGU1NWIyNGMyZmUwOTliNzY2ZmFmODEuLjVhMjBhN2NmOTcwMTcwZTk0ZGQ3YWE4ZTM4ZmJhZGI5
NTQ2YTA1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKQEAgLTEwNyw3ICsxMDcsNiBAQCBjbGFzcyBOZXR3b3JrUHJveGltaXR5TWFuYWdlcjsK
IGNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIE5ldHdvcmtTdG9yYWdlTWFuYWdl
cjsKIGNsYXNzIFByb2Nlc3NBc3NlcnRpb247Ci1jbGFzcyBTdG9yYWdlTWFuYWdlclNldDsKIGNs
YXNzIFdlYlBhZ2VOZXR3b3JrUGFyYW1ldGVyczsKIGNsYXNzIFdlYlNXU2VydmVyQ29ubmVjdGlv
bjsKIGNsYXNzIFdlYlNXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlvbjsKQEAgLTI5Niw3ICsyOTUs
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKFBB
TDo6U2Vzc2lvbklEKSBjb25zdDsKIAogICAgIHZvaWQgY29ubmVjdGlvblRvV2ViUHJvY2Vzc0Ns
b3NlZChJUEM6OkNvbm5lY3Rpb24mLCBQQUw6OlNlc3Npb25JRCk7Ci0gICAgdm9pZCBnZXRMb2Nh
bFN0b3JhZ2VPcmlnaW5EZXRhaWxzKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYp
PiYmKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgTmV0d29ya0NvbnRl
bnRSdWxlTGlzdE1hbmFnZXImIG5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyKCkgeyByZXR1
cm4gbV9uZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlcjsgfQpAQCAtNTU0LDcgKzU1Miw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNl
c3Npb25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0
eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgsIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpT
ZXNzaW9uSUQpOwogCi0gICAgdm9pZCBhZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oUEFMOjpT
ZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7
CisgICAgdm9pZCBhZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oUEFMOjpTZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgcGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgY29uc3QgU3RyaW5n
JiBsb2NhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKICAgICB2b2lk
IHJlbW92ZVN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCk7CiAKICAgICAv
LyBDb25uZWN0aW9ucyB0byBXZWJQcm9jZXNzZXMuCkBAIC01NzcsOCArNTc1LDYgQEAgcHJpdmF0
ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nl
c3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4gbV9uZXR3b3Jr
U3RvcmFnZVNlc3Npb25zOwogCi0gICAgUmVmPFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VN
YW5hZ2VyU2V0OwotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IGYzYzIzZDFjMTg0NmQ1NDM1ZDBiMTMzMTMx
ODQ0ZjQ5NWQyMDUzOTAuLjJlYTY0NWI3ODFhZTczZmRmMjIwM2YxZTk0ZDQwNWUzNjFmZDk2YmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
bWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5tZXNzYWdlcy5pbgpAQCAtMTczLDcgKzE3Myw2IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQ
cm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKICAgICBNYXJrUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRz
QXNFeHBpcmVkRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+ICgpIEFzeW5j
CiAgICAgU2V0UENNRnJhdWRQcmV2ZW50aW9uVmFsdWVzRm9yVGVzdGluZyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIFN0cmluZyBzZWNyZXRUb2tlbiwgU3RyaW5nIHVubGlua2FibGVUb2tlbiwg
U3RyaW5nIHNpZ25hdHVyZSwgU3RyaW5nIGtleUlEKSAtPiAoKSBBc3luYwogICAgIFNldFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXBwQnVuZGxlSURGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgU3RyaW5nIGFwcEJ1bmRsZUlERm9yVGVzdGluZykgLT4gKCkgQXN5bmMKLSAgICBH
ZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgLT4g
KFZlY3RvcjxXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWls
cz4gZGV0YWlscykgQXN5bmMKIAogICAgIFNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JU
ZXN0aW5nKFNlY29uZHMgc2Vjb25kcykgLT4gKCkgU3luY2hyb25vdXMKICAgICBSZXNldFNlcnZp
Y2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKCkgLT4gKCkgU3luY2hyb25vdXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VN
YW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0
b3JhZ2VNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMWRmMTkwYmE4OTU0MzM3ODBkYzY5YjdjZjg3
YjVhMzk4YTM3ZmIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTcxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZU1h
bmFnZXIuaCIKKworI2luY2x1ZGUgIk1lbW9yeVN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU1FM
aXRlU3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVJlZ2lzdHJ5LmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKKy8vIFN1Z2dlc3RlZCBieSBodHRwczovL3d3dy53My5vcmcvVFIvd2Vic3RvcmFnZS8jZGlz
ay1zcGFjZQorY29uc3RleHByIHVuc2lnbmVkIGxvY2FsU3RvcmFnZVF1b3RhSW5CeXRlcyA9IDUg
KiBNQjsKK2NvbnN0ZXhwciBhdXRvIGZpbGVTdWZmaXggPSAiLmxvY2Fsc3RvcmFnZSJfczsKKwor
c3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBmaWxlTmFt
ZVRvT3JpZ2luKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCit7CisgICAgaWYgKCFmaWxlTmFtZS5l
bmRzV2l0aChmaWxlU3VmZml4KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IGF1dG8gc3VmZml4TGVuZ3RoID0gc3RybGVuKGZpbGVTdWZmaXgpOworICAgIGF1dG8gZmlsZU5h
bWVMZW5ndGggPSBmaWxlTmFtZS5sZW5ndGgoKTsKKyAgICBpZiAoZmlsZU5hbWVMZW5ndGggPD0g
c3VmZml4TGVuZ3RoKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byBv
cmlnaW5JZGVudGlmaWVyID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lTGVuZ3RoIC0g
c3VmZml4TGVuZ3RoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhOjpm
cm9tRGF0YWJhc2VJZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpOworfQorCitzdGF0aWMgU3Ry
aW5nIG9yaWdpblRvRmlsZU5hbWUoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4p
Cit7CisgICAgcmV0dXJuIG9yaWdpbi5jbGllbnRPcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkg
KyAiLmxvY2Fsc3RvcmFnZSI7Cit9CisKK1ZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+IExvY2FsU3RvcmFnZU1hbmFnZXI6OmdldE9yaWdpbnNPZkxvY2FsU3RvcmFnZURhdGEoY29u
c3QgU3RyaW5nJiBwYXRoKQoreworICAgIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+IG9yaWdpbnM7CisgICAgZm9yIChhdXRvJiBmaWxlTmFtZSA6IEZpbGVTeXN0ZW06Omxpc3RE
aXJlY3RvcnkocGF0aCkpIHsKKyAgICAgICAgaWYgKGF1dG8gb3JpZ2luID0gZmlsZU5hbWVUb09y
aWdpbihmaWxlTmFtZSkpCisgICAgICAgICAgICBvcmlnaW5zLmFwcGVuZCgqb3JpZ2luKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gb3JpZ2luczsKK30KKworU3RyaW5nIExvY2FsU3RvcmFnZU1hbmFn
ZXI6OmxvY2FsU3RvcmFnZUZpbGVQYXRoKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBpZiAoZGlyZWN0b3J5LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyB7IH07CisKKyAgICByZXR1cm4gRmlsZVN5c3Rl
bTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRpcmVjdG9yeSwgb3JpZ2luVG9GaWxlTmFtZShv
cmlnaW4pKTsKK30KKworTG9jYWxTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTWFuYWdlcihj
b25zdCBTdHJpbmcmIHBhdGgsIFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQorICAgIDog
bV9wYXRoKHBhdGgpCisgICAgLCBtX3JlZ2lzdHJ5KHJlZ2lzdHJ5KQoreworfQorCitib29sIExv
Y2FsU3RvcmFnZU1hbmFnZXI6OmlzQWN0aXZlKCkKK3sKKyAgICByZXR1cm4gbV9zdG9yYWdlQXJl
YSAmJiBtX3N0b3JhZ2VBcmVhLT5oYXNMaXN0ZW5lcnMoKTsKK30KKworYm9vbCBMb2NhbFN0b3Jh
Z2VNYW5hZ2VyOjpoYXNEYXRhSW5NZW1vcnkoKQoreworICAgIGlmIChtX3N0b3JhZ2VBcmVhICYm
IGlzPE1lbW9yeVN0b3JhZ2VBcmVhPigqbV9zdG9yYWdlQXJlYSkpCisgICAgICAgIHJldHVybiAh
bV9zdG9yYWdlQXJlYS0+aXNFbXB0eSgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IExvY2FsU3RvcmFnZU1hbmFnZXI6OmNsZWFyRGF0YSgpCit7CisgICAgaWYgKG1fc3RvcmFnZUFy
ZWEpCisgICAgICAgIG1fc3RvcmFnZUFyZWEtPmNsZWFyKCk7Cit9CisKK3ZvaWQgTG9jYWxTdG9y
YWdlTWFuYWdlcjo6Y2xvc2UoKQoreworICAgIGlmIChtX3N0b3JhZ2VBcmVhICYmIGlzPFNRTGl0
ZVN0b3JhZ2VBcmVhPigqbV9zdG9yYWdlQXJlYSkpCisgICAgICAgIGRvd25jYXN0PFNRTGl0ZVN0
b3JhZ2VBcmVhPigqbV9zdG9yYWdlQXJlYSkuY2xvc2UoKTsKK30KKwordm9pZCBMb2NhbFN0b3Jh
Z2VNYW5hZ2VyOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCkKK3sKKyAgICBpZiAobV9zdG9yYWdl
QXJlYSAmJiBpczxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fc3RvcmFnZUFyZWEpKQorICAgICAgICBk
b3duY2FzdDxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fc3RvcmFnZUFyZWEpLmhhbmRsZUxvd01lbW9y
eVdhcm5pbmcoKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpzeW5jTG9jYWxTdG9y
YWdlKCkKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYSAmJiBpczxTUUxpdGVTdG9yYWdlQXJlYT4o
Km1fc3RvcmFnZUFyZWEpKQorICAgICAgICBkb3duY2FzdDxTUUxpdGVTdG9yYWdlQXJlYT4oKm1f
c3RvcmFnZUFyZWEpLmNvbW1pdFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKK30KKwordm9pZCBM
b2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQgY29ubmVjdGlvbikKK3sKKyAgICBBU1NFUlQobV9zdG9yYWdlQXJlYSk7CisgICAgbV9z
dG9yYWdlQXJlYS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7CisKKyAgICBpZiAoaGFzRGF0
YUluTWVtb3J5KCkgfHwgaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZWdp
c3RyeS51bnJlZ2lzdGVyU3RvcmFnZUFyZWEobV9zdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpKTsK
KyAgICBtX3N0b3JhZ2VBcmVhID0gbnVsbHB0cjsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5h
Z2VyOjplbnN1cmVTdG9yYWdlQXJlYShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdp
biwgY29uc3QgU3RyaW5nJiBwYXRoLCBzdGQ6Om9wdGlvbmFsPFJlZjxXb3JrUXVldWU+PiB3b3Jr
UXVldWUpCit7CisgICAgaWYgKG1fc3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghcGF0aC5pc0VtcHR5KCkgJiYgd29ya1F1ZXVlKQorICAgICAgICBtX3N0b3JhZ2VBcmVh
ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdG9yYWdlQXJlYT4obG9jYWxTdG9yYWdlUXVvdGFJbkJ5dGVz
LCBvcmlnaW4sIHBhdGgsIFdURk1vdmUoKndvcmtRdWV1ZSkpOworICAgIGVsc2UKKyAgICAgICAg
bV9zdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8TWVtb3J5U3RvcmFnZUFyZWE+KG9yaWdpbiwgU3Rv
cmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZTo6TG9jYWwpOworICAgIG1fcmVnaXN0cnkucmVnaXN0
ZXJTdG9yYWdlQXJlYShtX3N0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCksICptX3N0b3JhZ2VBcmVh
KTsKK30KKworU3RvcmFnZUFyZWFJZGVudGlmaWVyIExvY2FsU3RvcmFnZU1hbmFnZXI6OmNvbm5l
Y3RUb0xvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9u
LCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgUmVmPFdvcmtRdWV1ZT4mJiB3
b3JrUXVldWUpCit7CisgICAgZW5zdXJlU3RvcmFnZUFyZWEob3JpZ2luLCBtX3BhdGgsIHN0ZDo6
bWFrZV9vcHRpb25hbChXVEZNb3ZlKHdvcmtRdWV1ZSkpKTsKKyAgICBBU1NFUlQobV9wYXRoLmlz
RW1wdHkoKSB8fCBtX3N0b3JhZ2VBcmVhLT50eXBlKCkgPT0gU3RvcmFnZUFyZWFCYXNlOjpUeXBl
OjpTUUxpdGUpOworCisgICAgbV9zdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVjdGlvbik7
CisgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKTsKK30KKworU3RvcmFnZUFy
ZWFJZGVudGlmaWVyIExvY2FsU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RUb1RyYW5zaWVudExvY2Fs
U3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBlbnN1cmVTdG9yYWdlQXJlYShv
cmlnaW4sIFN0cmluZyB7IH0sIHsgfSk7CisgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWEtPnR5cGUo
KSA9PSBTdG9yYWdlQXJlYUJhc2U6OlR5cGU6Ok1lbW9yeSk7CisKKyAgICBtX3N0b3JhZ2VBcmVh
LT5hZGRMaXN0ZW5lcihjb25uZWN0aW9uKTsKKyAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+aWRl
bnRpZmllcigpOworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9t
U3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdl
QXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBpZiAoIW1fc3RvcmFnZUFyZWEgfHwg
bV9zdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpICE9IGlkZW50aWZpZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIGNvbm5lY3Rpb25DbG9zZWQoY29ubmVjdGlvbik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c3RvcmFnZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTNhMjQ2ODE0ZDE3NWQ4
NDM2YjhjYTNiMzMxZmNiOWRkMTY5ZjlkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmgKQEAgLTAsMCAr
MSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3RvcmFnZUFy
ZWFJZGVudGlmaWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBDbGllbnRPcmln
aW47CitzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgU3RvcmFnZUFyZWFCYXNlOworY2xhc3MgU3RvcmFnZUFyZWFSZWdpc3RyeTsKKwor
Y2xhc3MgTG9jYWxTdG9yYWdlTWFuYWdlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
IGdldE9yaWdpbnNPZkxvY2FsU3RvcmFnZURhdGEoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBz
dGF0aWMgU3RyaW5nIGxvY2FsU3RvcmFnZUZpbGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2VyKGNv
bnN0IFN0cmluZyYgcGF0aCwgU3RvcmFnZUFyZWFSZWdpc3RyeSYpOworICAgIGJvb2wgaXNBY3Rp
dmUoKTsKKyAgICBib29sIGhhc0RhdGFJbk1lbW9yeSgpOworICAgIHZvaWQgY2xlYXJEYXRhKCk7
CisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgaGFuZGxlTG93TWVtb3J5V2FybmluZygpOwor
ICAgIHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOworICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChJ
UEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKKworICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBj
b25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIGNvbnN0
IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIFJlZjxXb3JrUXVldWU+JiYpOworICAgIFN0b3JhZ2VB
cmVhSWRlbnRpZmllciBjb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIHZv
aWQgZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBT
dG9yYWdlQXJlYUlkZW50aWZpZXIpOworCitwcml2YXRlOgorICAgIHZvaWQgZW5zdXJlU3RvcmFn
ZUFyZWEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgY29uc3QgU3RyaW5nJiwgc3RkOjpv
cHRpb25hbDxSZWY8V29ya1F1ZXVlPj4pOworCisgICAgU3RyaW5nIG1fcGF0aDsKKyAgICBTdG9y
YWdlQXJlYVJlZ2lzdHJ5JiBtX3JlZ2lzdHJ5OworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdl
QXJlYUJhc2U+IG1fc3RvcmFnZUFyZWE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5
U3RvcmFnZUFyZWEuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01l
bW9yeVN0b3JhZ2VBcmVhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYjA2OWFkZjhlZGYxMjE1ZDVhYTI2ZTM1
MmVkMmM0ODlmNzE1ZjllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNwcApAQCAtMCwwICsxLDEwMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZW1vcnlTdG9yYWdl
QXJlYS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlTWFwLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitNZW1vcnlTdG9yYWdlQXJlYTo6TWVtb3J5U3RvcmFnZUFyZWEoY29uc3QgV2Vi
Q29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGUg
dHlwZSkKKyAgICA6IFN0b3JhZ2VBcmVhQmFzZShXZWJDb3JlOjpTdG9yYWdlTWFwOjpub1F1b3Rh
LCBvcmlnaW4pCisgICAgLCBtX3N0b3JhZ2VUeXBlKHR5cGUpCit7CisgICAgbV9tYXAgPSBtYWtl
VW5pcXVlPFdlYkNvcmU6OlN0b3JhZ2VNYXA+KFdlYkNvcmU6OlN0b3JhZ2VNYXA6Om5vUXVvdGEp
OworfQorCitib29sIE1lbW9yeVN0b3JhZ2VBcmVhOjppc0VtcHR5KCkKK3sKKyAgICByZXR1cm4g
IW1fbWFwLT5sZW5ndGgoKTsKK30KKwordm9pZCBNZW1vcnlTdG9yYWdlQXJlYTo6Y2xlYXIoKQor
eworICAgIG1fbWFwLT5jbGVhcigpOworICAgIG5vdGlmeUxpc3RlbmVyc0Fib3V0Q2xlYXIoKTsK
K30KKworSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTWVtb3J5U3RvcmFnZUFyZWE6OmFsbEl0ZW1z
KCkKK3sKKyAgICByZXR1cm4gbV9tYXAtPml0ZW1zKCk7Cit9CisKK0V4cGVjdGVkPHZvaWQsIFN0
b3JhZ2VFcnJvcj4gTWVtb3J5U3RvcmFnZUFyZWE6OnNldEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpV
bmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIHN0b3JhZ2VBcmVh
SW1wbElELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpCit7CisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIGJvb2wgaGFzUXVv
dGFFcnJvciA9IGZhbHNlOworICAgIG1fbWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVl
LCBoYXNRdW90YUVycm9yKTsKKyAgICBpZiAoaGFzUXVvdGFFcnJvcikKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6UXVvdGFFeGNlZWRlZCk7CisKKyAgICBkaXNw
YXRjaEV2ZW50cyhjb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJRCwga2V5LCBvbGRWYWx1ZSwg
dmFsdWUsIHVybFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OworfQorCitFeHBlY3RlZDx2b2lk
LCBTdG9yYWdlRXJyb3I+IE1lbW9yeVN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVj
dGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9y
YWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
KQoreworICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICBtX21hcC0+cmVtb3ZlSXRlbShrZXksIG9s
ZFZhbHVlKTsKKyAgICBkaXNwYXRjaEV2ZW50cyhjb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJ
RCwga2V5LCBvbGRWYWx1ZSwgU3RyaW5nKCksIHVybFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9
OworfQorCitFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IE1lbW9yeVN0b3JhZ2VBcmVhOjpj
bGVhcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1w
bElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQorewor
ICAgIGlmICghbV9tYXAtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
U3RvcmFnZUVycm9yOjpJdGVtTm90Rm91bmQpOworCisgICAgbV9tYXAtPmNsZWFyKCk7CisgICAg
ZGlzcGF0Y2hFdmVudHMoY29ubmVjdGlvbiwgaW1wbElkZW50aWZpZXIsIFN0cmluZygpLCBTdHJp
bmcoKSwgU3RyaW5nKCksIHVybFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+IE1lbW9yeVN0b3JhZ2VBcmVhOjpjbG9uZSgp
IGNvbnN0Cit7CisgICAgYXV0byBzdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8TWVtb3J5U3RvcmFn
ZUFyZWE+KG9yaWdpbigpLCBtX3N0b3JhZ2VUeXBlKTsKKyAgICAqc3RvcmFnZUFyZWEtPm1fbWFw
ID0gKm1fbWFwOworCisgICAgcmV0dXJuIHN0b3JhZ2VBcmVhOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworCisKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NWNmZTc4ZTdl
YzQ3NTc2MGJhZjU5NTRhN2FlNTNlYjFkZWJjMGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuaApAQCAtMCww
ICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdG9yYWdl
QXJlYUJhc2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU3RvcmFnZU1hcDsKK30K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE1lbW9yeVN0b3JhZ2VBcmVhIGZpbmFsIDog
cHVibGljIFN0b3JhZ2VBcmVhQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgTWVtb3J5U3RvcmFnZUFyZWEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiwgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZSA9IFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFn
ZVR5cGU6OlNlc3Npb24pOworCisgICAgYm9vbCBpc0VtcHR5KCkgZmluYWw7CisgICAgdm9pZCBj
bGVhcigpIGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlTdG9yYWdlQXJlYT4gY2xv
bmUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICAvLyBTdG9yYWdlQXJlYUJhc2UKKyAgICBTdG9y
YWdlQXJlYUJhc2U6OlR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFN0b3JhZ2VBcmVh
QmFzZTo6VHlwZTo6TWVtb3J5OyB9OworICAgIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGUg
c3RvcmFnZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3N0b3JhZ2VUeXBlOyB9CisgICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gYWxsSXRlbXMoKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2
b2lkLCBTdG9yYWdlRXJyb3I+IHNldEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3Rv
cmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2b2lk
LCBTdG9yYWdlRXJyb3I+IHJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3Rv
cmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IGNsZWFy
KElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKworICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlN0b3JhZ2VNYXA+IG1fbWFwOworICAgIFN0b3JhZ2VBcmVhQmFzZTo6U3Rv
cmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWEpCisg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlJiBhcmVh
KSB7IHJldHVybiBhcmVhLnR5cGUoKSA9PSBXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6
TWVtb3J5OyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1h
bmFnZXIuY3BwCmluZGV4IGMxMGFjYmRkNjRmZTA0ZWZmMTZhMWM4Yjc0ZDJiZmMxOTUzZGJkNzMu
Ljc1YjFjNGI2MjIwNDFiODg3MWQyYjQzYzZhMWU3MGEyNzkwOTMyNTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3Rv
cmFnZU1hbmFnZXIuY3BwCkBAIC0yOCwxMiArMjgsMTkgQEAKIAogI2luY2x1ZGUgIkZpbGVTeXN0
ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtU3RvcmFnZU1h
bmFnZXIuaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiT3JpZ2luU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJTZXNzaW9uU3RvcmFnZU1h
bmFnZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUJhc2UuaCIKKyNpbmNsdWRlICJTdG9yYWdl
QXJlYU1hcE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFSZWdpc3RyeS5oIgogI2lu
Y2x1ZGUgIldlYnNpdGVEYXRhVHlwZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmln
aW5EYXRhLmg+CiAjaW5jbHVkZSA8cGFsL2NyeXB0by9DcnlwdG9EaWdlc3QuaD4KICNpbmNsdWRl
IDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvU3VzcGVuZGFibGVXb3JrUXVldWUuaD4KICNp
bmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0Jhc2U2NC5oPgogCkBAIC00Myw3ICs1MCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gcmVhZE9yaWdpbkZyb21GaWxlKGNvbnN0IFN0cmluZyYg
ZmlsCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBpZiAoIUZpbGVT
eXN0ZW06OmZpbGVFeGlzdHMoZmlsZVBhdGgpKQorICAgIGlmIChmaWxlUGF0aC5pc0VtcHR5KCkg
fHwgIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZVBhdGgpKQogICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCiAgICAgYXV0byBvcmlnaW5GaWxlSGFuZGxlID0gRmlsZVN5c3RlbTo6b3Bl
bkZpbGUoZmlsZVBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7CkBAIC02Niw3
ICs3Myw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gcmVh
ZE9yaWdpbkZyb21GaWxlKGNvbnN0IFN0cmluZyYgZmlsCiAKIHN0YXRpYyB2b2lkIHdyaXRlT3Jp
Z2luVG9GaWxlSWZOZWNlc3NhcnkoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgY29uc3QgV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVFeGlz
dHMoZmlsZVBhdGgpKQorICAgIGlmIChmaWxlUGF0aC5pc0VtcHR5KCkgfHwgRmlsZVN5c3RlbTo6
ZmlsZUV4aXN0cyhmaWxlUGF0aCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZpbGVTeXN0ZW06
Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKGZpbGVQYXRoKSk7CkBA
IC03Niw3ICs4Myw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlT3JpZ2luVG9GaWxlSWZOZWNlc3Nhcnko
Y29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgY29uc3QgV2ViQ29yZTo6CiAgICAgfSk7CiAKICAgICBp
ZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQob3JpZ2luRmlsZUhhbmRsZSkpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJ3cml0ZU9yaWdpblRvRmlsZUlmTmVjZXNzYXJ5OiBGYWlsZWQgdG8gb3Bl
biBvcmlnaW4gZmlsZSIpOworICAgICAgICBMT0dfRVJST1IoIndyaXRlT3JpZ2luVG9GaWxlSWZO
ZWNlc3Nhcnk6IEZhaWxlZCB0byBvcGVuIG9yaWdpbiBmaWxlICclcyciLCBmaWxlUGF0aC51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTMsMjAgKzEwMCwyMiBA
QCBzdGF0aWMgdm9pZCBkZWxldGVPcmlnaW5GaWxlSWZOZWNlc3NhcnkoY29uc3QgU3RyaW5nJiBm
aWxlUGF0aCkKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShmaWxlUGF0aCk7CiB9CiAK
LVJlZjxOZXR3b3JrU3RvcmFnZU1hbmFnZXI+IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y3JlYXRl
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoKQorUmVmPE5ldHdv
cmtTdG9yYWdlTWFuYWdlcj4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBhdGgsIHN0ZDo6b3B0aW9uYWw8U3RyaW5n
PiBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5l
dHdvcmtTdG9yYWdlTWFuYWdlcihzZXNzaW9uSUQsIHBhdGgpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBOZXR3b3JrU3RvcmFnZU1hbmFnZXIoc2Vzc2lvbklELCBwYXRoLCBjdXN0b21Mb2Nh
bFN0b3JhZ2VQYXRoKSk7CiB9CiAKLU5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6TmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoKQor
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXIoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBhdGgsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBj
dXN0b21Mb2NhbFN0b3JhZ2VQYXRoKQogICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQotICAg
ICwgbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5TdG9yYWdlIikp
CisgICAgLCBtX3F1ZXVlKFN1c3BlbmRhYmxlV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5X
ZWJLaXQuU3RvcmFnZSIpKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAg
ICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0s
IHBhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgeworICAgIG1fcXVldWUtPmRp
c3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgcGF0aCA9IHBhdGgu
aXNvbGF0ZWRDb3B5KCksIGN1c3RvbUxvY2FsU3RvcmFnZVBhdGggPSBjcm9zc1RocmVhZENvcHko
Y3VzdG9tTG9jYWxTdG9yYWdlUGF0aCldKCkgbXV0YWJsZSB7CiAgICAgICAgIG1fZmlsZVN5c3Rl
bVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSA9IG1ha2VVbmlxdWU8RmlsZVN5c3RlbVN0b3JhZ2VIYW5k
bGVSZWdpc3RyeT4oKTsKKyAgICAgICAgbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5ID0gbWFrZVVuaXF1
ZTxTdG9yYWdlQXJlYVJlZ2lzdHJ5PigpOwogICAgICAgICBtX3BhdGggPSBwYXRoOworICAgICAg
ICBtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGggPSBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoOwogICAg
ICAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGF1dG8gc2FsdFBhdGgg
PSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9wYXRoLCAic2FsdCIpOwog
ICAgICAgICAgICAgbV9zYWx0ID0gRmlsZVN5c3RlbTo6cmVhZE9yTWFrZVNhbHQoc2FsdFBhdGgp
LnZhbHVlX29yKEZpbGVTeXN0ZW06OlNhbHQoKSk7CkBAIC0xMjAsNiArMTI5LDExIEBAIE5ldHdv
cmtTdG9yYWdlTWFuYWdlcjo6fk5ldHdvcmtTdG9yYWdlTWFuYWdlcigpCiAgICAgQVNTRVJUKG1f
Y2xvc2VkKTsKIH0KIAorYm9vbCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5cGVz
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzKQoreworICAgIHJldHVybiB0eXBlcy5j
b250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkgfHwgdHlwZXMuY29udGFpbnMo
V2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkgfHwgdHlwZXMuY29udGFpbnMoV2Vic2l0
ZURhdGFUeXBlOjpGaWxlU3lzdGVtKTsKK30KKwogdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmNsb3NlKCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTMzLDcgKzE0
Nyw2IEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbG9zZSgpCiAKICAgICBtX3F1ZXVl
LT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dKCkgbXV0YWJs
ZSB7CiAgICAgICAgIG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMuY2xlYXIoKTsKLSAgICAg
ICAgbV9zZXNzaW9uT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmNsZWFyKCk7CiAgICAgICAgIG1fZmls
ZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSA9IG51bGxwdHI7CiAKICAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlz
KV0geyB9KTsKQEAgLTE3Nyw3ICsxOTAsNyBAQCBzdGF0aWMgU3RyaW5nIGVuY29kZShjb25zdCBT
dHJpbmcmIHN0cmluZywgRmlsZVN5c3RlbTo6U2FsdCBzYWx0KQogc3RhdGljIFN0cmluZyBvcmln
aW5EaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNs
aWVudE9yaWdpbiYgb3JpZ2luLCBGaWxlU3lzdGVtOjpTYWx0IHNhbHQpCiB7CiAgICAgaWYgKHJv
b3RQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHJvb3RQYXRoOworICAgICAgICByZXR1
cm4gU3RyaW5nIHsgfTsKIAogICAgIGF1dG8gZW5jb2RlZFRvcE9yaWdpbiA9IGVuY29kZShvcmln
aW4udG9wT3JpZ2luLnRvU3RyaW5nKCksIHNhbHQpOwogICAgIGF1dG8gZW5jb2RlZE9wZW5pbmdP
cmlnaW4gPSBlbmNvZGUob3JpZ2luLmNsaWVudE9yaWdpbi50b1N0cmluZygpLCBzYWx0KTsKQEAg
LTE4Niw2ICsxOTksOCBAQCBzdGF0aWMgU3RyaW5nIG9yaWdpbkRpcmVjdG9yeVBhdGgoY29uc3Qg
U3RyaW5nJiByb290UGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50TwogCiBzdGF0aWMgU3RyaW5n
IG9yaWdpbkZpbGVQYXRoKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5KQogeworICAgIGlmIChkaXJl
Y3RvcnkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nIHsgfTsKICAgICByZXR1cm4g
RmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRpcmVjdG9yeSwgIm9yaWdpbiJf
cyk7CiB9CiAKQEAgLTE5NiwxNiArMjExLDM3IEBAIE9yaWdpblN0b3JhZ2VNYW5hZ2VyJiBOZXR3
b3JrU3RvcmFnZU1hbmFnZXI6OmxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIoY29uc3QgV2ViCiAg
ICAgcmV0dXJuICptX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmVuc3VyZShvcmlnaW4sIFsm
XSB7CiAgICAgICAgIGF1dG8gb3JpZ2luRGlyZWN0b3J5ID0gb3JpZ2luRGlyZWN0b3J5UGF0aCht
X3BhdGgsIG9yaWdpbiwgbV9zYWx0KTsKICAgICAgICAgd3JpdGVPcmlnaW5Ub0ZpbGVJZk5lY2Vz
c2FyeShvcmlnaW5GaWxlUGF0aChvcmlnaW5EaXJlY3RvcnkpLCBvcmlnaW4pOwotICAgICAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxPcmlnaW5TdG9yYWdlTWFuYWdlcj4oV1RGTW92ZShvcmlnaW5EaXJl
Y3RvcnkpKTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGxvY2FsU3RvcmFnZVBhdGg7
CisgICAgICAgIGlmIChtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgpCisgICAgICAgICAgICBsb2Nh
bFN0b3JhZ2VQYXRoID0gTG9jYWxTdG9yYWdlTWFuYWdlcjo6bG9jYWxTdG9yYWdlRmlsZVBhdGgo
Km1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgb3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmlxdWU8T3JpZ2luU3RvcmFnZU1hbmFnZXI+KFdURk1vdmUob3JpZ2luRGlyZWN0b3J5KSwgV1RG
TW92ZShsb2NhbFN0b3JhZ2VQYXRoKSk7CiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCi12
b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBv
c3NpYmxlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQorYm9vbCBOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OnJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShjb25z
dCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKLSAgICBpZiAoYXV0byBpdGVyYXRv
ciA9IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMuZmluZChvcmlnaW4pOyBpdGVyYXRvciAh
PSBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmVuZCgpKSB7Ci0gICAgICAgIGlmICghaXRl
cmF0b3ItPnZhbHVlLT5pc0FjdGl2ZSgpKQotICAgICAgICAgICAgbV9sb2NhbE9yaWdpblN0b3Jh
Z2VNYW5hZ2Vycy5yZW1vdmUoaXRlcmF0b3IpOwotICAgIH0KKyAgICBhdXRvIGl0ZXJhdG9yID0g
bV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5maW5kKG9yaWdpbik7CisgICAgaWYgKGl0ZXJh
dG9yID09IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMuZW5kKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZS0+aXNBY3RpdmUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5yZW1vdmUo
aXRlcmF0b3IpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFu
YWdlcjo6ZGVsZXRlT3JpZ2luRGlyZWN0b3J5SWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGll
bnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBib29sIGlzRW1wdHkgPSBsb2NhbE9yaWdpblN0b3Jh
Z2VNYW5hZ2VyKG9yaWdpbikuaXNFbXB0eSgpOworICAgIGJvb2wgcmVtb3ZlZCA9IHJlbW92ZU9y
aWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShvcmlnaW4pOworICAgIGlmICghcmVtb3ZlZCB8
fCAhaXNFbXB0eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBvcmlnaW5EaXJlY3Rvcnkg
PSBvcmlnaW5EaXJlY3RvcnlQYXRoKG1fcGF0aCwgb3JpZ2luLCBtX3NhbHQpOworICAgIGF1dG8g
ZmlsZVBhdGggPSBvcmlnaW5GaWxlUGF0aChvcmlnaW5EaXJlY3RvcnkpOworICAgIGRlbGV0ZU9y
aWdpbkZpbGVJZk5lY2Vzc2FyeShmaWxlUGF0aCk7CisgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRW1w
dHlEaXJlY3Rvcnkob3JpZ2luRGlyZWN0b3J5KTsKIH0KIAogdm9pZCBOZXR3b3JrU3RvcmFnZU1h
bmFnZXI6OnBlcnNpc3RlZChjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzMiw5
ICsyNjgsNiBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xlYXJTdG9yYWdlRm9yVGVz
dGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgYwogICAgICAgICBmb3IgKGF1dG8mIG1h
bmFnZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKQogICAgICAgICAg
ICAgbWFuYWdlci0+c2V0UGVyc2lzdGVkKGZhbHNlKTsKIAotICAgICAgICBmb3IgKGF1dG8mIG1h
bmFnZXIgOiBtX3Nlc3Npb25PcmlnaW5TdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpCi0gICAgICAg
ICAgICBtYW5hZ2VyLT5zZXRQZXJzaXN0ZWQoZmFsc2UpOwotCiAgICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogICAgICAgICB9KTsKQEAgLTM4Miwx
NCArNDE1LDYgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmdldEhhbmRsZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OkZpbGUKICAgICBjb21wbGV0aW9uSGFuZGxl
cihoYW5kbGUtPmdldEhhbmRsZShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIFdURk1vdmUobmFtZSkp
KTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2Vic2l0ZURhdGFUeXBlPiB0b1dlYnNpdGVE
YXRhVHlwZShjb25zdCBTdHJpbmcmIHN0b3JhZ2VUeXBlKQotewotICAgIGlmIChzdG9yYWdlVHlw
ZSA9PSAiRmlsZVN5c3RlbSIpCi0gICAgICAgIHJldHVybiBXZWJzaXRlRGF0YVR5cGU6OkZpbGVT
eXN0ZW07Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCiB2b2lkIE5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6Zm9yRWFjaE9yaWdpbkRpcmVjdG9yeShjb25zdCBGdW5jdGlvbjx2b2lkKGNv
bnN0IFN0cmluZyYpPiYgYXBwbHkpCiB7CiAgICAgZm9yIChhdXRvJiB0b3BPcmlnaW4gOiBGaWxl
U3lzdGVtOjpsaXN0RGlyZWN0b3J5KG1fcGF0aCkpIHsKQEAgLTQwMSwzMCArNDI2LDQ3IEBAIHZv
aWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpmb3JFYWNoT3JpZ2luRGlyZWN0b3J5KGNvbnN0IEZ1
bmN0aW9uPHZvaWQoY29uc3QgU3RyCiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKGF1dG8mIG9w
ZW5pbmdPcmlnaW4gOiBvcGVuaW5nT3JpZ2lucykgeworICAgICAgICAgICAgaWYgKG9wZW5pbmdP
cmlnaW4gPT0gIi5EU19TdG9yZSIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKICAgICAg
ICAgICAgIGF1dG8gb3BlbmluZ09yaWdpbkRpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudCh0b3BPcmlnaW5EaXJlY3RvcnksIG9wZW5pbmdPcmlnaW4pOwogICAg
ICAgICAgICAgYXBwbHkob3BlbmluZ09yaWdpbkRpcmVjdG9yeSk7CiAgICAgICAgIH0KICAgICB9
CiB9CiAKK0hhc2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OmdldEFsbE9yaWdpbnMoKQoreworICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2lu
PiBhbGxPcmlnaW5zOworICAgIGZvciAoYXV0byBvcmlnaW4gOiBtX2xvY2FsT3JpZ2luU3RvcmFn
ZU1hbmFnZXJzLmtleXMoKSkKKyAgICAgICAgYWxsT3JpZ2lucy5hZGQob3JpZ2luKTsKKworICAg
IGZvckVhY2hPcmlnaW5EaXJlY3RvcnkoWyZdKGF1dG8gZGlyZWN0b3J5KSBtdXRhYmxlIHsKKyAg
ICAgICAgaWYgKGF1dG8gb3JpZ2luID0gcmVhZE9yaWdpbkZyb21GaWxlKG9yaWdpbkZpbGVQYXRo
KGRpcmVjdG9yeSkpKQorICAgICAgICAgICAgYWxsT3JpZ2lucy5hZGQoKm9yaWdpbik7CisgICAg
fSk7CisKKyAgICBpZiAobV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKSB7CisgICAgICAgIGF1dG8g
b3JpZ2lucyA9IExvY2FsU3RvcmFnZU1hbmFnZXI6OmdldE9yaWdpbnNPZkxvY2FsU3RvcmFnZURh
dGEoKm1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCk7CisgICAgICAgIGZvciAoYXV0byBvcmlnaW4g
OiBvcmlnaW5zKQorICAgICAgICAgICAgYWxsT3JpZ2lucy5hZGQoV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luIHsgb3JpZ2luLCBvcmlnaW4gfSk7CisgICAgfQorCisgICAgcmV0dXJuIGFsbE9yaWdpbnM7
Cit9CisKIFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
ZmV0Y2hEYXRhRnJvbURpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdGFyZ2V0VHlwZXMp
CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBIYXNoTWFwPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4+IG9yaWdp
blR5cGVzOwotICAgIGZvckVhY2hPcmlnaW5EaXJlY3RvcnkoWyZdKGF1dG8gZGlyZWN0b3J5KSBt
dXRhYmxlIHsKLSAgICAgICAgYXV0byBvcmlnaW4gPSByZWFkT3JpZ2luRnJvbUZpbGUob3JpZ2lu
RmlsZVBhdGgoZGlyZWN0b3J5KSk7Ci0gICAgICAgIGlmICghb3JpZ2luKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGZvciAoYXV0byYgc3RvcmFnZVR5cGUgOiBGaWxlU3lzdGVtOjps
aXN0RGlyZWN0b3J5KGRpcmVjdG9yeSkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHR5cGUgPSB0
b1dlYnNpdGVEYXRhVHlwZShzdG9yYWdlVHlwZSk7IHR5cGUgJiYgdGFyZ2V0VHlwZXMuY29udGFp
bnMoKnR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gUmV0dXJuIGJvdGggdG9wIG9yaWdpbiBh
bmQgb3BlbmluZyBvcmlnaW4gZm9yIHRoaXMgZGF0YS4KLSAgICAgICAgICAgICAgICBvcmlnaW5U
eXBlcy5hZGQob3JpZ2luLT5jbGllbnRPcmlnaW4sIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IHsgfSkuaXRlcmF0b3ItPnZhbHVlLmFkZCgqdHlwZSk7Ci0gICAgICAgICAgICAgICAgb3JpZ2lu
VHlwZXMuYWRkKG9yaWdpbi0+dG9wT3JpZ2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB7
IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQoKnR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfSk7CisgICAgYXV0byBhbGxPcmlnaW5zID0gZ2V0QWxsT3JpZ2lucygpOworICAgIGZv
ciAoYXV0byBvcmlnaW4gOiBhbGxPcmlnaW5zKSB7CisgICAgICAgIGF1dG8gdHlwZXMgPSBsb2Nh
bE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbikuZmV0Y2hEYXRhKHRhcmdldFR5cGVzKTsKKyAg
ICAgICAgb3JpZ2luVHlwZXMuYWRkKG9yaWdpbi5jbGllbnRPcmlnaW4sIE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IHsgfSkuaXRlcmF0b3ItPnZhbHVlLmFkZCh0eXBlcyk7CisgICAgICAgIG9y
aWdpblR5cGVzLmFkZChvcmlnaW4udG9wT3JpZ2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQodHlwZXMpOworICAgICAgICByZW1vdmVPcmlnaW5T
dG9yYWdlTWFuYWdlcklmUG9zc2libGUob3JpZ2luKTsKKyAgICB9CiAKICAgICBWZWN0b3I8V2Vi
c2l0ZURhdGE6OkVudHJ5PiBlbnRyaWVzOwogICAgIGZvciAoYXV0byBbb3JpZ2luLCB0eXBlc10g
OiBvcmlnaW5UeXBlcykgewpAQCAtNDQ4LDM1ICs0OTAsMjAgQEAgdm9pZCBOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OmZldGNoRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgQ29t
cGxldGkKICAgICB9KTsKIH0KIAotVmVjdG9yPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gTmV0d29y
a1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IHR5cGVzLCBXYWxsVGltZSBtb2RpZmllZFNpbmNlVGltZSwgY29uc3QgRnVuY3Rpb248Ym9v
bChjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKT4mIGZpbHRlcikKK0hhc2hTZXQ8V2ViQ29y
ZTo6Q2xpZW50T3JpZ2luPiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZURhdGFPbkRpc2so
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2VU
aW1lLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpPiYg
ZmlsdGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgVmVjdG9y
PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gZGVsZXRlZE9yaWdpbnM7Ci0gICAgZm9yRWFjaE9yaWdp
bkRpcmVjdG9yeShbJl0oYXV0byBkaXJlY3RvcnkpIG11dGFibGUgewotICAgICAgICBhdXRvIGZp
bGVQYXRoID0gb3JpZ2luRmlsZVBhdGgoZGlyZWN0b3J5KTsKLSAgICAgICAgYXV0byBvcmlnaW4g
PSByZWFkT3JpZ2luRnJvbUZpbGUoZmlsZVBhdGgpOwotICAgICAgICBpZiAoIW9yaWdpbikgewot
ICAgICAgICAgICAgLy8gSWYgb3JpZ2luIGNhbm5vdCBiZSByZXRyaWV2ZWQsIGJ1dCB3ZSBhcmUg
YXNrZWQgdG8gcmVtb3ZlIGRhdGEgZm9yIGFsbCBvcmlnaW5zLCByZW1vdmUgaXQuCi0gICAgICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpk
ZWxldGVEYXRhT25EaXNrIGZhaWxlZCB0byByZWFkIG9yaWdpbiBmcm9tICclcyciLCBmaWxlUGF0
aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXIoV2ViQ29yZTo6Q2xpZW50
T3JpZ2luIHsgfSkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHRlbXBPcmlnaW5TdG9yYWdlTWFu
YWdlciA9IG1ha2VVbmlxdWU8T3JpZ2luU3RvcmFnZU1hbmFnZXI+KFN0cmluZyB7IGRpcmVjdG9y
eSB9KTsKLSAgICAgICAgICAgICAgICB0ZW1wT3JpZ2luU3RvcmFnZU1hbmFnZXItPmRlbGV0ZURh
dGEodHlwZXMsIG1vZGlmaWVkU2luY2VUaW1lKTsKLSAgICAgICAgICAgICAgICBkZWxldGVPcmln
aW5GaWxlSWZOZWNlc3NhcnkoZmlsZVBhdGgpOwotICAgICAgICAgICAgICAgIEZpbGVTeXN0ZW06
OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KGRpcmVjdG9yeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWZpbHRlcigqb3JpZ2luKSkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4g
ZGVsZXRlZE9yaWdpbnM7CisgICAgYXV0byBhbGxPcmlnaW5zID0gZ2V0QWxsT3JpZ2lucygpOwor
ICAgIGZvciAoYXV0byBvcmlnaW4gOiBhbGxPcmlnaW5zKSB7CisgICAgICAgIGlmICghZmlsdGVy
KG9yaWdpbikpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBkZWxldGVkT3JpZ2lu
cy5hcHBlbmQoKm9yaWdpbik7Ci0gICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIoKm9y
aWdpbikuZGVsZXRlRGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZVRpbWUpOwotICAgICAgICByZW1v
dmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUoKm9yaWdpbik7Ci0gICAgICAgIGRlbGV0
ZU9yaWdpbkZpbGVJZk5lY2Vzc2FyeShmaWxlUGF0aCk7Ci0gICAgICAgIEZpbGVTeXN0ZW06OmRl
bGV0ZUVtcHR5RGlyZWN0b3J5KGRpcmVjdG9yeSk7Ci0gICAgfSk7CisgICAgICAgIGRlbGV0ZWRP
cmlnaW5zLmFkZChvcmlnaW4pOworICAgICAgICBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9y
aWdpbikuZGVsZXRlRGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZVRpbWUpOworICAgICAgICBkZWxl
dGVPcmlnaW5EaXJlY3RvcnlJZlBvc3NpYmxlKG9yaWdpbik7CisgICAgfQogCiAgICAgcmV0dXJu
IGRlbGV0ZWRPcmlnaW5zOwogfQpAQCAtNTQxLDUgKzU2OCwxNjggQEAgdm9pZCBOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OmRlbGV0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMoT3B0aW9uU2V0PFdl
YnNpdGVEYXQKICAgICB9KTsKIH0KIAordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6Om1vdmVE
YXRhKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgc291cmNlLCBjb25zdCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIHRhcmdldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CisgICAgQVNTRVJUKCFtX2Nsb3NlZCk7CisKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHNvdXJjZSA9IGNyb3NzVGhyZWFkQ29weShz
b3VyY2UpLCB0YXJnZXQgPSBjcm9zc1RocmVhZENvcHkodGFyZ2V0KSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0
byBzb3VyY2VPcmlnaW4gPSBXZWJDb3JlOjpDbGllbnRPcmlnaW4geyBzb3VyY2UsIHNvdXJjZSB9
OworICAgICAgICBhdXRvIHRhcmdldE9yaWdpbiA9IFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IHRh
cmdldCwgdGFyZ2V0IH07CisgICAgICAgIAorICAgICAgICAvLyBDbGVhciBleGlzdGluZyBkYXRh
IG9mIHRhcmdldCBvcmlnaW4uCisgICAgICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5
cGVzID0geyBXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW0sIFdlYnNpdGVEYXRhVHlwZTo6TG9j
YWxTdG9yYWdlLCBXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlICB9OworICAgICAgICBs
b2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKHRhcmdldE9yaWdpbikuZGVsZXRlRGF0YSh0eXBlcywg
LVdhbGxUaW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAgcmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFn
ZXJJZlBvc3NpYmxlKHRhcmdldE9yaWdpbik7CisKKyAgICAgICAgLy8gTW92ZSBkYXRhIGZyb20g
c291cmNlIG9yaWdpbiB0byB0YXJnZXQgb3JpZ2luLgorICAgICAgICBzdGQ6Om9wdGlvbmFsPFN0
cmluZz4gbmV3TG9jYWxTdG9yYWdlUGF0aDsKKyAgICAgICAgaWYgKG1fY3VzdG9tTG9jYWxTdG9y
YWdlUGF0aCkKKyAgICAgICAgICAgIG5ld0xvY2FsU3RvcmFnZVBhdGggPSBMb2NhbFN0b3JhZ2VN
YW5hZ2VyOjpsb2NhbFN0b3JhZ2VGaWxlUGF0aCgqbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoLCB0
YXJnZXRPcmlnaW4pOworICAgICAgICBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKHNvdXJjZU9y
aWdpbikubW92ZURhdGEob3JpZ2luRGlyZWN0b3J5UGF0aChtX3BhdGgsIHRhcmdldE9yaWdpbiwg
bV9zYWx0KSwgV1RGTW92ZShuZXdMb2NhbFN0b3JhZ2VQYXRoKSk7CisgICAgICAgIHJlbW92ZU9y
aWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShzb3VyY2VPcmlnaW4pOworCisgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzdXNwZW5kKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgbV9xdWV1ZS0+c3VzcGVuZChbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IFJlZiB7ICp0aGlzIH1dIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9sb2Nh
bE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8g
bG9jYWxTdG9yYWdlTWFuYWdlciA9IG1hbmFnZXItPmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdl
cigpKQorICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZU1hbmFnZXItPnN5bmNMb2NhbFN0b3Jh
Z2UoKTsKKyAgICAgICAgfQorICAgIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30K
Kwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnJlc3VtZSgpCit7CisgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcXVldWUtPnJlc3VtZSgpOworfQorCit2b2lkIE5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6aGFuZGxlTG93TWVtb3J5V2FybmluZygpCit7CisgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfV0geworICAgICAgICBmb3IgKGF1dG8mIG1hbmFn
ZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byBsb2NhbFN0b3JhZ2VNYW5hZ2VyID0gbWFuYWdlci0+ZXhpc3RpbmdMb2NhbFN0
b3JhZ2VNYW5hZ2VyKCkpCisgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTWFuYWdlci0+aGFu
ZGxlTG93TWVtb3J5V2FybmluZygpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYg
eyAqdGhpcyB9LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgeworICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2lu
U3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBsb2NhbFN0
b3JhZ2VNYW5hZ2VyID0gbWFuYWdlci0+ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkpCisg
ICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTWFuYWdlci0+c3luY0xvY2FsU3RvcmFnZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OmNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhJiB0b3BPcmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFyZWFJZGVu
dGlmaWVyKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIFdlYkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4gPSB7IHRvcE9yaWdp
biwgdG9wT3JpZ2luIH07CisgICAgY29tcGxldGlvbkhhbmRsZXIobG9jYWxPcmlnaW5TdG9yYWdl
TWFuYWdlcihvcmlnaW4pLmxvY2FsU3RvcmFnZU1hbmFnZXIoKm1fc3RvcmFnZUFyZWFSZWdpc3Ry
eSkuY29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIG9yaWdp
biwgbV9xdWV1ZS5jb3B5UmVmKCkpKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhJiB0b3BPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYgb3BlbmluZ09yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQXJlYUlkZW50
aWZpZXIpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIFdlYkNvcmU6OkNsaWVudE9yaWdp
biBvcmlnaW4gPSB7IHRvcE9yaWdpbiwgb3BlbmluZ09yaWdpbiB9OworICAgIGNvbXBsZXRpb25I
YW5kbGVyKGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5sb2NhbFN0b3JhZ2VNYW5h
Z2VyKCptX3N0b3JhZ2VBcmVhUmVnaXN0cnkpLmNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFn
ZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBvcmlnaW4pKTsKK30KKwordm9pZCBOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdG9wT3JpZ2luLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0b3JhZ2VBcmVhSWRlbnRpZmllcik+JiYgY29tcGxldGlvbkhhbmRsZXIpCisK
K3sKKyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luID0geyB0b3BPcmlnaW4sIHRvcE9y
aWdpbiB9OworICAgIGNvbXBsZXRpb25IYW5kbGVyKGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIo
b3JpZ2luKS5zZXNzaW9uU3RvcmFnZU1hbmFnZXIoKm1fc3RvcmFnZUFyZWFSZWdpc3RyeSkuY29u
bmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgb3JpZ2luLCBp
ZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkaXNjb25uZWN0
RnJvbVN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9y
YWdlQXJlYShpZGVudGlmaWVyKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoc3RvcmFnZUFyZWEtPnN0b3JhZ2VUeXBlKCkgPT0gU3RvcmFnZUFyZWFC
YXNlOjpTdG9yYWdlVHlwZTo6TG9jYWwpCisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFn
ZXIoc3RvcmFnZUFyZWEtPm9yaWdpbigpKS5sb2NhbFN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VB
cmVhUmVnaXN0cnkpLmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJ
RCgpLCBpZGVudGlmaWVyKTsKKyAgICBlbHNlCisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1h
bmFnZXIoc3RvcmFnZUFyZWEtPm9yaWdpbigpKS5zZXNzaW9uU3RvcmFnZU1hbmFnZXIoKm1fc3Rv
cmFnZUFyZWFSZWdpc3RyeSkuZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShjb25uZWN0aW9uLnVu
aXF1ZUlEKCksIGlkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Y2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIGZyb21JZGVudGlmaWVyLCBTdG9yYWdlTmFtZXNw
YWNlSWRlbnRpZmllciB0b0lkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1h
bmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChhdXRvKiBzZXNzaW9uU3RvcmFnZU1hbmFn
ZXIgPSBtYW5hZ2VyLT5leGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigpKQorICAgICAgICAg
ICAgc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5jbG9uZVN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5p
cXVlSUQoKSwgZnJvbUlkZW50aWZpZXIsIHRvSWRlbnRpZmllcik7CisgICAgfQorfQorCit2b2lk
IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Z2V0VmFsdWVzKFN0b3JhZ2VBcmVhSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5
LT5nZXRTdG9yYWdlQXJlYShpZGVudGlmaWVyKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4geyB9
KTsKKworICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VBcmVhLT5hbGxJdGVtcygpKTsKK30K
Kwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0oSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgU3RvcmFnZUFyZWFJ
bXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0
cmluZykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3Rv
cmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhUmVnaXN0cnktPmdldFN0b3JhZ2VBcmVhKGlkZW50aWZp
ZXIpOworICAgIGJvb2wgcXVvdGFFcnJvciA9IGZhbHNlOworICAgIGlmIChzdG9yYWdlQXJlYSkg
eworICAgICAgICBhdXRvIHJlc3VsdCA9IHN0b3JhZ2VBcmVhLT5zZXRJdGVtKGNvbm5lY3Rpb24u
dW5pcXVlSUQoKSwgaW1wbElkZW50aWZpZXIsIGtleSwgdmFsdWUsIHVybFN0cmluZyk7CisgICAg
ICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcXVvdGFFcnJvciA9IChyZXN1bHQuZXJyb3Io
KSA9PSBTdG9yYWdlRXJyb3I6OlF1b3RhRXhjZWVkZWQpOworICAgIH0KKworICAgIGNvbm5lY3Rp
b24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFNldEl0ZW0oc3RvcmFnZU1hcFNl
ZWQsIGtleSwgcXVvdGFFcnJvciksIGlkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFN0b3Jh
Z2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIGlt
cGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgYXV0byBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFSZWdpc3RyeS0+Z2V0
U3RvcmFnZUFyZWEoaWRlbnRpZmllcik7CisgICAgaWYgKHN0b3JhZ2VBcmVhKQorICAgICAgICBz
dG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIGltcGxJZGVudGlm
aWVyLCBrZXksIHVybFN0cmluZyk7CisKKyAgICBjb25uZWN0aW9uLnNlbmQoTWVzc2FnZXM6OlN0
b3JhZ2VBcmVhTWFwOjpEaWRSZW1vdmVJdGVtKHN0b3JhZ2VNYXBTZWVkLCBrZXkpLCBpZGVudGlm
aWVyKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsZWFyKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0b3Jh
Z2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBT
ZWVkLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhUmVnaXN0cnkt
PmdldFN0b3JhZ2VBcmVhKGlkZW50aWZpZXIpOworICAgIGlmIChzdG9yYWdlQXJlYSkKKyAgICAg
ICAgc3RvcmFnZUFyZWEtPmNsZWFyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaW1wbElkZW50aWZp
ZXIsIHVybFN0cmluZyk7CisKKyAgICBjb25uZWN0aW9uLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VB
cmVhTWFwOjpEaWRDbGVhcihzdG9yYWdlTWFwU2VlZCksIGlkZW50aWZpZXIpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oCmluZGV4IDJhZGRmMmI1
ZTIwYWQzNmQyOGU0NDU5N2VhNDEzZmZlODk2MWE0MGYuLmJhNjU2YzU5MTU5ZmIwOWFiZWQ1YjA0
NjZhODkxM2EzZGQzODQzYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmgKQEAgLTI4LDYgKzI4
LDkgQEAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbVN0b3Jh
Z2VFcnJvci5oIgogI2luY2x1ZGUgIk9yaWdpblN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
U3RvcmFnZUFyZWFJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsSWRlbnRp
Zmllci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLmgiCiAjaW5jbHVk
ZSAiV2Vic2l0ZURhdGEuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIuaD4KQEAgLTQ2LDEwICs0
OSwxMiBAQCBzdHJ1Y3QgQ2xpZW50T3JpZ2luOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNz
IEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnk7CitjbGFzcyBTdG9yYWdlQXJlYVJlZ2lz
dHJ5OwogCiBjbGFzcyBOZXR3b3JrU3RvcmFnZU1hbmFnZXIgZmluYWwgOiBwdWJsaWMgSVBDOjpD
b25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8TmV0d29ya1N0b3JhZ2VNYW5hZ2VyPiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIGNvbnN0
IFN0cmluZyYgcGF0aCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrU3RvcmFnZU1hbmFnZXI+IGNy
ZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBzdGQ6Om9wdGlvbmFsPFN0
cmluZz4gY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCk7CisgICAgc3RhdGljIGJvb2wgY2FuSGFuZGxl
VHlwZXMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4pOwogCiAgICAgdm9pZCBzdGFydFJlY2Vp
dmluZ01lc3NhZ2VGcm9tQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24mKTsKICAgICB2b2lkIHN0
b3BSZWNlaXZpbmdNZXNzYWdlRnJvbUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uJik7CkBAIC02
MSwyMiArNjYsMzAgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4m
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZGVsZXRlRGF0YU1vZGlm
aWVkU2luY2UoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9t
YWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluPiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSGFzaFNldDxXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbj4mJik+JiYpOworICAgIHZvaWQgbW92ZURhdGEoY29uc3QgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYgdGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZv
aWQgc3VzcGVuZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgcmVzdW1l
KCk7CisgICAgdm9pZCBoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7CisgICAgdm9pZCBzeW5jTG9j
YWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKIHByaXZhdGU6Ci0gICAg
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBhdGgp
OworICAgIE5ldHdvcmtTdG9yYWdlTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5n
JiBwYXRoLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCk7CiAg
ICAgfk5ldHdvcmtTdG9yYWdlTWFuYWdlcigpOwogICAgIE9yaWdpblN0b3JhZ2VNYW5hZ2VyJiBs
b2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOwot
ICAgIHZvaWQgcmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxlKGNvbnN0IFdlYkNv
cmU6OkNsaWVudE9yaWdpbiYpOworICAgIGJvb2wgcmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJ
ZlBvc3NpYmxlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIHZvaWQgZGVsZXRl
T3JpZ2luRGlyZWN0b3J5SWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsK
ICAgICBGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5JiBmaWxlU3lzdGVtU3RvcmFnZUhh
bmRsZVJlZ2lzdHJ5KCk7CiAKICAgICB2b2lkIGZvckVhY2hPcmlnaW5EaXJlY3RvcnkoY29uc3Qg
RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mKTsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNs
aWVudE9yaWdpbj4gZ2V0QWxsT3JpZ2lucygpOwogICAgIFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50
cnk+IGZldGNoRGF0YUZyb21EaXNrKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+KTsKLSAgICBW
ZWN0b3I8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBkZWxldGVEYXRhT25EaXNrKE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBXZWJD
b3JlOjpDbGllbnRPcmlnaW4mKT4mKTsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNsaWVudE9yaWdp
bj4gZGVsZXRlRGF0YU9uRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUs
IGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik+Jik7CiAK
ICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlciAoaW1wbGVtZW50ZWQgYnkgZ2VuZXJhdGVkIGNv
ZGUpCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKTsKKyAgICBib29sIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImLCBVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKTsK
IAotICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMKKyAgICAvLyBNZXNzYWdlIGhhbmRsZXJzIGZvciBG
aWxlU3lzdGVtCiAgICAgdm9pZCBwZXJzaXN0ZWQoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCBwZXJzaXN0KGNv
bnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYpOwogICAgIHZvaWQgZmlsZVN5c3RlbUdldERpcmVjdG9yeShJUEM6OkNvbm5lY3Rpb24mLCBj
b25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cGVj
dGVkPFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBGaWxlU3lzdGVtU3RvcmFn
ZUVycm9yPik+JiYpOwpAQCAtODgsMjIgKzEwMSwzMyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVt
b3ZlRW50cnkoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCBkZWxldGVSZWN1cnNpdmVseSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChz
dGQ6Om9wdGlvbmFsPEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCByZXNv
bHZlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBXZWJDb3JlOjpGaWxlU3lz
dGVtSGFuZGxlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeHBlY3RlZDxWZWN0
b3I8U3RyaW5nPiwgRmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsKICAgICB2b2lkIGdldEZp
bGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoRXhwZWN0ZWQ8U3RyaW5nLCBGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOwotCiAg
ICAgdXNpbmcgQWNjZXNzSGFuZGxlSW5mbyA9IHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxlU3lzdGVt
U3luY0FjY2Vzc0hhbmRsZUlkZW50aWZpZXIsIElQQzo6U2hhcmVkRmlsZUhhbmRsZT47CiAgICAg
dm9pZCBjcmVhdGVTeW5jQWNjZXNzSGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVu
dGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cGVjdGVkPEFjY2Vzc0hhbmRsZUluZm8s
IEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCBjbG9zZUFjY2Vzc0hhbmRs
ZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgV2ViQ29yZTo6RmlsZVN5c3Rl
bVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6
b3B0aW9uYWw8RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsKICAgICB2b2lkIGdldEhhbmRs
ZU5hbWVzKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBGaWxlU3lzdGVtU3RvcmFnZUVycm9y
Pik+JiYpOwogICAgIHZvaWQgZ2V0SGFuZGxlKElQQzo6Q29ubmVjdGlvbiYsIFdlYkNvcmU6OkZp
bGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBTdHJpbmcmJiBuYW1lLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKEV4cGVjdGVkPHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRp
ZmllciwgYm9vbD4sIEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CisgICAgCisgICAgLy8g
TWVzc2FnZSBoYW5kbGVycyBmb3IgV2ViU3RvcmFnZQorICAgIHZvaWQgY29ubmVjdFRvTG9jYWxT
dG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwg
Y29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChTdG9yYWdlQXJlYUlkZW50aWZpZXIpPiYmKTsKKyAgICB2b2lkIGNvbm5lY3RUb1RyYW5zaWVu
dExvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50
aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFyZWFJ
ZGVudGlmaWVyKT4mJik7CisgICAgdm9pZCBjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoSVBD
OjpDb25uZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFyZWFJ
ZGVudGlmaWVyKT4mJik7CisgICAgdm9pZCBkaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKElQQzo6
Q29ubmVjdGlvbiYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllcik7CisgICAgdm9pZCBjbG9uZVNlc3Np
b25TdG9yYWdlTmFtZXNwYWNlKElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VOYW1lc3BhY2VJZGVu
dGlmaWVyLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAgdm9pZCBnZXRWYWx1ZXMo
U3RvcmFnZUFyZWFJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+Jik+JiYpOworICAgIHZvaWQgc2V0SXRlbShJUEM6OkNvbm5lY3Rp
b24mLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIHVp
bnQ2NF90IHNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25z
dCBTdHJpbmcmIHVybFN0cmluZyk7CisgICAgdm9pZCByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlv
biYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgdWlu
dDY0X3Qgc2VlZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsK
KyAgICB2b2lkIGNsZWFyKElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllciwg
U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc2VlZCwgY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcpOwogCiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7Ci0gICAgUmVmPFdv
cmtRdWV1ZT4gbV9xdWV1ZTsKKyAgICBSZWY8U3VzcGVuZGFibGVXb3JrUXVldWU+IG1fcXVldWU7
CiAgICAgU3RyaW5nIG1fcGF0aDsKICAgICBGaWxlU3lzdGVtOjpTYWx0IG1fc2FsdDsKICAgICBi
b29sIG1fY2xvc2VkIHsgZmFsc2UgfTsKICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdp
biwgc3RkOjp1bmlxdWVfcHRyPE9yaWdpblN0b3JhZ2VNYW5hZ2VyPj4gbV9sb2NhbE9yaWdpblN0
b3JhZ2VNYW5hZ2VyczsKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdpbiwgc3RkOjp1
bmlxdWVfcHRyPE9yaWdpblN0b3JhZ2VNYW5hZ2VyPj4gbV9zZXNzaW9uT3JpZ2luU3RvcmFnZU1h
bmFnZXJzOwogICAgIFdlYWtIYXNoU2V0PElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uczsg
Ly8gTWFpbiB0aHJlYWQgb25seS4KICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsZVN5c3RlbVN0b3Jh
Z2VIYW5kbGVSZWdpc3RyeT4gbV9maWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlQXJlYVJlZ2lzdHJ5PiBtX3N0b3JhZ2VBcmVhUmVnaXN0
cnk7CisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFn
ZXIubWVzc2FnZXMuaW4KaW5kZXggNGU0MDVjNmVlYWQzMjZlMjViNDMxNjQyMDcwODA5NWZhNjBk
YzgzOC4uMDQyMmI2MzQ3NTFkMDM4NWY4NGUwMWY2NGFjNjFkYWYzMWMxNWU4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFu
YWdlci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0zNSw5ICszNSwxOCBAQAog
ICAgIFJlc29sdmUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgdGFyZ2V0SWRlbnRpZmllcikg
LT4gKEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJy
b3I+IHJlc3VsdCkgQXN5bmMKICAgICBNb3ZlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIGRl
c3RpbmF0aW9uSWRlbnRpZmllciwgU3RyaW5nIG5ld05hbWUpIC0+IChzdGQ6Om9wdGlvbmFsPFdl
YktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYwogICAgIEdldEZpbGUo
V2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKEV4cGVj
dGVkPFN0cmluZywgV2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5j
Ci0KICAgICBDcmVhdGVTeW5jQWNjZXNzSGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChFeHBlY3RlZDxzdGQ6OnBhaXI8V2ViQ29yZTo6Rmls
ZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyLCBJUEM6OlNoYXJlZEZpbGVIYW5kbGU+
LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkgQXN5bmMKICAgICBDbG9z
ZUFjY2Vzc0hhbmRsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBpZGVudGlm
aWVyLCBXZWJDb3JlOjpGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50aWZpZXIgYWNjZXNz
SGFuZGxlSWRlbnRpZmllcikgLT4gKHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpGaWxlU3lzdGVtU3Rv
cmFnZUVycm9yPiByZXN1bHQpIEFzeW5jCiAgICAgR2V0SGFuZGxlTmFtZXMoV2ViQ29yZTo6Rmls
ZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKEV4cGVjdGVkPFZlY3RvcjxT
dHJpbmc+LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkgQXN5bmMKICAg
ICBHZXRIYW5kbGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgU3RyaW5nIG5hbWUpIC0+IChFeHBlY3RlZDxzdGQ6OnBhaXI8V2ViQ29yZTo6RmlsZVN5c3Rl
bUhhbmRsZUlkZW50aWZpZXIsIGJvb2w+LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+
IHJlc3VsdCkgQXN5bmMgV2FudHNDb25uZWN0aW9uCisKKyAgICBDb25uZWN0VG9Mb2NhbFN0b3Jh
Z2VBcmVhKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgc3RvcmFnZU5hbWVzcGFj
ZUlELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHNlY3VyaXR5T3JpZ2luRGF0
YSkgLT4gKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpIFN5bmNocm9u
b3VzIFdhbnRzQ29ubmVjdGlvbgorICAgIENvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFy
ZWEoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBzdG9yYWdlTmFtZXNwYWNlSUQs
IHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgdG9wTGV2ZWxTZWN1cml0eU9yaWdp
bkRhdGEsIHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgc2VjdXJpdHlPcmlnaW5E
YXRhKSAtPiAoV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikgU3luY2hy
b25vdXMgV2FudHNDb25uZWN0aW9uCisgICAgQ29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKFdl
YktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgc3RvcmFnZU5hbWVzcGFjZUlELCBzdHJ1
Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHNlY3VyaXR5T3JpZ2luRGF0YSkgLT4gKFdl
YktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpIFN5bmNocm9ub3VzIFdhbnRz
Q29ubmVjdGlvbgorICAgIERpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoV2ViS2l0OjpTdG9yYWdl
QXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikgV2FudHNDb25uZWN0aW9uCisgICAgQ2xvbmVTZXNz
aW9uU3RvcmFnZU5hbWVzcGFjZShXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIGZy
b21TdG9yYWdlTmFtZXNwYWNlSUQsIFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIg
dG9TdG9yYWdlTmFtZXNwYWNlSUQpIFdhbnRzQ29ubmVjdGlvbgorICAgIEdldFZhbHVlcyhXZWJL
aXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAoSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gdmFsdWVzKSBTeW5jaHJvbm91cworICAgIFNldEl0ZW0oV2ViS2l0OjpTdG9yYWdl
QXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTdG9yYWdlQXJlYUltcGxJZGVudGlm
aWVyIGltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgU3RyaW5nIGtleSwg
U3RyaW5nIHZhbHVlLCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50c0Nvbm5lY3Rpb24KKyAgICBSZW1v
dmVJdGVtKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6
U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3RvcmFn
ZU1hcFNlZWQsIFN0cmluZyBrZXksIFN0cmluZyB1cmxTdHJpbmcpIFdhbnRzQ29ubmVjdGlvbgor
ICAgIENsZWFyKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktp
dDo6U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3Rv
cmFnZU1hcFNlZWQsIFN0cmluZyB1cmxTdHJpbmcpIFdhbnRzQ29ubmVjdGlvbgogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VN
YW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5T
dG9yYWdlTWFuYWdlci5jcHAKaW5kZXggMjU0ZGZlM2JmZjRhNTZkMmU5NTkyMjZiZmNmYmZlZDU1
YTIxNTY2Yy4uZmEwYTYzMDdkNjkwYTZlZjFhZDgxMDY4Y2M1NWI5YWY2MTlkMjM2YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VN
YW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3Jp
Z2luU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0yOCw3ICsyOCwxMSBAQAogCiAjaW5jbHVkZSAiRmls
ZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW1TdG9y
YWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRl
ICJTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVJlZ2lzdHJ5
LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TUUxp
dGVGaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KIAogbmFtZXNwYWNl
IFdlYktpdCB7CkBAIC0zOCw5ICs0MiwxMCBAQCBlbnVtIGNsYXNzIE9yaWdpblN0b3JhZ2VNYW5h
Z2VyOjpTdG9yYWdlQnVja2V0TW9kZSA6IGJvb2wgeyBCZXN0RWZmb3J0LCBQZXJzaXN0ZQogY2xh
c3MgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFN0b3JhZ2VCdWNrZXQoY29uc3QgU3RyaW5nJiBy
b290UGF0aCwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQorICAgIFN0b3JhZ2VCdWNrZXQoY29u
c3QgU3RyaW5nJiByb290UGF0aCwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBzdGQ6Om9wdGlv
bmFsPFN0cmluZz4gbG9jYWxTdG9yYWdlUGF0aCkKICAgICAgICAgOiBtX3Jvb3RQYXRoKHJvb3RQ
YXRoKQogICAgICAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgICAgICAsIG1fbG9j
YWxTdG9yYWdlUGF0aChsb2NhbFN0b3JhZ2VQYXRoKQogICAgIHsKICAgICB9CiAKQEAgLTU1LDEz
ICs2MCwyNyBAQCBwdWJsaWM6CiAKICAgICBlbnVtIGNsYXNzIFN0b3JhZ2VUeXBlIDogdWludDhf
dCB7CiAgICAgICAgIEZpbGVTeXN0ZW0sCisgICAgICAgIExvY2FsU3RvcmFnZSwKKyAgICAgICAg
U2Vzc2lvblN0b3JhZ2UsCiAgICAgfTsKIAorICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYnNp
dGVEYXRhVHlwZT4gdG9XZWJzaXRlRGF0YVR5cGUoY29uc3QgU3RyaW5nJiBzdG9yYWdlSWRlbnRp
ZmllcikKKyAgICB7CisgICAgICAgIGlmIChzdG9yYWdlSWRlbnRpZmllciA9PSAiRmlsZVN5c3Rl
bSIpCisgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtOworCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCiAgICAgc3RhdGljIFN0cmluZyB0
b1N0b3JhZ2VJZGVudGlmaWVyKFN0b3JhZ2VUeXBlIHR5cGUpCiAgICAgewogICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBTdG9yYWdlVHlwZTo6RmlsZVN5c3RlbToKICAgICAg
ICAgICAgIHJldHVybiAiRmlsZVN5c3RlbSJfczsKKyAgICAgICAgY2FzZSBTdG9yYWdlVHlwZTo6
TG9jYWxTdG9yYWdlOgorICAgICAgICAgICAgcmV0dXJuICJMb2NhbFN0b3JhZ2UiX3M7CisgICAg
ICAgIGNhc2UgU3RvcmFnZVR5cGU6OlNlc3Npb25TdG9yYWdlOgorICAgICAgICAgICAgcmV0dXJu
ICJTZXNzaW9uU3RvcmFnZSJfczsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC04NiwxOCArMTA1LDExNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biAqbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI7CiAgICAgfQogCisgICAgTG9jYWxTdG9yYWdl
TWFuYWdlciYgbG9jYWxTdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3Ry
eSkKKyAgICB7CisgICAgICAgIGlmICghbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICAg
ICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyID0gbWFrZVVuaXF1ZTxMb2NhbFN0b3JhZ2VNYW5hZ2Vy
PihtX2xvY2FsU3RvcmFnZVBhdGggPyAqbV9sb2NhbFN0b3JhZ2VQYXRoIDogU3RyaW5nIHsgfSwg
cmVnaXN0cnkpOworCisgICAgICAgIHJldHVybiAqbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyOworICAg
IH0KKworICAgIExvY2FsU3RvcmFnZU1hbmFnZXIqIGV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdl
cigpCisgICAgeworICAgICAgICByZXR1cm4gbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLmdldCgpOwor
ICAgIH0KKworICAgIFNlc3Npb25TdG9yYWdlTWFuYWdlciYgc2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
KFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Nl
c3Npb25TdG9yYWdlTWFuYWdlcikKKyAgICAgICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
ID0gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZU1hbmFnZXI+KHJlZ2lzdHJ5KTsKKworICAgICAg
ICByZXR1cm4gKm1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOworICAgIH0KKworICAgIFNlc3Npb25T
dG9yYWdlTWFuYWdlciogZXhpc3RpbmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmdldCgpOworICAgIH0KKwogICAg
IGJvb2wgaXNBY3RpdmUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICEhbV9maWxlU3lzdGVtU3Rv
cmFnZU1hbmFnZXI7CisgICAgICAgIHJldHVybiBtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlciB8
fCBtX2xvY2FsU3RvcmFnZU1hbmFnZXIgfHwgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXI7CisgICAg
fQorCisgICAgYm9vbCBpc0VtcHR5KCkKKyAgICB7CisgICAgICAgIGF1dG8gZmlsZXMgPSBGaWxl
U3lzdGVtOjpsaXN0RGlyZWN0b3J5KG1fcm9vdFBhdGgpOworICAgICAgICBhdXRvIGhhc1ZhbGlk
RmlsZSA9IFdURjo6YW55T2YoZmlsZXMsIFsmXShhdXRvIGZpbGUpIHsKKyAgICAgICAgICAgIHJl
dHVybiBmaWxlICE9ICIuRFNfU3RvcmUiX3MgJiYgZmlsZSAhPSBvcmlnaW5GaWxlTmFtZTsKKyAg
ICAgICAgfSk7CisgICAgICAgIGlmIChoYXNWYWxpZEZpbGUpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlUGF0aCkKKyAgICAgICAgICAgIHJl
dHVybiBGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKCptX2xvY2FsU3RvcmFnZVBhdGgpOworCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IGZldGNoRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcykKKyAgICB7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gZmV0Y2hEYXRhSW5NZW1vcnkodHlwZXMpOworICAgICAgICByZXN1
bHQuYWRkKGZldGNoRGF0YUZyb21EaXNrKHR5cGVzKSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKICAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2VUaW1lKQogICAgIHsKICAgICAgICAgaWYg
KHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSkpCiAgICAgICAgICAg
ICBkZWxldGVGaWxlU3lzdGVtU3RvcmFnZURhdGEobW9kaWZpZWRTaW5jZVRpbWUpOworCisgICAg
ICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkpCisg
ICAgICAgICAgICBkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKG1vZGlmaWVkU2luY2VUaW1lKTsKKwor
ICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFn
ZSkgJiYgbW9kaWZpZWRTaW5jZVRpbWUgPT0gLVdhbGxUaW1lOjppbmZpbml0eSgpKQorICAgICAg
ICAgICAgZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKCk7CisgICAgfQorCisgICAgdm9pZCBtb3Zl
RGF0YShjb25zdCBTdHJpbmcmIHBhdGgsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBsb2NhbFN0b3Jh
Z2VQYXRoKQorICAgIHsKKyAgICAgICAgbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIgPSBudWxs
cHRyOworICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICAgICAgbV9s
b2NhbFN0b3JhZ2VNYW5hZ2VyLT5jbG9zZSgpOworCisgICAgICAgIEZpbGVTeXN0ZW06Om1vdmVG
aWxlKG1fcm9vdFBhdGgsIHBhdGgpOworCisgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZVBhdGgg
JiYgbG9jYWxTdG9yYWdlUGF0aCkKKyAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0
ZW06Om1vdmVEYXRhYmFzZUZpbGUoKm1fbG9jYWxTdG9yYWdlUGF0aCwgKmxvY2FsU3RvcmFnZVBh
dGgpOwogICAgIH0KIAogcHJpdmF0ZToKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBm
ZXRjaERhdGFJbk1lbW9yeShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcykKKyAgICB7
CisgICAgICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHJlc3VsdCB7IH07CisgICAgICAg
IGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKKyAg
ICAgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZU1hbmFnZXIgJiYgbV9sb2NhbFN0b3JhZ2VNYW5h
Z2VyLT5oYXNEYXRhSW5NZW1vcnkoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNp
dGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBl
cy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSkgeworICAgICAgICAg
ICAgaWYgKG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyICYmIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
LT5oYXNEYXRhSW5NZW1vcnkoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVE
YXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGFG
cm9tRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcykKKyAgICB7CisgICAgICAg
IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHJlc3VsdCB7IH07CisgICAgICAgIGZvciAoYXV0
byYgc3RvcmFnZVR5cGUgOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KG1fcm9vdFBhdGgpKSB7
CisgICAgICAgICAgICBpZiAoYXV0byB0eXBlID0gdG9XZWJzaXRlRGF0YVR5cGUoc3RvcmFnZVR5
cGUpOyB0eXBlICYmIHR5cGVzLmNvbnRhaW5zKCp0eXBlKSkKKyAgICAgICAgICAgICAgICByZXN1
bHQuYWRkKCp0eXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkgJiYgIXJlc3VsdC5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2FsU3RvcmFn
ZVBhdGggJiYgRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cygqbV9sb2NhbFN0b3JhZ2VQYXRoKSkKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgdm9pZCBk
ZWxldGVGaWxlU3lzdGVtU3RvcmFnZURhdGEoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZVRpbWUpCiAg
ICAgewogICAgICAgICBtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlciA9IG51bGxwdHI7CkBAIC0x
MDYsMTQgKzIyNCw0MyBAQCBwcml2YXRlOgogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVBbGxG
aWxlc01vZGlmaWVkU2luY2UoZmlsZVN5c3RlbVN0b3JhZ2VQYXRoLCBtb2RpZmllZFNpbmNlVGlt
ZSk7CiAgICAgfQogCisgICAgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKFdhbGxUaW1lIHRp
bWUpCisgICAgeworICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKSB7CisgICAgICAg
ICAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmNsZWFyRGF0YSgpOworCisgICAgICAgICAgICBp
ZiAoIW1fbG9jYWxTdG9yYWdlTWFuYWdlci0+aXNBY3RpdmUoKSkKKyAgICAgICAgICAgICAgICBt
X2xvY2FsU3RvcmFnZU1hbmFnZXIgPSBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1fbG9jYWxTdG9yYWdlUGF0aCkgeworICAgICAgICAgICAgaWYgKGF1dG8gbW9kaWZpY2F0aW9u
VGltZSA9IEZpbGVTeXN0ZW06OmZpbGVNb2RpZmljYXRpb25UaW1lKCptX2xvY2FsU3RvcmFnZVBh
dGgpOyBtb2RpZmljYXRpb25UaW1lICYmICptb2RpZmljYXRpb25UaW1lID49IHRpbWUpCisgICAg
ICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxl
KCptX2xvY2FsU3RvcmFnZVBhdGgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBkZWxl
dGVTZXNzaW9uU3RvcmFnZURhdGEoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Nlc3Npb25TdG9y
YWdlTWFuYWdlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3Nlc3Npb25TdG9y
YWdlTWFuYWdlci0+Y2xlYXJEYXRhKCk7CisgICAgICAgIGlmICghbV9zZXNzaW9uU3RvcmFnZU1h
bmFnZXItPmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlciA9
IG51bGxwdHI7CisgICAgfQorICAgIAogICAgIFN0cmluZyBtX3Jvb3RQYXRoOwogICAgIFN0cmlu
ZyBtX2lkZW50aWZpZXI7CiAgICAgU3RvcmFnZUJ1Y2tldE1vZGUgbV9tb2RlIHsgU3RvcmFnZUJ1
Y2tldE1vZGU6OkJlc3RFZmZvcnQgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsZVN5c3RlbVN0
b3JhZ2VNYW5hZ2VyPiBtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcjsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8TG9jYWxTdG9yYWdlTWFuYWdlcj4gbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyOworICAgIHN0
ZDo6b3B0aW9uYWw8U3RyaW5nPiBtX2xvY2FsU3RvcmFnZVBhdGg7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFNlc3Npb25TdG9yYWdlTWFuYWdlcj4gbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXI7CiB9Owog
Ci1PcmlnaW5TdG9yYWdlTWFuYWdlcjo6T3JpZ2luU3RvcmFnZU1hbmFnZXIoU3RyaW5nJiYgcGF0
aCkKK09yaWdpblN0b3JhZ2VNYW5hZ2VyOjpPcmlnaW5TdG9yYWdlTWFuYWdlcihTdHJpbmcmJiBw
YXRoLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbG9jYWxTdG9yYWdlUGF0aCkKICAgICA6IG1fcGF0
aChXVEZNb3ZlKHBhdGgpKQorICAgICwgbV9sb2NhbFN0b3JhZ2VQYXRoKFdURk1vdmUobG9jYWxT
dG9yYWdlUGF0aCkpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiB9CkBAIC0x
MjksNyArMjc2LDcgQEAgdm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6Y29ubmVjdGlvbkNsb3Nl
ZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24KIE9yaWdpblN0b3JhZ2VNYW5h
Z2VyOjpTdG9yYWdlQnVja2V0JiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZGVmYXVsdEJ1Y2tldCgp
CiB7CiAgICAgaWYgKCFtX2RlZmF1bHRCdWNrZXQpCi0gICAgICAgIG1fZGVmYXVsdEJ1Y2tldCA9
IG1ha2VVbmlxdWU8U3RvcmFnZUJ1Y2tldD4obV9wYXRoLCAiZGVmYXVsdCJfcyk7CisgICAgICAg
IG1fZGVmYXVsdEJ1Y2tldCA9IG1ha2VVbmlxdWU8U3RvcmFnZUJ1Y2tldD4obV9wYXRoLCAiZGVm
YXVsdCJfcywgbV9sb2NhbFN0b3JhZ2VQYXRoKTsKIAogICAgIHJldHVybiAqbV9kZWZhdWx0QnVj
a2V0OwogfQpAQCAtMTM5LDE1ICsyODYsMzQgQEAgRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyJiBP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6ZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyKEZpbGVTeXMKICAg
ICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcihyZWdpc3Ry
eSk7CiB9CiAKK0xvY2FsU3RvcmFnZU1hbmFnZXImIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpsb2Nh
bFN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQoreworICAgIHJl
dHVybiBkZWZhdWx0QnVja2V0KCkubG9jYWxTdG9yYWdlTWFuYWdlcihyZWdpc3RyeSk7Cit9CisK
K0xvY2FsU3RvcmFnZU1hbmFnZXIqIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ0xvY2Fs
U3RvcmFnZU1hbmFnZXIoKQoreworICAgIHJldHVybiBkZWZhdWx0QnVja2V0KCkuZXhpc3RpbmdM
b2NhbFN0b3JhZ2VNYW5hZ2VyKCk7Cit9CisKK1Nlc3Npb25TdG9yYWdlTWFuYWdlciYgT3JpZ2lu
U3RvcmFnZU1hbmFnZXI6OnNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5
JiByZWdpc3RyeSkKK3sKKyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLnNlc3Npb25TdG9yYWdl
TWFuYWdlcihyZWdpc3RyeSk7Cit9CisKK1Nlc3Npb25TdG9yYWdlTWFuYWdlciogT3JpZ2luU3Rv
cmFnZU1hbmFnZXI6OmV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCkKK3sKKyAgICByZXR1
cm4gZGVmYXVsdEJ1Y2tldCgpLmV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCk7Cit9CisK
IGJvb2wgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmlzQWN0aXZlKCkKIHsKICAgICByZXR1cm4gZGVm
YXVsdEJ1Y2tldCgpLmlzQWN0aXZlKCk7CiB9CiAKLXZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6
OmRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1v
ZGlmaWVkU2luY2UpCitib29sIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjppc0VtcHR5KCkKIHsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBkZWZhdWx0QnVja2V0KCkuZGVsZXRl
RGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZSk7CisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5p
c0VtcHR5KCk7CiB9CiAKIHZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OnNldFBlcnNpc3RlZChi
b29sIHZhbHVlKQpAQCAtMTU4LDUgKzMyNCwyNiBAQCB2b2lkIE9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpzZXRQZXJzaXN0ZWQoYm9vbCB2YWx1ZSkKICAgICBkZWZhdWx0QnVja2V0KCkuc2V0TW9kZSh2
YWx1ZSA/IFN0b3JhZ2VCdWNrZXRNb2RlOjpQZXJzaXN0ZW50IDogU3RvcmFnZUJ1Y2tldE1vZGU6
OkJlc3RFZmZvcnQpOwogfQogCitPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBPcmlnaW5TdG9y
YWdlTWFuYWdlcjo6ZmV0Y2hEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0dXJuIGRlZmF1bHRC
dWNrZXQoKS5mZXRjaERhdGEodHlwZXMpOworfQorCit2b2lkIE9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpkZWxldGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzLCBXYWxsVGltZSBt
b2RpZmllZFNpbmNlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
ZGVmYXVsdEJ1Y2tldCgpLmRlbGV0ZURhdGEodHlwZXMsIG1vZGlmaWVkU2luY2UpOworfQorCit2
b2lkIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjptb3ZlRGF0YShjb25zdCBTdHJpbmcmIG5ld1BhdGgs
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBsb2NhbFN0b3JhZ2VQYXRoKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgZGVmYXVsdEJ1Y2tldCgpLm1vdmVEYXRhKG5ld1Bh
dGgsIFdURk1vdmUobG9jYWxTdG9yYWdlUGF0aCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09y
aWdpblN0b3JhZ2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuaAppbmRleCA3YWRmYTViMDNiNmJhNmUzZjg2OTgwYjEy
ZDJmOGE0NGQ5ZTRlNjRiLi4wNmY4Njc3Mjc1YWEwM2Q2MTk1NjYxNTEzZmJhMjgxMmNmMDA0NzNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2lu
U3RvcmFnZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuaApAQCAtMjYsMzAgKzI2LDM3IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9y
aWdpbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci1zdHJ1Y3QgQ2xpZW50T3JpZ2luOwotfQotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeTsKIGNsYXNzIEZpbGVTeXN0ZW1T
dG9yYWdlTWFuYWdlcjsKK2NsYXNzIExvY2FsU3RvcmFnZU1hbmFnZXI7CitjbGFzcyBTZXNzaW9u
U3RvcmFnZU1hbmFnZXI7CitjbGFzcyBTdG9yYWdlQXJlYVJlZ2lzdHJ5OwogZW51bSBjbGFzcyBX
ZWJzaXRlRGF0YVR5cGUgOiB1aW50MzJfdDsKIAogY2xhc3MgT3JpZ2luU3RvcmFnZU1hbmFnZXIg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IE9y
aWdpblN0b3JhZ2VNYW5hZ2VyKFN0cmluZyYmIHBhdGgpOworICAgIE9yaWdpblN0b3JhZ2VNYW5h
Z2VyKFN0cmluZyYmIHBhdGgsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBsb2NhbFN0b3JhZ2VQYXRo
KTsKICAgICB+T3JpZ2luU3RvcmFnZU1hbmFnZXIoKTsKIAogICAgIHZvaWQgY29ubmVjdGlvbkNs
b3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKICAgICBib29sIHBlcnNpc3RlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGVyc2lzdGVkOyB9CiAgICAgdm9pZCBzZXRQZXJzaXN0ZWQoYm9vbCB2
YWx1ZSk7CiAgICAgRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyJiBmaWxlU3lzdGVtU3RvcmFnZU1h
bmFnZXIoRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSYpOworICAgIExvY2FsU3RvcmFn
ZU1hbmFnZXImIGxvY2FsU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYpOworICAg
IExvY2FsU3RvcmFnZU1hbmFnZXIqIGV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcigpOworICAg
IFNlc3Npb25TdG9yYWdlTWFuYWdlciYgc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVh
UmVnaXN0cnkmKTsKKyAgICBTZXNzaW9uU3RvcmFnZU1hbmFnZXIqIGV4aXN0aW5nU2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyKCk7CiAgICAgYm9vbCBpc0FjdGl2ZSgpOworICAgIGJvb2wgaXNFbXB0eSgp
OworICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGZldGNoRGF0YShPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPik7CiAgICAgdm9pZCBkZWxldGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+LCBXYWxsVGltZSk7CisgICAgdm9pZCBtb3ZlRGF0YShjb25zdCBTdHJpbmcmIG5ld1Bh
dGgsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBsb2NhbFN0b3JhZ2VQYXRoKTsKIAogcHJpdmF0ZToK
ICAgICBlbnVtIGNsYXNzIFN0b3JhZ2VCdWNrZXRNb2RlIDogYm9vbDsKQEAgLTYyLDYgKzY5LDgg
QEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZUJ1Y2tldD4gbV9kZWZhdWx0
QnVja2V0OwogICAgIFN0cmluZyBtX3BhdGg7CiAgICAgYm9vbCBtX3BlcnNpc3RlZCB7IGZhbHNl
IH07CisKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbV9sb2NhbFN0b3JhZ2VQYXRoOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
YmFiMTQ2YmM3MjA2NDBkMTBmYTMxNjE2ODVmMmU5OTc5N2Q5NjgyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVh
LmNwcApAQCAtMCwwICsxLDM4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTUUxpdGVTdG9yYWdlQXJlYS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9TUUxp
dGVGaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVRyYW5zYWN0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
dG9yYWdlTWFwLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjb25zdGV4cHIgU2Vjb25kcyB0
cmFuc2FjdGlvbkR1cmF0aW9uIHsgNTAwX21zIH07Citjb25zdGV4cHIgdW5zaWduZWQgbWF4aW11
bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1vcnkgeyAxICogS0IgfTsKK2NvbnN0ZXhwciBhdXRvIGNy
ZWF0ZUl0ZW1UYWJsZVN0YXRlbWVudEFsdGVybmF0aXZlID0gIkNSRUFURSBUQUJMRSBJRiBOT1Qg
RVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZh
bHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiX3M7Citjb25zdGV4cHIgYXV0byBj
cmVhdGVJdGVtVGFibGVTdGF0ZW1lbnQgPSAiQ1JFQVRFIFRBQkxFIEl0ZW1UYWJsZSAoa2V5IFRF
WFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09O
RkxJQ1QgRkFJTCkiX3M7CisKK0FTQ0lJTGl0ZXJhbCBTUUxpdGVTdG9yYWdlQXJlYTo6c3RhdGVt
ZW50U3RyaW5nKFN0YXRlbWVudFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OkNvdW50SXRlbXM6CisgICAgICAgIHJldHVybiAi
U0VMRUNUIENPVU5UKCopIEZST00gSXRlbVRhYmxlIl9zOworICAgIGNhc2UgU3RhdGVtZW50VHlw
ZTo6RGVsZXRlSXRlbToKKyAgICAgICAgcmV0dXJuICJERUxFVEUgRlJPTSBJdGVtVGFibGUgV0hF
UkUga2V5PT8iX3M7CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpEZWxldGVBbGxJdGVtczoKKyAg
ICAgICAgcmV0dXJuICJERUxFVEUgRlJPTSBJdGVtVGFibGUiX3M7CisgICAgY2FzZSBTdGF0ZW1l
bnRUeXBlOjpHZXRJdGVtOgorICAgICAgICByZXR1cm4gIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1U
YWJsZSBXSEVSRSBrZXk9PyJfczsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OkdldEFsbEl0ZW1z
OgorICAgICAgICByZXR1cm4gIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIl9zOwor
ICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6U2V0SXRlbToKKyAgICAgICAgcmV0dXJuICJJTlNFUlQg
SU5UTyBJdGVtVGFibGUgVkFMVUVTICg/LCA/KSJfczsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6
OkludmFsaWQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiAiIl9zOworfQorCitTUUxpdGVTdG9yYWdlQXJlYTo6U1FMaXRlU3Rv
cmFnZUFyZWEodW5zaWduZWQgcXVvdGEsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3Jp
Z2luLCBjb25zdCBTdHJpbmcmIHBhdGgsIFJlZjxXb3JrUXVldWU+JiYgd29ya1F1ZXVlKQorICAg
IDogU3RvcmFnZUFyZWFCYXNlKHF1b3RhLCBvcmlnaW4pCisgICAgLCBtX3BhdGgocGF0aCkKKyAg
ICAsIG1fcXVldWUoV1RGTW92ZSh3b3JrUXVldWUpKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKTsgKytpKQor
ICAgICAgICBtX2NhY2hlZFN0YXRlbWVudHMuYXBwZW5kKG51bGxwdHIpOworfQorCit2b2lkIFNR
TGl0ZVN0b3JhZ2VBcmVhOjpjbG9zZSgpCit7CisgICAgbV9jYWNoZSA9IHN0ZDo6bnVsbG9wdDsK
KyAgICBjb21taXRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KFN0YXRlbWVudFR5cGU6OkludmFsaWQpOyArK2kp
CisgICAgICAgIG1fY2FjaGVkU3RhdGVtZW50c1tpXSA9IG51bGxwdHI7CisgICAgbV9kYXRhYmFz
ZSA9IG51bGxwdHI7Cit9CisKK1NRTGl0ZVN0b3JhZ2VBcmVhOjp+U1FMaXRlU3RvcmFnZUFyZWEo
KQoreworICAgIGJvb2wgZGF0YWJhc2VJc0VtcHR5ID0gaXNFbXB0eSgpOworICAgIGNsb3NlKCk7
CisgICAgaWYgKGRhdGFiYXNlSXNFbXB0eSkKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5
c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKG1fcGF0aCk7Cit9CisKK2Jvb2wgU1FMaXRlU3RvcmFn
ZUFyZWE6OmlzRW1wdHkoKQoreworICAgIGlmIChtX2NhY2hlKQorICAgICAgICByZXR1cm4gbV9j
YWNoZS0+aXNFbXB0eSgpOworCisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBhdXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0
ZW1lbnRUeXBlOjpDb3VudEl0ZW1zKTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCBzdGF0ZW1lbnQt
PnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3Jh
Z2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6aXNFbXB0eSBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRl
bWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFz
dEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4g
IXN0YXRlbWVudC0+Y29sdW1uSW50KDApOworfQorCit2b2lkIFNRTGl0ZVN0b3JhZ2VBcmVhOjpj
bGVhcigpCit7CisgICAgY2xvc2UoKTsKKyAgICBXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpk
ZWxldGVEYXRhYmFzZUZpbGUobV9wYXRoKTsKKyAgICBub3RpZnlMaXN0ZW5lcnNBYm91dENsZWFy
KCk7Cit9CisKK2Jvb2wgU1FMaXRlU3RvcmFnZUFyZWE6OmNyZWF0ZVRhYmxlSWZOZWNlc3Nhcnko
KQoreworICAgIGlmICghbV9kYXRhYmFzZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
U3RyaW5nIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnRhYmxlU1FMKCJJdGVtVGFibGUiX3MpOwor
ICAgIGlmIChzdGF0ZW1lbnQgPT0gY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50IHx8IHN0YXRlbWVu
dCA9PSBjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnRBbHRlcm5hdGl2ZSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLyBUYWJsZSBleGlzdHMgYnV0IHN0YXRlbWVudCBpcyB3cm9uZzsgZHJv
cCBpdC4KKyAgICBpZiAoIXN0YXRlbWVudC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFtX2Rh
dGFiYXNlLT5leGVjdXRlQ29tbWFuZCgiRFJPUCBUQUJMRSBJdGVtVGFibGUiX3MpKSB7CisgICAg
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmNy
ZWF0ZVRhYmxlSWZOZWNlc3NhcnkgZmFpbGVkIHRvIGRyb3AgZXhpc3RpbmcgaXRlbSB0YWJsZSAo
JWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9y
TXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gVGFibGUgZG9lcyBub3QgZXhpc3QuCisgICAgaWYgKCFtX2RhdGFiYXNlLT5leGVjdXRl
Q29tbWFuZChjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnQpKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Y3JlYXRlVGFibGVJZk5lY2Vzc2Fy
eSBmYWlsZWQgdG8gY3JlYXRlIGl0ZW0gdGFibGUgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFz
dEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNRTGl0ZVN0b3JhZ2VB
cmVhOjpwcmVwYXJlRGF0YWJhc2UoKQoreworICAgIGlmIChtX2RhdGFiYXNlICYmIG1fZGF0YWJh
c2UtPmlzT3BlbigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1fZGF0YWJhc2UgPSBt
YWtlVW5pcXVlPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPigpOworICAgIGlmICghbV9kYXRhYmFz
ZS0+b3BlbihtX3BhdGgpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJT
UUxpdGVTdG9yYWdlQXJlYTo6cHJlcGFyZURhdGFiYXNlIGZhaWxlZCB0byBvcGVuIGRhdGFiYXNl
IGF0ICclcyciLCBtX3BhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1fZGF0YWJhc2UgPSBu
dWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKKyAgICAvLyBT
aW5jZSBhIFdvcmtRdWV1ZSBpc24ndCBib3VuZCB0byBhIHNwZWNpZmljIHRocmVhZCwgd2UgbmVl
ZCB0byBkaXNhYmxlIHRocmVhZGluZyBjaGVjay4KKyAgICAvLyBXZSB3aWxsIG5ldmVyIGFjY2Vz
cyB0aGUgZGF0YWJhc2UgZnJvbSBkaWZmZXJlbnQgdGhyZWFkcyBzaW11bHRhbmVvdXNseS4KKyAg
ICBtX2RhdGFiYXNlLT5kaXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7CisKKyAgICBpZiAoIWNyZWF0
ZVRhYmxlSWZOZWNlc3NhcnkoKSkgeworICAgICAgICBtX2RhdGFiYXNlID0gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChxdW90YSgpICE9IFdlYkNvcmU6
OlN0b3JhZ2VNYXA6Om5vUXVvdGEpCisgICAgICAgIG1fZGF0YWJhc2UtPnNldE1heGltdW1TaXpl
KHF1b3RhKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1FMaXRlU3RvcmFnZUFy
ZWE6OnN0YXJ0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKCFtX3RyYW5zYWN0
aW9uKQorICAgICAgICBtX3RyYW5zYWN0aW9uID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpTUUxpdGVU
cmFuc2FjdGlvbj4oKm1fZGF0YWJhc2UpOworCisgICAgaWYgKG1fdHJhbnNhY3Rpb24tPmluUHJv
Z3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90cmFuc2FjdGlvbi0+YmVnaW4oKTsK
KyAgICBtX3F1ZXVlLT5kaXNwYXRjaEFmdGVyKHRyYW5zYWN0aW9uRHVyYXRpb24sIFt3ZWFrVGhp
cyA9IFdlYWtQdHIgeyAqdGhpcyB9XSB7CisgICAgICAgIGlmICghd2Vha1RoaXMgfHwgIXdlYWtU
aGlzLT5tX3RyYW5zYWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgIAorICAgICAgICBh
dXRvIHRyYW5zYWN0aW9uID0gc3RkOjpleGNoYW5nZSh3ZWFrVGhpcy0+bV90cmFuc2FjdGlvbiwg
bnVsbHB0cik7CisgICAgICAgIHRyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICB9KTsKK30KKwor
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgU1FMaXRlU3RvcmFnZUFyZWE6
OmNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlIHR5cGUpCit7CisgICAgQVNTRVJUKG1fZGF0
YWJhc2UpOworICAgIEFTU0VSVCh0eXBlIDwgU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7CisKKyAg
ICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odHlwZSk7CisgICAgaWYgKCFtX2Nh
Y2hlZFN0YXRlbWVudHNbaW5kZXhdKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9kYXRhYmFz
ZS0+cHJlcGFyZUhlYXBTdGF0ZW1lbnQoc3RhdGVtZW50U3RyaW5nKHR5cGUpKTsKKyAgICAgICAg
aWYgKHJlc3VsdCkKKyAgICAgICAgICAgIG1fY2FjaGVkU3RhdGVtZW50c1tpbmRleF0gPSByZXN1
bHQudmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gV2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBtX2NhY2hlZFN0YXRlbWVudHNbaW5k
ZXhdLmdldCgpIH07Cit9CisKK0V4cGVjdGVkPFN0cmluZywgU3RvcmFnZUVycm9yPiBTUUxpdGVT
dG9yYWdlQXJlYTo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkKK3sKKyAgICBpZiAobV9jYWNo
ZSkgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9jYWNoZS0+ZmluZChrZXkpOworICAgICAg
ICBpZiAoaXRlcmF0b3IgPT0gbV9jYWNoZS0+ZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisKKyAgICAgICAgaWYgKCFpdGVyYXRvci0+dmFsdWUuaXNOdWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOworICAgIH0KKworICAgIHJldHVybiBnZXRJdGVt
RnJvbURhdGFiYXNlKGtleSk7Cit9CisKK0V4cGVjdGVkPFN0cmluZywgU3RvcmFnZUVycm9yPiBT
UUxpdGVTdG9yYWdlQXJlYTo6Z2V0SXRlbUZyb21EYXRhYmFzZShjb25zdCBTdHJpbmcmIGtleSkK
K3sKKyAgICBpZiAoIXByZXBhcmVEYXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisKKyAgICBhdXRvIHN0YXRlbWVudCA9IGNh
Y2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlOjpHZXRJdGVtKTsKKyAgICBpZiAoIXN0YXRlbWVu
dCB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGtleSkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRJdGVtRnJvbURhdGFiYXNlIGZh
aWxlZCBvbiBjcmVhdGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworICAgIH0KKworICAgIGludCByZXN1
bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpCisg
ICAgICAgIHJldHVybiBzdGF0ZW1lbnQtPmNvbHVtbkJsb2JBc1N0cmluZygwKTsKKyAgICBpZiAo
cmVzdWx0ICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3Jh
Z2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0SXRlbUZyb21EYXRhYmFzZSBmYWlsZWQgb24gc3Rl
cHBpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2Rh
dGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChT
dG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoU3RvcmFnZUVycm9yOjpJdGVtTm90Rm91bmQpOworfQorCitIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiBTUUxpdGVTdG9yYWdlQXJlYTo6YWxsSXRlbXMoKQoreworICAgIGlmICghcHJlcGFyZURh
dGFiYXNlKCkpCisgICAgICAgIHJldHVybiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB7IH07CisK
KyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBpdGVtczsKKyAgICBpZiAobV9jYWNoZSkgewor
ICAgICAgICBpdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2FjaGUtPnNpemUoKSk7Cisg
ICAgICAgIGZvciAoYXV0byYgW2tleSwgdmFsdWVdIDogKm1fY2FjaGUpIHsKKyAgICAgICAgICAg
IGlmICghdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICBpdGVtcy5hZGQoa2V5LCB2
YWx1ZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IGdldEl0ZW1Gcm9tRGF0YWJhc2Uoa2V5KSkKKyAgICAg
ICAgICAgICAgICBpdGVtcy5hZGQoa2V5LCByZXN1bHQudmFsdWUoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGl0ZW1zOworICAgIH0KKworICAgIC8vIEltcG9ydCBmcm9tIGRhdGFiYXNl
LgorICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFN0YXRlbWVudFR5cGU6Okdl
dEFsbEl0ZW1zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmdldEFsbEl0ZW1zIGZhaWxlZCBvbiBj
cmVhdGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1f
ZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
KyAgICBtX2NhY2hlID0gSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4geyB9OworICAgIGludCByZXN1
bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKKyAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cp
IHsKKyAgICAgICAgU3RyaW5nIGtleSA9IHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKTsKKyAgICAg
ICAgU3RyaW5nIHZhbHVlID0gc3RhdGVtZW50LT5jb2x1bW5CbG9iQXNTdHJpbmcoMSk7CisgICAg
ICAgIGlmICgha2V5LmlzTnVsbCgpICYmICF2YWx1ZS5pc051bGwoKSkgeworICAgICAgICAgICAg
bV9jYWNoZS0+YWRkKGtleSwgdmFsdWUuc2l6ZUluQnl0ZXMoKSA+IG1heGltdW1TaXplRm9yVmFs
dWVzS2VwdEluTWVtb3J5ID8gU3RyaW5nKCkgOiB2YWx1ZSk7CisgICAgICAgICAgICBpdGVtcy5h
ZGQoV1RGTW92ZShrZXkpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0ICE9IFNR
TElURV9ET05FKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3Rv
cmFnZUFyZWE6OmdldEFsbEl0ZW1zIGZhaWxlZCBvbiBleGVjdXRpbmcgc3RhdGVtZW50ICglZCkg
LSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2co
KSk7CisKKyAgICByZXR1cm4gaXRlbXM7Cit9CisKK0V4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJv
cj4gU1FMaXRlU3RvcmFnZUFyZWE6OnNldEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBj
b25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIHN0b3JhZ2VBcmVhSW1wbElELCBj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcpCit7CisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworCisgICAgc3RhcnRUcmFuc2Fj
dGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgaWYgKGF1dG8g
dmFsdWVPckVycm9yID0gZ2V0SXRlbShrZXkpKQorICAgICAgICBvbGRWYWx1ZSA9IHZhbHVlT3JF
cnJvci52YWx1ZSgpOworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3Rh
dGVtZW50VHlwZTo6U2V0SXRlbSk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5i
aW5kVGV4dCgxLCBrZXkpIHx8IHN0YXRlbWVudC0+YmluZEJsb2IoMiwgdmFsdWUpKSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6c2V0SXRl
bSBmYWlsZWQgb24gY3JlYXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxh
c3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9CisKKyAgICBpbnQg
cmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRlVM
TCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6UXVvdGFFeGNl
ZWRlZCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OnNldEl0ZW0gZmFpbGVkIG9u
IHN0ZXBwaW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwg
bV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorICAgIAorICAgIGlmIChtX2NhY2hl
KQorICAgICAgICBtX2NhY2hlLT5zZXQoa2V5LCB2YWx1ZS5zaXplSW5CeXRlcygpID4gbWF4aW11
bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1vcnkgPyBTdHJpbmcoKSA6IHZhbHVlKTsKKworICAgIGRp
c3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBrZXksIG9sZFZhbHVl
LCB2YWx1ZSwgdXJsU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK0V4cGVjdGVkPHZv
aWQsIFN0b3JhZ2VFcnJvcj4gU1FMaXRlU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0oSVBDOjpDb25u
ZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIHN0
b3JhZ2VBcmVhSW1wbElELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcpCit7CisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworCisgICAgc3RhcnRUcmFuc2FjdGlv
bklmTmVjZXNzYXJ5KCk7CisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIGlmIChhdXRvIHZhbHVl
T3JFcnJvciA9IGdldEl0ZW0oa2V5KSkKKyAgICAgICAgb2xkVmFsdWUgPSB2YWx1ZU9yRXJyb3Iu
dmFsdWUoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdl
RXJyb3I6Okl0ZW1Ob3RGb3VuZCk7CisKKyAgICBhdXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRl
bWVudChTdGF0ZW1lbnRUeXBlOjpEZWxldGVJdGVtKTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCBz
dGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGtleSkgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3Jh
Z2VBcmVhOjpyZW1vdmVJdGVtIGZhaWxlZCBvbiBleGVjdXRpbmcgc3RhdGVtZW50ICglZCkgLSAl
cyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsK
KyAgICB9CisKKyAgICBpZiAobV9jYWNoZSkKKyAgICAgICAgbV9jYWNoZS0+cmVtb3ZlKGtleSk7
CisKKyAgICBkaXNwYXRjaEV2ZW50cyhjb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJRCwga2V5
LCBvbGRWYWx1ZSwgU3RyaW5nKCksIHVybFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OworfQor
CitFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IFNRTGl0ZVN0b3JhZ2VBcmVhOjpjbGVhcihJ
UEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50
aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAg
IGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChT
dG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKworICAgIGlmIChtX2NhY2hlICYmIG1fY2FjaGUtPmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6SXRl
bU5vdEZvdW5kKTsKKworICAgIGlmIChtX2NhY2hlKQorICAgICAgICBtX2NhY2hlLT5jbGVhcigp
OworCisgICAgc3RhcnRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisgICAgYXV0byBzdGF0ZW1l
bnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZTo6RGVsZXRlQWxsSXRlbXMpOworICAg
IGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Y2xl
YXIgZmFpbGVkIG9uIGV4ZWN1dGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+
bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworICAgIH0KKworICAgIGlm
IChtX2RhdGFiYXNlLT5sYXN0Q2hhbmdlcygpIDw9IDApCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChTdG9yYWdlRXJyb3I6Okl0ZW1Ob3RGb3VuZCk7CisKKyAgICBkaXNwYXRjaEV2ZW50
cyhjb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJRCwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJp
bmcoKSwgdXJsU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgU1FMaXRlU3Rv
cmFnZUFyZWE6OmNvbW1pdFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKQoreworICAgIGlmIChhdXRv
IHRyYW5zYWN0aW9uID0gc3RkOjpleGNoYW5nZShtX3RyYW5zYWN0aW9uLCBudWxscHRyKSkKKyAg
ICAgICAgdHJhbnNhY3Rpb24tPmNvbW1pdCgpOworfQorCit2b2lkIFNRTGl0ZVN0b3JhZ2VBcmVh
OjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCkKK3sKKyAgICBpZiAobV9kYXRhYmFzZSAmJiBtX2Rh
dGFiYXNlLT5pc09wZW4oKSkKKyAgICAgICAgbV9kYXRhYmFzZS0+cmVsZWFzZU1lbW9yeSgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmggYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
ZTIyY2RiNjIzNzhmMmE4MWM2MDNkNzdiYmE4NjM2YzViYWM2MjYzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVh
LmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiU3RvcmFnZUFyZWFCYXNlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNRTGl0ZVN0b3JhZ2VBcmVhIGZpbmFsIDogcHVi
bGljIFN0b3JhZ2VBcmVhQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgU1FMaXRlU3RvcmFnZUFyZWEodW5zaWduZWQgcXVvdGEsIGNvbnN0IFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYsIGNvbnN0IFN0cmluZyYgcGF0aCwgUmVmPFdvcmtRdWV1ZT4mJik7Cisg
ICAgflNRTGl0ZVN0b3JhZ2VBcmVhKCk7CisKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBo
YW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7CisgICAgdm9pZCBjb21taXRUcmFuc2FjdGlvbklmTmVj
ZXNzYXJ5KCk7CisKK3ByaXZhdGU6CisgICAgLy8gU3RvcmFnZUFyZWFCYXNlCisgICAgVHlwZSB0
eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU3RvcmFnZUFyZWFCYXNlOjpUeXBlOjpTUUxpdGU7
IH07CisgICAgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBT
dG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlOjpMb2NhbDsgfTsKKyAgICBib29sIGlzRW1wdHko
KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyKCkgZmluYWw7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gYWxsSXRlbXMoKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+
IHNldEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IHJl
bW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsK
KyAgICBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IGNsZWFyKElQQzo6Q29ubmVjdGlvbjo6
VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nKSBmaW5hbDsKKworICAgIGJvb2wgY3JlYXRlVGFibGVJZk5lY2Vzc2FyeSgpOworICAgIGJv
b2wgcHJlcGFyZURhdGFiYXNlKCk7CisgICAgdm9pZCBzdGFydFRyYW5zYWN0aW9uSWZOZWNlc3Nh
cnkoKTsKKworICAgIGVudW0gY2xhc3MgU3RhdGVtZW50VHlwZSA6IHVpbnQ4X3QgeworICAgICAg
ICBDb3VudEl0ZW1zLAorICAgICAgICBEZWxldGVJdGVtLAorICAgICAgICBEZWxldGVBbGxJdGVt
cywKKyAgICAgICAgR2V0SXRlbSwKKyAgICAgICAgR2V0QWxsSXRlbXMsCisgICAgICAgIFNldEl0
ZW0sCisgICAgICAgIEludmFsaWQKKyAgICB9OworICAgIEFTQ0lJTGl0ZXJhbCBzdGF0ZW1lbnRT
dHJpbmcoU3RhdGVtZW50VHlwZSkgY29uc3Q7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
QXV0b1Jlc2V0U2NvcGUgY2FjaGVkU3RhdGVtZW50KFN0YXRlbWVudFR5cGUpOworICAgIEV4cGVj
dGVkPFN0cmluZywgU3RvcmFnZUVycm9yPiBnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KTsKKyAg
ICBFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJvcj4gZ2V0SXRlbUZyb21EYXRhYmFzZShjb25z
dCBTdHJpbmcmIGtleSk7CisKKyAgICBTdHJpbmcgbV9wYXRoOworICAgIFJlZjxXb3JrUXVldWU+
IG1fcXVldWU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiBt
X2RhdGFiYXNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlv
bj4gbV90cmFuc2FjdGlvbjsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudD4+IG1fY2FjaGVkU3RhdGVtZW50czsKKyAgICBzdGQ6Om9wdGlvbmFsPEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+PiBtX2NhY2hlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViS2l0OjpTUUxpdGVTdG9yYWdl
QXJlYSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViS2l0OjpTdG9yYWdlQXJlYUJh
c2UmIGFyZWEpIHsgcmV0dXJuIGFyZWEudHlwZSgpID09IFdlYktpdDo6U3RvcmFnZUFyZWFCYXNl
OjpUeXBlOjpTUUxpdGU7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1Nlc3Npb25T
dG9yYWdlTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTUwYTg3MDZmNjc1MzRkZjc4NTllZmE2ZTlm
MGYxYzI4Y2U5ZDVmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTA5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlc3Npb25TdG9y
YWdlTWFuYWdlci5oIgorCisjaW5jbHVkZSAiTWVtb3J5U3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRl
ICJTdG9yYWdlQXJlYVJlZ2lzdHJ5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTZXNzaW9u
U3RvcmFnZU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5
JiByZWdpc3RyeSkKKyAgICA6IG1fcmVnaXN0cnkocmVnaXN0cnkpCit7Cit9CisKK2Jvb2wgU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSgpCit7CisgICAgcmV0dXJuIFdURjo6YW55T2Yo
bV9zdG9yYWdlQXJlYXMudmFsdWVzKCksIFsmXSAoYXV0byYgc3RvcmFnZUFyZWEpIHsKKyAgICAg
ICAgcmV0dXJuIHN0b3JhZ2VBcmVhLT5oYXNMaXN0ZW5lcnMoKTsKKyAgICB9KTsKK30KKworYm9v
bCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSgpCit7CisgICAgcmV0dXJu
IFdURjo6YW55T2YobV9zdG9yYWdlQXJlYXMudmFsdWVzKCksIFsmXSAoYXV0byYgc3RvcmFnZUFy
ZWEpIHsKKyAgICAgICAgcmV0dXJuICFzdG9yYWdlQXJlYS0+aXNFbXB0eSgpOworICAgIH0pOwor
fQorCit2b2lkIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y2xlYXJEYXRhKCkKK3sKKyAgICBmb3Ig
KGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYXMudmFsdWVzKCkpCisgICAgICAgIHN0
b3JhZ2VBcmVhLT5jbGVhcigpOworfQorCit2b2lkIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y29u
bmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24pCit7Cisg
ICAgZm9yIChhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpKQorICAg
ICAgICBzdG9yYWdlQXJlYS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7Cit9CisKK1N0b3Jh
Z2VBcmVhSWRlbnRpZmllciBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmFkZFN0b3JhZ2VBcmVhKHN0
ZDo6dW5pcXVlX3B0cjxNZW1vcnlTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEsIElQQzo6Q29ubmVj
dGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgbmFt
ZXNwYWNlSWRlbnRpZmllcikKK3sKKyAgICBhdXRvIGlkZW50aWZpZXIgPSBzdG9yYWdlQXJlYS0+
aWRlbnRpZmllcigpOworICAgIG1fcmVnaXN0cnkucmVnaXN0ZXJTdG9yYWdlQXJlYShpZGVudGlm
aWVyLCAqc3RvcmFnZUFyZWEpOworICAgIHN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25uZWN0
aW9uKTsKKyAgICBtX3N0b3JhZ2VBcmVhc0J5TmFtZXNwYWNlLnNldChuYW1lc3BhY2VJZGVudGlm
aWVyLCBpZGVudGlmaWVyKTsKKyAgICBtX3N0b3JhZ2VBcmVhcy5zZXQoaWRlbnRpZmllciwgV1RG
TW92ZShzdG9yYWdlQXJlYSkpOworCisgICAgcmV0dXJuIGlkZW50aWZpZXI7Cit9CisKK1N0b3Jh
Z2VBcmVhSWRlbnRpZmllciBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RUb1Nlc3Npb25T
dG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIGNvbnN0IFdl
YkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBu
YW1lc3BhY2VJZGVudGlmaWVyKQoreworICAgIGF1dG8gaWRlbnRpZmllciA9IG1fc3RvcmFnZUFy
ZWFzQnlOYW1lc3BhY2UuZ2V0KG5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIGlmIChpZGVudGlm
aWVyLmlzVmFsaWQoKSkgeworICAgICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYXMuY29udGFpbnMo
aWRlbnRpZmllcikpOworICAgICAgICByZXR1cm4gaWRlbnRpZmllcjsKKyAgICB9CisKKyAgICBh
dXRvIG5ld1N0b3JhZ2VBcmVhID0gbWFrZVVuaXF1ZTxNZW1vcnlTdG9yYWdlQXJlYT4ob3JpZ2lu
KTsKKyAgICByZXR1cm4gYWRkU3RvcmFnZUFyZWEoV1RGTW92ZShuZXdTdG9yYWdlQXJlYSksIGNv
bm5lY3Rpb24sIG5hbWVzcGFjZUlkZW50aWZpZXIpOworfQorCit2b2lkIFNlc3Npb25TdG9yYWdl
TWFuYWdlcjo6ZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1
ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAg
IGlmIChhdXRvKiBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFzLmdldChpZGVudGlmaWVyKSkK
KyAgICAgICAgc3RvcmFnZUFyZWEtPnJlbW92ZUxpc3RlbmVyKGNvbm5lY3Rpb24pOworfQorCit2
b2lkIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y2xvbmVTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHNvdXJj
ZU5hbWVzcGFjZUlkZW50aWZpZXIsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHRhcmdldE5h
bWVzcGFjZUlkZW50aWZpZXIpCit7CisgICAgYXV0byBpZGVudGlmaWVyID0gbV9zdG9yYWdlQXJl
YXNCeU5hbWVzcGFjZS5nZXQoc291cmNlTmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAgaWYgKCFp
ZGVudGlmaWVyLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8gaXRl
cmF0b3IgPSBtX3N0b3JhZ2VBcmVhcy5maW5kKGlkZW50aWZpZXIpOyBpdGVyYXRvciAhPSBtX3N0
b3JhZ2VBcmVhcy5lbmQoKSkgeworICAgICAgICBhdXRvIG5ld1N0b3JhZ2VBcmVhID0gaXRlcmF0
b3ItPnZhbHVlLT5jbG9uZSgpOworICAgICAgICBhZGRTdG9yYWdlQXJlYShXVEZNb3ZlKG5ld1N0
b3JhZ2VBcmVhKSwgY29ubmVjdGlvbiwgdGFyZ2V0TmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43ZjY2YWZiZTQ1MjNjY2JkOGFmZjk4NjU1NjJhOGI4MjM2ZWRiMjllCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1Nl
c3Npb25TdG9yYWdlTWFuYWdlci5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSWRlbnRpZmllci5oIgorI2luY2x1ZGUg
IlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBNZW1vcnlTdG9yYWdlQXJlYTsKK2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnk7CisKK2Ns
YXNzIFNlc3Npb25TdG9yYWdlTWFuYWdlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkm
KTsKKyAgICBib29sIGlzQWN0aXZlKCk7CisgICAgYm9vbCBoYXNEYXRhSW5NZW1vcnkoKTsKKyAg
ICB2b2lkIGNsZWFyRGF0YSgpOworICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5l
Y3Rpb246OlVuaXF1ZUlEKTsKKworICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBjb25uZWN0VG9T
ZXNzaW9uU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgY29uc3QgV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIHZvaWQg
ZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9y
YWdlQXJlYUlkZW50aWZpZXIpOworICAgIHZvaWQgY2xvbmVTdG9yYWdlQXJlYShJUEM6OkNvbm5l
Y3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgU3RvcmFnZU5hbWVz
cGFjZUlkZW50aWZpZXIpOworCitwcml2YXRlOgorICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBh
ZGRTdG9yYWdlQXJlYShzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+LCBJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcik7CisKKyAgICBT
dG9yYWdlQXJlYVJlZ2lzdHJ5JiBtX3JlZ2lzdHJ5OworICAgIEhhc2hNYXA8U3RvcmFnZUFyZWFJ
ZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+PiBtX3N0b3JhZ2VB
cmVhczsKKyAgICBIYXNoTWFwPFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBTdG9yYWdlQXJl
YUlkZW50aWZpZXI+IG1fc3RvcmFnZUFyZWFzQnlOYW1lc3BhY2U7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmYmY3NTg0N2M1OGUz
MWQxOGY4YTVmNzU4MzIxODM1NDAwNjNlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmNwcApAQCAtMCwwICsx
LDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0b3Jh
Z2VBcmVhQmFzZS5oIgorCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFNYXBNZXNzYWdlcy5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlQXJlYUJhc2UodW5z
aWduZWQgcXVvdGEsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQorICAgIDog
bV9pZGVudGlmaWVyKFN0b3JhZ2VBcmVhSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSkKKyAgICAsIG1f
cXVvdGEocXVvdGEpCisgICAgLCBtX29yaWdpbihvcmlnaW4pCit7Cit9CisKK1N0b3JhZ2VBcmVh
QmFzZTo6flN0b3JhZ2VBcmVhQmFzZSgpID0gZGVmYXVsdDsKKwordm9pZCBTdG9yYWdlQXJlYUJh
c2U6OmFkZExpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbikKK3sK
KyAgICBBU1NFUlQoIW1fbGlzdGVuZXJzLmNvbnRhaW5zKGNvbm5lY3Rpb24pKTsKKworICAgIG1f
bGlzdGVuZXJzLmFkZChjb25uZWN0aW9uKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYUJhc2U6OnJl
bW92ZUxpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbikKK3sKKyAg
ICBtX2xpc3RlbmVycy5yZW1vdmUoY29ubmVjdGlvbik7Cit9CisKK2Jvb2wgU3RvcmFnZUFyZWFC
YXNlOjpoYXNMaXN0ZW5lcnMoKSBjb25zdAoreworICAgIHJldHVybiAhbV9saXN0ZW5lcnMuaXNF
bXB0eSgpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhQmFzZTo6bm90aWZ5TGlzdGVuZXJzQWJvdXRD
bGVhcigpCit7CisgICAgZm9yIChhdXRvJiBjb25uZWN0aW9uIDogbV9saXN0ZW5lcnMpCisgICAg
ICAgIElQQzo6Q29ubmVjdGlvbjo6c2VuZChjb25uZWN0aW9uLCBNZXNzYWdlczo6U3RvcmFnZUFy
ZWFNYXA6OkNsZWFyQ2FjaGUoKSwgbV9pZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCit2b2lk
IFN0b3JhZ2VBcmVhQmFzZTo6ZGlzcGF0Y2hFdmVudHMoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJ
RCBzb3VyY2VDb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIHNvdXJjZUltcGxJ
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29u
c3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKHNvdXJjZUltcGxJZGVudGlmaWVyKTsKKworICAgIGZvciAoYXV0byYgY29ubmVj
dGlvbiA6IG1fbGlzdGVuZXJzKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8U3RvcmFnZUFyZWFJ
bXBsSWRlbnRpZmllcj4gaW1wbElkZW50aWZpZXI7CisgICAgICAgIGlmIChjb25uZWN0aW9uID09
IHNvdXJjZUNvbm5lY3Rpb24pCisgICAgICAgICAgICBpbXBsSWRlbnRpZmllciA9IHNvdXJjZUlt
cGxJZGVudGlmaWVyOworICAgICAgICBJUEM6OkNvbm5lY3Rpb246OnNlbmQoY29ubmVjdGlvbiwg
TWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaXNwYXRjaFN0b3JhZ2VFdmVudChpbXBsSWRlbnRp
Zmllciwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHVybFN0cmluZyksIG1faWRlbnRpZmllci50
b1VJbnQ2NCgpKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVh
QmFzZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVh
QmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjU5MDUxYjE0YjM1OTlmYWRlYzg0YmFlNzBhZDg2ZWUwMDBjZDdl
ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvU3RvcmFnZUFyZWFCYXNlLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVh
SWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBDbGllbnRPcmlnaW47Cit9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitlbnVtIGNsYXNzIFN0b3JhZ2VFcnJvciA6IHVpbnQ4X3QgeworICAg
IERhdGFiYXNlLAorICAgIEl0ZW1Ob3RGb3VuZCwKKyAgICBRdW90YUV4Y2VlZGVkLAorfTsKKwor
Y2xhc3MgU3RvcmFnZUFyZWFCYXNlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFN0b3JhZ2VBcmVh
QmFzZT4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0b3JhZ2VBcmVhQmFzZSk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3RvcmFnZUFyZWFCYXNlKHVu
c2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICB2aXJ0dWFs
IH5TdG9yYWdlQXJlYUJhc2UoKTsKKworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeyBT
UUxpdGUsIE1lbW9yeSB9OworICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOworICAg
IGVudW0gY2xhc3MgU3RvcmFnZVR5cGUgOiBib29sIHsgU2Vzc2lvbiwgTG9jYWwgfTsKKyAgICB2
aXJ0dWFsIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBpc0VtcHR5KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpID0gMDsKKworICAg
IFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVu
dGlmaWVyOyB9CisgICAgV2ViQ29yZTo6Q2xpZW50T3JpZ2luIG9yaWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fb3JpZ2luOyB9CisgICAgdW5zaWduZWQgcXVvdGEoKSBjb25zdCB7IHJldHVybiBtX3F1
b3RhOyB9CisgICAgdm9pZCBhZGRMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsK
KyAgICB2b2lkIHJlbW92ZUxpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQpOworICAg
IGJvb2wgaGFzTGlzdGVuZXJzKCkgY29uc3Q7CisgICAgdm9pZCBub3RpZnlMaXN0ZW5lcnNBYm91
dENsZWFyKCk7CisKKyAgICB2aXJ0dWFsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGFsbEl0ZW1z
KCkgPSAwOworICAgIHZpcnR1YWwgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBzZXRJdGVt
KElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0
cmluZykgPSAwOworICAgIHZpcnR1YWwgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiByZW1v
dmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgPSAwOworICAg
IHZpcnR1YWwgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBjbGVhcihJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVy
bFN0cmluZykgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50cyhJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1
ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0b3Jh
Z2VBcmVhSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisgICAgdW5zaWduZWQgbV9xdW90YTsKKyAg
ICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gbV9vcmlnaW47CisgICAgSGFzaFNldDxJUEM6OkNvbm5l
Y3Rpb246OlVuaXF1ZUlEPiBtX2xpc3RlbmVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9T
dG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9TdG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OWNiM2ZjOGM3MzJjYjlj
OGVmZGRkM2U2NDk5ODRhNGZmNzBlNjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwCkBAIC0wLDAg
KzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3Rv
cmFnZUFyZWFSZWdpc3RyeS5oIgorCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFCYXNlLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpTdG9yYWdlQXJlYVJlZ2lz
dHJ5KCkgPSBkZWZhdWx0OworCit2b2lkIFN0b3JhZ2VBcmVhUmVnaXN0cnk6OnJlZ2lzdGVyU3Rv
cmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhQmFz
ZSYgc3RvcmFnZUFyZWEpCit7CisgICAgQVNTRVJUKCFtX3N0b3JhZ2VBcmVhcy5jb250YWlucyhp
ZGVudGlmaWVyKSk7CisKKyAgICBtX3N0b3JhZ2VBcmVhcy5hZGQoaWRlbnRpZmllciwgc3RvcmFn
ZUFyZWEpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhUmVnaXN0cnk6OnVucmVnaXN0ZXJTdG9yYWdl
QXJlYShTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQobV9z
dG9yYWdlQXJlYXMuY29udGFpbnMoaWRlbnRpZmllcikpOworCisgICAgbV9zdG9yYWdlQXJlYXMu
cmVtb3ZlKGlkZW50aWZpZXIpOworfQorCitTdG9yYWdlQXJlYUJhc2UqIFN0b3JhZ2VBcmVhUmVn
aXN0cnk6OmdldFN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKQor
eworICAgIGlmIChhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYXMuZ2V0KGlkZW50aWZp
ZXIpKQorICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEuZ2V0KCk7CisKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42NDAwZDJiYmY0YjE0ZDQ5OTljMDQzMmYwOWM0YjRiNGI0ZTI4Y2Y0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VB
cmVhUmVnaXN0cnkuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJZGVudGlm
aWVyLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFN0b3JhZ2VBcmVhQmFzZTsKKworY2xhc3MgU3RvcmFnZUFyZWFSZWdpc3RyeSB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3RvcmFnZUFyZWFSZWdp
c3RyeSgpOworICAgIHZvaWQgcmVnaXN0ZXJTdG9yYWdlQXJlYShTdG9yYWdlQXJlYUlkZW50aWZp
ZXIsIFN0b3JhZ2VBcmVhQmFzZSYpOworICAgIHZvaWQgdW5yZWdpc3RlclN0b3JhZ2VBcmVhKFN0
b3JhZ2VBcmVhSWRlbnRpZmllcik7CisgICAgU3RvcmFnZUFyZWFCYXNlKiBnZXRTdG9yYWdlQXJl
YShTdG9yYWdlQXJlYUlkZW50aWZpZXIpOworCitwcml2YXRlOgorICAgIEhhc2hNYXA8U3RvcmFn
ZUFyZWFJZGVudGlmaWVyLCBXZWFrUHRyPFN0b3JhZ2VBcmVhQmFzZT4+IG1fc3RvcmFnZUFyZWFz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NjcmlwdHMvZ2VuZXJhdGUtdW5pZmllZC1zb3VyY2VzLnNoIGIvU291cmNlL1dlYktpdC9TY3Jp
cHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaAppbmRleCBiNmQ0MGFkOWU5NTQ3YmQ0MGRl
ODVjOWM4NWEzNWMxZTI1Y2RmMTkxLi40ZjFhYzgzY2IzYTIyNmVjY2QwNzgzOTgzNzkyM2NiYzQ0
YmFiOTIzIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtdW5pZmll
ZC1zb3VyY2VzLnNoCisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy9nZW5lcmF0ZS11bmlmaWVk
LXNvdXJjZXMuc2gKQEAgLTE0LDcgKzE0LDcgQEAgaWYgWyAteiAiJHtCVUlMRF9TQ1JJUFRTX0RJ
Un0iIF07IHRoZW4KICAgICBmaQogZmkKIAotVW5pZmllZFNvdXJjZUNwcEZpbGVDb3VudD0xMTEK
K1VuaWZpZWRTb3VyY2VDcHBGaWxlQ291bnQ9MTEyCiBVbmlmaWVkU291cmNlTW1GaWxlQ291bnQ9
ODAKIAogaWYgWyAkIyAtZXEgMCBdOyB0aGVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCAwNWE4NWIwMTk2MDQy
MDE2YWI2ODVmMjBkNGJlZjczYzQ2MjY1NjA3Li40MmZiNjFiMTc3NTFlMTE5NzMyZmFhYjI2ZTE1
OGE1MjYzNTUzNTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTE0Myw4ICsxNDMsMTQgQEAgTmV0d29ya1By
b2Nlc3MvU2VydmljZVdvcmtlci9XZWJTV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24uY3BwIEBu
by11bmlmeQogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9GaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIu
Y3BwCiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0ZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlLmNwcAog
TmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9GaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5LmNw
cAorTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcAorTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5jcHAKIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9P
cmlnaW5TdG9yYWdlTWFuYWdlci5jcHAKK05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3Rv
cmFnZUFyZWEuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlTWFuYWdl
ci5jcHAKK05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmNwcAorTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcAogCiBOZXR3b3JrUHJvY2Vz
cy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAogTmV0d29ya1Byb2Nlc3MvV2Vi
U3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRl
eCBmNDAwMGE2YjcxOTEzNWMzNDNiNGNkMDljMDIzYTY4ZjJjNWU3ODVlLi5iMTFmMmQ1M2NmZmE4
NWY5NmYyNzQxMWQ5ZDJkYjA3ZDk2YTA3YzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAgLTE1NzIsMTYg
KzE1NzIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZVN5bUxpbmtGb3JGaWxl
VXBncmFkZShjb25zdCBTdHJpbmcmIGluZGV4ZWREYXRhYgogICAgICAgICBGaWxlU3lzdGVtOjpj
cmVhdGVTeW1ib2xpY0xpbmsoaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBvbGRWZXJzaW9uRGly
ZWN0b3J5KTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRMb2NhbFN0b3JhZ2VE
ZXRhaWxzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChW
ZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIWNhblNlbmRNZXNzYWdlKCkpIHsKLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkdldExvY2FsU3Rv
cmFnZU9yaWdpbkRldGFpbHMoc2Vzc2lvbklEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwotfQotCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnByZWNvbm5lY3RUbyhQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFnZVByb3h5SUQsIFdl
YkNvcmU6OlBhZ2VJZGVudGlmaWVyIHdlYlBhZ2VJRCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgdXNlckFnZW50LCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBzdG9yZWRD
cmVkZW50aWFsc1BvbGljeSwgc3RkOjpvcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFp
bj4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgTGFzdE5hdmlnYXRpb25XYXNBcHBJbml0
aWF0ZWQgbGFzdE5hdmlnYXRpb25XYXNBcHBJbml0aWF0ZWQpCiB7CiAgICAgaWYgKCF1cmwuaXNW
YWxpZCgpIHx8ICF1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApp
bmRleCA5MDk3OTNlMzc1NjhjMDQyYjEwMDJhMjZhYTAyNzQ3ODRhOTFlNGNhLi43MjJkOTczMWEw
MTJkZTM0ZmI2YzMzMmI5MTE0NWRkMDMwMmY1NjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMTk2
OSwxOCArMTk2OSw2IEBAIEFQSTo6SFRUUENvb2tpZVN0b3JlJiBXZWJzaXRlRGF0YVN0b3JlOjpj
b29raWVTdG9yZSgpCiAgICAgcmV0dXJuICptX2Nvb2tpZVN0b3JlOwogfQogCi12b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIWlzUGVyc2lzdGVudCgpKSB7Ci0gICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBuZXR3b3Jr
UHJvY2VzcygpLmdldExvY2FsU3RvcmFnZURldGFpbHMobV9zZXNzaW9uSUQsIFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgZGV0YWlscykgewot
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRldGFpbHMpKTsKLSAgICB9KTsKLX0K
LQogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaAppbmRleCAxZGUyNWE2NjA1N2YyZDY2YzYyOTllNWViYmI4MTQ2YmVlOWI4
MWUzLi4zNGFlNWFmNjA3M2MyNTkxNDIwZjIwOWNlMGY3NTMyYmFiZGM4M2UwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5oCkBAIC0xNjcsNyArMTY3LDYgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgRnVuY3Rpb248
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICB2b2lkIHJlbW92ZURhdGEoT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4mLCBG
dW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgdm9pZCBnZXRMb2Nh
bFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYpOwogICAgIHZvaWQgc2V0Q2FjaGVNb2RlbFN5
bmNocm9ub3VzbHlGb3JUZXN0aW5nKENhY2hlTW9kZWwpOwogICAgIHZvaWQgc2V0U2VydmljZVdv
cmtlclRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMpOwogICAgIHZvaWQgcmVzZXRTZXJ2aWNlV29y
a2VyVGltZW91dEZvclRlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVW5pZmll
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L1VuaWZpZWRTb3VyY2Vz
LW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDUwODk4ZTQ2MzAxNzMxOTRhZTRlZjdjY2U0M2FlOGVi
NDY3M2E4NmIuLjJhZDc5NjQ1ZDZlZjY4M2RhZDRlYjA3NmY1ZGQ3MjQ3MmJmODYwYjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVW5pZmllZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKKysr
IGIvU291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApAQCAtMTcs
NiArMTcsNyBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3Vu
aWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTEtbW0ubQogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTExLmNw
cAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNv
dXJjZXMvVW5pZmllZFNvdXJjZTExMC5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMTEuY3BwCiskKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9V
bmlmaWVkU291cmNlMTEyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTEyLW1tLm1tCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVk
U291cmNlMTIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTMtbW0ubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE0NWQ0ZDM2OTMxNzg0NDcw
NGQ0NzE4MGZjNGRhZDZmMWI5NjYyMzYuLmRkOTg2OTk5ODViNDZmYmZkMDI1MjM3OGI1ODJlNDI0
NDQ1NTRlOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTUxNCw2ICsxNTE0LDEzIEBACiAJCTkzRTc5OTg1Mjc1NkZBNTUwMDc0MDA4
QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5ODIyNzU2
RkE1NDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VSZWNl
aXZlci5jcHAgKi87IH07CiAJCTkzRTc5OTg3Mjc1NkZBQjQwMDc0MDA4QSAvKiBXZWJGaWxlU3lz
dGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlc1JlcGxpZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OTgzMjc1NkZBNTQwMDc0MDA4QSAvKiBX
ZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlc1JlcGxpZXMuaCAqLzsgfTsKIAkJ
OTNFNzk5ODgyNzU2RkFDMjAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlv
bk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0U3OTk4MTI3NTZGQTUzMDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0
aW9uTWVzc2FnZXMuaCAqLzsgfTsKKwkJOTNFNzk5QzcyNzYwMjc0NjAwNzQwMDhBIC8qIFN0b3Jh
Z2VBcmVhUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzRTc5OUM2Mjc2MDI3MzcwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5Lmgg
Ki87IH07CisJCTkzRTc5OUNFMjc2MDQ5N0IwMDc0MDA4QSAvKiBTZXNzaW9uU3RvcmFnZU1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5
OUNBMjc2MDQ5N0EwMDc0MDA4QSAvKiBTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCAqLzsgfTsKKwkJ
OTNFNzk5Q0YyNzYwNDk3QjAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUNCMjc2MDQ5N0Ew
MDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmggKi87IH07CisJCTkzRTc5OUQyMjc2MEFB
NUIwMDc0MDA4QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUQxMjc2MEFBNUEwMDc0MDA4QSAvKiBVbmlm
aWVkU291cmNlMTEyLmNwcCAqLzsgfTsKKwkJOTNFNzk5REEyNzYxMjEwODAwNzQwMDhBIC8qIFNR
TGl0ZVN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5M0U3OTlENDI3NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuaCAq
LzsgfTsKKwkJOTNFNzk5REIyNzYxMjEwODAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTlENTI3
NjEyMTA3MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuaCAqLzsgfTsKKwkJOTNFNzk5REMy
NzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5RDYyNzYxMjEwODAwNzQwMDhBIC8qIFN0
b3JhZ2VBcmVhQmFzZS5oICovOyB9OwogCQk5M0Y1NDlCNDFFMzE3NEI3MDAwRTcyMzkgLyogV0tT
bmFwc2hvdENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzRjU0OUIzMUUzMTc0QjcwMDBFNzIzOSAvKiBXS1NuYXBzaG90Q29uZmln
dXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsK
IAkJOTUwRjI4ODAyNTI0MTRFQTAwQjc0RjFDIC8qIFdLTW91c2VEZXZpY2VPYnNlcnZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTUwRjI4N0UyNTI0
MTRFOTAwQjc0RjFDIC8qIFdLTW91c2VEZXZpY2VPYnNlcnZlci5oICovOyB9OwogCQk5NTY1MDgz
OTI2RDg3QTJCMDBFMTVDQjcgLyogQXBwbGVNZWRpYVNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NTY1MDgzNzI2RDg3QTJCMDBFMTVD
QjcgLyogQXBwbGVNZWRpYVNlcnZpY2VzU1BJLmggKi87IH07CkBAIC01MzUzLDYgKzUzNjAsMTkg
QEAKIAkJOTNFNzk5ODEyNzU2RkE1MzAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29u
bmVjdGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZp
bGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzRTc5OTgyMjc1NkZBNTQwMDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFn
ZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFNzk5ODMyNzU2RkE1NDAwNzQw
MDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzUmVwbGllcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5l
Y3Rpb25NZXNzYWdlc1JlcGxpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNF
Nzk5QzUyNzYwMjczNjAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUM2Mjc2MDI3MzcwMDc0MDA4QSAvKiBT
dG9yYWdlQXJlYVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
b3JhZ2VBcmVhUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5
QzkyNzYwNDk3QTAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFnZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9jYWxTdG9yYWdlTWFuYWdlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUNBMjc2MDQ5N0EwMDc0MDA4QSAvKiBTZXNz
aW9uU3RvcmFnZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5
OUNCMjc2MDQ5N0EwMDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2FsU3RvcmFnZU1hbmFnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5Q0MyNzYwNDk3QjAwNzQwMDhBIC8qIFNlc3Npb25TdG9y
YWdlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXNz
aW9uU3RvcmFnZU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3
OTlEMTI3NjBBQTVBMDA3NDAwOEEgLyogVW5pZmllZFNvdXJjZTExMi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlmaWVkU291cmNlMTEyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDMyNzYxMjEwNzAwNzQwMDhBIC8qIFNRTGl0ZVN0
b3JhZ2VBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTGl0
ZVN0b3JhZ2VBcmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDQy
NzYxMjEwNzAwNzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNRTGl0ZVN0b3JhZ2VBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTkzRTc5OUQ1Mjc2MTIxMDcwMDc0MDA4QSAvKiBNZW1vcnlTdG9yYWdlQXJlYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlTdG9yYWdlQXJlYS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlENjI3NjEyMTA4MDA3NDAwOEEgLyog
U3RvcmFnZUFyZWFCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3Jh
Z2VBcmVhQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlENzI3NjEy
MTA4MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VBcmVhQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTkzRTc5OUQ4Mjc2MTIxMDgwMDc0MDA4QSAvKiBNZW1vcnlTdG9yYWdlQXJlYS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZW1vcnlTdG9yYWdlQXJl
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjU0OUIzMUUzMTc0QjcwMDBF
NzIzOSAvKiBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5M0Y1NDlCNTFFMzE3NERBMDAwRTcyMzkgLyogV0tTbmFwc2hvdENvbmZpZ3Vy
YXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1NuYXBz
aG90Q29uZmlndXJhdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTUwRjI4
N0UyNTI0MTRFOTAwQjc0RjFDIC8qIFdLTW91c2VEZXZpY2VPYnNlcnZlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXS01vdXNlRGV2aWNlT2JzZXJ2ZXIuaDsgcGF0aCA9IGlv
cy9XS01vdXNlRGV2aWNlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTgyMzQsNiArODI1NCw3IEBACiAJCQkJMUNBRUNCNUQyNzQ2NUFFMzAwQUI3OEQwIC8qIFVuaWZp
ZWRTb3VyY2UxMDkuY3BwICovLAogCQkJCTFDQUVDQjYwMjc0NjVBRTMwMEFCNzhEMCAvKiBVbmlm
aWVkU291cmNlMTEwLmNwcCAqLywKIAkJCQkxQ0FFQ0I1RTI3NDY1QUUzMDBBQjc4RDAgLyogVW5p
ZmllZFNvdXJjZTExMS5jcHAgKi8sCisJCQkJOTNFNzk5RDEyNzYwQUE1QTAwNzQwMDhBIC8qIFVu
aWZpZWRTb3VyY2UxMTIuY3BwICovLAogCQkJKTsKIAkJCW5hbWUgPSAidW5pZmllZC1zb3VyY2Vz
IjsKIAkJCXBhdGggPSAiRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcyI7CkBA
IC0xMDMxNCwxMSArMTAzMzUsMjMgQEAKIAkJCQk5MzVCNTc5ODI2RjUxMjcwMDA4QjQ4QUMgLyog
RmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5oICovLAogCQkJCTkzMUEwNzUxMjZGMDYz
MTAwMDQ0NzRDRCAvKiBGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIuY3BwICovLAogCQkJCTkzMUEw
NzUwMjZGMDYzMTAwMDQ0NzRDRCAvKiBGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIuaCAqLywKKwkJ
CQk5M0U3OTlDOTI3NjA0OTdBMDA3NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFuYWdlci5jcHAgKi8s
CisJCQkJOTNFNzk5Q0IyNzYwNDk3QTAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFnZXIuaCAq
LywKKwkJCQk5M0U3OTlEODI3NjEyMTA4MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuY3Bw
ICovLAorCQkJCTkzRTc5OUQ1Mjc2MTIxMDcwMDc0MDA4QSAvKiBNZW1vcnlTdG9yYWdlQXJlYS5o
ICovLAogCQkJCTkzMDg1REMzMjZFMUJCQkQwMDBFQzZBNyAvKiBOZXR3b3JrU3RvcmFnZU1hbmFn
ZXIuY3BwICovLAogCQkJCTkzMDg1REM0MjZFMUJCQkQwMDBFQzZBNyAvKiBOZXR3b3JrU3RvcmFn
ZU1hbmFnZXIuaCAqLywKIAkJCQk5MzA4NURDNzI2RTFDNkVFMDAwRUM2QTcgLyogTmV0d29ya1N0
b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluICovLAogCQkJCTkzMDg1REM1MjZFMUM2Q0YwMDBFQzZB
NyAvKiBPcmlnaW5TdG9yYWdlTWFuYWdlci5jcHAgKi8sCiAJCQkJOTMwODVEQzYyNkUxQzZDRjAw
MEVDNkE3IC8qIE9yaWdpblN0b3JhZ2VNYW5hZ2VyLmggKi8sCisJCQkJOTNFNzk5Q0MyNzYwNDk3
QjAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5jcHAgKi8sCisJCQkJOTNFNzk5Q0Ey
NzYwNDk3QTAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5oICovLAorCQkJCTkzRTc5
OUQzMjc2MTIxMDcwMDc0MDA4QSAvKiBTUUxpdGVTdG9yYWdlQXJlYS5jcHAgKi8sCisJCQkJOTNF
Nzk5RDQyNzYxMjEwNzAwNzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmggKi8sCisJCQkJOTNF
Nzk5RDcyNzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5jcHAgKi8sCisJCQkJOTNF
Nzk5RDYyNzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5oICovLAorCQkJCTkzRTc5
OUM1Mjc2MDI3MzYwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcCAqLywKKwkJCQk5
M0U3OTlDNjI3NjAyNzM3MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3RyeS5oICovLAogCQkJ
KTsKIAkJCXBhdGggPSBzdG9yYWdlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEy
OTczLDYgKzEzMDA2LDcgQEAKIAkJCQk1N0RDRURBRTIxNEM2MDMzMDAxNkI4NDcgLyogTG9jYWxT
ZXJ2aWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0IyNjE0RTIyN0QxNEIxMDBCOTdBNzYgLyog
TG9jYWxTdG9yYWdlRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQjI2MTRGMjI3RDE0
QjEwMEI5N0E3NiAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTkzRTc5OUNGMjc2MDQ5N0IwMDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0NkJFQjZEQjIyRkI5RDQ4MDAyNjk4NjcgLyogTG9jYWxTdG9y
YWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUE3RjJGMzEyNUJGODIwMDA4QUVC
MUQgLyogTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQ0Q3RjcxRDQ3RTkyQTAwOUYw
OEJDIC8qIExvZ0luaXRpYWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTEyOTkxLDYgKzEz
MDI1LDcgQEAKIAkJCQlBMTU3OTlCRDI1ODQ0MzMyMDA1MjgyMzYgLyogTWVkaWFTYW1wbGVDdXJz
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3NUE5Q0YzMjYxNjlCQUIwMDZERkEzQSAvKiBNZWRp
YVNlc3Npb25Db29yZGluYXRvclByb3h5UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1
Nzk5QjcyNTg0NDMzMjAwNTI4MjM2IC8qIE1lZGlhVHJhY2tSZWFkZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTkzRTc5OURCMjc2MTIxMDgwMDc0MDA4QSAvKiBNZW1vcnlTdG9yYWdlQXJlYS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTE5MzNERUYxOTY1RUIzMTAwOEFDM0VBIC8qIE1lbnVVdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTlCNDc5MDhEMjUzMTREODMwMEVDMTFBQiAvKiBNZXNz
YWdlQXJndW1lbnREZXNjcmlwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzRDODI5MTZC
ODc2QTkwMDY5RENDRCAvKiBNZXNzYWdlRmxhZ3MuaCBpbiBIZWFkZXJzICovLApAQCAtMTMwMzks
NyArMTMwNzQsNiBAQAogCQkJCTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0
YVRhc2tDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM5OTAyMDMxQkU5QTAyQjAwMEYzNjUz
IC8qIE5ldHdvcmtMb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0Q0NTRENzFCRTlEM0M0MDA2
QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxN0I1Rjk3
Mjc1RUM1RTUwMDJEQzIyRCAvKiBXZWJQdXNoTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODM5MTQ5NjUxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFyYW1ldGVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTQ3RkM4QTAyNUI4MzMxQzAwNTQ5NUZDIC8qIE5ldHdvcmtMb2FkU2No
ZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTQ1MjZFRDI3MUUxNjQ3MDAwNDY3QjYgLyog
TmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTMxMjcsNiAr
MTMxNjEsNyBAQAogCQkJCTJEMjc5RTE5MjY5NTU3NjgwMDRCM0VFQiAvKiBQcm90b3R5cGVUb29s
c1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGODEyNzVFOTdCNjAwMkRDMjJEIC8qIFB1
c2hBcHBCdW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0I1RjdEMjc1RTk3QjYwMDJEQzIy
RCAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE3QjVGOTUy
NzVFQkE2MzAwMkRDMjJEIC8qIFB1c2hNZXNzYWdlRm9yVGVzdGluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTFFNjg4NzAxRjZFMkJBQjAwNzAwNkE2IC8qIFF1YXJhbnRpbmVTUEkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBMEMyMjdFMjQ1MTEzMEEwMEVENjE0RCAvKiBRdWlja0xvb2tUaHVtYm5h
aWxpbmdTb2Z0TGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFRTU3MjUyNDA5RjE0MjAwMjAw
NUQ2IC8qIFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzIx
MSw2ICsxMzI0Niw3IEBACiAJCQkJNTE0RDlGNTcxOTExOUQzNTAwMDA2M0E3IC8qIFNlcnZpY2Vz
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGREU2NUExOTU0QTQyQjAwQzQ4RkZB
IC8qIFNlc3Npb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwMDJENDkxOTZCMzQ1RDAw
QjlBRDQ0IC8qIFNlc3Npb25TdGF0ZUNvZGluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNzk5
Q0UyNzYwNDk3QjAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDZCRUI2REYyMkZCQjE2QjAwMjY5ODY3IC8qIFNlc3Npb25TdG9yYWdlTmFtZXNw
YWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY0MjBFNTEyRENFMkZGMDBDQUFFMkMgLyogU2hh
cmVhYmxlQml0bWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDNBOUNFMDI1RDcyRjFDMDA5OTBF
MjYgLyogU2hhcmVhYmxlQml0bWFwVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKQEAgLTEzMjM5
LDExICsxMzI3NSwxNCBAQAogCQkJCTkzRDZCNzcyMjU0QkI1MTkwMDU4REQzQSAvKiBTcGVlY2hS
ZWNvZ25pdGlvblNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNENkI3ODQyNTRDQ0QwRTAw
NThERDNBIC8qIFNwZWVjaFJlY29nbml0aW9uU2VydmVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzRDZCNzg1MjU0Q0NENDMwMDU4REQzQSAvKiBTcGVlY2hSZWNvZ25pdGlvblNlcnZl
ck1lc3NhZ2VzUmVwbGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNzk5REEyNzYxMjEwODAw
NzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTNGRUNB
MjIxRjdDMDk3MDBGMjY3Q0QgLyogU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDZCRUI2RDcyMkZCOUJENzAwMjY5ODY3IC8qIFN0b3JhZ2VBcmVhLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5M0U3OTlEQzI3NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUQzMzA2RjE2QjFEOTkxMDA0RjYwRTcgLyogU3RvcmFnZUFy
ZWFJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUNFQ0QyNTE3MTYyREIxMDAxRkM5RUYgLyog
U3RvcmFnZUFyZWFNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMzM0REVFMTZERThGODgwMDZB
OEUzOCAvKiBTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3
OTlDNzI3NjAyNzQ2MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3RyeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTNCMjYxNEQyMjdEMTQ5RTAwQjk3QTc2IC8qIFN0b3JhZ2VNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzZCMDU5ODIzMDM5MDk3MDAyRkMwNkIgLyogU3RvcmFnZU1hbmFn
ZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNjhFRURGMjMwM0E5RUQwMEJEQjExQSAvKiBT
dG9yYWdlTWFuYWdlclNldE1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTEzNTEzLDYgKzEz
NTUyLDcgQEAKIAkJCQk1MTdCNUYyRTI3NTczODJBMDAyREMyMkQgLyogV2ViUHVzaERhZW1vbkNv
bm5lY3Rpb25Db25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJDRDY5QTI3MjFG
MEE5MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTE3QjVGNzMyNzVFOTYwOTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25NYWluLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MTdCNUY5NzI3NUVDNUU1MDAyREMyMkQgLyogV2ViUHVzaE1lc3NhZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ2MUNDQ0E2MjMxNDg1QUEwMEI2NTlCOSAvKiBXZWJSZW1v
dGVPYmplY3RSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NjBFNzEyMzBGNjdGQzAw
NDYxQUFFIC8qIFdlYlJlc291cmNlSW50ZXJjZXB0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTEwQUZGQkExNjU0MjA0ODAwMUJBMDVFIC8qIFdlYlJlc291cmNlTG9hZGVyLmggaW4g
SGVhZGVycyAqLywKQEAgLTEzNTQ3LDcgKzEzNTg3LDYgQEAKIAkJCQk5MzU2RjJEQzIxNTJCNkI1
MDBFNkQ1REYgLyogV2ViU1dDbGllbnRDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTdBNTMxMDFGNDdBODYyMDBEQ0RDMEEgLyogV2ViU1dDbGllbnRDb25uZWN0aW9uTWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ2NkJDMDNDMUZBMjY2REEwMDJGQTlDMSAvKiBXZWJTV0Nv
bnRleHRNYW5hZ2VyQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE3QjVGOTUyNzVF
QkE2MzAwMkRDMjJEIC8qIFB1c2hNZXNzYWdlRm9yVGVzdGluZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDYwRjQ4OTAxRjk5NkY3MTAwQ0Y0Qjg3IC8qIFdlYlNXQ29udGV4dE1hbmFnZXJDb25uZWN0
aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMxMUE5RUNDMjE0MDM1RjgwMENGQjIw
QSAvKiBXZWJTd2l0Y2hpbmdHUFVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTZGMkRF
MjE1MkI3MTAwMEU2RDVERiAvKiBXZWJTV09yaWdpblN0b3JlLmggaW4gSGVhZGVycyAqLywKQEAg
LTE1MTE2LDkgKzE1MTU1LDkgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJ
CQlmaWxlcyA9ICgKIAkJCQk1MTdCNUY5QTI3NUYzQTg2MDAyREMyMkQgLyogQXJndW1lbnRDb2Rl
cnMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3QjVGNjgyNzVBOUE3ODAwMkRDMjJEIC8qIFdl
YlB1c2hUb29sQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUxN0I1RjlCMjc1RjNB
OTgwMDJEQzIyRCAvKiBEYWVtb25VdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTdC
NUY5QzI3NUYzQzM3MDAyREMyMkQgLyogRGFlbW9uRW5jb2Rlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MTdCNUY5QjI3NUYzQTk4MDAyREMyMkQgLyogRGFlbW9uVXRpbGl0aWVzLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJNTE3QjVGNjgyNzVBOUE3ODAwMkRDMjJEIC8qIFdlYlB1c2hUb29sQ29u
bmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxN0I1RjY1Mjc1QThEN0YwMDJEQzIyRCAv
KiBXZWJQdXNoVG9vbE1haW4ubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTE1MjE0LDcgKzE1MjUzLDYgQEAKIAkJ
CQlDREE5M0RCMTIyRjhCQ0Y0MDA0OTBBNjkgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGlj
UGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMUExNTJENzI0RTVBMjlBMDA5NzhD
OEIgLyogSGFuZGxlWFBDRW5kcG9pbnRNZXNzYWdlcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI3
NDlGNjQ0MjE0NjU2MUIwMDgzODBCRiAvKiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNTE3QjVGOTkyNzVFQzYwMTAwMkRDMjJEIC8qIFdlYlB1c2hNZXNz
YWdlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQkyNzQ5RjY0NTIxNDY1NjFFMDA4MzgwQkYg
LyogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5QkY1
RUM2NDI1NDExNDU2MDA5ODRFNzcgLyogSlNJUENCaW5kaW5nLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUMxNEQzN0ZFMjRBQ0UwODYwMDdGRjAxNCAvKiBMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlTWFu
YWdlci5tbSBpbiBTb3VyY2VzICovLApAQCAtMTU1MDMsNiArMTU1NDEsNyBAQAogCQkJCTFDQUVD
QjY1Mjc0NjVBRTQwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTA5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFDQUVDQjY4Mjc0NjVBRTQwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTEwLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFDQUVDQjY2Mjc0NjVBRTQwMEFCNzhEMCAvKiBVbmlmaWVkU291
cmNlMTExLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzRTc5OUQyMjc2MEFBNUIwMDc0MDA4QSAv
KiBVbmlmaWVkU291cmNlMTEyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzOEExRkMwMjNBNTUx
QkYwMEQyMzc0RiAvKiBVc2VySW50ZXJmYWNlSWRpb20ubW0gaW4gU291cmNlcyAqLywKIAkJCQlD
RDQ5MUIwRDFFNzMyRTREMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q0OTFCMTcxRTczNTI1NTAwMDA5MDY2
IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0xNTU3NCw2ICsxNTYxMyw3IEBACiAJCQkJQkNFRTdBRDAxMjgxNzk4ODAw
OTgyN0RBIC8qIFdlYlByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MTdCNUY3QTI3NUU5N0E0MDAyREMyMkQgLyogV2ViUHVzaERhZW1vbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTUxN0I1Rjc5Mjc1RTk3QTEwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9u
TWFpbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUxN0I1Rjk5Mjc1RUM2MDEwMDJEQzIyRCAvKiBX
ZWJQdXNoTWVzc2FnZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0MzE4
NTAwRjMyODFCIC8qIFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUxRjA2MEUxMTY1NDMxODUwMEYzMjgxRiAvKiBXZWJSVENNb25pdG9yTWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjA2MEUxMTY1NDMxODUwMEYz
MjgyQyAvKiBXZWJSVENSZXNvbHZlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VB
cmVhTWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VB
cmVhTWFwLmNwcAppbmRleCAwZmE2YWMxOGZkOTQ3MDU5MGNmMTA3ZDZhNDQwNjZkOTJkOWE0MzZk
Li4yY2Y3YTZkNGI2MDA1YzFkN2VjMjU2YmQ2Mzg4NzYyOTRlOWU0Y2YyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3Bw
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGwuaCIKICNpbmNsdWRlICJTdG9y
YWdlQXJlYU1hcE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hbmFnZXJTZXRNZXNzYWdl
cy5oIgpAQCAtOTUsNyArOTYsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVtKEZyYW1l
KiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBcmVhLCBjbwogICAgIG1fcGVu
ZGluZ1ZhbHVlQ2hhbmdlcy5hZGQoa2V5KTsKIAogICAgIGlmIChtX21hcElEKQotICAgICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5j
b25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OlNldEl0ZW0oKm1f
bWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwga2V5LCB2YWx1
ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgMCk7CisgICAgICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigp
LmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OlNldEl0
ZW0oKm1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwga2V5
LCB2YWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgMCk7CiAg
ICAgZWxzZQogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU3RvcmFnZUFyZWFN
YXA6OnNldEl0ZW0gZmFpbGVkIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52YWxpZCIpOwog
fQpAQCAtMTE0LDcgKzExNSw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OnJlbW92ZUl0ZW0oV2Vi
Q29yZTo6RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvCiAgICAgbV9wZW5k
aW5nVmFsdWVDaGFuZ2VzLmFkZChrZXkpOwogCiAgICAgaWYgKG1fbWFwSUQpCi0gICAgICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNv
bm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6UmVtb3ZlSXRlbSgq
bV9tYXBJRCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHNv
dXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOworICAgICAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25u
ZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpSZW1vdmVJdGVt
KCptX21hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIGtleSwg
c291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgMCk7CiAgICAgZWxzZQog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU3RvcmFnZUFyZWFNYXA6OnJlbW92
ZUl0ZW0gZmFpbGVkIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52YWxpZCIpOwogfQpAQCAt
MTI5LDcgKzEzMCw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmNsZWFyKFdlYkNvcmU6OkZyYW1l
KiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBCiAgICAgbV9tYXAgPSBtYWtl
VW5pcXVlPFN0b3JhZ2VNYXA+KG1fcXVvdGFJbkJ5dGVzKTsKIAogICAgIGlmIChtX21hcElEKQot
ICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNs
ZWFyKCptX21hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIHNv
dXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOworICAgICAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25u
ZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDbGVhcigqbV9t
YXBJRCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBzb3VyY2VGcmFt
ZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKICAgICBlbHNlCiAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTdG9yYWdlQXJlYU1hcDo6Y2xlYXIgZmFpbGVkIGJl
Y2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52YWxpZCIpOwogfQpAQCAtMTYwLDcgKzE2MSw3IEBA
IFN0b3JhZ2VNYXAmIFN0b3JhZ2VBcmVhTWFwOjplbnN1cmVNYXAoKQogICAgICAgICAgICAgLy8g
ZnJvbSBvdXIgU3RvcmFnZU1hbmFnZXJTZXQ6OkdldFZhbHVlcygpIElQQy4gVGhpcyBJUEMgbWF5
IGJlIHZlcnkgc2xvdyBiZWNhdXNlIGl0IG1heSBuZWVkIHRvIGZldGNoIHRoZSB2YWx1ZXMgZnJv
bSBkaXNrIGFuZCB0aGVyZSBtYXkgYmUgYSBsb3Qgb2YgZGF0YS4KICAgICAgICAgICAgIElQQzo6
VW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29wZSB1bmJvdW5kZWRTeW5jaHJvbm91c0lQQ1Njb3Bl
OwogICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFsdWVzOwotICAgICAgICAg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6R2V0
VmFsdWVzKCptX21hcElEKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpHZXRWYWx1ZXM6
OlJlcGx5KHZhbHVlcyksIDApOworICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
ZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1l
c3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkdldFZhbHVlcygqbV9tYXBJRCksIE1lc3Nh
Z2VzOjpTdG9yYWdlTWFuYWdlclNldDo6R2V0VmFsdWVzOjpSZXBseSh2YWx1ZXMpLCAwKTsKICAg
ICAgICAgICAgIG1fbWFwLT5pbXBvcnRJdGVtcyhXVEZNb3ZlKHZhbHVlcykpOwogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTdG9yYWdlQXJl
YU1hcDo6ZW5zdXJlTWFwIGZhaWxlZCB0byBsb2FkIGZyb20gbmV0d29yayBwcm9jZXNzIGJlY2F1
c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52YWxpZCIpOwpAQCAtMzQ4LDIwICszNDksMjMgQEAgdm9p
ZCBTdG9yYWdlQXJlYU1hcDo6Y29ubmVjdCgpCiAgICAgaWYgKG1fbWFwSUQpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBtYXBJRDsKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgU3RvcmFnZVR5cGU6OkxvY2FsOgogICAgIGNhc2UgU3RvcmFnZVR5
cGU6OlRyYW5zaWVudExvY2FsOgogICAgICAgICBpZiAoU2VjdXJpdHlPcmlnaW4qIHRvcExldmVs
T3JpZ2luID0gbV9uYW1lc3BhY2UudG9wTGV2ZWxPcmlnaW4oKSkKLSAgICAgICAgICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb1Ry
YW5zaWVudExvY2FsU3RvcmFnZUFyZWEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2Vzc2lvbklE
KCksIG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCB0b3BMZXZlbE9yaWdpbi0+ZGF0
YSgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJT
ZXQ6OkNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWE6OlJlcGx5KG1fbWFwSUQpLCAw
KTsKKyAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKG1fbmFtZXNw
YWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCB0b3BMZXZlbE9yaWdpbi0+ZGF0YSgpLCBtX3NlY3Vy
aXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25u
ZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhOjpSZXBseShtYXBJRCksIDApOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6OlN0b3Jh
Z2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnNlc3Npb25JRCgpLCBtX25hbWVzcGFjZS5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgbV9z
ZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25u
ZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhOjpSZXBseShtX21hcElEKSwgMCk7CisgICAgICAgICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5j
b25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q29u
bmVjdFRvTG9jYWxTdG9yYWdlQXJlYShtX25hbWVzcGFjZS5zdG9yYWdlTmFtZXNwYWNlSUQoKSwg
bV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwgTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6Q29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYTo6UmVwbHkobWFwSUQpLCAwKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBTdG9yYWdlVHlwZTo6U2Vzc2lvbjoKLSAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlv
bigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRvU2Vzc2lv
blN0b3JhZ2VBcmVhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlc3Npb25JRCgpLCBtX25hbWVz
cGFjZS5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgbV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwgTWVz
c2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWE6OlJl
cGx5KG1fbWFwSUQpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJl
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2Vz
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYShtX25h
bWVzcGFjZS5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgbV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwg
TWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VB
cmVhOjpSZXBseShtYXBJRCksIDApOwogICAgIH0KIAotICAgIGlmIChtX21hcElEKQorICAgIGlm
IChtYXBJRC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgbV9tYXBJRCA9IG1hcElEOwogICAgICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZWdpc3RlclN0b3JhZ2VBcmVhTWFwKCp0aGlzKTsKKyAg
ICB9CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmRpc2Nvbm5lY3QoKQpAQCAtMzczLDcgKzM3
Nyw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmRpc2Nvbm5lY3QoKQogICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnVucmVnaXN0ZXJTdG9yYWdlQXJlYU1hcCgqdGhpcyk7CiAKICAgICBpZiAo
YXV0byogbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
ZXhpc3RpbmdOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKSkKLSAgICAgICAgbmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJT
ZXQ6OkRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoKm1fbWFwSUQpLCAwKTsKKyAgICAgICAgbmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1N0b3JhZ2VNYW5hZ2VyOjpEaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKCptX21hcElEKSwgMCk7
CiAKICAgICBtX21hcElEID0geyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCmluZGV4IGY4
NGQwMmZjNmY3ZTNiYjFlMzE0MzNjNWYwMGU2MWUwZmRlYmY5MzIuLmRlYjZhMzQzM2NhYmFmYWY3
ZGNhYTU2MGNkYzNhMTVlM2FjYTdlNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKQEAgLTI3
LDkgKzI3LDkgQEAKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIgogCiAjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VN
YW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGwuaCIKICNpbmNsdWRl
ICJTdG9yYWdlQXJlYU1hcC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VNYW5hZ2VyU2V0TWVzc2FnZXMu
aCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwUHJveHkuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCkBAIC0xMTQsNyArMTE0LDcgQEAgUmVmPFN0b3JhZ2VO
YW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjb3B5KFBhZ2UmIG5ld1BhZ2UpCiAgICAg
QVNTRVJUKG1fc3RvcmFnZVR5cGUgPT0gU3RvcmFnZVR5cGU6OlNlc3Npb24pOwogCiAgICAgaWYg
KGF1dG8gbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
ZXhpc3RpbmdOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKSkKLSAgICAgICAgbmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJT
ZXQ6OkNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2Uoc2Vzc2lvbklEKCksIG1fc3RvcmFnZU5h
bWVzcGFjZUlELCBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UobmV3UGFnZSkuc2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2VJZGVudGlmaWVyKCkpLCAwKTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpD
bG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKG1fc3RvcmFnZU5hbWVzcGFjZUlELCBXZWJQYWdl
Ojpmcm9tQ29yZVBhZ2UobmV3UGFnZSkuc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVy
KCkpLCAwKTsKIAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3JhZ2VOYW1lc3BhY2VJbXBs
KG1fc3RvcmFnZVR5cGUsIFdlYlBhZ2U6OmZyb21Db3JlUGFnZShuZXdQYWdlKS5zZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZUlkZW50aWZpZXIoKSwgV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKG5ld1BhZ2Up
LmlkZW50aWZpZXIoKSwgbV90b3BMZXZlbE9yaWdpbi5nZXQoKSwgbV9xdW90YUluQnl0ZXMpKTsK
IH0K
</data>
<flag name="commit-queue"
          id="472238"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446762</attachid>
            <date>2021-12-10 10:57:30 -0800</date>
            <delta_ts>2021-12-10 16:12:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234087-20211210105729.patch</filename>
            <type>text/plain</type>
            <size>164606</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2ODU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDE5ZTUxYmY4NWIwNDFm
ZTk5N2Y3NmVjM2I2OGRlMTQyYTU1MWNlYi4uYWZlZDdlMDQ0YWJmMjQwNmM0YWZkMGJkMTcxZTYz
OThlYjk4NGYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTEyLTEwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIFN0b3JhZ2VNYW5h
Z2VyIHdpdGggTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIHRvIG1hbmFnZSBXZWJTdG9yYWdlIGJ5IG9y
aWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVGaWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlRmlsZVN5c3RlbS5oOgorCiAyMDIxLTEyLTA5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBVc2Ugc2ltcGxlciBpZGlvbXMgZm9yIHN0ZDo6bGVzcyBhbmQg
c3RkOjpncmVhdGVyIHBvc3NpYmxlIGluIG1vZGVybiBDKysKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYmM3NWExOTY0
MzRmZjUwNTc5OWU3ODIzOWUyYTZhOTYwNGZiNzAyYS4uZjU2MmUwYjZjOGYyNWM4Njg0NmZkMGQ2
YWVkZDczMDY5ZmIxODRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMTAgQEAKKzIwMjEtMTItMTAg
IFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgTWVyZ2UgU3RvcmFn
ZU1hbmFnZXIgd2l0aCBOZXR3b3JrU3RvcmFnZU1hbmFnZXIgdG8gbWFuYWdlIFdlYlN0b3JhZ2Ug
Ynkgb3JpZ2luCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzQwODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbiBuZXR3b3JrIHByb2Nlc3MsIFdlYlN0b3JhZ2UgZGF0YSBpcyBtYW5hZ2VkIGJ5IFdlYktp
dDo6U3RvcmFnZU1hbmFnZXIgY2xhc3MuIEVhY2ggU3RvcmFnZU1hbmFnZXIgb3ducyBvbmUgb3IK
KyAgICAgICAgbWFueSBTdG9yYWdlTmFtZVNwYWNlcywgYW5kIGVhY2ggU3RvcmFnZU5hbWVzcGFj
ZXMgb3ducyBvbmUgb3IgbW9yZSBTdG9yYWdlQXJlYXMuIEVhY2ggU3RvcmFnZUFyZWEgY29ycmVw
b25kcworICAgICAgICB0byBvbmUgc3RvcmFnZSBtYXAgKG9uZSBsb2NhbFN0b3JhZ2Ugb3Igc2Vz
c2lvblN0b3JhZ2Ugb2JqZWN0KSwgYW5kIGhhcyB0d28gdHlwZXMgb2YgYmFja2VuZDogYSBTUUxp
dGUgZGF0YWJhc2UsCisgICAgICAgIG9yIGEgaW4tbWVtb3J5IGhhc2ggbWFwLiBOb3cgdGhhdCB3
ZSBoYXZlIE5ldHdvcmtTdG9yYWdlTWFuYWdlciwgd2hpY2ggbWFuYWdlcyBzdG9yYWdlIGJ5IG9y
aWdpbi4gV2UgY2FuIG1lcmdlCisgICAgICAgIFN0b3JhZ2VNYW5hZ2VyIHdpdGggTmV0d29ya1N0
b3JhZ2VNYW5hZ2VyLCBiZWNhdXNlIGxvY2FsU3RvcmFnZSBhbmQgc2Vzc2lvblN0b3JhZ2UgYXJl
IG5vdCBzaGFyZWQgYmV0d2VlbiAKKyAgICAgICAgZGlmZmVyZW50IG9yaWdpbnMuCisKKyAgICAg
ICAgVGhlIG5ldyBzdHJ1Y3R1cmUgaXM6CisgICAgICAgIE5ldHdvcmtTdG9yYWdlTWFuYWdlciAo
bWFuYWdlIHN0b3JhZ2UgZm9yIGEgc2Vzc2lvbiwgb3ducyBvbmUgb3IgbW9yZSBPcmlnaW5TdG9y
YWdlTWFuYWdlcikKKyAgICAgICAgT3JpZ2luU3RvcmFnZU1hbmFnZXIgKG1hbmFnZSBzdG9yYWdl
IGZvciBhbiBvcmlnaW4sIG93bnMgb25lIExvY2FsU3RvcmFnZU1hbmFnZXIgYW5kIG9uZSBTZXNz
aW9uU3RvcmFnZU1hbmFnZXIpCisgICAgICAgIExvY2FsU3RvcmFnZU1hbmFnZXIgLyBTZXNzaW9u
U3RvcmFnZU1hbmFnZXIgKG1hbmFnZSBMb2NhbFN0b3JhZ2UgYW5kIFNlc3Npb25TdG9yYWdlLCBv
d25zIG9uZSBvciBtb3JlIAorICAgICAgICBTdG9yYWdlQXJlYUJhc2VzKQorICAgICAgICBNZW1v
cnlTdG9yYWdlQXJlYSAvIFNRTGl0ZVN0b3JhZ2VBcmVhIChpbmhlcml0cyBTdG9yYWdlQXJlYUJh
c2VzOyBtYW5hZ2Ugb25lIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZSwgbGlrZSAKKyAgICAgICAg
V2Via2l0OjpTdG9yYWdlQXJlYSkKKworICAgICAgICBTdG9yYWdlTmFtZXNwYWNlIGxheWVyIGlz
IHJlbW92ZWQuIEZvciBTZXNzaW9uU3RvcmFnZSwgZGlmZmVyZW50IFN0b3JhZ2VOYW1lc3BhY2Vz
IG1lYW5zIGRpZmZlcmVudCB3ZWIgcGFnZXMsIAorICAgICAgICBhbmQgc2FtZSBvcmlnaW4gY2Fu
IGhhdmUgZGlmZmVyZW50IHNlc3Npb25TdG9yYWdlcyBvbiBkaWZmZXJlbnQgcGFnZXMsIHNvIHdl
IGtlZXAgYSBTdG9yYWdlTmFtZXNwYWNlIDw9PgorICAgICAgICBTdG9yYWdlQXJlYSBtYXAgaW4g
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLiBGb3IgTG9jYWxTdG9yYWdlLCBkaWZmZXJudCBTdG9yYWdl
TmFtZXNwYWNlcyBtZWFucyBkaWZmZXJlbnQgcGFnZSAKKyAgICAgICAgZ3JvdXBzLiBPdXIgb3Jp
Z2luYWwgcGxhbiB3YXMgdGhlIHNhbWUgb3JpZ2luIGNhbiBoYXZlIGRpZmZlcmVudCBsb2NhbFN0
b3JhZ2VzIGluIGRpZmZlcmVudCBwYWdlIGdyb3VwcywgYnV0IG91cgorICAgICAgICBvbGQgaW1w
bGVtZW50YXRpb24gYWN0dWFsbHkgbWFkZSBhbGwgcGFnZSBncm91cHMgcG9pbnQgdG8gdGhlIHNh
bWUgZGF0YWJhc2UgZmlsZS4gVG8ga2VlcCBleGlzdGluZyBiZWhhdmlvciAKKyAgICAgICAgKHRo
YXQgYWxsIHBhZ2UgZ3JvdXBzIHdpdGggc2FtZSBvcmlnaW4gc2hhcmUgdGhlIHN0b3JhZ2UpLCB3
ZSBub3cga2VlcCBvbmUgU3RvcmFnZUFyZWEgcGVyIExvY2FsU3RvcmFnZU1hbmFnZXIuCisKKyAg
ICAgICAgTW9zdGx5IHJlZmFjdG9yaW5nIGFuZCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgor
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6bG93TWVtb3J5SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZXN0cm95U2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpoYXNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlQW5kUmVzdHJpY3RXZWJzaXRlRGF0YUZvclJl
Z2lzdHJhYmxlRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwcmVw
YXJlVG9TdXNwZW5kKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJlc3VtZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y29ubmVjdGlvblRvV2ViUHJvY2Vz
c0Nsb3NlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpnZXRMb2NhbFN0b3Jh
Z2VPcmlnaW5EZXRhaWxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdl
TWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpmaWxlTmFtZVRvT3JpZ2luKToK
KyAgICAgICAgKFdlYktpdDo6b3JpZ2luVG9GaWxlTmFtZSk6CisgICAgICAgIChXZWJLaXQ6Okxv
Y2FsU3RvcmFnZU1hbmFnZXI6OmdldE9yaWdpbnNPZkxvY2FsU3RvcmFnZURhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VGaWxlUGF0aCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU1hbmFnZXIp
OgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OmNsZWFyRGF0YSk6CisgICAgICAgIChX
ZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TG9j
YWxTdG9yYWdlTWFuYWdlcjo6aGFuZGxlTG93TWVtb3J5V2FybmluZyk6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKToKKyAgICAgICAgKFdl
YktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6ZW5zdXJlU3RvcmFnZUFyZWEpOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToK
KyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50
TG9jYWxTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6
OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpNZW1vcnlTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJL
aXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6TWVtb3J5
U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6
OmFsbEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OnNldEl0ZW0p
OgorICAgICAgICAoV2ViS2l0OjpNZW1vcnlTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSk6CisgICAg
ICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpjbG9uZSBjb25zdCk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5oOiBBZGRlZC4KKyAgICAg
ICAgKGlzVHlwZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3Rv
cmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpyZWFkT3JpZ2luRnJvbUZpbGUpOgor
ICAgICAgICAoV2ViS2l0Ojp3cml0ZU9yaWdpblRvRmlsZUlmTmVjZXNzYXJ5KToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcik6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYktp
dDo6b3JpZ2luRGlyZWN0b3J5UGF0aCk6CisgICAgICAgIChXZWJLaXQ6Om9yaWdpbkZpbGVQYXRo
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpsb2NhbE9yaWdpblN0
b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpy
ZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZU9yaWdpbkRpcmVjdG9yeUlmUG9zc2libGUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsZWFyU3RvcmFnZUZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZvckVhY2hP
cmlnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmdldEFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmZldGNoRGF0YUZyb21EaXNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5h
Z2VyOjpkZWxldGVEYXRhT25EaXNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VN
YW5hZ2VyOjptb3ZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6c3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVz
dW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpoYW5kbGVMb3dN
ZW1vcnlXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpz
eW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
Ojpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9TZXNzaW9uU3RvcmFn
ZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5l
Y3RGcm9tU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrU3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
dG9yYWdlTWFuYWdlcjo6c2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdl
TWFuYWdlcjo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFu
YWdlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0Ojp0b1dlYnNpdGVEYXRhVHlwZSk6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFn
ZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFu
YWdlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdp
blN0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFn
ZXI6OlN0b3JhZ2VCdWNrZXQ6OlN0b3JhZ2VCdWNrZXQpOgorICAgICAgICAoV2ViS2l0OjpPcmln
aW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6dG9XZWJzaXRlRGF0YVR5cGUpOgorICAg
ICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6dG9TdG9y
YWdlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpT
dG9yYWdlQnVja2V0Ojpsb2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3Jp
Z2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFu
YWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVj
a2V0OjpzZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9y
YWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZXhpc3RpbmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIp
OgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6
aXNBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFn
ZUJ1Y2tldDo6aXNFbXB0eSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpTdG9yYWdlQnVja2V0OjpmZXRjaERhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9y
YWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6
Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojptb3ZlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpmZXRjaERhdGFJ
bk1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0OjpmZXRjaERhdGFGcm9tRGlzayk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3Jh
Z2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKToKKyAgICAg
ICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0ZVNl
c3Npb25TdG9yYWdlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpPcmlnaW5TdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VN
YW5hZ2VyOjpkZWZhdWx0QnVja2V0KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1h
bmFnZXI6OmxvY2FsU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9y
YWdlTWFuYWdlcjo6ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktp
dDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OnNlc3Npb25TdG9yYWdlTWFuYWdlcik6CisgICAgICAg
IChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFu
YWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YSk6CisgICAg
ICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhKToKKyAgICAgICAg
KFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6Om1vdmVEYXRhKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmg6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6c3RhdGVtZW50U3RyaW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OlNRTGl0ZVN0b3JhZ2VBcmVhKToKKyAg
ICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmNsb3NlKToKKyAgICAgICAgKFdlYktp
dDo6U1FMaXRlU3RvcmFnZUFyZWE6On5TUUxpdGVTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJL
aXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRl
U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6
OmNyZWF0ZVRhYmxlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdl
QXJlYTo6cHJlcGFyZURhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFy
ZWE6OnN0YXJ0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0
ZVN0b3JhZ2VBcmVhOjpjYWNoZWRTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVT
dG9yYWdlQXJlYTo6Z2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVh
OjpnZXRJdGVtRnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFy
ZWE6OmFsbEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnNldEl0
ZW0pOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSk6Cisg
ICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjb21taXRUcmFuc2FjdGlvbklmTmVj
ZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmhhbmRsZUxvd01l
bW9yeVdhcm5pbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3Rv
cmFnZUFyZWEuaDogQWRkZWQuCisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKToK
KyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6aGFzRGF0YUluTWVtb3J5KToKKyAg
ICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjbGVhckRhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3Rpb25DbG9zZWQpOgorICAg
ICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmFkZFN0b3JhZ2VBcmVhKToKKyAg
ICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9TZXNzaW9uU3Rv
cmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmRpc2Nv
bm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1h
bmFnZXI6OmNsb25lU3RvcmFnZUFyZWEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZUFyZWFCYXNlKToKKyAgICAgICAgKFdlYktpdDo6U3Rv
cmFnZUFyZWFCYXNlOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVh
QmFzZTo6cmVtb3ZlTGlzdGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6
Omhhc0xpc3RlbmVycyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6
bm90aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVh
QmFzZTo6ZGlzcGF0Y2hFdmVudHMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
QXJlYUJhc2U6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJl
YUJhc2U6Om9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6
cXVvdGEgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFy
ZWFSZWdpc3RyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYVJlZ2lz
dHJ5OjpyZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFS
ZWdpc3RyeTo6dW5yZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZUFyZWFSZWdpc3RyeTo6Z2V0U3RvcmFnZUFyZWEpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3Jh
Z2VEZXRhaWxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAqIFVuaWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVs
aXN0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZUFyZWFNYXA6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6
Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6ZW5zdXJlTWFwKToKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmNvbm5lY3QpOgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYU1hcDo6ZGlzY29ubmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZU5hbWVzcGFjZUltcGw6OmNvcHkpOgorCiAyMDIxLTEyLTA5ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2Ugc2ltcGxlciBpZGlvbXMgZm9yIHN0ZDo6bGVzcyBh
bmQgc3RkOjpncmVhdGVyIHBvc3NpYmxlIGluIG1vZGVybiBDKysKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAppbmRleCA3NmU0NWFmMzRlZDA5
M2ZkOWYyNzZkZDVkNGI5MjJhNDE2MzRkOWFlLi5lN2NkY2JmNWFiZDIwNjk2ODVlMWZhZDFkNzQ0
MTljYTEwODFhOWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0
ZUZpbGVTeXN0ZW0uY3BwCkBAIC00Myw2ICs0Myw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PGNvbnN0IGNoYXIgKiwgMz4gZGF0YWJhc2VG
aWxlU3VmZml4ZXMgeyAiIiwgIi1zaG0iLCAiLXdhbCIgfTsKKwogU1FMaXRlRmlsZVN5c3RlbTo6
U1FMaXRlRmlsZVN5c3RlbSgpCiB7CiB9CkBAIC03NywxOCArNzksMjIgQEAgYm9vbCBTUUxpdGVG
aWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCkKICAgICByZXR1cm4gRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkocGF0aCk7CiB9
CiAKLWJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUpCitib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShj
b25zdCBTdHJpbmcmIGZpbGVQYXRoKQogewotICAgIGF1dG8gd2FsRmlsZU5hbWUgPSBtYWtlU3Ry
aW5nKGZpbGVOYW1lLCAiLXdhbCJfcyk7Ci0gICAgYXV0byBzaG1GaWxlTmFtZSA9IG1ha2VTdHJp
bmcoZmlsZU5hbWUsICItc2htIl9zKTsKKyAgICBib29sIGZpbGVFeGlzdHMgPSBmYWxzZTsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8qIHN1ZmZpeCA6IGRhdGFiYXNlRmlsZVN1ZmZpeGVzKSB7CisgICAg
ICAgIFN0cmluZyBwYXRoID0gZmlsZVBhdGggKyBzdWZmaXg7CisgICAgICAgIEZpbGVTeXN0ZW06
OmRlbGV0ZUZpbGUocGF0aCk7CisgICAgICAgIGZpbGVFeGlzdHMgfD0gRmlsZVN5c3RlbTo6Zmls
ZUV4aXN0cyhwYXRoKTsKKyAgICB9CiAKLSAgICAvLyBUcnkgdG8gZGVsZXRlIGFsbCB0aHJlZSBm
aWxlcyB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSB0aGVyZS4KLSAgICBGaWxlU3lzdGVtOjpkZWxl
dGVGaWxlKGZpbGVOYW1lKTsKLSAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHdhbEZpbGVOYW1l
KTsKLSAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHNobUZpbGVOYW1lKTsKKyAgICByZXR1cm4g
IWZpbGVFeGlzdHM7Cit9CiAKLSAgICAvLyBJZiBhbnkgb2YgdGhlIHdhbCBvciBzaG0gZmlsZXMg
cmVtYWluIGFmdGVyIHRoZSBkZWxldGUgYXR0ZW1wdCwgdGhlIG92ZXJhbGwgZGVsZXRlIG9wZXJh
dGlvbiBmYWlsZWQuCi0gICAgcmV0dXJuICFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGZpbGVOYW1l
KSAmJiAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh3YWxGaWxlTmFtZSkgJiYgIUZpbGVTeXN0ZW06
OmZpbGVFeGlzdHMoc2htRmlsZU5hbWUpOwordm9pZCBTUUxpdGVGaWxlU3lzdGVtOjptb3ZlRGF0
YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgb2xkRmlsZVBhdGgsIGNvbnN0IFN0cmluZyYgbmV3Rmls
ZVBhdGgpCit7CisgICAgZm9yIChjb25zdCBhdXRvKiBzdWZmaXggOiBkYXRhYmFzZUZpbGVTdWZm
aXhlcykKKyAgICAgICAgRmlsZVN5c3RlbTo6bW92ZUZpbGUobWFrZVN0cmluZyhvbGRGaWxlUGF0
aCwgc3VmZml4KSwgbWFrZVN0cmluZyhuZXdGaWxlUGF0aCwgc3VmZml4KSk7CiB9CiAKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQpAQCAtOTgsMTggKzEwNCwxMyBAQCBib29sIFNRTGl0ZUZpbGVT
eXN0ZW06OnRydW5jYXRlRGF0YWJhc2VGaWxlKHNxbGl0ZTMqIGRhdGFiYXNlKQogfQogI2VuZGlm
CiAgICAgCi11aW50NjRfdCBTUUxpdGVGaWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXplKGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUpCi17ICAgICAgICAKK3VpbnQ2NF90IFNRTGl0ZUZpbGVTeXN0ZW06
OmRhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKK3sKICAgICB1aW50NjRf
dCB0b3RhbFNpemUgPSAwOwotCi0gICAgaWYgKGF1dG8gZmlsZVNpemUgPSBGaWxlU3lzdGVtOjpm
aWxlU2l6ZShmaWxlTmFtZSkpCi0gICAgICAgIHRvdGFsU2l6ZSArPSAqZmlsZVNpemU7Ci0KLSAg
ICBpZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06OmZpbGVTaXplKG1ha2VTdHJpbmcoZmls
ZU5hbWUsICItd2FsIl9zKSkpCi0gICAgICAgIHRvdGFsU2l6ZSArPSAqZmlsZVNpemU7Ci0KLSAg
ICBpZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06OmZpbGVTaXplKG1ha2VTdHJpbmcoZmls
ZU5hbWUsICItc2htIl9zKSkpCi0gICAgICAgIHRvdGFsU2l6ZSArPSAqZmlsZVNpemU7CisgICAg
Zm9yIChjb25zdCBhdXRvKiBzdWZmaXggOiBkYXRhYmFzZUZpbGVTdWZmaXhlcykgeworICAgICAg
ICBpZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06OmZpbGVTaXplKGZpbGVQYXRoICsgc3Vm
Zml4KSkKKyAgICAgICAgICAgIHRvdGFsU2l6ZSArPSAqZmlsZVNpemU7CisgICAgfQogCiAgICAg
cmV0dXJuIHRvdGFsU2l6ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVGaWxlU3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlRmlsZVN5c3RlbS5oCmluZGV4IGM2OGQ5YzdlN2FmOTg5NzZhMWVkM2RjYjZmMmFjZmU0YjZj
ZjVjMmYuLjk4ZTdlYTBkMDdhMjU0MTFmYTRmNjJhYTcyMTY1OTNmNjNlMzljNWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaApAQCAtNzgsOSAr
NzgsMTEgQEAgcHVibGljOgogICAgIC8vIERlbGV0ZXMgYSBkYXRhYmFzZSBmaWxlLgogICAgIC8v
CiAgICAgLy8gZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1lLgotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBib29sIGRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3Ry
aW5nJiBmaWxlUGF0aCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGNvbXB1
dGVIYXNoRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisgICAgLy8gTW92ZXMg
YSBkYXRhYmFzZSBmaWxlIHRvIGEgbmV3IHBsYWNlLgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyB2b2lkIG1vdmVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRGaWxlUGF0aCwgY29uc3Qg
U3RyaW5nJiBuZXdGaWxlUGF0aCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBj
b21wdXRlSGFzaEZvckZpbGVOYW1lKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpOwogCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBUcnVuY2F0ZXMgYSBkYXRhYmFzZSBmaWxlLiBVc2Vk
IHdoZW4gTW9iaWxlU2FmYXJpU2V0dGluZ3MgZGVsZXRlcyBhIGRhdGFiYXNlIGZpbGUsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDFl
ZjMzYTZlNjI3MzcxMDQ0Nzc1MWE1NzNjMjc0ODk3ZWQyOTQwYTYuLmU2ZTA4NjQ0YTNiMzMwNzI3
NWI2MzViODExYzRlODEwMWJjZjcyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0xNTgsNyArMTU4LDYgQEAgc3RhdGljIGlubGlu
ZSBNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeSBjcmVhdGVNZXNzYWdlUG9ydENoYW5uZWxSZWdp
c3RyeShOZXR3b3IKIAogTmV0d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9jZXNzKEF1eGlsaWFyeVBy
b2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogICAgIDogbV9kb3du
bG9hZE1hbmFnZXIoKnRoaXMpCi0gICAgLCBtX3N0b3JhZ2VNYW5hZ2VyU2V0KFN0b3JhZ2VNYW5h
Z2VyU2V0OjpjcmVhdGUoKSkKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgICwg
bV9uZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlcigqdGhpcykKICNlbmRpZgpAQCAtMzE0LDEy
ICszMTMsMTMgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6bG93TWVtb3J5SGFuZGxlcihDcml0aWNh
bCBjcml0aWNhbCkKICAgICAgICAgbmV0d29ya1Nlc3Npb24uY2xlYXJQcmVmZXRjaENhY2hlKCk7
CiAgICAgfSk7CiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5oYW5kbGVMb3dNZW1vcnlXYXJu
aW5nKCk7Ci0KICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgZm9yIChhdXRvJiBzd1Nl
cnZlciA6IG1fc3dTZXJ2ZXJzLnZhbHVlcygpKQogICAgICAgICBzd1NlcnZlci0+aGFuZGxlTG93
TWVtb3J5V2FybmluZygpOwogI2VuZGlmCisKKyAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX3N0
b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAgbWFuYWdlci0+aGFuZGxlTG93TWVtb3J5
V2FybmluZygpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQpAQCAt
NDAyLDcgKzQwMiw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNyZWF0ZU5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzKFByb2Nlc3NJZGVudGlmaWVyIGlkZW50CiAKICAgICBjb25uZWN0aW9u
LnNldE9uTGluZVN0YXRlKE5ldHdvcmtTdGF0ZU5vdGlmaWVyOjpzaW5nbGV0b24oKS5vbkxpbmUo
KSk7CiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGRDb25uZWN0aW9uKGNvbm5lY3Rpb24u
Y29ubmVjdGlvbigpKTsKICAgICB3ZWJJREJTZXJ2ZXIoc2Vzc2lvbklEKS5hZGRDb25uZWN0aW9u
KGNvbm5lY3Rpb24uY29ubmVjdGlvbigpLCBpZGVudGlmaWVyKTsKICAgICBpZiAoYXV0byBtYW5h
Z2VyID0gbV9zdG9yYWdlTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCkpCiAgICAgICAgIG1hbmFnZXIt
PnN0YXJ0UmVjZWl2aW5nTWVzc2FnZUZyb21Db25uZWN0aW9uKGNvbm5lY3Rpb24uY29ubmVjdGlv
bigpKTsKQEAgLTQyMSw3ICs0MjAsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRXZWJzaXRl
RGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycwogewogICAg
IGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vz
c2lvbklEOwogCi0gICAgYWRkU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKHNlc3Npb25JRCwgcGFy
YW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5nZW5lcmFsU3RvcmFn
ZURpcmVjdG9yeUhhbmRsZSk7CisgICAgYWRkU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKHNlc3Np
b25JRCwgcGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5nZW5l
cmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAg
ICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMucGVy
T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdl
UXVvdGEsIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNhY2hl
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBhZGRJbmRleGVkRGF0YWJh
c2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKQEAg
LTQzMCw4ICs0MjksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3Jl
KFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycwogICAgIGFkZFNlcnZpY2VX
b3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rl
cm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBw
YXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KICAgICBS
ZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRo
aXMsIFdURk1vdmUocGFyYW1ldGVycykpOwogfQogCkBAIC00NTQsMTEgKzQ1MSwxNiBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiAgICAgbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMucmVt
b3ZlKHNlc3Npb25JRCk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFN0b3JhZ2VNYW5h
Z2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZ2Vu
ZXJhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGdlbmVyYWxTdG9yYWdl
UGF0aEhhbmRsZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vz
c2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZ2VuZXJhbFN0b3Jh
Z2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGdlbmVyYWxTdG9yYWdlUGF0aEhhbmRs
ZSwgY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUmIGxvY2FsU3RvcmFnZVBhdGhIYW5kbGUpCiB7CiAgICAgbV9zdG9yYWdlTWFuYWdlcnMuZW5z
dXJlKHNlc3Npb25JRCwgWyZdIHsKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBl
cm1hbmVudGx5KGdlbmVyYWxTdG9yYWdlUGF0aEhhbmRsZSk7Ci0gICAgICAgIHJldHVybiBOZXR3
b3JrU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShzZXNzaW9uSUQsIGdlbmVyYWxTdG9yYWdlUGF0aCk7
CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBvcHRpb25hbExvY2FsU3RvcmFnZVBhdGg7
CisgICAgICAgIGlmICghbG9jYWxTdG9yYWdlUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IG9wdGlvbmFsTG9jYWxTdG9yYWdlUGF0aCA9IGxvY2FsU3RvcmFnZVBhdGg7CisgICAgICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkobG9jYWxTdG9yYWdlUGF0aEhh
bmRsZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Y3JlYXRlKHNlc3Npb25JRCwgZ2VuZXJhbFN0b3JhZ2VQYXRoLCBvcHRpb25hbExvY2FsU3RvcmFn
ZVBhdGgpOwogICAgIH0pOwogfQogCkBAIC01NzUsNyArNTc3LDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIG1fc2Vy
dmljZVdvcmtlckluZm8ucmVtb3ZlKHNlc3Npb25JRCk7CiAjZW5kaWYKIAotICAgIG1fc3RvcmFn
ZU1hbmFnZXJTZXQtPnJlbW92ZShzZXNzaW9uSUQpOwogICAgIGlmIChhdXRvIHNlcnZlciA9IG1f
d2ViSURCU2VydmVycy50YWtlKHNlc3Npb25JRCkpCiAgICAgICAgIHNlcnZlci0+Y2xvc2UoKTsK
ICAgICByZW1vdmVTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oc2Vzc2lvbklEKTsKQEAgLTEwNjUs
MTUgKzEwNjYsMTYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJVc2VySW50ZXJhY3Rpb24o
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3QKIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6aGFzTG9jYWxTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAobV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFp
bnMoc2Vzc2lvbklEKSkgewotICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5nZXRMb2NhbFN0
b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW2RvbWFpbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIG9yaWdpbnMpIG11dGFibGUgewotICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjphbnlPZihvcmlnaW5zLCBbJmRvbWFpbl0oYXV0
byYgb3JpZ2luKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5tYXRjaGVzKG9yaWdp
bik7Ci0gICAgICAgICAgICB9KSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9z
dG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOworICAgIGlmIChpdGVyYXRvciA9PSBtX3N0
b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsKKworICAgIGF1dG8gdHlwZXMgPSBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB7IFdl
YnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlIH07CisgICAgaXRlcmF0b3ItPnZhbHVlLT5mZXRj
aERhdGEodHlwZXMsIFtkb21haW4sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKGF1dG8gZW50cmllcykgbXV0YWJsZSB7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURjo6YW55T2YoZW50cmllcywgWyZkb21haW5dKGF1dG8mIGVudHJ5KSB7CisgICAg
ICAgICAgICByZXR1cm4gZG9tYWluLm1hdGNoZXMoZW50cnkub3JpZ2luKTsKKyAgICAgICAgfSkp
OworICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRDYWNoZU1heEFnZUNhcEZv
clByZXZhbGVudFJlc291cmNlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFNlY29uZHMgc2Vj
b25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAt
MTQ5MSwyMCArMTQ5Myw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0CiAgICAgICAgIH0pOwog
ICAgIH0KIAotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6U2Vzc2lvblN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Np
b25JRCkpIHsKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+Z2V0U2Vzc2lvblN0b3JhZ2VP
cmlnaW5zKHNlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIG9yaWdpbnMpIHsK
LSAgICAgICAgICAgIHdoaWxlICghb3JpZ2lucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVE
YXRhOjpFbnRyeSB7IG9yaWdpbnMudGFrZUFueSgpLCBXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25T
dG9yYWdlLCAwIH0pOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAod2Vic2l0ZURhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkgJiYgbV9zdG9yYWdl
TWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewotICAgICAgICBtX3N0b3JhZ2VNYW5h
Z2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVn
YXRvcl0oYXV0byYmIG9yaWdpbnMpIHsKLSAgICAgICAgICAgIHdoaWxlICghb3JpZ2lucy5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRh
LmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbnMudGFrZUFueSgpLCBX
ZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSwgMCB9KTsKLSAgICAgICAgfSk7Ci0gICAgfQot
CiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShTT1VQKQogICAgIGlmICh3ZWJzaXRlRGF0YVR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SFNUU0NhY2hlKSkKICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmhvc3ROYW1lc1dpdGhIU1RTQ2FjaGUgPSBob3N0
TmFtZXNXaXRoSFNUU0NhY2hlKHNlc3Npb25JRCk7CkBAIC0xNTU3LDEwICsxNTQ1LDEyIEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBPcHRpb25TZXQ8V2Vic2l0CiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoYXV0byBpdGVy
YXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0b3IgIT0gbV9z
dG9yYWdlTWFuYWdlcnMuZW5kKCkpIHsKLSAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5mZXRjaERh
dGEod2Vic2l0ZURhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byBlbnRyaWVzKSBt
dXRhYmxlIHsKLSAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5l
bnRyaWVzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGVudHJpZXMpKTsKLSAgICAgICAgfSk7CisgICAg
aWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMod2Vic2l0ZURhdGFUeXBl
cykpIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5k
KHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKSB7CisgICAg
ICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmZldGNoRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBbY2Fs
bGJhY2tBZ2dyZWdhdG9yXShhdXRvIGVudHJpZXMpIG11dGFibGUgeworICAgICAgICAgICAgICAg
IGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZFZlY3RvcihX
VEZNb3ZlKGVudHJpZXMpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CiAgICAgfQogfQog
CkBAIC0xNTg3LDEyICsxNTc3LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0
ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2kKICAgICBpZiAo
d2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRPTUNhY2hlKSkKICAg
ICAgICAgQ2FjaGVTdG9yYWdlOjpFbmdpbmU6OmNsZWFyQWxsQ2FjaGVzKCp0aGlzLCBzZXNzaW9u
SUQsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKIAotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpICYmIG1fc3RvcmFnZU1h
bmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJT
ZXQtPmRlbGV0ZVNlc3Npb25TdG9yYWdlKHNlc3Npb25JRCwgW2NsZWFyVGFza3NIYW5kbGVyXSB7
IH0pOwotCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpMb2NhbFN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25J
RCkpCi0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRlbGV0ZUxvY2FsU3RvcmFnZU1vZGlm
aWVkU2luY2Uoc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsg
fSk7Ci0KICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6
OkluZGV4ZWREQkRhdGFiYXNlcykgJiYgIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAg
ICB3ZWJJREJTZXJ2ZXIoc2Vzc2lvbklEKS5jbG9zZUFuZERlbGV0ZURhdGFiYXNlc01vZGlmaWVk
U2luY2UobW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwogCkBAIC0xNjM3
LDggKzE2MjEsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2kKICAgICB9CiAjZW5kaWYKIAot
ICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQp
OyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKLSAgICAgICAgaXRlcmF0b3It
PnZhbHVlLT5kZWxldGVEYXRhTW9kaWZpZWRTaW5jZSh3ZWJzaXRlRGF0YVR5cGVzLCBtb2RpZmll
ZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CisgICAgaWYgKE5ldHdvcmtTdG9yYWdl
TWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMod2Vic2l0ZURhdGFUeXBlcykpIHsKKyAgICAgICAgaWYg
KGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJh
dG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKQorICAgICAgICAgICAgaXRlcmF0b3ItPnZh
bHVlLT5kZWxldGVEYXRhTW9kaWZpZWRTaW5jZSh3ZWJzaXRlRGF0YVR5cGVzLCBtb2RpZmllZFNp
bmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CisgICAgfQogfQogCiBzdGF0aWMgdm9pZCBj
bGVhckRpc2tDYWNoZUVudHJpZXMoTmV0d29ya0NhY2hlOjpDYWNoZSogY2FjaGUsIGNvbnN0IFZl
Y3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzAzLDEyICsxNjg5LDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgT3B0aW8KICAgICAgICAgICAgIENhY2hlU3RvcmFnZTo6RW5naW5lOjpjbGVhckNh
Y2hlc0Zvck9yaWdpbigqdGhpcywgc2Vzc2lvbklELCBTZWN1cml0eU9yaWdpbkRhdGEgeyBvcmln
aW5EYXRhIH0sIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKICAgICB9CiAKLSAgICBpZiAod2Vi
c2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSAm
JiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAgICBtX3N0
b3JhZ2VNYW5hZ2VyU2V0LT5kZWxldGVTZXNzaW9uU3RvcmFnZUZvck9yaWdpbnMoc2Vzc2lvbklE
LCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwotCi0gICAgaWYgKHdlYnNp
dGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpICYmIG1f
c3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgIG1fc3RvcmFn
ZU1hbmFnZXJTZXQtPmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbnMoc2Vzc2lvbklELCBvcmln
aW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwotCiAgICAgaWYgKHdlYnNpdGVEYXRh
VHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpICYmICFz
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgd2ViSURCU2VydmVyKHNlc3Npb25JRCku
Y2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNr
c0hhbmRsZXJdIHsgfSk7CiAKQEAgLTE3NDYsOCArMTcyNiwxMCBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBPcHRpbwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3Jh
Z2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJz
LmVuZCgpKQotICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRlbGV0ZURhdGEod2Vic2l0ZURhdGFU
eXBlcywgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKKyAgICBpZiAoTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJzaXRlRGF0YVR5cGVzKSkgewor
ICAgICAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lv
bklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCisgICAgICAgICAgICBp
dGVyYXRvci0+dmFsdWUtPmRlbGV0ZURhdGEod2Vic2l0ZURhdGFUeXBlcywgb3JpZ2luRGF0YXMs
IFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKKyAgICB9CiAKICAgICBpZiAoYXV0byogbmV0d29y
a1Nlc3Npb24gPSB0aGlzLT5uZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKSB7CiAgICAgICAgIEhh
c2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnNUb0RlbGV0ZU5ldHdvcmtE
YXRhRm9yOwpAQCAtMTkwNCwyOCArMTg4Niw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0
ZUFuZFJlc3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMoUEFMOjpTZXNzCiAg
ICAgICAgIH0pOwogICAgIH0KIAotICAgIGlmIChtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlu
cyhzZXNzaW9uSUQpKSB7Ci0gICAgICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpKSB7Ci0gICAgICAgICAgICBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5nZXRTZXNzaW9uU3RvcmFnZU9yaWdpbnMoc2Vzc2lvbklELCBbcHJvdGVjdGVk
VGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRoaXMsIHNlc3Npb25JRCwgY2FsbGJhY2tBZ2dyZWdhdG9y
LCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvcl0oYXV0byYmIG9yaWdp
bnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5z
KHNlc3Npb25JRCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAg
ICAgIGF1dG8gb3JpZ2luc1RvRGVsZXRlID0gZmlsdGVyRm9yUmVnaXN0cmFibGVEb21haW5zKG9y
aWdpbnMsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLCBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPm1fZG9tYWlucyk7Ci0gICAgICAgICAgICAgICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2VGb3JPcmlnaW5zKHNlc3Npb25JRCwgb3JpZ2luc1Rv
RGVsZXRlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKLSAgICAgICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQt
PmdldExvY2FsU3RvcmFnZU9yaWdpbnMoc2Vzc2lvbklELCBbcHJvdGVjdGVkVGhpcyA9IFJlZiB7
ICp0aGlzIH0sIHRoaXMsIHNlc3Npb25JRCwgY2FsbGJhY2tBZ2dyZWdhdG9yLCBkb21haW5zVG9E
ZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvcl0oYXV0byYmIG9yaWdpbnMpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIW1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIGF1dG8gb3Jp
Z2luc1RvRGVsZXRlID0gZmlsdGVyRm9yUmVnaXN0cmFibGVEb21haW5zKG9yaWdpbnMsIGRvbWFp
bnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLCBjYWxsYmFja0FnZ3JlZ2F0b3It
Pm1fZG9tYWlucyk7Ci0gICAgICAgICAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+ZGVsZXRl
TG9jYWxTdG9yYWdlRm9yT3JpZ2lucyhzZXNzaW9uSUQsIG9yaWdpbnNUb0RlbGV0ZSwgW2NhbGxi
YWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQot
CiAgICAgYXV0byBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhzLmdldChzZXNzaW9uSUQpOwogICAg
IGlmICghcGF0aC5pc0VtcHR5KCkgJiYgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykpIHsKICAgICAgICAgd2ViSURCU2VydmVyKHNl
c3Npb25JRCkuZ2V0T3JpZ2lucyhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0s
IHNlc3Npb25JRCwgY2FsbGJhY2tBZ2dyZWdhdG9yLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29r
aWVXZWJzaXRlRGF0YUZvcl0oYXV0byYmIG9yaWdpbnMpIHsKQEAgLTE5NzIsMTEgKzE5MzIsMTMg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlQW5kUmVzdHJpY3RXZWJzaXRlRGF0YUZvclJl
Z2lzdHJhYmxlRG9tYWlucyhQQUw6OlNlc3MKICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgaWYg
KGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJh
dG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKSB7Ci0gICAgICAgIGl0ZXJhdG9yLT52YWx1
ZS0+ZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyh3ZWJzaXRlRGF0YVR5cGVzLCBkb21h
aW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvciwgW2NhbGxiYWNrQWdncmVnYXRv
cl0oYXV0byBkZWxldGVkRG9tYWlucykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8g
ZG9tYWluIDogZGVsZXRlZERvbWFpbnMpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5tX2RvbWFpbnMuYWRkKFdURk1vdmUoZG9tYWluKSk7Ci0gICAgICAgIH0pOworICAgIGlm
IChOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5cGVzKHdlYnNpdGVEYXRhVHlwZXMp
KSB7CisgICAgICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChz
ZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkgeworICAgICAg
ICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKHdl
YnNpdGVEYXRhVHlwZXMsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9y
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvIGRlbGV0ZWREb21haW5zKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8gZG9tYWluIDogZGVsZXRlZERvbWFpbnMpCisgICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV9kb21haW5zLmFkZChXVEZNb3ZlKGRv
bWFpbikpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBhdXRvIGRh
dGFUeXBlc0ZvclVJUHJvY2VzcyA9IFdlYnNpdGVEYXRhOjpmaWx0ZXIod2Vic2l0ZURhdGFUeXBl
cywgV2Vic2l0ZURhdGFQcm9jZXNzVHlwZTo6VUkpOwpAQCAtMjMwNyw3ICsyMjY5LDggQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6cHJlcGFyZVRvU3VzcGVuZChib29sIGlzU3VzcGVuc2lvbkltbWlu
ZW50LCBDb21wbGV0aW9uSGFuZGwKICAgICB9CiAjZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPnN1c3BlbmQoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICBmb3IgKGF1dG8m
IG1hbmFnZXIgOiBtX3N0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAgbWFuYWdlci0+
c3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpCkBAIC0yMzQ2LDcgKzIzMDksOCBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXN1bWUoKQogICAgIG1fc2hvdWxkU3VzcGVuZElEQlNl
cnZlcnMgPSBmYWxzZTsKICNlbmRpZgogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+cmVzdW1l
KCk7CisgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkp
CisgICAgICAgIG1hbmFnZXItPnJlc3VtZSgpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpw
cmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQpAQCAtMjQ0Miw4ICsyNDA2LDkgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJJREJSb290
UGF0aChQQUw6OlNlc3Npb25JRCBzZXMKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c3luY0xvY2Fs
U3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+d2FpdFVudGlsU3luY2luZ0xvY2FsU3RvcmFnZUZp
bmlzaGVkKCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICBhdXRvIGFnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CisgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpCisg
ICAgICAgIG1hbmFnZXItPnN5bmNMb2NhbFN0b3JhZ2UoW2FnZ3JlZ2F0b3JdIHsgfSk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlc2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNDcz
LDEwICsyNDM4LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVuYW1lT3JpZ2luSW5XZWJzaXRl
RGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFUKICAgICBpZiAob2xkT3JpZ2lu
LmlzRW1wdHkoKSB8fCBuZXdPcmlnaW4uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkg
ewotICAgICAgICBpZiAobV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkK
LSAgICAgICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPnJlbmFtZU9yaWdpbihzZXNzaW9uSUQs
IG9sZE5hbWUsIG5ld05hbWUsIFthZ2dyZWdhdG9yXSB7IH0pOwotICAgIH0KKyAgICBpZiAoYXV0
byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0b3Ig
IT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCisgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+bW92
ZURhdGEob2xkT3JpZ2luLCBuZXdPcmlnaW4sIFthZ2dyZWdhdG9yXSB7IH0pOwogCiAgICAgaWYg
KGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykp
IHsKICAgICAgICAgYXV0byBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhzLmdldChzZXNzaW9uSUQp
OwpAQCAtMjc3MSwyMSArMjczNCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbW92ZUtlcHRB
bGl2ZUxvYWQoTmV0d29ya1Jlc291cmNlTG9hZGVyJiBsb2FkZXIpCiAgICAgICAgIHNlc3Npb24t
PnJlbW92ZUtlcHRBbGl2ZUxvYWQobG9hZGVyKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6
Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6
T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFtX3N0
b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKSB7Ci0gICAgICAgIExPR19FUlJP
UigiQ2Fubm90IGdldCBsb2NhbCBzdG9yYWdlIGluZm9ybWF0aW9uIGZvciBhbiB1bmtub3duIHNl
c3Npb24iKTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmdldExvY2FsU3RvcmFnZU9yaWdp
bkRldGFpbHMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NDbG9zZWQoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgbV9z
dG9yYWdlTWFuYWdlclNldC0+cmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKLQogICAgIGlm
IChhdXRvKiBzZXJ2ZXIgPSBtX3dlYklEQlNlcnZlcnMuZ2V0KHNlc3Npb25JRCkpCiAgICAgICAg
IHNlcnZlci0+cmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IDg4MDE3YzQ0YTEwNWYxYzBm
ZGU1NWIyNGMyZmUwOTliNzY2ZmFmODEuLjVhMjBhN2NmOTcwMTcwZTk0ZGQ3YWE4ZTM4ZmJhZGI5
NTQ2YTA1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKQEAgLTEwNyw3ICsxMDcsNiBAQCBjbGFzcyBOZXR3b3JrUHJveGltaXR5TWFuYWdlcjsK
IGNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIE5ldHdvcmtTdG9yYWdlTWFuYWdl
cjsKIGNsYXNzIFByb2Nlc3NBc3NlcnRpb247Ci1jbGFzcyBTdG9yYWdlTWFuYWdlclNldDsKIGNs
YXNzIFdlYlBhZ2VOZXR3b3JrUGFyYW1ldGVyczsKIGNsYXNzIFdlYlNXU2VydmVyQ29ubmVjdGlv
bjsKIGNsYXNzIFdlYlNXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlvbjsKQEAgLTI5Niw3ICsyOTUs
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKFBB
TDo6U2Vzc2lvbklEKSBjb25zdDsKIAogICAgIHZvaWQgY29ubmVjdGlvblRvV2ViUHJvY2Vzc0Ns
b3NlZChJUEM6OkNvbm5lY3Rpb24mLCBQQUw6OlNlc3Npb25JRCk7Ci0gICAgdm9pZCBnZXRMb2Nh
bFN0b3JhZ2VPcmlnaW5EZXRhaWxzKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYp
PiYmKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgTmV0d29ya0NvbnRl
bnRSdWxlTGlzdE1hbmFnZXImIG5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyKCkgeyByZXR1
cm4gbV9uZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlcjsgfQpAQCAtNTU0LDcgKzU1Miw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNl
c3Npb25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0
eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgsIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpT
ZXNzaW9uSUQpOwogCi0gICAgdm9pZCBhZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oUEFMOjpT
ZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7
CisgICAgdm9pZCBhZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oUEFMOjpTZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgcGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgY29uc3QgU3RyaW5n
JiBsb2NhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKICAgICB2b2lk
IHJlbW92ZVN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCk7CiAKICAgICAv
LyBDb25uZWN0aW9ucyB0byBXZWJQcm9jZXNzZXMuCkBAIC01NzcsOCArNTc1LDYgQEAgcHJpdmF0
ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Nl
c3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPj4gbV9uZXR3b3Jr
U3RvcmFnZVNlc3Npb25zOwogCi0gICAgUmVmPFN0b3JhZ2VNYW5hZ2VyU2V0PiBtX3N0b3JhZ2VN
YW5hZ2VyU2V0OwotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IGYzYzIzZDFjMTg0NmQ1NDM1ZDBiMTMzMTMx
ODQ0ZjQ5NWQyMDUzOTAuLjJlYTY0NWI3ODFhZTczZmRmMjIwM2YxZTk0ZDQwNWUzNjFmZDk2YmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
bWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5tZXNzYWdlcy5pbgpAQCAtMTczLDcgKzE3Myw2IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQ
cm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKICAgICBNYXJrUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRz
QXNFeHBpcmVkRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+ICgpIEFzeW5j
CiAgICAgU2V0UENNRnJhdWRQcmV2ZW50aW9uVmFsdWVzRm9yVGVzdGluZyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIFN0cmluZyBzZWNyZXRUb2tlbiwgU3RyaW5nIHVubGlua2FibGVUb2tlbiwg
U3RyaW5nIHNpZ25hdHVyZSwgU3RyaW5nIGtleUlEKSAtPiAoKSBBc3luYwogICAgIFNldFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXBwQnVuZGxlSURGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgU3RyaW5nIGFwcEJ1bmRsZUlERm9yVGVzdGluZykgLT4gKCkgQXN5bmMKLSAgICBH
ZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgLT4g
KFZlY3RvcjxXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWls
cz4gZGV0YWlscykgQXN5bmMKIAogICAgIFNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JU
ZXN0aW5nKFNlY29uZHMgc2Vjb25kcykgLT4gKCkgU3luY2hyb25vdXMKICAgICBSZXNldFNlcnZp
Y2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKCkgLT4gKCkgU3luY2hyb25vdXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VN
YW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0
b3JhZ2VNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMWRmMTkwYmE4OTU0MzM3ODBkYzY5YjdjZjg3
YjVhMzk4YTM3ZmIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTcxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZU1h
bmFnZXIuaCIKKworI2luY2x1ZGUgIk1lbW9yeVN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU1FM
aXRlU3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVJlZ2lzdHJ5LmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKKy8vIFN1Z2dlc3RlZCBieSBodHRwczovL3d3dy53My5vcmcvVFIvd2Vic3RvcmFnZS8jZGlz
ay1zcGFjZQorY29uc3RleHByIHVuc2lnbmVkIGxvY2FsU3RvcmFnZVF1b3RhSW5CeXRlcyA9IDUg
KiBNQjsKK2NvbnN0ZXhwciBhdXRvIGZpbGVTdWZmaXggPSAiLmxvY2Fsc3RvcmFnZSJfczsKKwor
c3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBmaWxlTmFt
ZVRvT3JpZ2luKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCit7CisgICAgaWYgKCFmaWxlTmFtZS5l
bmRzV2l0aChmaWxlU3VmZml4KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IGF1dG8gc3VmZml4TGVuZ3RoID0gc3RybGVuKGZpbGVTdWZmaXgpOworICAgIGF1dG8gZmlsZU5h
bWVMZW5ndGggPSBmaWxlTmFtZS5sZW5ndGgoKTsKKyAgICBpZiAoZmlsZU5hbWVMZW5ndGggPD0g
c3VmZml4TGVuZ3RoKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byBv
cmlnaW5JZGVudGlmaWVyID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lTGVuZ3RoIC0g
c3VmZml4TGVuZ3RoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhOjpm
cm9tRGF0YWJhc2VJZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpOworfQorCitzdGF0aWMgU3Ry
aW5nIG9yaWdpblRvRmlsZU5hbWUoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4p
Cit7CisgICAgcmV0dXJuIG9yaWdpbi5jbGllbnRPcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkg
KyAiLmxvY2Fsc3RvcmFnZSI7Cit9CisKK1ZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+IExvY2FsU3RvcmFnZU1hbmFnZXI6OmdldE9yaWdpbnNPZkxvY2FsU3RvcmFnZURhdGEoY29u
c3QgU3RyaW5nJiBwYXRoKQoreworICAgIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+IG9yaWdpbnM7CisgICAgZm9yIChhdXRvJiBmaWxlTmFtZSA6IEZpbGVTeXN0ZW06Omxpc3RE
aXJlY3RvcnkocGF0aCkpIHsKKyAgICAgICAgaWYgKGF1dG8gb3JpZ2luID0gZmlsZU5hbWVUb09y
aWdpbihmaWxlTmFtZSkpCisgICAgICAgICAgICBvcmlnaW5zLmFwcGVuZCgqb3JpZ2luKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gb3JpZ2luczsKK30KKworU3RyaW5nIExvY2FsU3RvcmFnZU1hbmFn
ZXI6OmxvY2FsU3RvcmFnZUZpbGVQYXRoKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBpZiAoZGlyZWN0b3J5LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyB7IH07CisKKyAgICByZXR1cm4gRmlsZVN5c3Rl
bTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRpcmVjdG9yeSwgb3JpZ2luVG9GaWxlTmFtZShv
cmlnaW4pKTsKK30KKworTG9jYWxTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTWFuYWdlcihj
b25zdCBTdHJpbmcmIHBhdGgsIFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQorICAgIDog
bV9wYXRoKHBhdGgpCisgICAgLCBtX3JlZ2lzdHJ5KHJlZ2lzdHJ5KQoreworfQorCitib29sIExv
Y2FsU3RvcmFnZU1hbmFnZXI6OmlzQWN0aXZlKCkKK3sKKyAgICByZXR1cm4gbV9zdG9yYWdlQXJl
YSAmJiBtX3N0b3JhZ2VBcmVhLT5oYXNMaXN0ZW5lcnMoKTsKK30KKworYm9vbCBMb2NhbFN0b3Jh
Z2VNYW5hZ2VyOjpoYXNEYXRhSW5NZW1vcnkoKQoreworICAgIGlmIChtX3N0b3JhZ2VBcmVhICYm
IGlzPE1lbW9yeVN0b3JhZ2VBcmVhPigqbV9zdG9yYWdlQXJlYSkpCisgICAgICAgIHJldHVybiAh
bV9zdG9yYWdlQXJlYS0+aXNFbXB0eSgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IExvY2FsU3RvcmFnZU1hbmFnZXI6OmNsZWFyRGF0YSgpCit7CisgICAgaWYgKG1fc3RvcmFnZUFy
ZWEpCisgICAgICAgIG1fc3RvcmFnZUFyZWEtPmNsZWFyKCk7Cit9CisKK3ZvaWQgTG9jYWxTdG9y
YWdlTWFuYWdlcjo6Y2xvc2UoKQoreworICAgIGlmIChtX3N0b3JhZ2VBcmVhICYmIGlzPFNRTGl0
ZVN0b3JhZ2VBcmVhPigqbV9zdG9yYWdlQXJlYSkpCisgICAgICAgIGRvd25jYXN0PFNRTGl0ZVN0
b3JhZ2VBcmVhPigqbV9zdG9yYWdlQXJlYSkuY2xvc2UoKTsKK30KKwordm9pZCBMb2NhbFN0b3Jh
Z2VNYW5hZ2VyOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCkKK3sKKyAgICBpZiAobV9zdG9yYWdl
QXJlYSAmJiBpczxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fc3RvcmFnZUFyZWEpKQorICAgICAgICBk
b3duY2FzdDxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fc3RvcmFnZUFyZWEpLmhhbmRsZUxvd01lbW9y
eVdhcm5pbmcoKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpzeW5jTG9jYWxTdG9y
YWdlKCkKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYSAmJiBpczxTUUxpdGVTdG9yYWdlQXJlYT4o
Km1fc3RvcmFnZUFyZWEpKQorICAgICAgICBkb3duY2FzdDxTUUxpdGVTdG9yYWdlQXJlYT4oKm1f
c3RvcmFnZUFyZWEpLmNvbW1pdFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKK30KKwordm9pZCBM
b2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQgY29ubmVjdGlvbikKK3sKKyAgICBBU1NFUlQobV9zdG9yYWdlQXJlYSk7CisgICAgbV9z
dG9yYWdlQXJlYS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7CisKKyAgICBpZiAoaGFzRGF0
YUluTWVtb3J5KCkgfHwgaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZWdp
c3RyeS51bnJlZ2lzdGVyU3RvcmFnZUFyZWEobV9zdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpKTsK
KyAgICBtX3N0b3JhZ2VBcmVhID0gbnVsbHB0cjsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5h
Z2VyOjplbnN1cmVTdG9yYWdlQXJlYShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdp
biwgY29uc3QgU3RyaW5nJiBwYXRoLCBzdGQ6Om9wdGlvbmFsPFJlZjxXb3JrUXVldWU+PiB3b3Jr
UXVldWUpCit7CisgICAgaWYgKG1fc3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghcGF0aC5pc0VtcHR5KCkgJiYgd29ya1F1ZXVlKQorICAgICAgICBtX3N0b3JhZ2VBcmVh
ID0gbWFrZVVuaXF1ZTxTUUxpdGVTdG9yYWdlQXJlYT4obG9jYWxTdG9yYWdlUXVvdGFJbkJ5dGVz
LCBvcmlnaW4sIHBhdGgsIFdURk1vdmUoKndvcmtRdWV1ZSkpOworICAgIGVsc2UKKyAgICAgICAg
bV9zdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8TWVtb3J5U3RvcmFnZUFyZWE+KG9yaWdpbiwgU3Rv
cmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZTo6TG9jYWwpOworICAgIG1fcmVnaXN0cnkucmVnaXN0
ZXJTdG9yYWdlQXJlYShtX3N0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCksICptX3N0b3JhZ2VBcmVh
KTsKK30KKworU3RvcmFnZUFyZWFJZGVudGlmaWVyIExvY2FsU3RvcmFnZU1hbmFnZXI6OmNvbm5l
Y3RUb0xvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9u
LCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgUmVmPFdvcmtRdWV1ZT4mJiB3
b3JrUXVldWUpCit7CisgICAgZW5zdXJlU3RvcmFnZUFyZWEob3JpZ2luLCBtX3BhdGgsIHN0ZDo6
bWFrZV9vcHRpb25hbChXVEZNb3ZlKHdvcmtRdWV1ZSkpKTsKKyAgICBBU1NFUlQobV9wYXRoLmlz
RW1wdHkoKSB8fCBtX3N0b3JhZ2VBcmVhLT50eXBlKCkgPT0gU3RvcmFnZUFyZWFCYXNlOjpUeXBl
OjpTUUxpdGUpOworCisgICAgbV9zdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVjdGlvbik7
CisgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKTsKK30KKworU3RvcmFnZUFy
ZWFJZGVudGlmaWVyIExvY2FsU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RUb1RyYW5zaWVudExvY2Fs
U3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBlbnN1cmVTdG9yYWdlQXJlYShv
cmlnaW4sIFN0cmluZyB7IH0sIHsgfSk7CisgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWEtPnR5cGUo
KSA9PSBTdG9yYWdlQXJlYUJhc2U6OlR5cGU6Ok1lbW9yeSk7CisKKyAgICBtX3N0b3JhZ2VBcmVh
LT5hZGRMaXN0ZW5lcihjb25uZWN0aW9uKTsKKyAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+aWRl
bnRpZmllcigpOworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9t
U3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdl
QXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBpZiAoIW1fc3RvcmFnZUFyZWEgfHwg
bV9zdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpICE9IGlkZW50aWZpZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIGNvbm5lY3Rpb25DbG9zZWQoY29ubmVjdGlvbik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c3RvcmFnZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTNhMjQ2ODE0ZDE3NWQ4
NDM2YjhjYTNiMzMxZmNiOWRkMTY5ZjlkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmgKQEAgLTAsMCAr
MSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3RvcmFnZUFy
ZWFJZGVudGlmaWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBDbGllbnRPcmln
aW47CitzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgU3RvcmFnZUFyZWFCYXNlOworY2xhc3MgU3RvcmFnZUFyZWFSZWdpc3RyeTsKKwor
Y2xhc3MgTG9jYWxTdG9yYWdlTWFuYWdlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
IGdldE9yaWdpbnNPZkxvY2FsU3RvcmFnZURhdGEoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBz
dGF0aWMgU3RyaW5nIGxvY2FsU3RvcmFnZUZpbGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2VyKGNv
bnN0IFN0cmluZyYgcGF0aCwgU3RvcmFnZUFyZWFSZWdpc3RyeSYpOworICAgIGJvb2wgaXNBY3Rp
dmUoKTsKKyAgICBib29sIGhhc0RhdGFJbk1lbW9yeSgpOworICAgIHZvaWQgY2xlYXJEYXRhKCk7
CisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgaGFuZGxlTG93TWVtb3J5V2FybmluZygpOwor
ICAgIHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOworICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChJ
UEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKKworICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBj
b25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIGNvbnN0
IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIFJlZjxXb3JrUXVldWU+JiYpOworICAgIFN0b3JhZ2VB
cmVhSWRlbnRpZmllciBjb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIHZv
aWQgZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBT
dG9yYWdlQXJlYUlkZW50aWZpZXIpOworCitwcml2YXRlOgorICAgIHZvaWQgZW5zdXJlU3RvcmFn
ZUFyZWEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgY29uc3QgU3RyaW5nJiwgc3RkOjpv
cHRpb25hbDxSZWY8V29ya1F1ZXVlPj4pOworCisgICAgU3RyaW5nIG1fcGF0aDsKKyAgICBTdG9y
YWdlQXJlYVJlZ2lzdHJ5JiBtX3JlZ2lzdHJ5OworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdl
QXJlYUJhc2U+IG1fc3RvcmFnZUFyZWE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5
U3RvcmFnZUFyZWEuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01l
bW9yeVN0b3JhZ2VBcmVhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYjA2OWFkZjhlZGYxMjE1ZDVhYTI2ZTM1
MmVkMmM0ODlmNzE1ZjllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNwcApAQCAtMCwwICsxLDEwMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZW1vcnlTdG9yYWdl
QXJlYS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlTWFwLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitNZW1vcnlTdG9yYWdlQXJlYTo6TWVtb3J5U3RvcmFnZUFyZWEoY29uc3QgV2Vi
Q29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGUg
dHlwZSkKKyAgICA6IFN0b3JhZ2VBcmVhQmFzZShXZWJDb3JlOjpTdG9yYWdlTWFwOjpub1F1b3Rh
LCBvcmlnaW4pCisgICAgLCBtX3N0b3JhZ2VUeXBlKHR5cGUpCit7CisgICAgbV9tYXAgPSBtYWtl
VW5pcXVlPFdlYkNvcmU6OlN0b3JhZ2VNYXA+KFdlYkNvcmU6OlN0b3JhZ2VNYXA6Om5vUXVvdGEp
OworfQorCitib29sIE1lbW9yeVN0b3JhZ2VBcmVhOjppc0VtcHR5KCkKK3sKKyAgICByZXR1cm4g
IW1fbWFwLT5sZW5ndGgoKTsKK30KKwordm9pZCBNZW1vcnlTdG9yYWdlQXJlYTo6Y2xlYXIoKQor
eworICAgIG1fbWFwLT5jbGVhcigpOworICAgIG5vdGlmeUxpc3RlbmVyc0Fib3V0Q2xlYXIoKTsK
K30KKworSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTWVtb3J5U3RvcmFnZUFyZWE6OmFsbEl0ZW1z
KCkKK3sKKyAgICByZXR1cm4gbV9tYXAtPml0ZW1zKCk7Cit9CisKK0V4cGVjdGVkPHZvaWQsIFN0
b3JhZ2VFcnJvcj4gTWVtb3J5U3RvcmFnZUFyZWE6OnNldEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpV
bmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIHN0b3JhZ2VBcmVh
SW1wbElELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpCit7CisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIGJvb2wgaGFzUXVv
dGFFcnJvciA9IGZhbHNlOworICAgIG1fbWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVl
LCBoYXNRdW90YUVycm9yKTsKKyAgICBpZiAoaGFzUXVvdGFFcnJvcikKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6UXVvdGFFeGNlZWRlZCk7CisKKyAgICBkaXNw
YXRjaEV2ZW50cyhjb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJRCwga2V5LCBvbGRWYWx1ZSwg
dmFsdWUsIHVybFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OworfQorCitFeHBlY3RlZDx2b2lk
LCBTdG9yYWdlRXJyb3I+IE1lbW9yeVN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVj
dGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9y
YWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
KQoreworICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICBtX21hcC0+cmVtb3ZlSXRlbShrZXksIG9s
ZFZhbHVlKTsKKyAgICBkaXNwYXRjaEV2ZW50cyhjb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJ
RCwga2V5LCBvbGRWYWx1ZSwgU3RyaW5nKCksIHVybFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9
OworfQorCitFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IE1lbW9yeVN0b3JhZ2VBcmVhOjpj
bGVhcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1w
bElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQorewor
ICAgIGlmICghbV9tYXAtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
U3RvcmFnZUVycm9yOjpJdGVtTm90Rm91bmQpOworCisgICAgbV9tYXAtPmNsZWFyKCk7CisgICAg
ZGlzcGF0Y2hFdmVudHMoY29ubmVjdGlvbiwgaW1wbElkZW50aWZpZXIsIFN0cmluZygpLCBTdHJp
bmcoKSwgU3RyaW5nKCksIHVybFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+IE1lbW9yeVN0b3JhZ2VBcmVhOjpjbG9uZSgp
IGNvbnN0Cit7CisgICAgYXV0byBzdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8TWVtb3J5U3RvcmFn
ZUFyZWE+KG9yaWdpbigpLCBtX3N0b3JhZ2VUeXBlKTsKKyAgICAqc3RvcmFnZUFyZWEtPm1fbWFw
ID0gKm1fbWFwOworCisgICAgcmV0dXJuIHN0b3JhZ2VBcmVhOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworCisKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NWNmZTc4ZTdl
YzQ3NTc2MGJhZjU5NTRhN2FlNTNlYjFkZWJjMGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuaApAQCAtMCww
ICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdG9yYWdl
QXJlYUJhc2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU3RvcmFnZU1hcDsKK30K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE1lbW9yeVN0b3JhZ2VBcmVhIGZpbmFsIDog
cHVibGljIFN0b3JhZ2VBcmVhQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgTWVtb3J5U3RvcmFnZUFyZWEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiwgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZSA9IFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFn
ZVR5cGU6OlNlc3Npb24pOworCisgICAgYm9vbCBpc0VtcHR5KCkgZmluYWw7CisgICAgdm9pZCBj
bGVhcigpIGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlTdG9yYWdlQXJlYT4gY2xv
bmUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICAvLyBTdG9yYWdlQXJlYUJhc2UKKyAgICBTdG9y
YWdlQXJlYUJhc2U6OlR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFN0b3JhZ2VBcmVh
QmFzZTo6VHlwZTo6TWVtb3J5OyB9OworICAgIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGUg
c3RvcmFnZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3N0b3JhZ2VUeXBlOyB9CisgICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gYWxsSXRlbXMoKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2
b2lkLCBTdG9yYWdlRXJyb3I+IHNldEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3Rv
cmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2b2lk
LCBTdG9yYWdlRXJyb3I+IHJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3Rv
cmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IGNsZWFy
KElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKworICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlN0b3JhZ2VNYXA+IG1fbWFwOworICAgIFN0b3JhZ2VBcmVhQmFzZTo6U3Rv
cmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWEpCisg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlJiBhcmVh
KSB7IHJldHVybiBhcmVhLnR5cGUoKSA9PSBXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6
TWVtb3J5OyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1h
bmFnZXIuY3BwCmluZGV4IGMxMGFjYmRkNjRmZTA0ZWZmMTZhMWM4Yjc0ZDJiZmMxOTUzZGJkNzMu
Ljc1YjFjNGI2MjIwNDFiODg3MWQyYjQzYzZhMWU3MGEyNzkwOTMyNTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3Rv
cmFnZU1hbmFnZXIuY3BwCkBAIC0yOCwxMiArMjgsMTkgQEAKIAogI2luY2x1ZGUgIkZpbGVTeXN0
ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtU3RvcmFnZU1h
bmFnZXIuaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiT3JpZ2luU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJTZXNzaW9uU3RvcmFnZU1h
bmFnZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUJhc2UuaCIKKyNpbmNsdWRlICJTdG9yYWdl
QXJlYU1hcE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFSZWdpc3RyeS5oIgogI2lu
Y2x1ZGUgIldlYnNpdGVEYXRhVHlwZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmln
aW5EYXRhLmg+CiAjaW5jbHVkZSA8cGFsL2NyeXB0by9DcnlwdG9EaWdlc3QuaD4KICNpbmNsdWRl
IDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvU3VzcGVuZGFibGVXb3JrUXVldWUuaD4KICNp
bmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0Jhc2U2NC5oPgogCkBAIC00Myw3ICs1MCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gcmVhZE9yaWdpbkZyb21GaWxlKGNvbnN0IFN0cmluZyYg
ZmlsCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBpZiAoIUZpbGVT
eXN0ZW06OmZpbGVFeGlzdHMoZmlsZVBhdGgpKQorICAgIGlmIChmaWxlUGF0aC5pc0VtcHR5KCkg
fHwgIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZVBhdGgpKQogICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCiAgICAgYXV0byBvcmlnaW5GaWxlSGFuZGxlID0gRmlsZVN5c3RlbTo6b3Bl
bkZpbGUoZmlsZVBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7CkBAIC02Niw3
ICs3Myw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gcmVh
ZE9yaWdpbkZyb21GaWxlKGNvbnN0IFN0cmluZyYgZmlsCiAKIHN0YXRpYyB2b2lkIHdyaXRlT3Jp
Z2luVG9GaWxlSWZOZWNlc3NhcnkoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgY29uc3QgV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVFeGlz
dHMoZmlsZVBhdGgpKQorICAgIGlmIChmaWxlUGF0aC5pc0VtcHR5KCkgfHwgRmlsZVN5c3RlbTo6
ZmlsZUV4aXN0cyhmaWxlUGF0aCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZpbGVTeXN0ZW06
Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKGZpbGVQYXRoKSk7CkBA
IC03Niw3ICs4Myw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlT3JpZ2luVG9GaWxlSWZOZWNlc3Nhcnko
Y29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgY29uc3QgV2ViQ29yZTo6CiAgICAgfSk7CiAKICAgICBp
ZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQob3JpZ2luRmlsZUhhbmRsZSkpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJ3cml0ZU9yaWdpblRvRmlsZUlmTmVjZXNzYXJ5OiBGYWlsZWQgdG8gb3Bl
biBvcmlnaW4gZmlsZSIpOworICAgICAgICBMT0dfRVJST1IoIndyaXRlT3JpZ2luVG9GaWxlSWZO
ZWNlc3Nhcnk6IEZhaWxlZCB0byBvcGVuIG9yaWdpbiBmaWxlICclcyciLCBmaWxlUGF0aC51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTMsMjAgKzEwMCwyMiBA
QCBzdGF0aWMgdm9pZCBkZWxldGVPcmlnaW5GaWxlSWZOZWNlc3NhcnkoY29uc3QgU3RyaW5nJiBm
aWxlUGF0aCkKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShmaWxlUGF0aCk7CiB9CiAK
LVJlZjxOZXR3b3JrU3RvcmFnZU1hbmFnZXI+IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y3JlYXRl
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoKQorUmVmPE5ldHdv
cmtTdG9yYWdlTWFuYWdlcj4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBhdGgsIHN0ZDo6b3B0aW9uYWw8U3RyaW5n
PiBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5l
dHdvcmtTdG9yYWdlTWFuYWdlcihzZXNzaW9uSUQsIHBhdGgpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBOZXR3b3JrU3RvcmFnZU1hbmFnZXIoc2Vzc2lvbklELCBwYXRoLCBjdXN0b21Mb2Nh
bFN0b3JhZ2VQYXRoKSk7CiB9CiAKLU5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6TmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoKQor
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXIoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBhdGgsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBj
dXN0b21Mb2NhbFN0b3JhZ2VQYXRoKQogICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQotICAg
ICwgbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5TdG9yYWdlIikp
CisgICAgLCBtX3F1ZXVlKFN1c3BlbmRhYmxlV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5X
ZWJLaXQuU3RvcmFnZSIpKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAg
ICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0s
IHBhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgeworICAgIG1fcXVldWUtPmRp
c3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgcGF0aCA9IHBhdGgu
aXNvbGF0ZWRDb3B5KCksIGN1c3RvbUxvY2FsU3RvcmFnZVBhdGggPSBjcm9zc1RocmVhZENvcHko
Y3VzdG9tTG9jYWxTdG9yYWdlUGF0aCldKCkgbXV0YWJsZSB7CiAgICAgICAgIG1fZmlsZVN5c3Rl
bVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSA9IG1ha2VVbmlxdWU8RmlsZVN5c3RlbVN0b3JhZ2VIYW5k
bGVSZWdpc3RyeT4oKTsKKyAgICAgICAgbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5ID0gbWFrZVVuaXF1
ZTxTdG9yYWdlQXJlYVJlZ2lzdHJ5PigpOwogICAgICAgICBtX3BhdGggPSBwYXRoOworICAgICAg
ICBtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGggPSBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoOwogICAg
ICAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGF1dG8gc2FsdFBhdGgg
PSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9wYXRoLCAic2FsdCIpOwog
ICAgICAgICAgICAgbV9zYWx0ID0gRmlsZVN5c3RlbTo6cmVhZE9yTWFrZVNhbHQoc2FsdFBhdGgp
LnZhbHVlX29yKEZpbGVTeXN0ZW06OlNhbHQoKSk7CkBAIC0xMjAsNiArMTI5LDExIEBAIE5ldHdv
cmtTdG9yYWdlTWFuYWdlcjo6fk5ldHdvcmtTdG9yYWdlTWFuYWdlcigpCiAgICAgQVNTRVJUKG1f
Y2xvc2VkKTsKIH0KIAorYm9vbCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5cGVz
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzKQoreworICAgIHJldHVybiB0eXBlcy5j
b250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkgfHwgdHlwZXMuY29udGFpbnMo
V2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkgfHwgdHlwZXMuY29udGFpbnMoV2Vic2l0
ZURhdGFUeXBlOjpGaWxlU3lzdGVtKTsKK30KKwogdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmNsb3NlKCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTMzLDcgKzE0
Nyw2IEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbG9zZSgpCiAKICAgICBtX3F1ZXVl
LT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dKCkgbXV0YWJs
ZSB7CiAgICAgICAgIG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMuY2xlYXIoKTsKLSAgICAg
ICAgbV9zZXNzaW9uT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmNsZWFyKCk7CiAgICAgICAgIG1fZmls
ZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSA9IG51bGxwdHI7CiAKICAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlz
KV0geyB9KTsKQEAgLTE3Nyw3ICsxOTAsNyBAQCBzdGF0aWMgU3RyaW5nIGVuY29kZShjb25zdCBT
dHJpbmcmIHN0cmluZywgRmlsZVN5c3RlbTo6U2FsdCBzYWx0KQogc3RhdGljIFN0cmluZyBvcmln
aW5EaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNs
aWVudE9yaWdpbiYgb3JpZ2luLCBGaWxlU3lzdGVtOjpTYWx0IHNhbHQpCiB7CiAgICAgaWYgKHJv
b3RQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHJvb3RQYXRoOworICAgICAgICByZXR1
cm4gU3RyaW5nIHsgfTsKIAogICAgIGF1dG8gZW5jb2RlZFRvcE9yaWdpbiA9IGVuY29kZShvcmln
aW4udG9wT3JpZ2luLnRvU3RyaW5nKCksIHNhbHQpOwogICAgIGF1dG8gZW5jb2RlZE9wZW5pbmdP
cmlnaW4gPSBlbmNvZGUob3JpZ2luLmNsaWVudE9yaWdpbi50b1N0cmluZygpLCBzYWx0KTsKQEAg
LTE4Niw2ICsxOTksOCBAQCBzdGF0aWMgU3RyaW5nIG9yaWdpbkRpcmVjdG9yeVBhdGgoY29uc3Qg
U3RyaW5nJiByb290UGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50TwogCiBzdGF0aWMgU3RyaW5n
IG9yaWdpbkZpbGVQYXRoKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5KQogeworICAgIGlmIChkaXJl
Y3RvcnkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nIHsgfTsKICAgICByZXR1cm4g
RmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRpcmVjdG9yeSwgIm9yaWdpbiJf
cyk7CiB9CiAKQEAgLTE5NiwxNiArMjExLDM3IEBAIE9yaWdpblN0b3JhZ2VNYW5hZ2VyJiBOZXR3
b3JrU3RvcmFnZU1hbmFnZXI6OmxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIoY29uc3QgV2ViCiAg
ICAgcmV0dXJuICptX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmVuc3VyZShvcmlnaW4sIFsm
XSB7CiAgICAgICAgIGF1dG8gb3JpZ2luRGlyZWN0b3J5ID0gb3JpZ2luRGlyZWN0b3J5UGF0aCht
X3BhdGgsIG9yaWdpbiwgbV9zYWx0KTsKICAgICAgICAgd3JpdGVPcmlnaW5Ub0ZpbGVJZk5lY2Vz
c2FyeShvcmlnaW5GaWxlUGF0aChvcmlnaW5EaXJlY3RvcnkpLCBvcmlnaW4pOwotICAgICAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxPcmlnaW5TdG9yYWdlTWFuYWdlcj4oV1RGTW92ZShvcmlnaW5EaXJl
Y3RvcnkpKTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGxvY2FsU3RvcmFnZVBhdGg7
CisgICAgICAgIGlmIChtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgpCisgICAgICAgICAgICBsb2Nh
bFN0b3JhZ2VQYXRoID0gTG9jYWxTdG9yYWdlTWFuYWdlcjo6bG9jYWxTdG9yYWdlRmlsZVBhdGgo
Km1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgb3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmlxdWU8T3JpZ2luU3RvcmFnZU1hbmFnZXI+KFdURk1vdmUob3JpZ2luRGlyZWN0b3J5KSwgV1RG
TW92ZShsb2NhbFN0b3JhZ2VQYXRoKSk7CiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCi12
b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBv
c3NpYmxlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQorYm9vbCBOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OnJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShjb25z
dCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKLSAgICBpZiAoYXV0byBpdGVyYXRv
ciA9IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMuZmluZChvcmlnaW4pOyBpdGVyYXRvciAh
PSBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmVuZCgpKSB7Ci0gICAgICAgIGlmICghaXRl
cmF0b3ItPnZhbHVlLT5pc0FjdGl2ZSgpKQotICAgICAgICAgICAgbV9sb2NhbE9yaWdpblN0b3Jh
Z2VNYW5hZ2Vycy5yZW1vdmUoaXRlcmF0b3IpOwotICAgIH0KKyAgICBhdXRvIGl0ZXJhdG9yID0g
bV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5maW5kKG9yaWdpbik7CisgICAgaWYgKGl0ZXJh
dG9yID09IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMuZW5kKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZS0+aXNBY3RpdmUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5yZW1vdmUo
aXRlcmF0b3IpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFu
YWdlcjo6ZGVsZXRlT3JpZ2luRGlyZWN0b3J5SWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGll
bnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBib29sIGlzRW1wdHkgPSBsb2NhbE9yaWdpblN0b3Jh
Z2VNYW5hZ2VyKG9yaWdpbikuaXNFbXB0eSgpOworICAgIGJvb2wgcmVtb3ZlZCA9IHJlbW92ZU9y
aWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShvcmlnaW4pOworICAgIGlmICghcmVtb3ZlZCB8
fCAhaXNFbXB0eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBvcmlnaW5EaXJlY3Rvcnkg
PSBvcmlnaW5EaXJlY3RvcnlQYXRoKG1fcGF0aCwgb3JpZ2luLCBtX3NhbHQpOworICAgIGF1dG8g
ZmlsZVBhdGggPSBvcmlnaW5GaWxlUGF0aChvcmlnaW5EaXJlY3RvcnkpOworICAgIGRlbGV0ZU9y
aWdpbkZpbGVJZk5lY2Vzc2FyeShmaWxlUGF0aCk7CisgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRW1w
dHlEaXJlY3Rvcnkob3JpZ2luRGlyZWN0b3J5KTsKIH0KIAogdm9pZCBOZXR3b3JrU3RvcmFnZU1h
bmFnZXI6OnBlcnNpc3RlZChjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzMiw5
ICsyNjgsNiBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xlYXJTdG9yYWdlRm9yVGVz
dGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgYwogICAgICAgICBmb3IgKGF1dG8mIG1h
bmFnZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKQogICAgICAgICAg
ICAgbWFuYWdlci0+c2V0UGVyc2lzdGVkKGZhbHNlKTsKIAotICAgICAgICBmb3IgKGF1dG8mIG1h
bmFnZXIgOiBtX3Nlc3Npb25PcmlnaW5TdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpCi0gICAgICAg
ICAgICBtYW5hZ2VyLT5zZXRQZXJzaXN0ZWQoZmFsc2UpOwotCiAgICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogICAgICAgICB9KTsKQEAgLTM4Miwx
NCArNDE1LDYgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmdldEhhbmRsZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OkZpbGUKICAgICBjb21wbGV0aW9uSGFuZGxl
cihoYW5kbGUtPmdldEhhbmRsZShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIFdURk1vdmUobmFtZSkp
KTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2Vic2l0ZURhdGFUeXBlPiB0b1dlYnNpdGVE
YXRhVHlwZShjb25zdCBTdHJpbmcmIHN0b3JhZ2VUeXBlKQotewotICAgIGlmIChzdG9yYWdlVHlw
ZSA9PSAiRmlsZVN5c3RlbSIpCi0gICAgICAgIHJldHVybiBXZWJzaXRlRGF0YVR5cGU6OkZpbGVT
eXN0ZW07Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCiB2b2lkIE5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6Zm9yRWFjaE9yaWdpbkRpcmVjdG9yeShjb25zdCBGdW5jdGlvbjx2b2lkKGNv
bnN0IFN0cmluZyYpPiYgYXBwbHkpCiB7CiAgICAgZm9yIChhdXRvJiB0b3BPcmlnaW4gOiBGaWxl
U3lzdGVtOjpsaXN0RGlyZWN0b3J5KG1fcGF0aCkpIHsKQEAgLTQwMSwzMCArNDI2LDQ3IEBAIHZv
aWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpmb3JFYWNoT3JpZ2luRGlyZWN0b3J5KGNvbnN0IEZ1
bmN0aW9uPHZvaWQoY29uc3QgU3RyCiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKGF1dG8mIG9w
ZW5pbmdPcmlnaW4gOiBvcGVuaW5nT3JpZ2lucykgeworICAgICAgICAgICAgaWYgKG9wZW5pbmdP
cmlnaW4gPT0gIi5EU19TdG9yZSIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKICAgICAg
ICAgICAgIGF1dG8gb3BlbmluZ09yaWdpbkRpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudCh0b3BPcmlnaW5EaXJlY3RvcnksIG9wZW5pbmdPcmlnaW4pOwogICAg
ICAgICAgICAgYXBwbHkob3BlbmluZ09yaWdpbkRpcmVjdG9yeSk7CiAgICAgICAgIH0KICAgICB9
CiB9CiAKK0hhc2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OmdldEFsbE9yaWdpbnMoKQoreworICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2lu
PiBhbGxPcmlnaW5zOworICAgIGZvciAoYXV0byBvcmlnaW4gOiBtX2xvY2FsT3JpZ2luU3RvcmFn
ZU1hbmFnZXJzLmtleXMoKSkKKyAgICAgICAgYWxsT3JpZ2lucy5hZGQob3JpZ2luKTsKKworICAg
IGZvckVhY2hPcmlnaW5EaXJlY3RvcnkoWyZdKGF1dG8gZGlyZWN0b3J5KSBtdXRhYmxlIHsKKyAg
ICAgICAgaWYgKGF1dG8gb3JpZ2luID0gcmVhZE9yaWdpbkZyb21GaWxlKG9yaWdpbkZpbGVQYXRo
KGRpcmVjdG9yeSkpKQorICAgICAgICAgICAgYWxsT3JpZ2lucy5hZGQoKm9yaWdpbik7CisgICAg
fSk7CisKKyAgICBpZiAobV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKSB7CisgICAgICAgIGF1dG8g
b3JpZ2lucyA9IExvY2FsU3RvcmFnZU1hbmFnZXI6OmdldE9yaWdpbnNPZkxvY2FsU3RvcmFnZURh
dGEoKm1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCk7CisgICAgICAgIGZvciAoYXV0byBvcmlnaW4g
OiBvcmlnaW5zKQorICAgICAgICAgICAgYWxsT3JpZ2lucy5hZGQoV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luIHsgb3JpZ2luLCBvcmlnaW4gfSk7CisgICAgfQorCisgICAgcmV0dXJuIGFsbE9yaWdpbnM7
Cit9CisKIFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
ZmV0Y2hEYXRhRnJvbURpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdGFyZ2V0VHlwZXMp
CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBIYXNoTWFwPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4+IG9yaWdp
blR5cGVzOwotICAgIGZvckVhY2hPcmlnaW5EaXJlY3RvcnkoWyZdKGF1dG8gZGlyZWN0b3J5KSBt
dXRhYmxlIHsKLSAgICAgICAgYXV0byBvcmlnaW4gPSByZWFkT3JpZ2luRnJvbUZpbGUob3JpZ2lu
RmlsZVBhdGgoZGlyZWN0b3J5KSk7Ci0gICAgICAgIGlmICghb3JpZ2luKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGZvciAoYXV0byYgc3RvcmFnZVR5cGUgOiBGaWxlU3lzdGVtOjps
aXN0RGlyZWN0b3J5KGRpcmVjdG9yeSkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHR5cGUgPSB0
b1dlYnNpdGVEYXRhVHlwZShzdG9yYWdlVHlwZSk7IHR5cGUgJiYgdGFyZ2V0VHlwZXMuY29udGFp
bnMoKnR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gUmV0dXJuIGJvdGggdG9wIG9yaWdpbiBh
bmQgb3BlbmluZyBvcmlnaW4gZm9yIHRoaXMgZGF0YS4KLSAgICAgICAgICAgICAgICBvcmlnaW5U
eXBlcy5hZGQob3JpZ2luLT5jbGllbnRPcmlnaW4sIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IHsgfSkuaXRlcmF0b3ItPnZhbHVlLmFkZCgqdHlwZSk7Ci0gICAgICAgICAgICAgICAgb3JpZ2lu
VHlwZXMuYWRkKG9yaWdpbi0+dG9wT3JpZ2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB7
IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQoKnR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfSk7CisgICAgYXV0byBhbGxPcmlnaW5zID0gZ2V0QWxsT3JpZ2lucygpOworICAgIGZv
ciAoYXV0byBvcmlnaW4gOiBhbGxPcmlnaW5zKSB7CisgICAgICAgIGF1dG8gdHlwZXMgPSBsb2Nh
bE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbikuZmV0Y2hEYXRhKHRhcmdldFR5cGVzKTsKKyAg
ICAgICAgb3JpZ2luVHlwZXMuYWRkKG9yaWdpbi5jbGllbnRPcmlnaW4sIE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IHsgfSkuaXRlcmF0b3ItPnZhbHVlLmFkZCh0eXBlcyk7CisgICAgICAgIG9y
aWdpblR5cGVzLmFkZChvcmlnaW4udG9wT3JpZ2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQodHlwZXMpOworICAgICAgICByZW1vdmVPcmlnaW5T
dG9yYWdlTWFuYWdlcklmUG9zc2libGUob3JpZ2luKTsKKyAgICB9CiAKICAgICBWZWN0b3I8V2Vi
c2l0ZURhdGE6OkVudHJ5PiBlbnRyaWVzOwogICAgIGZvciAoYXV0byBbb3JpZ2luLCB0eXBlc10g
OiBvcmlnaW5UeXBlcykgewpAQCAtNDQ4LDM1ICs0OTAsMjAgQEAgdm9pZCBOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OmZldGNoRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgQ29t
cGxldGkKICAgICB9KTsKIH0KIAotVmVjdG9yPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gTmV0d29y
a1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IHR5cGVzLCBXYWxsVGltZSBtb2RpZmllZFNpbmNlVGltZSwgY29uc3QgRnVuY3Rpb248Ym9v
bChjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKT4mIGZpbHRlcikKK0hhc2hTZXQ8V2ViQ29y
ZTo6Q2xpZW50T3JpZ2luPiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZURhdGFPbkRpc2so
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2VU
aW1lLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpPiYg
ZmlsdGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgVmVjdG9y
PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gZGVsZXRlZE9yaWdpbnM7Ci0gICAgZm9yRWFjaE9yaWdp
bkRpcmVjdG9yeShbJl0oYXV0byBkaXJlY3RvcnkpIG11dGFibGUgewotICAgICAgICBhdXRvIGZp
bGVQYXRoID0gb3JpZ2luRmlsZVBhdGgoZGlyZWN0b3J5KTsKLSAgICAgICAgYXV0byBvcmlnaW4g
PSByZWFkT3JpZ2luRnJvbUZpbGUoZmlsZVBhdGgpOwotICAgICAgICBpZiAoIW9yaWdpbikgewot
ICAgICAgICAgICAgLy8gSWYgb3JpZ2luIGNhbm5vdCBiZSByZXRyaWV2ZWQsIGJ1dCB3ZSBhcmUg
YXNrZWQgdG8gcmVtb3ZlIGRhdGEgZm9yIGFsbCBvcmlnaW5zLCByZW1vdmUgaXQuCi0gICAgICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpk
ZWxldGVEYXRhT25EaXNrIGZhaWxlZCB0byByZWFkIG9yaWdpbiBmcm9tICclcyciLCBmaWxlUGF0
aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXIoV2ViQ29yZTo6Q2xpZW50
T3JpZ2luIHsgfSkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHRlbXBPcmlnaW5TdG9yYWdlTWFu
YWdlciA9IG1ha2VVbmlxdWU8T3JpZ2luU3RvcmFnZU1hbmFnZXI+KFN0cmluZyB7IGRpcmVjdG9y
eSB9KTsKLSAgICAgICAgICAgICAgICB0ZW1wT3JpZ2luU3RvcmFnZU1hbmFnZXItPmRlbGV0ZURh
dGEodHlwZXMsIG1vZGlmaWVkU2luY2VUaW1lKTsKLSAgICAgICAgICAgICAgICBkZWxldGVPcmln
aW5GaWxlSWZOZWNlc3NhcnkoZmlsZVBhdGgpOwotICAgICAgICAgICAgICAgIEZpbGVTeXN0ZW06
OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KGRpcmVjdG9yeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWZpbHRlcigqb3JpZ2luKSkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4g
ZGVsZXRlZE9yaWdpbnM7CisgICAgYXV0byBhbGxPcmlnaW5zID0gZ2V0QWxsT3JpZ2lucygpOwor
ICAgIGZvciAoYXV0byBvcmlnaW4gOiBhbGxPcmlnaW5zKSB7CisgICAgICAgIGlmICghZmlsdGVy
KG9yaWdpbikpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBkZWxldGVkT3JpZ2lu
cy5hcHBlbmQoKm9yaWdpbik7Ci0gICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIoKm9y
aWdpbikuZGVsZXRlRGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZVRpbWUpOwotICAgICAgICByZW1v
dmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUoKm9yaWdpbik7Ci0gICAgICAgIGRlbGV0
ZU9yaWdpbkZpbGVJZk5lY2Vzc2FyeShmaWxlUGF0aCk7Ci0gICAgICAgIEZpbGVTeXN0ZW06OmRl
bGV0ZUVtcHR5RGlyZWN0b3J5KGRpcmVjdG9yeSk7Ci0gICAgfSk7CisgICAgICAgIGRlbGV0ZWRP
cmlnaW5zLmFkZChvcmlnaW4pOworICAgICAgICBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9y
aWdpbikuZGVsZXRlRGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZVRpbWUpOworICAgICAgICBkZWxl
dGVPcmlnaW5EaXJlY3RvcnlJZlBvc3NpYmxlKG9yaWdpbik7CisgICAgfQogCiAgICAgcmV0dXJu
IGRlbGV0ZWRPcmlnaW5zOwogfQpAQCAtNTQxLDUgKzU2OCwxNjggQEAgdm9pZCBOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OmRlbGV0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMoT3B0aW9uU2V0PFdl
YnNpdGVEYXQKICAgICB9KTsKIH0KIAordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6Om1vdmVE
YXRhKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgc291cmNlLCBjb25zdCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIHRhcmdldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CisgICAgQVNTRVJUKCFtX2Nsb3NlZCk7CisKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHNvdXJjZSA9IGNyb3NzVGhyZWFkQ29weShz
b3VyY2UpLCB0YXJnZXQgPSBjcm9zc1RocmVhZENvcHkodGFyZ2V0KSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0
byBzb3VyY2VPcmlnaW4gPSBXZWJDb3JlOjpDbGllbnRPcmlnaW4geyBzb3VyY2UsIHNvdXJjZSB9
OworICAgICAgICBhdXRvIHRhcmdldE9yaWdpbiA9IFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IHRh
cmdldCwgdGFyZ2V0IH07CisgICAgICAgIAorICAgICAgICAvLyBDbGVhciBleGlzdGluZyBkYXRh
IG9mIHRhcmdldCBvcmlnaW4uCisgICAgICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5
cGVzID0geyBXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW0sIFdlYnNpdGVEYXRhVHlwZTo6TG9j
YWxTdG9yYWdlLCBXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlICB9OworICAgICAgICBs
b2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKHRhcmdldE9yaWdpbikuZGVsZXRlRGF0YSh0eXBlcywg
LVdhbGxUaW1lOjppbmZpbml0eSgpKTsKKyAgICAgICAgcmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFn
ZXJJZlBvc3NpYmxlKHRhcmdldE9yaWdpbik7CisKKyAgICAgICAgLy8gTW92ZSBkYXRhIGZyb20g
c291cmNlIG9yaWdpbiB0byB0YXJnZXQgb3JpZ2luLgorICAgICAgICBzdGQ6Om9wdGlvbmFsPFN0
cmluZz4gbmV3TG9jYWxTdG9yYWdlUGF0aDsKKyAgICAgICAgaWYgKG1fY3VzdG9tTG9jYWxTdG9y
YWdlUGF0aCkKKyAgICAgICAgICAgIG5ld0xvY2FsU3RvcmFnZVBhdGggPSBMb2NhbFN0b3JhZ2VN
YW5hZ2VyOjpsb2NhbFN0b3JhZ2VGaWxlUGF0aCgqbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoLCB0
YXJnZXRPcmlnaW4pOworICAgICAgICBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKHNvdXJjZU9y
aWdpbikubW92ZURhdGEob3JpZ2luRGlyZWN0b3J5UGF0aChtX3BhdGgsIHRhcmdldE9yaWdpbiwg
bV9zYWx0KSwgV1RGTW92ZShuZXdMb2NhbFN0b3JhZ2VQYXRoKSk7CisgICAgICAgIHJlbW92ZU9y
aWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShzb3VyY2VPcmlnaW4pOworCisgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzdXNwZW5kKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgbV9xdWV1ZS0+c3VzcGVuZChbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IFJlZiB7ICp0aGlzIH1dIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9sb2Nh
bE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8g
bG9jYWxTdG9yYWdlTWFuYWdlciA9IG1hbmFnZXItPmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdl
cigpKQorICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZU1hbmFnZXItPnN5bmNMb2NhbFN0b3Jh
Z2UoKTsKKyAgICAgICAgfQorICAgIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30K
Kwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnJlc3VtZSgpCit7CisgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcXVldWUtPnJlc3VtZSgpOworfQorCit2b2lkIE5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6aGFuZGxlTG93TWVtb3J5V2FybmluZygpCit7CisgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfV0geworICAgICAgICBmb3IgKGF1dG8mIG1hbmFn
ZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byBsb2NhbFN0b3JhZ2VNYW5hZ2VyID0gbWFuYWdlci0+ZXhpc3RpbmdMb2NhbFN0
b3JhZ2VNYW5hZ2VyKCkpCisgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTWFuYWdlci0+aGFu
ZGxlTG93TWVtb3J5V2FybmluZygpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYg
eyAqdGhpcyB9LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgeworICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2lu
U3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBsb2NhbFN0
b3JhZ2VNYW5hZ2VyID0gbWFuYWdlci0+ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkpCisg
ICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTWFuYWdlci0+c3luY0xvY2FsU3RvcmFnZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OmNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhJiB0b3BPcmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFyZWFJZGVu
dGlmaWVyKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIFdlYkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4gPSB7IHRvcE9yaWdp
biwgdG9wT3JpZ2luIH07CisgICAgY29tcGxldGlvbkhhbmRsZXIobG9jYWxPcmlnaW5TdG9yYWdl
TWFuYWdlcihvcmlnaW4pLmxvY2FsU3RvcmFnZU1hbmFnZXIoKm1fc3RvcmFnZUFyZWFSZWdpc3Ry
eSkuY29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIG9yaWdp
biwgbV9xdWV1ZS5jb3B5UmVmKCkpKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhJiB0b3BPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYgb3BlbmluZ09yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQXJlYUlkZW50
aWZpZXIpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIFdlYkNvcmU6OkNsaWVudE9yaWdp
biBvcmlnaW4gPSB7IHRvcE9yaWdpbiwgb3BlbmluZ09yaWdpbiB9OworICAgIGNvbXBsZXRpb25I
YW5kbGVyKGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5sb2NhbFN0b3JhZ2VNYW5h
Z2VyKCptX3N0b3JhZ2VBcmVhUmVnaXN0cnkpLmNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFn
ZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBvcmlnaW4pKTsKK30KKwordm9pZCBOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdG9wT3JpZ2luLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0b3JhZ2VBcmVhSWRlbnRpZmllcik+JiYgY29tcGxldGlvbkhhbmRsZXIpCisK
K3sKKyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luID0geyB0b3BPcmlnaW4sIHRvcE9y
aWdpbiB9OworICAgIGNvbXBsZXRpb25IYW5kbGVyKGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIo
b3JpZ2luKS5zZXNzaW9uU3RvcmFnZU1hbmFnZXIoKm1fc3RvcmFnZUFyZWFSZWdpc3RyeSkuY29u
bmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgb3JpZ2luLCBp
ZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkaXNjb25uZWN0
RnJvbVN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9y
YWdlQXJlYShpZGVudGlmaWVyKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoc3RvcmFnZUFyZWEtPnN0b3JhZ2VUeXBlKCkgPT0gU3RvcmFnZUFyZWFC
YXNlOjpTdG9yYWdlVHlwZTo6TG9jYWwpCisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFn
ZXIoc3RvcmFnZUFyZWEtPm9yaWdpbigpKS5sb2NhbFN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VB
cmVhUmVnaXN0cnkpLmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJ
RCgpLCBpZGVudGlmaWVyKTsKKyAgICBlbHNlCisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1h
bmFnZXIoc3RvcmFnZUFyZWEtPm9yaWdpbigpKS5zZXNzaW9uU3RvcmFnZU1hbmFnZXIoKm1fc3Rv
cmFnZUFyZWFSZWdpc3RyeSkuZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShjb25uZWN0aW9uLnVu
aXF1ZUlEKCksIGlkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Y2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIGZyb21JZGVudGlmaWVyLCBTdG9yYWdlTmFtZXNw
YWNlSWRlbnRpZmllciB0b0lkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1h
bmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChhdXRvKiBzZXNzaW9uU3RvcmFnZU1hbmFn
ZXIgPSBtYW5hZ2VyLT5leGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigpKQorICAgICAgICAg
ICAgc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5jbG9uZVN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5p
cXVlSUQoKSwgZnJvbUlkZW50aWZpZXIsIHRvSWRlbnRpZmllcik7CisgICAgfQorfQorCit2b2lk
IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Z2V0VmFsdWVzKFN0b3JhZ2VBcmVhSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5
LT5nZXRTdG9yYWdlQXJlYShpZGVudGlmaWVyKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4geyB9
KTsKKworICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VBcmVhLT5hbGxJdGVtcygpKTsKK30K
Kwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0oSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgU3RvcmFnZUFyZWFJ
bXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0
cmluZykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3Rv
cmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhUmVnaXN0cnktPmdldFN0b3JhZ2VBcmVhKGlkZW50aWZp
ZXIpOworICAgIGJvb2wgcXVvdGFFcnJvciA9IGZhbHNlOworICAgIGlmIChzdG9yYWdlQXJlYSkg
eworICAgICAgICBhdXRvIHJlc3VsdCA9IHN0b3JhZ2VBcmVhLT5zZXRJdGVtKGNvbm5lY3Rpb24u
dW5pcXVlSUQoKSwgaW1wbElkZW50aWZpZXIsIGtleSwgdmFsdWUsIHVybFN0cmluZyk7CisgICAg
ICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcXVvdGFFcnJvciA9IChyZXN1bHQuZXJyb3Io
KSA9PSBTdG9yYWdlRXJyb3I6OlF1b3RhRXhjZWVkZWQpOworICAgIH0KKworICAgIGNvbm5lY3Rp
b24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFNldEl0ZW0oc3RvcmFnZU1hcFNl
ZWQsIGtleSwgcXVvdGFFcnJvciksIGlkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFN0b3Jh
Z2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIGlt
cGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgYXV0byBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFSZWdpc3RyeS0+Z2V0
U3RvcmFnZUFyZWEoaWRlbnRpZmllcik7CisgICAgaWYgKHN0b3JhZ2VBcmVhKQorICAgICAgICBz
dG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIGltcGxJZGVudGlm
aWVyLCBrZXksIHVybFN0cmluZyk7CisKKyAgICBjb25uZWN0aW9uLnNlbmQoTWVzc2FnZXM6OlN0
b3JhZ2VBcmVhTWFwOjpEaWRSZW1vdmVJdGVtKHN0b3JhZ2VNYXBTZWVkLCBrZXkpLCBpZGVudGlm
aWVyKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsZWFyKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0b3Jh
Z2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBT
ZWVkLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhUmVnaXN0cnkt
PmdldFN0b3JhZ2VBcmVhKGlkZW50aWZpZXIpOworICAgIGlmIChzdG9yYWdlQXJlYSkKKyAgICAg
ICAgc3RvcmFnZUFyZWEtPmNsZWFyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaW1wbElkZW50aWZp
ZXIsIHVybFN0cmluZyk7CisKKyAgICBjb25uZWN0aW9uLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VB
cmVhTWFwOjpEaWRDbGVhcihzdG9yYWdlTWFwU2VlZCksIGlkZW50aWZpZXIpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oCmluZGV4IDJhZGRmMmI1
ZTIwYWQzNmQyOGU0NDU5N2VhNDEzZmZlODk2MWE0MGYuLmJhNjU2YzU5MTU5ZmIwOWFiZWQ1YjA0
NjZhODkxM2EzZGQzODQzYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmgKQEAgLTI4LDYgKzI4
LDkgQEAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbVN0b3Jh
Z2VFcnJvci5oIgogI2luY2x1ZGUgIk9yaWdpblN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
U3RvcmFnZUFyZWFJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsSWRlbnRp
Zmllci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLmgiCiAjaW5jbHVk
ZSAiV2Vic2l0ZURhdGEuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIuaD4KQEAgLTQ2LDEwICs0
OSwxMiBAQCBzdHJ1Y3QgQ2xpZW50T3JpZ2luOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNz
IEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnk7CitjbGFzcyBTdG9yYWdlQXJlYVJlZ2lz
dHJ5OwogCiBjbGFzcyBOZXR3b3JrU3RvcmFnZU1hbmFnZXIgZmluYWwgOiBwdWJsaWMgSVBDOjpD
b25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8TmV0d29ya1N0b3JhZ2VNYW5hZ2VyPiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIGNvbnN0
IFN0cmluZyYgcGF0aCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrU3RvcmFnZU1hbmFnZXI+IGNy
ZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBzdGQ6Om9wdGlvbmFsPFN0
cmluZz4gY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCk7CisgICAgc3RhdGljIGJvb2wgY2FuSGFuZGxl
VHlwZXMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4pOwogCiAgICAgdm9pZCBzdGFydFJlY2Vp
dmluZ01lc3NhZ2VGcm9tQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24mKTsKICAgICB2b2lkIHN0
b3BSZWNlaXZpbmdNZXNzYWdlRnJvbUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uJik7CkBAIC02
MSwyMiArNjYsMzAgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4m
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZGVsZXRlRGF0YU1vZGlm
aWVkU2luY2UoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9t
YWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluPiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSGFzaFNldDxXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbj4mJik+JiYpOworICAgIHZvaWQgbW92ZURhdGEoY29uc3QgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYgdGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZv
aWQgc3VzcGVuZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgcmVzdW1l
KCk7CisgICAgdm9pZCBoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7CisgICAgdm9pZCBzeW5jTG9j
YWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKIHByaXZhdGU6Ci0gICAg
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBhdGgp
OworICAgIE5ldHdvcmtTdG9yYWdlTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5n
JiBwYXRoLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCk7CiAg
ICAgfk5ldHdvcmtTdG9yYWdlTWFuYWdlcigpOwogICAgIE9yaWdpblN0b3JhZ2VNYW5hZ2VyJiBs
b2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOwot
ICAgIHZvaWQgcmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxlKGNvbnN0IFdlYkNv
cmU6OkNsaWVudE9yaWdpbiYpOworICAgIGJvb2wgcmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJ
ZlBvc3NpYmxlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIHZvaWQgZGVsZXRl
T3JpZ2luRGlyZWN0b3J5SWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsK
ICAgICBGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5JiBmaWxlU3lzdGVtU3RvcmFnZUhh
bmRsZVJlZ2lzdHJ5KCk7CiAKICAgICB2b2lkIGZvckVhY2hPcmlnaW5EaXJlY3RvcnkoY29uc3Qg
RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mKTsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNs
aWVudE9yaWdpbj4gZ2V0QWxsT3JpZ2lucygpOwogICAgIFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50
cnk+IGZldGNoRGF0YUZyb21EaXNrKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+KTsKLSAgICBW
ZWN0b3I8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBkZWxldGVEYXRhT25EaXNrKE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBXZWJD
b3JlOjpDbGllbnRPcmlnaW4mKT4mKTsKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNsaWVudE9yaWdp
bj4gZGVsZXRlRGF0YU9uRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUs
IGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik+Jik7CiAK
ICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlciAoaW1wbGVtZW50ZWQgYnkgZ2VuZXJhdGVkIGNv
ZGUpCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKTsKKyAgICBib29sIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImLCBVbmlxdWVSZWY8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKTsK
IAotICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMKKyAgICAvLyBNZXNzYWdlIGhhbmRsZXJzIGZvciBG
aWxlU3lzdGVtCiAgICAgdm9pZCBwZXJzaXN0ZWQoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCBwZXJzaXN0KGNv
bnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYpOwogICAgIHZvaWQgZmlsZVN5c3RlbUdldERpcmVjdG9yeShJUEM6OkNvbm5lY3Rpb24mLCBj
b25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cGVj
dGVkPFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBGaWxlU3lzdGVtU3RvcmFn
ZUVycm9yPik+JiYpOwpAQCAtODgsMjIgKzEwMSwzMyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVt
b3ZlRW50cnkoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCBkZWxldGVSZWN1cnNpdmVseSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChz
dGQ6Om9wdGlvbmFsPEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCByZXNv
bHZlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBXZWJDb3JlOjpGaWxlU3lz
dGVtSGFuZGxlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeHBlY3RlZDxWZWN0
b3I8U3RyaW5nPiwgRmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsKICAgICB2b2lkIGdldEZp
bGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoRXhwZWN0ZWQ8U3RyaW5nLCBGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOwotCiAg
ICAgdXNpbmcgQWNjZXNzSGFuZGxlSW5mbyA9IHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxlU3lzdGVt
U3luY0FjY2Vzc0hhbmRsZUlkZW50aWZpZXIsIElQQzo6U2hhcmVkRmlsZUhhbmRsZT47CiAgICAg
dm9pZCBjcmVhdGVTeW5jQWNjZXNzSGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVu
dGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cGVjdGVkPEFjY2Vzc0hhbmRsZUluZm8s
IEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCBjbG9zZUFjY2Vzc0hhbmRs
ZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgV2ViQ29yZTo6RmlsZVN5c3Rl
bVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6
b3B0aW9uYWw8RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsKICAgICB2b2lkIGdldEhhbmRs
ZU5hbWVzKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBGaWxlU3lzdGVtU3RvcmFnZUVycm9y
Pik+JiYpOwogICAgIHZvaWQgZ2V0SGFuZGxlKElQQzo6Q29ubmVjdGlvbiYsIFdlYkNvcmU6OkZp
bGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBTdHJpbmcmJiBuYW1lLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKEV4cGVjdGVkPHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRp
ZmllciwgYm9vbD4sIEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CisgICAgCisgICAgLy8g
TWVzc2FnZSBoYW5kbGVycyBmb3IgV2ViU3RvcmFnZQorICAgIHZvaWQgY29ubmVjdFRvTG9jYWxT
dG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwg
Y29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChTdG9yYWdlQXJlYUlkZW50aWZpZXIpPiYmKTsKKyAgICB2b2lkIGNvbm5lY3RUb1RyYW5zaWVu
dExvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50
aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFyZWFJ
ZGVudGlmaWVyKT4mJik7CisgICAgdm9pZCBjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoSVBD
OjpDb25uZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFyZWFJ
ZGVudGlmaWVyKT4mJik7CisgICAgdm9pZCBkaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKElQQzo6
Q29ubmVjdGlvbiYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllcik7CisgICAgdm9pZCBjbG9uZVNlc3Np
b25TdG9yYWdlTmFtZXNwYWNlKElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VOYW1lc3BhY2VJZGVu
dGlmaWVyLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAgdm9pZCBnZXRWYWx1ZXMo
U3RvcmFnZUFyZWFJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+Jik+JiYpOworICAgIHZvaWQgc2V0SXRlbShJUEM6OkNvbm5lY3Rp
b24mLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIHVp
bnQ2NF90IHNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25z
dCBTdHJpbmcmIHVybFN0cmluZyk7CisgICAgdm9pZCByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlv
biYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgdWlu
dDY0X3Qgc2VlZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsK
KyAgICB2b2lkIGNsZWFyKElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllciwg
U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc2VlZCwgY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcpOwogCiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7Ci0gICAgUmVmPFdv
cmtRdWV1ZT4gbV9xdWV1ZTsKKyAgICBSZWY8U3VzcGVuZGFibGVXb3JrUXVldWU+IG1fcXVldWU7
CiAgICAgU3RyaW5nIG1fcGF0aDsKICAgICBGaWxlU3lzdGVtOjpTYWx0IG1fc2FsdDsKICAgICBi
b29sIG1fY2xvc2VkIHsgZmFsc2UgfTsKICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdp
biwgc3RkOjp1bmlxdWVfcHRyPE9yaWdpblN0b3JhZ2VNYW5hZ2VyPj4gbV9sb2NhbE9yaWdpblN0
b3JhZ2VNYW5hZ2VyczsKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdpbiwgc3RkOjp1
bmlxdWVfcHRyPE9yaWdpblN0b3JhZ2VNYW5hZ2VyPj4gbV9zZXNzaW9uT3JpZ2luU3RvcmFnZU1h
bmFnZXJzOwogICAgIFdlYWtIYXNoU2V0PElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uczsg
Ly8gTWFpbiB0aHJlYWQgb25seS4KICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsZVN5c3RlbVN0b3Jh
Z2VIYW5kbGVSZWdpc3RyeT4gbV9maWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlQXJlYVJlZ2lzdHJ5PiBtX3N0b3JhZ2VBcmVhUmVnaXN0
cnk7CisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFn
ZXIubWVzc2FnZXMuaW4KaW5kZXggNGU0MDVjNmVlYWQzMjZlMjViNDMxNjQyMDcwODA5NWZhNjBk
YzgzOC4uMDQyMmI2MzQ3NTFkMDM4NWY4NGUwMWY2NGFjNjFkYWYzMWMxNWU4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFu
YWdlci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0zNSw5ICszNSwxOCBAQAog
ICAgIFJlc29sdmUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgdGFyZ2V0SWRlbnRpZmllcikg
LT4gKEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJy
b3I+IHJlc3VsdCkgQXN5bmMKICAgICBNb3ZlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIGRl
c3RpbmF0aW9uSWRlbnRpZmllciwgU3RyaW5nIG5ld05hbWUpIC0+IChzdGQ6Om9wdGlvbmFsPFdl
YktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYwogICAgIEdldEZpbGUo
V2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKEV4cGVj
dGVkPFN0cmluZywgV2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5j
Ci0KICAgICBDcmVhdGVTeW5jQWNjZXNzSGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChFeHBlY3RlZDxzdGQ6OnBhaXI8V2ViQ29yZTo6Rmls
ZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyLCBJUEM6OlNoYXJlZEZpbGVIYW5kbGU+
LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkgQXN5bmMKICAgICBDbG9z
ZUFjY2Vzc0hhbmRsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBpZGVudGlm
aWVyLCBXZWJDb3JlOjpGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50aWZpZXIgYWNjZXNz
SGFuZGxlSWRlbnRpZmllcikgLT4gKHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpGaWxlU3lzdGVtU3Rv
cmFnZUVycm9yPiByZXN1bHQpIEFzeW5jCiAgICAgR2V0SGFuZGxlTmFtZXMoV2ViQ29yZTo6Rmls
ZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKEV4cGVjdGVkPFZlY3RvcjxT
dHJpbmc+LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkgQXN5bmMKICAg
ICBHZXRIYW5kbGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgU3RyaW5nIG5hbWUpIC0+IChFeHBlY3RlZDxzdGQ6OnBhaXI8V2ViQ29yZTo6RmlsZVN5c3Rl
bUhhbmRsZUlkZW50aWZpZXIsIGJvb2w+LCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+
IHJlc3VsdCkgQXN5bmMgV2FudHNDb25uZWN0aW9uCisKKyAgICBDb25uZWN0VG9Mb2NhbFN0b3Jh
Z2VBcmVhKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgc3RvcmFnZU5hbWVzcGFj
ZUlELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHNlY3VyaXR5T3JpZ2luRGF0
YSkgLT4gKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpIFN5bmNocm9u
b3VzIFdhbnRzQ29ubmVjdGlvbgorICAgIENvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFy
ZWEoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBzdG9yYWdlTmFtZXNwYWNlSUQs
IHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgdG9wTGV2ZWxTZWN1cml0eU9yaWdp
bkRhdGEsIHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgc2VjdXJpdHlPcmlnaW5E
YXRhKSAtPiAoV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikgU3luY2hy
b25vdXMgV2FudHNDb25uZWN0aW9uCisgICAgQ29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKFdl
YktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgc3RvcmFnZU5hbWVzcGFjZUlELCBzdHJ1
Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHNlY3VyaXR5T3JpZ2luRGF0YSkgLT4gKFdl
YktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpIFN5bmNocm9ub3VzIFdhbnRz
Q29ubmVjdGlvbgorICAgIERpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoV2ViS2l0OjpTdG9yYWdl
QXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikgV2FudHNDb25uZWN0aW9uCisgICAgQ2xvbmVTZXNz
aW9uU3RvcmFnZU5hbWVzcGFjZShXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIGZy
b21TdG9yYWdlTmFtZXNwYWNlSUQsIFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIg
dG9TdG9yYWdlTmFtZXNwYWNlSUQpIFdhbnRzQ29ubmVjdGlvbgorICAgIEdldFZhbHVlcyhXZWJL
aXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAoSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gdmFsdWVzKSBTeW5jaHJvbm91cworICAgIFNldEl0ZW0oV2ViS2l0OjpTdG9yYWdl
QXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTdG9yYWdlQXJlYUltcGxJZGVudGlm
aWVyIGltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgU3RyaW5nIGtleSwg
U3RyaW5nIHZhbHVlLCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50c0Nvbm5lY3Rpb24KKyAgICBSZW1v
dmVJdGVtKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6
U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3RvcmFn
ZU1hcFNlZWQsIFN0cmluZyBrZXksIFN0cmluZyB1cmxTdHJpbmcpIFdhbnRzQ29ubmVjdGlvbgor
ICAgIENsZWFyKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktp
dDo6U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3Rv
cmFnZU1hcFNlZWQsIFN0cmluZyB1cmxTdHJpbmcpIFdhbnRzQ29ubmVjdGlvbgogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VN
YW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5T
dG9yYWdlTWFuYWdlci5jcHAKaW5kZXggMjU0ZGZlM2JmZjRhNTZkMmU5NTkyMjZiZmNmYmZlZDU1
YTIxNTY2Yy4uY2QxOTRlNWI3ODJhNGViOTc1NTU0ZTEzNzUwMjhhYzc4Mzc1ZmQ5MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VN
YW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3Jp
Z2luU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0yOCwxOSArMjgsMjUgQEAKIAogI2luY2x1ZGUgIkZp
bGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtU3Rv
cmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVk
ZSAiU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFSZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhVHlwZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FM
aXRlRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCitzdGF0aWMgY29uc3RleHByIGF1dG8gb3JpZ2luRmlsZU5hbWUgPSAib3Jp
Z2luIl9zOwogZW51bSBjbGFzcyBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldE1v
ZGUgOiBib29sIHsgQmVzdEVmZm9ydCwgUGVyc2lzdGVudCB9OwogCiBjbGFzcyBPcmlnaW5TdG9y
YWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgU3RvcmFnZUJ1Y2tldChjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBjb25z
dCBTdHJpbmcmIGlkZW50aWZpZXIpCisgICAgU3RvcmFnZUJ1Y2tldChjb25zdCBTdHJpbmcmIHJv
b3RQYXRoLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBs
b2NhbFN0b3JhZ2VQYXRoKQogICAgICAgICA6IG1fcm9vdFBhdGgocm9vdFBhdGgpCiAgICAgICAg
ICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgICAgICwgbV9sb2NhbFN0b3JhZ2VQYXRo
KGxvY2FsU3RvcmFnZVBhdGgpCiAgICAgewogICAgIH0KIApAQCAtNTUsMTMgKzYxLDI3IEBAIHB1
YmxpYzoKIAogICAgIGVudW0gY2xhc3MgU3RvcmFnZVR5cGUgOiB1aW50OF90IHsKICAgICAgICAg
RmlsZVN5c3RlbSwKKyAgICAgICAgTG9jYWxTdG9yYWdlLAorICAgICAgICBTZXNzaW9uU3RvcmFn
ZSwKICAgICB9OwogCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2Vic2l0ZURhdGFUeXBlPiB0
b1dlYnNpdGVEYXRhVHlwZShjb25zdCBTdHJpbmcmIHN0b3JhZ2VJZGVudGlmaWVyKQorICAgIHsK
KyAgICAgICAgaWYgKHN0b3JhZ2VJZGVudGlmaWVyID09ICJGaWxlU3lzdGVtIikKKyAgICAgICAg
ICAgIHJldHVybiBXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW07CisKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RvcmFnZUlkZW50
aWZpZXIoU3RvcmFnZVR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewog
ICAgICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpGaWxlU3lzdGVtOgogICAgICAgICAgICAgcmV0dXJu
ICJGaWxlU3lzdGVtIl9zOworICAgICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpMb2NhbFN0b3JhZ2U6
CisgICAgICAgICAgICByZXR1cm4gIkxvY2FsU3RvcmFnZSJfczsKKyAgICAgICAgY2FzZSBTdG9y
YWdlVHlwZTo6U2Vzc2lvblN0b3JhZ2U6CisgICAgICAgICAgICByZXR1cm4gIlNlc3Npb25TdG9y
YWdlIl9zOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTg2LDE4ICsxMDYsMTE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICptX2ZpbGVTeXN0
ZW1TdG9yYWdlTWFuYWdlcjsKICAgICB9CiAKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2VyJiBsb2Nh
bFN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX2xvY2FsU3RvcmFnZU1hbmFnZXIpCisgICAgICAgICAgICBtX2xvY2FsU3Rv
cmFnZU1hbmFnZXIgPSBtYWtlVW5pcXVlPExvY2FsU3RvcmFnZU1hbmFnZXI+KG1fbG9jYWxTdG9y
YWdlUGF0aCA/ICptX2xvY2FsU3RvcmFnZVBhdGggOiBTdHJpbmcgeyB9LCByZWdpc3RyeSk7CisK
KyAgICAgICAgcmV0dXJuICptX2xvY2FsU3RvcmFnZU1hbmFnZXI7CisgICAgfQorCisgICAgTG9j
YWxTdG9yYWdlTWFuYWdlciogZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2xvY2FsU3RvcmFnZU1hbmFnZXIuZ2V0KCk7CisgICAgfQorCisgICAg
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyJiBzZXNzaW9uU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFS
ZWdpc3RyeSYgcmVnaXN0cnkpCisgICAgeworICAgICAgICBpZiAoIW1fc2Vzc2lvblN0b3JhZ2VN
YW5hZ2VyKQorICAgICAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIgPSBtYWtlVW5pcXVl
PFNlc3Npb25TdG9yYWdlTWFuYWdlcj4ocmVnaXN0cnkpOworCisgICAgICAgIHJldHVybiAqbV9z
ZXNzaW9uU3RvcmFnZU1hbmFnZXI7CisgICAgfQorCisgICAgU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
KiBleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigpCisgICAgeworICAgICAgICByZXR1cm4g
bV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIuZ2V0KCk7CisgICAgfQorCiAgICAgYm9vbCBpc0FjdGl2
ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gISFtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcjsK
KyAgICAgICAgcmV0dXJuIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyIHx8IG1fbG9jYWxTdG9y
YWdlTWFuYWdlciB8fCBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlcjsKKyAgICB9CisKKyAgICBib29s
IGlzRW1wdHkoKQorICAgIHsKKyAgICAgICAgYXV0byBmaWxlcyA9IEZpbGVTeXN0ZW06Omxpc3RE
aXJlY3RvcnkobV9yb290UGF0aCk7CisgICAgICAgIGF1dG8gaGFzVmFsaWRGaWxlID0gV1RGOjph
bnlPZihmaWxlcywgWyZdKGF1dG8gZmlsZSkgeworICAgICAgICAgICAgcmV0dXJuIGZpbGUgIT0g
Ii5EU19TdG9yZSJfcyAmJiBmaWxlICE9IG9yaWdpbkZpbGVOYW1lOworICAgICAgICB9KTsKKyAg
ICAgICAgaWYgKGhhc1ZhbGlkRmlsZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBpZiAobV9sb2NhbFN0b3JhZ2VQYXRoKQorICAgICAgICAgICAgcmV0dXJuIEZpbGVTeXN0
ZW06OmZpbGVFeGlzdHMoKm1fbG9jYWxTdG9yYWdlUGF0aCk7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZmV0Y2hEYXRhKE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzKQorICAgIHsKKyAgICAgICAgYXV0byByZXN1
bHQgPSBmZXRjaERhdGFJbk1lbW9yeSh0eXBlcyk7CisgICAgICAgIHJlc3VsdC5hZGQoZmV0Y2hE
YXRhRnJvbURpc2sodHlwZXMpKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAog
ICAgIHZvaWQgZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgV2Fs
bFRpbWUgbW9kaWZpZWRTaW5jZVRpbWUpCiAgICAgewogICAgICAgICBpZiAodHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtKSkKICAgICAgICAgICAgIGRlbGV0ZUZpbGVT
eXN0ZW1TdG9yYWdlRGF0YShtb2RpZmllZFNpbmNlVGltZSk7CisKKyAgICAgICAgaWYgKHR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkKKyAgICAgICAgICAgIGRl
bGV0ZUxvY2FsU3RvcmFnZURhdGEobW9kaWZpZWRTaW5jZVRpbWUpOworCisgICAgICAgIGlmICh0
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSAmJiBtb2RpZmll
ZFNpbmNlVGltZSA9PSAtV2FsbFRpbWU6OmluZmluaXR5KCkpCisgICAgICAgICAgICBkZWxldGVT
ZXNzaW9uU3RvcmFnZURhdGEoKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmVEYXRhKGNvbnN0IFN0
cmluZyYgcGF0aCwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGxvY2FsU3RvcmFnZVBhdGgpCisgICAg
eworICAgICAgICBtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlciA9IG51bGxwdHI7CisgICAgICAg
IGlmIChtX2xvY2FsU3RvcmFnZU1hbmFnZXIpCisgICAgICAgICAgICBtX2xvY2FsU3RvcmFnZU1h
bmFnZXItPmNsb3NlKCk7CisKKyAgICAgICAgRmlsZVN5c3RlbTo6bW92ZUZpbGUobV9yb290UGF0
aCwgcGF0aCk7CisKKyAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlUGF0aCAmJiBsb2NhbFN0b3Jh
Z2VQYXRoKQorICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6bW92ZURhdGFi
YXNlRmlsZSgqbV9sb2NhbFN0b3JhZ2VQYXRoLCAqbG9jYWxTdG9yYWdlUGF0aCk7CiAgICAgfQog
CiBwcml2YXRlOgorICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGZldGNoRGF0YUluTWVt
b3J5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzKQorICAgIHsKKyAgICAgICAgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gcmVzdWx0IHsgfTsKKyAgICAgICAgaWYgKHR5cGVzLmNv
bnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkgeworICAgICAgICAgICAgaWYg
KG1fbG9jYWxTdG9yYWdlTWFuYWdlciAmJiBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmhhc0RhdGFJ
bk1lbW9yeSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpM
b2NhbFN0b3JhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpKSB7CisgICAgICAgICAgICBpZiAobV9zZXNz
aW9uU3RvcmFnZU1hbmFnZXIgJiYgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXItPmhhc0RhdGFJbk1l
bW9yeSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpTZXNz
aW9uU3RvcmFnZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGZldGNoRGF0YUZyb21EaXNrKE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzKQorICAgIHsKKyAgICAgICAgT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gcmVzdWx0IHsgfTsKKyAgICAgICAgZm9yIChhdXRvJiBzdG9yYWdlVHlw
ZSA6IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkobV9yb290UGF0aCkpIHsKKyAgICAgICAgICAg
IGlmIChhdXRvIHR5cGUgPSB0b1dlYnNpdGVEYXRhVHlwZShzdG9yYWdlVHlwZSk7IHR5cGUgJiYg
dHlwZXMuY29udGFpbnMoKnR5cGUpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoKnR5cGUp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6TG9jYWxTdG9yYWdlKSAmJiAhcmVzdWx0LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9j
YWxTdG9yYWdlKSkgeworICAgICAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlUGF0aCAmJiBGaWxl
U3lzdGVtOjpmaWxlRXhpc3RzKCptX2xvY2FsU3RvcmFnZVBhdGgpKQorICAgICAgICAgICAgICAg
IHJlc3VsdC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICB2b2lkIGRlbGV0ZUZpbGVTeXN0
ZW1TdG9yYWdlRGF0YShXYWxsVGltZSBtb2RpZmllZFNpbmNlVGltZSkKICAgICB7CiAgICAgICAg
IG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0cjsKQEAgLTEwNiwxNCArMjI1LDQz
IEBAIHByaXZhdGU6CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUFsbEZpbGVzTW9kaWZpZWRT
aW5jZShmaWxlU3lzdGVtU3RvcmFnZVBhdGgsIG1vZGlmaWVkU2luY2VUaW1lKTsKICAgICB9CiAK
KyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZURhdGEoV2FsbFRpbWUgdGltZSkKKyAgICB7Cisg
ICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZU1hbmFnZXIpIHsKKyAgICAgICAgICAgIG1fbG9jYWxT
dG9yYWdlTWFuYWdlci0+Y2xlYXJEYXRhKCk7CisKKyAgICAgICAgICAgIGlmICghbV9sb2NhbFN0
b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdl
TWFuYWdlciA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9sb2NhbFN0b3Jh
Z2VQYXRoKSB7CisgICAgICAgICAgICBpZiAoYXV0byBtb2RpZmljYXRpb25UaW1lID0gRmlsZVN5
c3RlbTo6ZmlsZU1vZGlmaWNhdGlvblRpbWUoKm1fbG9jYWxTdG9yYWdlUGF0aCk7IG1vZGlmaWNh
dGlvblRpbWUgJiYgKm1vZGlmaWNhdGlvblRpbWUgPj0gdGltZSkKKyAgICAgICAgICAgICAgICBX
ZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoKm1fbG9jYWxTdG9y
YWdlUGF0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGRlbGV0ZVNlc3Npb25TdG9y
YWdlRGF0YSgpCisgICAgeworICAgICAgICBpZiAoIW1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5j
bGVhckRhdGEoKTsKKyAgICAgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlTWFuYWdlci0+aXNBY3Rp
dmUoKSkKKyAgICAgICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0cjsKKyAg
ICB9CisgICAgCiAgICAgU3RyaW5nIG1fcm9vdFBhdGg7CiAgICAgU3RyaW5nIG1faWRlbnRpZmll
cjsKICAgICBTdG9yYWdlQnVja2V0TW9kZSBtX21vZGUgeyBTdG9yYWdlQnVja2V0TW9kZTo6QmVz
dEVmZm9ydCB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI+
IG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxMb2NhbFN0
b3JhZ2VNYW5hZ2VyPiBtX2xvY2FsU3RvcmFnZU1hbmFnZXI7CisgICAgc3RkOjpvcHRpb25hbDxT
dHJpbmc+IG1fbG9jYWxTdG9yYWdlUGF0aDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyPiBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlcjsKIH07CiAKLU9yaWdpblN0b3Jh
Z2VNYW5hZ2VyOjpPcmlnaW5TdG9yYWdlTWFuYWdlcihTdHJpbmcmJiBwYXRoKQorT3JpZ2luU3Rv
cmFnZU1hbmFnZXI6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyKFN0cmluZyYmIHBhdGgsIHN0ZDo6b3B0
aW9uYWw8U3RyaW5nPiBsb2NhbFN0b3JhZ2VQYXRoKQogICAgIDogbV9wYXRoKFdURk1vdmUocGF0
aCkpCisgICAgLCBtX2xvY2FsU3RvcmFnZVBhdGgoV1RGTW92ZShsb2NhbFN0b3JhZ2VQYXRoKSkK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIH0KQEAgLTEyOSw3ICsyNzcsNyBA
QCB2b2lkIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKElQQzo6Q29ubmVj
dGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbgogT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VC
dWNrZXQmIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpkZWZhdWx0QnVja2V0KCkKIHsKICAgICBpZiAo
IW1fZGVmYXVsdEJ1Y2tldCkKLSAgICAgICAgbV9kZWZhdWx0QnVja2V0ID0gbWFrZVVuaXF1ZTxT
dG9yYWdlQnVja2V0PihtX3BhdGgsICJkZWZhdWx0Il9zKTsKKyAgICAgICAgbV9kZWZhdWx0QnVj
a2V0ID0gbWFrZVVuaXF1ZTxTdG9yYWdlQnVja2V0PihtX3BhdGgsICJkZWZhdWx0Il9zLCBtX2xv
Y2FsU3RvcmFnZVBhdGgpOwogCiAgICAgcmV0dXJuICptX2RlZmF1bHRCdWNrZXQ7CiB9CkBAIC0x
MzksMTUgKzI4NywzNCBAQCBGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXImIE9yaWdpblN0b3JhZ2VN
YW5hZ2VyOjpmaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIoRmlsZVN5cwogICAgIHJldHVybiBkZWZh
dWx0QnVja2V0KCkuZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyKHJlZ2lzdHJ5KTsKIH0KIAorTG9j
YWxTdG9yYWdlTWFuYWdlciYgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmxvY2FsU3RvcmFnZU1hbmFn
ZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYgcmVnaXN0cnkpCit7CisgICAgcmV0dXJuIGRlZmF1bHRC
dWNrZXQoKS5sb2NhbFN0b3JhZ2VNYW5hZ2VyKHJlZ2lzdHJ5KTsKK30KKworTG9jYWxTdG9yYWdl
TWFuYWdlciogT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdl
cigpCit7CisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5leGlzdGluZ0xvY2FsU3RvcmFnZU1h
bmFnZXIoKTsKK30KKworU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyJiBPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6c2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQor
eworICAgIHJldHVybiBkZWZhdWx0QnVja2V0KCkuc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKHJlZ2lz
dHJ5KTsKK30KKworU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6
ZXhpc3RpbmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIoKQoreworICAgIHJldHVybiBkZWZhdWx0QnVj
a2V0KCkuZXhpc3RpbmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIoKTsKK30KKwogYm9vbCBPcmlnaW5T
dG9yYWdlTWFuYWdlcjo6aXNBY3RpdmUoKQogewogICAgIHJldHVybiBkZWZhdWx0QnVja2V0KCku
aXNBY3RpdmUoKTsKIH0KIAotdm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YShP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSkK
K2Jvb2wgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmlzRW1wdHkoKQogewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgIGRlZmF1bHRCdWNrZXQoKS5kZWxldGVEYXRhKHR5cGVzLCBt
b2RpZmllZFNpbmNlKTsKKyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmlzRW1wdHkoKTsKIH0K
IAogdm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6c2V0UGVyc2lzdGVkKGJvb2wgdmFsdWUpCkBA
IC0xNTgsNSArMzI1LDI2IEBAIHZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OnNldFBlcnNpc3Rl
ZChib29sIHZhbHVlKQogICAgIGRlZmF1bHRCdWNrZXQoKS5zZXRNb2RlKHZhbHVlID8gU3RvcmFn
ZUJ1Y2tldE1vZGU6OlBlcnNpc3RlbnQgOiBTdG9yYWdlQnVja2V0TW9kZTo6QmVzdEVmZm9ydCk7
CiB9CiAKK09wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpm
ZXRjaERhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmZldGNo
RGF0YSh0eXBlcyk7Cit9CisKK3ZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZURhdGEo
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2Up
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBkZWZhdWx0QnVja2V0
KCkuZGVsZXRlRGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZSk7Cit9CisKK3ZvaWQgT3JpZ2luU3Rv
cmFnZU1hbmFnZXI6Om1vdmVEYXRhKGNvbnN0IFN0cmluZyYgbmV3UGF0aCwgc3RkOjpvcHRpb25h
bDxTdHJpbmc+IGxvY2FsU3RvcmFnZVBhdGgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBkZWZhdWx0QnVja2V0KCkubW92ZURhdGEobmV3UGF0aCwgV1RGTW92ZShs
b2NhbFN0b3JhZ2VQYXRoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1h
bmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9y
YWdlTWFuYWdlci5oCmluZGV4IDdhZGZhNWIwM2I2YmE2ZTNmODY5ODBiMTJkMmY4YTQ0ZDllNGU2
NGIuLjA2Zjg2NzcyNzVhYTAzZDYxOTU2NjE1MTNmYmEyODEyY2YwMDQ3M2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdl
ci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9y
YWdlTWFuYWdlci5oCkBAIC0yNiwzMCArMjYsMzcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXN0cnVj
dCBDbGllbnRPcmlnaW47Ci19Ci0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBGaWxlU3lz
dGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5OwogY2xhc3MgRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2Vy
OworY2xhc3MgTG9jYWxTdG9yYWdlTWFuYWdlcjsKK2NsYXNzIFNlc3Npb25TdG9yYWdlTWFuYWdl
cjsKK2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnk7CiBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhVHlw
ZSA6IHVpbnQzMl90OwogCiBjbGFzcyBPcmlnaW5TdG9yYWdlTWFuYWdlciB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgT3JpZ2luU3RvcmFnZU1h
bmFnZXIoU3RyaW5nJiYgcGF0aCk7CisgICAgT3JpZ2luU3RvcmFnZU1hbmFnZXIoU3RyaW5nJiYg
cGF0aCwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGxvY2FsU3RvcmFnZVBhdGgpOwogICAgIH5Pcmln
aW5TdG9yYWdlTWFuYWdlcigpOwogCiAgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQpOwogICAgIGJvb2wgcGVyc2lzdGVkKCkgY29uc3QgeyByZXR1cm4g
bV9wZXJzaXN0ZWQ7IH0KICAgICB2b2lkIHNldFBlcnNpc3RlZChib29sIHZhbHVlKTsKICAgICBG
aWxlU3lzdGVtU3RvcmFnZU1hbmFnZXImIGZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcihGaWxlU3lz
dGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5Jik7CisgICAgTG9jYWxTdG9yYWdlTWFuYWdlciYgbG9j
YWxTdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5Jik7CisgICAgTG9jYWxTdG9yYWdl
TWFuYWdlciogZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCk7CisgICAgU2Vzc2lvblN0b3Jh
Z2VNYW5hZ2VyJiBzZXNzaW9uU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYpOwor
ICAgIFNlc3Npb25TdG9yYWdlTWFuYWdlciogZXhpc3RpbmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIo
KTsKICAgICBib29sIGlzQWN0aXZlKCk7CisgICAgYm9vbCBpc0VtcHR5KCk7CisgICAgT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gZmV0Y2hEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
KTsKICAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxU
aW1lKTsKKyAgICB2b2lkIG1vdmVEYXRhKGNvbnN0IFN0cmluZyYgbmV3UGF0aCwgc3RkOjpvcHRp
b25hbDxTdHJpbmc+IGxvY2FsU3RvcmFnZVBhdGgpOwogCiBwcml2YXRlOgogICAgIGVudW0gY2xh
c3MgU3RvcmFnZUJ1Y2tldE1vZGUgOiBib29sOwpAQCAtNjIsNiArNjksOCBAQCBwcml2YXRlOgog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlQnVja2V0PiBtX2RlZmF1bHRCdWNrZXQ7CiAgICAg
U3RyaW5nIG1fcGF0aDsKICAgICBib29sIG1fcGVyc2lzdGVkIHsgZmFsc2UgfTsKKworICAgIHN0
ZDo6b3B0aW9uYWw8U3RyaW5nPiBtX2xvY2FsU3RvcmFnZVBhdGg7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliYWIxNDZiYzcyMDY0
MGQxMGZhMzE2MTY4NWYyZTk5Nzk3ZDk2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCkBAIC0wLDAg
KzEsMzgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNR
TGl0ZVN0b3JhZ2VBcmVhLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZUZpbGVTeXN0ZW0u
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvU1FMaXRlVHJhbnNhY3Rpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NvbnN0ZXhwciBTZWNvbmRzIHRyYW5zYWN0aW9uRHVy
YXRpb24geyA1MDBfbXMgfTsKK2NvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtU2l6ZUZvclZhbHVl
c0tlcHRJbk1lbW9yeSB7IDEgKiBLQiB9OworY29uc3RleHByIGF1dG8gY3JlYXRlSXRlbVRhYmxl
U3RhdGVtZW50QWx0ZXJuYXRpdmUgPSAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgSXRlbVRh
YmxlIChrZXkgVEVYVCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwgdmFsdWUgQkxPQiBOT1Qg
TlVMTCBPTiBDT05GTElDVCBGQUlMKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZUl0ZW1UYWJs
ZVN0YXRlbWVudCA9ICJDUkVBVEUgVEFCTEUgSXRlbVRhYmxlIChrZXkgVEVYVCBVTklRVUUgT04g
Q09ORkxJQ1QgUkVQTEFDRSwgdmFsdWUgQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSJf
czsKKworQVNDSUlMaXRlcmFsIFNRTGl0ZVN0b3JhZ2VBcmVhOjpzdGF0ZW1lbnRTdHJpbmcoU3Rh
dGVtZW50VHlwZSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
U3RhdGVtZW50VHlwZTo6Q291bnRJdGVtczoKKyAgICAgICAgcmV0dXJuICJTRUxFQ1QgQ09VTlQo
KikgRlJPTSBJdGVtVGFibGUiX3M7CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpEZWxldGVJdGVt
OgorICAgICAgICByZXR1cm4gIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyJfczsK
KyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OkRlbGV0ZUFsbEl0ZW1zOgorICAgICAgICByZXR1cm4g
IkRFTEVURSBGUk9NIEl0ZW1UYWJsZSJfczsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OkdldEl0
ZW06CisgICAgICAgIHJldHVybiAiU0VMRUNUIHZhbHVlIEZST00gSXRlbVRhYmxlIFdIRVJFIGtl
eT0/Il9zOworICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6R2V0QWxsSXRlbXM6CisgICAgICAgIHJl
dHVybiAiU0VMRUNUIGtleSwgdmFsdWUgRlJPTSBJdGVtVGFibGUiX3M7CisgICAgY2FzZSBTdGF0
ZW1lbnRUeXBlOjpTZXRJdGVtOgorICAgICAgICByZXR1cm4gIklOU0VSVCBJTlRPIEl0ZW1UYWJs
ZSBWQUxVRVMgKD8sID8pIl9zOworICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6SW52YWxpZDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuICIiX3M7Cit9CisKK1NRTGl0ZVN0b3JhZ2VBcmVhOjpTUUxpdGVTdG9yYWdlQXJlYSh1bnNp
Z25lZCBxdW90YSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIGNvbnN0IFN0
cmluZyYgcGF0aCwgUmVmPFdvcmtRdWV1ZT4mJiB3b3JrUXVldWUpCisgICAgOiBTdG9yYWdlQXJl
YUJhc2UocXVvdGEsIG9yaWdpbikKKyAgICAsIG1fcGF0aChwYXRoKQorICAgICwgbV9xdWV1ZShX
VEZNb3ZlKHdvcmtRdWV1ZSkpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0aWNf
Y2FzdDxzaXplX3Q+KFN0YXRlbWVudFR5cGU6OkludmFsaWQpOyArK2kpCisgICAgICAgIG1fY2Fj
aGVkU3RhdGVtZW50cy5hcHBlbmQobnVsbHB0cik7Cit9CisKK3ZvaWQgU1FMaXRlU3RvcmFnZUFy
ZWE6OmNsb3NlKCkKK3sKKyAgICBtX2NhY2hlID0gc3RkOjpudWxsb3B0OworICAgIGNvbW1pdFRy
YW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRp
Y19jYXN0PHNpemVfdD4oU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7ICsraSkKKyAgICAgICAgbV9j
YWNoZWRTdGF0ZW1lbnRzW2ldID0gbnVsbHB0cjsKKyAgICBtX2RhdGFiYXNlID0gbnVsbHB0cjsK
K30KKworU1FMaXRlU3RvcmFnZUFyZWE6On5TUUxpdGVTdG9yYWdlQXJlYSgpCit7CisgICAgYm9v
bCBkYXRhYmFzZUlzRW1wdHkgPSBpc0VtcHR5KCk7CisgICAgY2xvc2UoKTsKKyAgICBpZiAoZGF0
YWJhc2VJc0VtcHR5KQorICAgICAgICBXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVE
YXRhYmFzZUZpbGUobV9wYXRoKTsKK30KKworYm9vbCBTUUxpdGVTdG9yYWdlQXJlYTo6aXNFbXB0
eSgpCit7CisgICAgaWYgKG1fY2FjaGUpCisgICAgICAgIHJldHVybiBtX2NhY2hlLT5pc0VtcHR5
KCk7CisKKyAgICBpZiAoIXByZXBhcmVEYXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFN0YXRlbWVudFR5cGU6OkNv
dW50SXRlbXMpOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ST1cpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0
b3JhZ2VBcmVhOjppc0VtcHR5IGZhaWxlZCBvbiBleGVjdXRpbmcgc3RhdGVtZW50ICglZCkgLSAl
cyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiAhc3RhdGVtZW50LT5j
b2x1bW5JbnQoMCk7Cit9CisKK3ZvaWQgU1FMaXRlU3RvcmFnZUFyZWE6OmNsZWFyKCkKK3sKKyAg
ICBjbG9zZSgpOworICAgIFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNl
RmlsZShtX3BhdGgpOworICAgIG5vdGlmeUxpc3RlbmVyc0Fib3V0Q2xlYXIoKTsKK30KKworYm9v
bCBTUUxpdGVTdG9yYWdlQXJlYTo6Y3JlYXRlVGFibGVJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYg
KCFtX2RhdGFiYXNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS0+dGFibGVTUUwoIkl0ZW1UYWJsZSJfcyk7CisgICAgaWYgKHN0YXRl
bWVudCA9PSBjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnQgfHwgc3RhdGVtZW50ID09IGNyZWF0ZUl0
ZW1UYWJsZVN0YXRlbWVudEFsdGVybmF0aXZlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIFRhYmxlIGV4aXN0cyBidXQgc3RhdGVtZW50IGlzIHdyb25nOyBkcm9wIGl0LgorICAgIGlm
ICghc3RhdGVtZW50LmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoIW1fZGF0YWJhc2UtPmV4ZWN1
dGVDb21tYW5kKCJEUk9QIFRBQkxFIEl0ZW1UYWJsZSJfcykpIHsKKyAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Y3JlYXRlVGFibGVJZk5l
Y2Vzc2FyeSBmYWlsZWQgdG8gZHJvcCBleGlzdGluZyBpdGVtIHRhYmxlICglZCkgLSAlcyIsIG1f
ZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUYWJsZSBk
b2VzIG5vdCBleGlzdC4KKyAgICBpZiAoIW1fZGF0YWJhc2UtPmV4ZWN1dGVDb21tYW5kKGNyZWF0
ZUl0ZW1UYWJsZVN0YXRlbWVudCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFn
ZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpjcmVhdGVUYWJsZUlmTmVjZXNzYXJ5IGZhaWxlZCB0byBj
cmVhdGUgaXRlbSB0YWJsZSAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9k
YXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1FMaXRlU3RvcmFnZUFyZWE6OnByZXBhcmVE
YXRhYmFzZSgpCit7CisgICAgaWYgKG1fZGF0YWJhc2UgJiYgbV9kYXRhYmFzZS0+aXNPcGVuKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV9kYXRhYmFzZSA9IG1ha2VVbmlxdWU8V2Vi
Q29yZTo6U1FMaXRlRGF0YWJhc2U+KCk7CisgICAgaWYgKCFtX2RhdGFiYXNlLT5vcGVuKG1fcGF0
aCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VB
cmVhOjpwcmVwYXJlRGF0YWJhc2UgZmFpbGVkIHRvIG9wZW4gZGF0YWJhc2UgYXQgJyVzJyIsIG1f
cGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbV9kYXRhYmFzZSA9IG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIFNpbmNlIGEgV29ya1F1
ZXVlIGlzbid0IGJvdW5kIHRvIGEgc3BlY2lmaWMgdGhyZWFkLCB3ZSBuZWVkIHRvIGRpc2FibGUg
dGhyZWFkaW5nIGNoZWNrLgorICAgIC8vIFdlIHdpbGwgbmV2ZXIgYWNjZXNzIHRoZSBkYXRhYmFz
ZSBmcm9tIGRpZmZlcmVudCB0aHJlYWRzIHNpbXVsdGFuZW91c2x5LgorICAgIG1fZGF0YWJhc2Ut
PmRpc2FibGVUaHJlYWRpbmdDaGVja3MoKTsKKworICAgIGlmICghY3JlYXRlVGFibGVJZk5lY2Vz
c2FyeSgpKSB7CisgICAgICAgIG1fZGF0YWJhc2UgPSBudWxscHRyOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKHF1b3RhKCkgIT0gV2ViQ29yZTo6U3RvcmFnZU1hcDo6
bm9RdW90YSkKKyAgICAgICAgbV9kYXRhYmFzZS0+c2V0TWF4aW11bVNpemUocXVvdGEoKSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6c3RhcnRUcmFu
c2FjdGlvbklmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24pCisgICAgICAg
IG1fdHJhbnNhY3Rpb24gPSBtYWtlVW5pcXVlPFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uPigq
bV9kYXRhYmFzZSk7CisKKyAgICBpZiAobV90cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3RyYW5zYWN0aW9uLT5iZWdpbigpOworICAgIG1fcXVldWUt
PmRpc3BhdGNoQWZ0ZXIodHJhbnNhY3Rpb25EdXJhdGlvbiwgW3dlYWtUaGlzID0gV2Vha1B0ciB7
ICp0aGlzIH1dIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcyB8fCAhd2Vha1RoaXMtPm1fdHJhbnNh
Y3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgCisgICAgICAgIGF1dG8gdHJhbnNhY3Rp
b24gPSBzdGQ6OmV4Y2hhbmdlKHdlYWtUaGlzLT5tX3RyYW5zYWN0aW9uLCBudWxscHRyKTsKKyAg
ICAgICAgdHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIH0pOworfQorCitXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBTUUxpdGVTdG9yYWdlQXJlYTo6Y2FjaGVkU3RhdGVt
ZW50KFN0YXRlbWVudFR5cGUgdHlwZSkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7CisgICAg
QVNTRVJUKHR5cGUgPCBTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKTsKKworICAgIGF1dG8gaW5kZXgg
PSBzdGF0aWNfY2FzdDx1aW50OF90Pih0eXBlKTsKKyAgICBpZiAoIW1fY2FjaGVkU3RhdGVtZW50
c1tpbmRleF0pIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2RhdGFiYXNlLT5wcmVwYXJlSGVh
cFN0YXRlbWVudChzdGF0ZW1lbnRTdHJpbmcodHlwZSkpOworICAgICAgICBpZiAocmVzdWx0KQor
ICAgICAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzW2luZGV4XSA9IHJlc3VsdC52YWx1ZSgpLm1v
dmVUb1VuaXF1ZVB0cigpOworICAgIH0KKworICAgIHJldHVybiBXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnRBdXRvUmVzZXRTY29wZSB7IG1fY2FjaGVkU3RhdGVtZW50c1tpbmRleF0uZ2V0KCkgfTsK
K30KKworRXhwZWN0ZWQ8U3RyaW5nLCBTdG9yYWdlRXJyb3I+IFNRTGl0ZVN0b3JhZ2VBcmVhOjpn
ZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGlmIChtX2NhY2hlKSB7CisgICAgICAg
IGF1dG8gaXRlcmF0b3IgPSBtX2NhY2hlLT5maW5kKGtleSk7CisgICAgICAgIGlmIChpdGVyYXRv
ciA9PSBtX2NhY2hlLT5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAg
ICAgICBpZiAoIWl0ZXJhdG9yLT52YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBp
dGVyYXRvci0+dmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIGdldEl0ZW1Gcm9tRGF0YWJhc2Uo
a2V5KTsKK30KKworRXhwZWN0ZWQ8U3RyaW5nLCBTdG9yYWdlRXJyb3I+IFNRTGl0ZVN0b3JhZ2VB
cmVhOjpnZXRJdGVtRnJvbURhdGFiYXNlKGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGlmICgh
cHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdl
RXJyb3I6OkRhdGFiYXNlKTsKKworICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50
KFN0YXRlbWVudFR5cGU6OkdldEl0ZW0pOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVu
dC0+YmluZFRleHQoMSwga2V5KSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdl
LCAiU1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2UgZmFpbGVkIG9uIGNyZWF0
aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRh
YmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3Rv
cmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJu
IHN0YXRlbWVudC0+Y29sdW1uQmxvYkFzU3RyaW5nKDApOworICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0
b3JhZ2VBcmVhOjpnZXRJdGVtRnJvbURhdGFiYXNlIGZhaWxlZCBvbiBzdGVwcGluZyBzdGF0ZW1l
bnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6
RGF0YWJhc2UpOworICAgIH0KKworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJy
b3I6Okl0ZW1Ob3RGb3VuZCk7Cit9CisKK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFNRTGl0ZVN0
b3JhZ2VBcmVhOjphbGxJdGVtcygpCit7CisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAg
ICAgICAgcmV0dXJuIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsgfTsKKworICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IGl0ZW1zOworICAgIGlmIChtX2NhY2hlKSB7CisgICAgICAgIGl0ZW1z
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jYWNoZS0+c2l6ZSgpKTsKKyAgICAgICAgZm9yIChh
dXRvJiBba2V5LCB2YWx1ZV0gOiAqbV9jYWNoZSkgeworICAgICAgICAgICAgaWYgKCF2YWx1ZS5p
c051bGwoKSkgeworICAgICAgICAgICAgICAgIGl0ZW1zLmFkZChrZXksIHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGF1
dG8gcmVzdWx0ID0gZ2V0SXRlbUZyb21EYXRhYmFzZShrZXkpKQorICAgICAgICAgICAgICAgIGl0
ZW1zLmFkZChrZXksIHJlc3VsdC52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
aXRlbXM7CisgICAgfQorCisgICAgLy8gSW1wb3J0IGZyb20gZGF0YWJhc2UuCisgICAgYXV0byBz
dGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZTo6R2V0QWxsSXRlbXMpOwor
ICAgIGlmICghc3RhdGVtZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2Us
ICJTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0QWxsSXRlbXMgZmFpbGVkIG9uIGNyZWF0aW5nIHN0YXRl
bWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFz
dEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIG1fY2FjaGUg
PSBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB7IH07CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpOworICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBT
dHJpbmcga2V5ID0gc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgdmFs
dWUgPSBzdGF0ZW1lbnQtPmNvbHVtbkJsb2JBc1N0cmluZygxKTsKKyAgICAgICAgaWYgKCFrZXku
aXNOdWxsKCkgJiYgIXZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBtX2NhY2hlLT5hZGQo
a2V5LCB2YWx1ZS5zaXplSW5CeXRlcygpID4gbWF4aW11bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1v
cnkgPyBTdHJpbmcoKSA6IHZhbHVlKTsKKyAgICAgICAgICAgIGl0ZW1zLmFkZChXVEZNb3ZlKGtl
eSksIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IHN0YXRl
bWVudC0+c3RlcCgpOworICAgIH0KKworICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0
QWxsSXRlbXMgZmFpbGVkIG9uIGV4ZWN1dGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRh
YmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKworICAgIHJl
dHVybiBpdGVtczsKK30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBTUUxpdGVTdG9y
YWdlQXJlYTo6c2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0
b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAg
ICBpZiAoIXByZXBhcmVEYXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
U3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisKKyAgICBzdGFydFRyYW5zYWN0aW9uSWZOZWNlc3Nh
cnkoKTsKKworICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICBpZiAoYXV0byB2YWx1ZU9yRXJyb3Ig
PSBnZXRJdGVtKGtleSkpCisgICAgICAgIG9sZFZhbHVlID0gdmFsdWVPckVycm9yLnZhbHVlKCk7
CisKKyAgICBhdXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlOjpT
ZXRJdGVtKTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGtl
eSkgfHwgc3RhdGVtZW50LT5iaW5kQmxvYigyLCB2YWx1ZSkpIHsKKyAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtIGZhaWxlZCBvbiBj
cmVhdGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1f
ZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworICAgIH0KKworICAgIGludCByZXN1bHQgPSBzdGF0
ZW1lbnQtPnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ID09IFNRTElURV9GVUxMKQorICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpRdW90YUV4Y2VlZGVkKTsKKyAgICBp
ZiAocmVzdWx0ICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0
b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6c2V0SXRlbSBmYWlsZWQgb24gc3RlcHBpbmcgc3Rh
dGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJy
b3I6OkRhdGFiYXNlKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fY2FjaGUpCisgICAgICAgIG1f
Y2FjaGUtPnNldChrZXksIHZhbHVlLnNpemVJbkJ5dGVzKCkgPiBtYXhpbXVtU2l6ZUZvclZhbHVl
c0tlcHRJbk1lbW9yeSA/IFN0cmluZygpIDogdmFsdWUpOworCisgICAgZGlzcGF0Y2hFdmVudHMo
Y29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIGtleSwgb2xkVmFsdWUsIHZhbHVlLCB1cmxT
dHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVy
cm9yPiBTUUxpdGVTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1
ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBs
SUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBp
ZiAoIXByZXBhcmVEYXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3Rv
cmFnZUVycm9yOjpEYXRhYmFzZSk7CisKKyAgICBzdGFydFRyYW5zYWN0aW9uSWZOZWNlc3Nhcnko
KTsKKyAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgaWYgKGF1dG8gdmFsdWVPckVycm9yID0gZ2V0
SXRlbShrZXkpKQorICAgICAgICBvbGRWYWx1ZSA9IHZhbHVlT3JFcnJvci52YWx1ZSgpOworICAg
IGVsc2UKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6SXRlbU5v
dEZvdW5kKTsKKworICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFN0YXRlbWVu
dFR5cGU6OkRlbGV0ZUl0ZW0pOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+Ymlu
ZFRleHQoMSwga2V5KSB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OnJlbW92
ZUl0ZW0gZmFpbGVkIG9uIGV4ZWN1dGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFz
ZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworICAgIH0KKworICAg
IGlmIChtX2NhY2hlKQorICAgICAgICBtX2NhY2hlLT5yZW1vdmUoa2V5KTsKKworICAgIGRpc3Bh
dGNoRXZlbnRzKGNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBrZXksIG9sZFZhbHVlLCBT
dHJpbmcoKSwgdXJsU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK0V4cGVjdGVkPHZv
aWQsIFN0b3JhZ2VFcnJvcj4gU1FMaXRlU3RvcmFnZUFyZWE6OmNsZWFyKElQQzo6Q29ubmVjdGlv
bjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdl
QXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgaWYgKCFwcmVwYXJl
RGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6
RGF0YWJhc2UpOworCisgICAgaWYgKG1fY2FjaGUgJiYgbV9jYWNoZS0+aXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpJdGVtTm90Rm91bmQpOwor
CisgICAgaWYgKG1fY2FjaGUpCisgICAgICAgIG1fY2FjaGUtPmNsZWFyKCk7CisKKyAgICBzdGFy
dFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0
YXRlbWVudChTdGF0ZW1lbnRUeXBlOjpEZWxldGVBbGxJdGVtcyk7CisgICAgaWYgKCFzdGF0ZW1l
bnQgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpjbGVhciBmYWlsZWQgb24g
ZXhlY3V0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwg
bV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgaWYgKG1fZGF0YWJhc2Ut
Pmxhc3RDaGFuZ2VzKCkgPD0gMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3Jh
Z2VFcnJvcjo6SXRlbU5vdEZvdW5kKTsKKworICAgIGRpc3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24s
IHN0b3JhZ2VBcmVhSW1wbElELCBTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCB1cmxTdHJp
bmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y29t
bWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKGF1dG8gdHJhbnNhY3Rpb24g
PSBzdGQ6OmV4Y2hhbmdlKG1fdHJhbnNhY3Rpb24sIG51bGxwdHIpKQorICAgICAgICB0cmFuc2Fj
dGlvbi0+Y29tbWl0KCk7Cit9CisKK3ZvaWQgU1FMaXRlU3RvcmFnZUFyZWE6OmhhbmRsZUxvd01l
bW9yeVdhcm5pbmcoKQoreworICAgIGlmIChtX2RhdGFiYXNlICYmIG1fZGF0YWJhc2UtPmlzT3Bl
bigpKQorICAgICAgICBtX2RhdGFiYXNlLT5yZWxlYXNlTWVtb3J5KCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlMjJjZGI2MjM3OGYy
YTgxYzYwM2Q3N2JiYTg2MzZjNWJhYzYyNjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuaApAQCAtMCwwICsx
LDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdG9yYWdlQXJl
YUJhc2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZS5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgU1FMaXRlU3RvcmFnZUFyZWEgZmluYWwgOiBwdWJsaWMgU3RvcmFnZUFy
ZWFCYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTUUxp
dGVTdG9yYWdlQXJlYSh1bnNpZ25lZCBxdW90YSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiwgY29uc3QgU3RyaW5nJiBwYXRoLCBSZWY8V29ya1F1ZXVlPiYmKTsKKyAgICB+U1FMaXRlU3Rv
cmFnZUFyZWEoKTsKKworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2b2lkIGhhbmRsZUxvd01lbW9y
eVdhcm5pbmcoKTsKKyAgICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKwor
cHJpdmF0ZToKKyAgICAvLyBTdG9yYWdlQXJlYUJhc2UKKyAgICBUeXBlIHR5cGUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBTdG9yYWdlQXJlYUJhc2U6OlR5cGU6OlNRTGl0ZTsgfTsKKyAgICBTdG9y
YWdlVHlwZSBzdG9yYWdlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFN0b3JhZ2VBcmVhQmFz
ZTo6U3RvcmFnZVR5cGU6OkxvY2FsOyB9OworICAgIGJvb2wgaXNFbXB0eSgpIGZpbmFsOworICAg
IHZvaWQgY2xlYXIoKSBmaW5hbDsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBhbGxJdGVt
cygpIGZpbmFsOworICAgIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gc2V0SXRlbShJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
IGZpbmFsOworICAgIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gcmVtb3ZlSXRlbShJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGZpbmFsOworICAgIEV4cGVjdGVk
PHZvaWQsIFN0b3JhZ2VFcnJvcj4gY2xlYXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3Rv
cmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGZpbmFsOwor
CisgICAgYm9vbCBjcmVhdGVUYWJsZUlmTmVjZXNzYXJ5KCk7CisgICAgYm9vbCBwcmVwYXJlRGF0
YWJhc2UoKTsKKyAgICB2b2lkIHN0YXJ0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAg
ZW51bSBjbGFzcyBTdGF0ZW1lbnRUeXBlIDogdWludDhfdCB7CisgICAgICAgIENvdW50SXRlbXMs
CisgICAgICAgIERlbGV0ZUl0ZW0sCisgICAgICAgIERlbGV0ZUFsbEl0ZW1zLAorICAgICAgICBH
ZXRJdGVtLAorICAgICAgICBHZXRBbGxJdGVtcywKKyAgICAgICAgU2V0SXRlbSwKKyAgICAgICAg
SW52YWxpZAorICAgIH07CisgICAgQVNDSUlMaXRlcmFsIHN0YXRlbWVudFN0cmluZyhTdGF0ZW1l
bnRUeXBlKSBjb25zdDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29w
ZSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZSk7CisgICAgRXhwZWN0ZWQ8U3RyaW5nLCBT
dG9yYWdlRXJyb3I+IGdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpOworICAgIEV4cGVjdGVkPFN0
cmluZywgU3RvcmFnZUVycm9yPiBnZXRJdGVtRnJvbURhdGFiYXNlKGNvbnN0IFN0cmluZyYga2V5
KTsKKworICAgIFN0cmluZyBtX3BhdGg7CisgICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U+IG1fZGF0YWJhc2U7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0
aW9uOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
Pj4gbV9jYWNoZWRTdGF0ZW1lbnRzOworICAgIHN0ZDo6b3B0aW9uYWw8SGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4+IG1fY2FjaGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhKQorICAgIHN0
YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZSYgYXJlYSkgeyBy
ZXR1cm4gYXJlYS50eXBlKCkgPT0gV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6OlR5cGU6OlNRTGl0
ZTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlTWFuYWdlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hNTBhODcwNmY2NzUzNGRmNzg1OWVmYTZlOWYwZjFjMjhjZTlkNWZm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L1Nlc3Npb25TdG9yYWdlTWFuYWdlci5jcHAKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmgi
CisKKyNpbmNsdWRlICJNZW1vcnlTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVh
UmVnaXN0cnkuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Nlc3Npb25TdG9yYWdlTWFuYWdl
cjo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQor
ICAgIDogbV9yZWdpc3RyeShyZWdpc3RyeSkKK3sKK30KKworYm9vbCBTZXNzaW9uU3RvcmFnZU1h
bmFnZXI6OmlzQWN0aXZlKCkKK3sKKyAgICByZXR1cm4gV1RGOjphbnlPZihtX3N0b3JhZ2VBcmVh
cy52YWx1ZXMoKSwgWyZdIChhdXRvJiBzdG9yYWdlQXJlYSkgeworICAgICAgICByZXR1cm4gc3Rv
cmFnZUFyZWEtPmhhc0xpc3RlbmVycygpOworICAgIH0pOworfQorCitib29sIFNlc3Npb25TdG9y
YWdlTWFuYWdlcjo6aGFzRGF0YUluTWVtb3J5KCkKK3sKKyAgICByZXR1cm4gV1RGOjphbnlPZiht
X3N0b3JhZ2VBcmVhcy52YWx1ZXMoKSwgWyZdIChhdXRvJiBzdG9yYWdlQXJlYSkgeworICAgICAg
ICByZXR1cm4gIXN0b3JhZ2VBcmVhLT5pc0VtcHR5KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyOjpjbGVhckRhdGEoKQoreworICAgIGZvciAoYXV0byYgc3RvcmFn
ZUFyZWEgOiBtX3N0b3JhZ2VBcmVhcy52YWx1ZXMoKSkKKyAgICAgICAgc3RvcmFnZUFyZWEtPmNs
ZWFyKCk7Cit9CisKK3ZvaWQgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2Vk
KElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbikKK3sKKyAgICBmb3IgKGF1dG8m
IHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYXMudmFsdWVzKCkpCisgICAgICAgIHN0b3JhZ2VB
cmVhLT5yZW1vdmVMaXN0ZW5lcihjb25uZWN0aW9uKTsKK30KKworU3RvcmFnZUFyZWFJZGVudGlm
aWVyIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6YWRkU3RvcmFnZUFyZWEoc3RkOjp1bmlxdWVfcHRy
PE1lbW9yeVN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSwgSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJ
RCBjb25uZWN0aW9uLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBuYW1lc3BhY2VJZGVudGlm
aWVyKQoreworICAgIGF1dG8gaWRlbnRpZmllciA9IHN0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCk7
CisgICAgbV9yZWdpc3RyeS5yZWdpc3RlclN0b3JhZ2VBcmVhKGlkZW50aWZpZXIsICpzdG9yYWdl
QXJlYSk7CisgICAgc3RvcmFnZUFyZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb24pOworICAgIG1f
c3RvcmFnZUFyZWFzQnlOYW1lc3BhY2Uuc2V0KG5hbWVzcGFjZUlkZW50aWZpZXIsIGlkZW50aWZp
ZXIpOworICAgIG1fc3RvcmFnZUFyZWFzLnNldChpZGVudGlmaWVyLCBXVEZNb3ZlKHN0b3JhZ2VB
cmVhKSk7CisKKyAgICByZXR1cm4gaWRlbnRpZmllcjsKK30KKworU3RvcmFnZUFyZWFJZGVudGlm
aWVyIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKElQ
Qzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgY29uc3QgV2ViQ29yZTo6Q2xpZW50
T3JpZ2luJiBvcmlnaW4sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIG5hbWVzcGFjZUlkZW50
aWZpZXIpCit7CisgICAgYXV0byBpZGVudGlmaWVyID0gbV9zdG9yYWdlQXJlYXNCeU5hbWVzcGFj
ZS5nZXQobmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAgaWYgKGlkZW50aWZpZXIuaXNWYWxpZCgp
KSB7CisgICAgICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhcy5jb250YWlucyhpZGVudGlmaWVyKSk7
CisgICAgICAgIHJldHVybiBpZGVudGlmaWVyOworICAgIH0KKworICAgIGF1dG8gbmV3U3RvcmFn
ZUFyZWEgPSBtYWtlVW5pcXVlPE1lbW9yeVN0b3JhZ2VBcmVhPihvcmlnaW4pOworICAgIHJldHVy
biBhZGRTdG9yYWdlQXJlYShXVEZNb3ZlKG5ld1N0b3JhZ2VBcmVhKSwgY29ubmVjdGlvbiwgbmFt
ZXNwYWNlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpkaXNj
b25uZWN0RnJvbVN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlv
biwgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8qIHN0
b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYXMuZ2V0KGlkZW50aWZpZXIpKQorICAgICAgICBzdG9y
YWdlQXJlYS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7Cit9CisKK3ZvaWQgU2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyOjpjbG9uZVN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQg
Y29ubmVjdGlvbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgc291cmNlTmFtZXNwYWNlSWRl
bnRpZmllciwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgdGFyZ2V0TmFtZXNwYWNlSWRlbnRp
ZmllcikKK3sKKyAgICBhdXRvIGlkZW50aWZpZXIgPSBtX3N0b3JhZ2VBcmVhc0J5TmFtZXNwYWNl
LmdldChzb3VyY2VOYW1lc3BhY2VJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlkZW50aWZpZXIuaXNW
YWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3Rv
cmFnZUFyZWFzLmZpbmQoaWRlbnRpZmllcik7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZUFyZWFzLmVu
ZCgpKSB7CisgICAgICAgIGF1dG8gbmV3U3RvcmFnZUFyZWEgPSBpdGVyYXRvci0+dmFsdWUtPmNs
b25lKCk7CisgICAgICAgIGFkZFN0b3JhZ2VBcmVhKFdURk1vdmUobmV3U3RvcmFnZUFyZWEpLCBj
b25uZWN0aW9uLCB0YXJnZXROYW1lc3BhY2VJZGVudGlmaWVyKTsKKyAgICB9Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlTWFuYWdlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjdmNjZhZmJlNDUyM2NjYmQ4YWZmOTg2NTU2MmE4YjgyMzZlZGIyOWUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VN
YW5hZ2VyLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiU3RvcmFnZUFyZWFJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU3RvcmFnZU5hbWVz
cGFjZUlkZW50aWZpZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE1lbW9yeVN0
b3JhZ2VBcmVhOworY2xhc3MgU3RvcmFnZUFyZWFSZWdpc3RyeTsKKworY2xhc3MgU2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBTZXNzaW9uU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYpOworICAgIGJvb2wg
aXNBY3RpdmUoKTsKKyAgICBib29sIGhhc0RhdGFJbk1lbW9yeSgpOworICAgIHZvaWQgY2xlYXJE
YXRhKCk7CisgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVl
SUQpOworCisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGNvbm5lY3RUb1Nlc3Npb25TdG9yYWdl
QXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAgdm9pZCBkaXNjb25uZWN0RnJv
bVN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSWRlbnRp
Zmllcik7CisgICAgdm9pZCBjbG9uZVN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVl
SUQsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmll
cik7CisKK3ByaXZhdGU6CisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGFkZFN0b3JhZ2VBcmVh
KHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlTdG9yYWdlQXJlYT4sIElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyKTsKKworICAgIFN0b3JhZ2VBcmVhUmVn
aXN0cnkmIG1fcmVnaXN0cnk7CisgICAgSGFzaE1hcDxTdG9yYWdlQXJlYUlkZW50aWZpZXIsIHN0
ZDo6dW5pcXVlX3B0cjxNZW1vcnlTdG9yYWdlQXJlYT4+IG1fc3RvcmFnZUFyZWFzOworICAgIEhh
c2hNYXA8U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4g
bV9zdG9yYWdlQXJlYXNCeU5hbWVzcGFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9y
YWdlQXJlYUJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0
b3JhZ2VBcmVhQmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZiZjc1ODQ3YzU4ZTMxZDE4ZjhhNWY3NTgz
MjE4MzU0MDA2M2UzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFCYXNlLmgi
CisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VBcmVhQmFzZSh1bnNpZ25lZCBxdW90YSwg
Y29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pCisgICAgOiBtX2lkZW50aWZpZXIo
U3RvcmFnZUFyZWFJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQorICAgICwgbV9xdW90YShxdW90YSkK
KyAgICAsIG1fb3JpZ2luKG9yaWdpbikKK3sKK30KKworU3RvcmFnZUFyZWFCYXNlOjp+U3RvcmFn
ZUFyZWFCYXNlKCkgPSBkZWZhdWx0OworCit2b2lkIFN0b3JhZ2VBcmVhQmFzZTo6YWRkTGlzdGVu
ZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uKQoreworICAgIEFTU0VSVCgh
bV9saXN0ZW5lcnMuY29udGFpbnMoY29ubmVjdGlvbikpOworCisgICAgbV9saXN0ZW5lcnMuYWRk
KGNvbm5lY3Rpb24pOworfQorCit2b2lkIFN0b3JhZ2VBcmVhQmFzZTo6cmVtb3ZlTGlzdGVuZXIo
SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uKQoreworICAgIG1fbGlzdGVuZXJz
LnJlbW92ZShjb25uZWN0aW9uKTsKK30KKworYm9vbCBTdG9yYWdlQXJlYUJhc2U6Omhhc0xpc3Rl
bmVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2xpc3RlbmVycy5pc0VtcHR5KCk7Cit9CisK
K3ZvaWQgU3RvcmFnZUFyZWFCYXNlOjpub3RpZnlMaXN0ZW5lcnNBYm91dENsZWFyKCkKK3sKKyAg
ICBmb3IgKGF1dG8mIGNvbm5lY3Rpb24gOiBtX2xpc3RlbmVycykKKyAgICAgICAgSVBDOjpDb25u
ZWN0aW9uOjpzZW5kKGNvbm5lY3Rpb24sIE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6Q2xlYXJD
YWNoZSgpLCBtX2lkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFC
YXNlOjpkaXNwYXRjaEV2ZW50cyhJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5l
Y3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc291cmNlSW1wbElkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5l
d1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3QKK3sKKyAgICBBU1NFUlQoc291
cmNlSW1wbElkZW50aWZpZXIpOworCisgICAgZm9yIChhdXRvJiBjb25uZWN0aW9uIDogbV9saXN0
ZW5lcnMpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVy
PiBpbXBsSWRlbnRpZmllcjsKKyAgICAgICAgaWYgKGNvbm5lY3Rpb24gPT0gc291cmNlQ29ubmVj
dGlvbikKKyAgICAgICAgICAgIGltcGxJZGVudGlmaWVyID0gc291cmNlSW1wbElkZW50aWZpZXI7
CisgICAgICAgIElQQzo6Q29ubmVjdGlvbjo6c2VuZChjb25uZWN0aW9uLCBNZXNzYWdlczo6U3Rv
cmFnZUFyZWFNYXA6OkRpc3BhdGNoU3RvcmFnZUV2ZW50KGltcGxJZGVudGlmaWVyLCBrZXksIG9s
ZFZhbHVlLCBuZXdWYWx1ZSwgdXJsU3RyaW5nKSwgbV9pZGVudGlmaWVyLnRvVUludDY0KCkpOwor
ICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKworCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmggYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTkwNTFiMTRiMzU5OWZhZGVjODRiYWU3MGFkODZlZTAwMGNkN2U4OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJl
YUJhc2UuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJZGVudGlmaWVyLmgi
CisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvQ2xpZW50T3JpZ2luLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworc3RydWN0IENsaWVudE9yaWdpbjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2VudW0gY2xhc3MgU3RvcmFnZUVycm9yIDogdWludDhfdCB7CisgICAgRGF0YWJhc2UsCisg
ICAgSXRlbU5vdEZvdW5kLAorICAgIFF1b3RhRXhjZWVkZWQsCit9OworCitjbGFzcyBTdG9yYWdl
QXJlYUJhc2UgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U3RvcmFnZUFyZWFCYXNlPiB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU3RvcmFnZUFyZWFCYXNlKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTdG9yYWdlQXJlYUJhc2UodW5zaWduZWQgcXVvdGEs
IGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIHZpcnR1YWwgflN0b3JhZ2VBcmVh
QmFzZSgpOworCisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7IFNRTGl0ZSwgTWVtb3J5
IH07CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7CisgICAgZW51bSBjbGFzcyBT
dG9yYWdlVHlwZSA6IGJvb2wgeyBTZXNzaW9uLCBMb2NhbCB9OworICAgIHZpcnR1YWwgU3RvcmFn
ZVR5cGUgc3RvcmFnZVR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRW1wdHko
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOworCisgICAgU3RvcmFnZUFyZWFJ
ZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyAg
ICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47
IH0KKyAgICB1bnNpZ25lZCBxdW90YSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVvdGE7IH0KKyAgICB2
b2lkIGFkZExpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQpOworICAgIHZvaWQgcmVt
b3ZlTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7CisgICAgYm9vbCBoYXNMaXN0
ZW5lcnMoKSBjb25zdDsKKyAgICB2b2lkIG5vdGlmeUxpc3RlbmVyc0Fib3V0Q2xlYXIoKTsKKwor
ICAgIHZpcnR1YWwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gYWxsSXRlbXMoKSA9IDA7CisgICAg
dmlydHVhbCBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IHNldEl0ZW0oSVBDOjpDb25uZWN0
aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSA9IDA7Cisg
ICAgdmlydHVhbCBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IHJlbW92ZUl0ZW0oSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSA9IDA7CisgICAgdmlydHVhbCBFeHBl
Y3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IGNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQs
IFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSA9IDA7
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6
VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJp
bmcmIHVybFN0cmluZykgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU3RvcmFnZUFyZWFJZGVudGlm
aWVyIG1faWRlbnRpZmllcjsKKyAgICB1bnNpZ25lZCBtX3F1b3RhOworICAgIFdlYkNvcmU6OkNs
aWVudE9yaWdpbiBtX29yaWdpbjsKKyAgICBIYXNoU2V0PElQQzo6Q29ubmVjdGlvbjo6VW5pcXVl
SUQ+IG1fbGlzdGVuZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVn
aXN0cnkuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VB
cmVhUmVnaXN0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5Y2IzZmM4YzczMmNiOWM4ZWZkZGQzZTY0OTk4
NGE0ZmY3MGU2NDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVJlZ2lz
dHJ5LmgiCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUJhc2UuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1N0b3JhZ2VBcmVhUmVnaXN0cnk6OlN0b3JhZ2VBcmVhUmVnaXN0cnkoKSA9IGRlZmF1
bHQ7CisKK3ZvaWQgU3RvcmFnZUFyZWFSZWdpc3RyeTo6cmVnaXN0ZXJTdG9yYWdlQXJlYShTdG9y
YWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgU3RvcmFnZUFyZWFCYXNlJiBzdG9yYWdlQXJl
YSkKK3sKKyAgICBBU1NFUlQoIW1fc3RvcmFnZUFyZWFzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsK
KworICAgIG1fc3RvcmFnZUFyZWFzLmFkZChpZGVudGlmaWVyLCBzdG9yYWdlQXJlYSk7Cit9CisK
K3ZvaWQgU3RvcmFnZUFyZWFSZWdpc3RyeTo6dW5yZWdpc3RlclN0b3JhZ2VBcmVhKFN0b3JhZ2VB
cmVhSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhcy5j
b250YWlucyhpZGVudGlmaWVyKSk7CisKKyAgICBtX3N0b3JhZ2VBcmVhcy5yZW1vdmUoaWRlbnRp
Zmllcik7Cit9CisKK1N0b3JhZ2VBcmVhQmFzZSogU3RvcmFnZUFyZWFSZWdpc3RyeTo6Z2V0U3Rv
cmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgaWYgKGF1
dG8gc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhcy5nZXQoaWRlbnRpZmllcikpCisgICAgICAg
IHJldHVybiBzdG9yYWdlQXJlYS5nZXQoKTsKKworICAgIHJldHVybiBudWxscHRyOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYVJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0MDBk
MmJiZjRiMTRkNDk5OWMwNDMyZjA5YzRiNGI0YjRlMjhjZjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5o
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50aWZpZXIuaCIKKyNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU3RvcmFn
ZUFyZWFCYXNlOworCitjbGFzcyBTdG9yYWdlQXJlYVJlZ2lzdHJ5IHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTdG9yYWdlQXJlYVJlZ2lzdHJ5KCk7CisgICAg
dm9pZCByZWdpc3RlclN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgU3RvcmFnZUFy
ZWFCYXNlJik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVu
dGlmaWVyKTsKKyAgICBTdG9yYWdlQXJlYUJhc2UqIGdldFN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVh
SWRlbnRpZmllcik7CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxTdG9yYWdlQXJlYUlkZW50aWZp
ZXIsIFdlYWtQdHI8U3RvcmFnZUFyZWFCYXNlPj4gbV9zdG9yYWdlQXJlYXM7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy9nZW5l
cmF0ZS11bmlmaWVkLXNvdXJjZXMuc2ggYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUt
dW5pZmllZC1zb3VyY2VzLnNoCmluZGV4IGI2ZDQwYWQ5ZTk1NDdiZDQwZGU4NWM5Yzg1YTM1YzFl
MjVjZGYxOTEuLjRmMWFjODNjYjNhMjI2ZWNjZDA3ODM5ODM3OTIzY2JjNDRiYWI5MjMgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy9nZW5lcmF0ZS11bmlmaWVkLXNvdXJjZXMuc2gK
KysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaApA
QCAtMTQsNyArMTQsNyBAQCBpZiBbIC16ICIke0JVSUxEX1NDUklQVFNfRElSfSIgXTsgdGhlbgog
ICAgIGZpCiBmaQogCi1VbmlmaWVkU291cmNlQ3BwRmlsZUNvdW50PTExMQorVW5pZmllZFNvdXJj
ZUNwcEZpbGVDb3VudD0xMTIKIFVuaWZpZWRTb3VyY2VNbUZpbGVDb3VudD04MAogCiBpZiBbICQj
IC1lcSAwIF07IHRoZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9T
b3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDA1YTg1YjAxOTYwNDIwMTZhYjY4NWYyMGQ0
YmVmNzNjNDYyNjU2MDcuLjQyZmI2MWIxNzc1MWUxMTk3MzJmYWFiMjZlMTU4YTUyNjM1NTM1MjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktp
dC9Tb3VyY2VzLnR4dApAQCAtMTQzLDggKzE0MywxNCBAQCBOZXR3b3JrUHJvY2Vzcy9TZXJ2aWNl
V29ya2VyL1dlYlNXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlvbi5jcHAgQG5vLXVuaWZ5CiBOZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL0ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5jcHAKIE5ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGUuY3BwCiBOZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL0ZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkuY3BwCitOZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNwcAogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3Jr
U3RvcmFnZU1hbmFnZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VN
YW5hZ2VyLmNwcAorTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAK
K05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcAorTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
TG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2Fs
U3RvcmFnZURhdGFiYXNlVHJhY2tlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IGY0MDAwYTZiNzE5
MTM1YzM0M2I0Y2QwOWMwMjNhNjhmMmM1ZTc4NWUuLmIxMWYyZDUzY2ZmYTg1Zjk2ZjI3NDExZDlk
MmRiMDdkOTZhMDdjMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMTU3MiwxNiArMTU3Miw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKGNvbnN0
IFN0cmluZyYgaW5kZXhlZERhdGFiCiAgICAgICAgIEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGlj
TGluayhpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIG9sZFZlcnNpb25EaXJlY3RvcnkpOwogfQog
Ci12b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExvY2FsU3RvcmFnZURldGFpbHMoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxMb2NhbFN0
b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQotewotICAgIGlmICghY2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcih7IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6R2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0
YWlscyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgV2ViUGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdlUHJveHlJRCwgV2ViQ29yZTo6UGFnZUlk
ZW50aWZpZXIgd2ViUGFnZUlELCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdl
bnQsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9s
aWN5LCBzdGQ6Om9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc05hdmlnYXRp
bmdUb0FwcEJvdW5kRG9tYWluLCBMYXN0TmF2aWdhdGlvbldhc0FwcEluaXRpYXRlZCBsYXN0TmF2
aWdhdGlvbldhc0FwcEluaXRpYXRlZCkKIHsKICAgICBpZiAoIXVybC5pc1ZhbGlkKCkgfHwgIXVy
bC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDkwOTc5M2Uz
NzU2OGMwNDJiMTAwMmEyNmFhMDI3NDc4NGE5MWU0Y2EuLjcyMmQ5NzMxYTAxMmRlMzRmYjZjMzMy
YjkxMTQ1ZGQwMzAyZjU2M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0xOTY5LDE4ICsxOTY5LDYg
QEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tpZVN0b3JlKCkK
ICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQot
ewotICAgIGlmICghaXNQZXJzaXN0ZW50KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
eyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0
TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7Ci0gICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOwotICAgIH0pOwotfQotCiB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5o
CmluZGV4IDFkZTI1YTY2MDU3ZjJkNjZjNjI5OWU1ZWJiYjgxNDZiZWU5YjgxZTMuLjM0YWU1YWY2
MDczYzI1OTE0MjBmMjA5Y2UwZjc1MzJiYWJkYzgzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTE2Nyw3
ICsxNjcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBGdW5jdGlvbjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiYsIEZ1bmN0aW9uPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICB2b2lkIGdldExvY2FsU3RvcmFnZURldGFp
bHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmln
aW5EZXRhaWxzPiYmKT4mJik7CiAgICAgdm9pZCBzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZv
clRlc3RpbmcoQ2FjaGVNb2RlbCk7CiAgICAgdm9pZCBzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZv
clRlc3RpbmcoU2Vjb25kcyk7CiAgICAgdm9pZCByZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9y
VGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1vdXRw
dXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvVW5pZmllZFNvdXJjZXMtb3V0cHV0LnhjZmls
ZWxpc3QKaW5kZXggNTA4OThlNDYzMDE3MzE5NGFlNGVmN2NjZTQzYWU4ZWI0NjczYTg2Yi4uMmFk
Nzk2NDVkNmVmNjgzZGFkNGViMDc2ZjVkZDcyNDcyYmY4NjBiOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VbmlmaWVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VuaWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0xNyw2ICsxNyw3IEBAICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2Vz
L1VuaWZpZWRTb3VyY2UxMS1tbS5tCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTEuY3BwCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVk
U291cmNlMTEwLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTExMS5jcHAKKyQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2Ux
MTIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZp
ZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTItbW0ubW0KICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMi5jcHAK
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3Vy
Y2VzL1VuaWZpZWRTb3VyY2UxMy1tbS5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTQ1ZDRkMzY5MzE3ODQ0NzA0ZDQ3MTgwZmM0ZGFk
NmYxYjk2NjIzNi4uZGQ5ODY5OTk4NWI0NmZiZmQwMjUyMzc4YjU4MmU0MjQ0NDU1NGU5ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
NTE0LDYgKzE1MTQsMTMgQEAKIAkJOTNFNzk5ODUyNzU2RkE1NTAwNzQwMDhBIC8qIFdlYkZpbGVT
eXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTk4MjI3NTZGQTU0MDA3NDAwOEEg
LyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsg
fTsKIAkJOTNFNzk5ODcyNzU2RkFCNDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29u
bmVjdGlvbk1lc3NhZ2VzUmVwbGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTNFNzk5ODMyNzU2RkE1NDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1T
dG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzUmVwbGllcy5oICovOyB9OwogCQk5M0U3OTk4ODI3NTZG
QUMyMDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OTgxMjc1
NkZBNTMwMDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlcy5o
ICovOyB9OworCQk5M0U3OTlDNzI3NjAyNzQ2MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3Ry
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5
QzYyNzYwMjczNzAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuaCAqLzsgfTsKKwkJOTNF
Nzk5Q0UyNzYwNDk3QjAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5Q0EyNzYwNDk3QTAw
NzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5oICovOyB9OworCQk5M0U3OTlDRjI3NjA0
OTdCMDA3NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5Q0IyNzYwNDk3QTAwNzQwMDhBIC8qIExv
Y2FsU3RvcmFnZU1hbmFnZXIuaCAqLzsgfTsKKwkJOTNFNzk5RDIyNzYwQUE1QjAwNzQwMDhBIC8q
IFVuaWZpZWRTb3VyY2UxMTIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNFNzk5RDEyNzYwQUE1QTAwNzQwMDhBIC8qIFVuaWZpZWRTb3VyY2UxMTIu
Y3BwICovOyB9OworCQk5M0U3OTlEQTI3NjEyMTA4MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFy
ZWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5
OUQ0Mjc2MTIxMDcwMDc0MDA4QSAvKiBTUUxpdGVTdG9yYWdlQXJlYS5oICovOyB9OworCQk5M0U3
OTlEQjI3NjEyMTA4MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUQ1Mjc2MTIxMDcwMDc0MDA4
QSAvKiBNZW1vcnlTdG9yYWdlQXJlYS5oICovOyB9OworCQk5M0U3OTlEQzI3NjEyMTA4MDA3NDAw
OEEgLyogU3RvcmFnZUFyZWFCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0U3OTlENjI3NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNl
LmggKi87IH07CiAJCTkzRjU0OUI0MUUzMTc0QjcwMDBFNzIzOSAvKiBXS1NuYXBzaG90Q29uZmln
dXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNGNTQ5QjMxRTMxNzRCNzAwMEU3MjM5IC8qIFdLU25hcHNob3RDb25maWd1cmF0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk5NTBGMjg4MDI1
MjQxNEVBMDBCNzRGMUMgLyogV0tNb3VzZURldmljZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NTBGMjg3RTI1MjQxNEU5MDBCNzRGMUMg
LyogV0tNb3VzZURldmljZU9ic2VydmVyLmggKi87IH07CiAJCTk1NjUwODM5MjZEODdBMkIwMEUx
NUNCNyAvKiBBcHBsZU1lZGlhU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1NjUwODM3MjZEODdBMkIwMEUxNUNCNyAvKiBBcHBsZU1l
ZGlhU2VydmljZXNTUEkuaCAqLzsgfTsKQEAgLTUzNTMsNiArNTM2MCwxOSBAQAogCQk5M0U3OTk4
MTI3NTZGQTUzMDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2Fn
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRmlsZVN5c3RlbVN0b3Jh
Z2VDb25uZWN0aW9uTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNF
Nzk5ODIyNzU2RkE1NDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1l
c3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0U3OTk4MzI3NTZGQTU0MDA3NDAwOEEgLyogV2ViRmls
ZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXNSZXBsaWVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2Vz
UmVwbGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlDNTI3NjAyNzM2
MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTNFNzk5QzYyNzYwMjczNzAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVn
aXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUFyZWFSZWdp
c3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlDOTI3NjA0OTdBMDA3
NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTNFNzk5Q0EyNzYwNDk3QTAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFu
YWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXNzaW9uU3RvcmFnZU1h
bmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5Q0IyNzYwNDk3QTAw
NzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTG9jYWxTdG9yYWdlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5M0U3OTlDQzI3NjA0OTdCMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlc3Npb25TdG9yYWdlTWFu
YWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQxMjc2MEFBNUEw
MDc0MDA4QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFVuaWZpZWRTb3VyY2UxMTIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5M0U3OTlEMzI3NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMaXRlU3RvcmFnZUFyZWEu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlENDI3NjEyMTA3MDA3NDAw
OEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1FMaXRlU3RvcmFnZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNF
Nzk5RDUyNzYxMjEwNzAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeVN0b3JhZ2VBcmVhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTkzRTc5OUQ2Mjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUFyZWFCYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQ3Mjc2MTIxMDgwMDc0MDA4QSAv
KiBTdG9yYWdlQXJlYUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU3RvcmFnZUFyZWFCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNF
Nzk5RDgyNzYxMjEwODAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lbW9yeVN0b3JhZ2VBcmVhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGNTQ5QjMxRTMxNzRCNzAwMEU3MjM5IC8qIFdLU25h
cHNob3RDb25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
U25hcHNob3RDb25maWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
RjU0OUI1MUUzMTc0REEwMDBFNzIzOSAvKiBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLU25hcHNob3RDb25maWd1cmF0
aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NTBGMjg3RTI1MjQxNEU5MDBC
NzRGMUMgLyogV0tNb3VzZURldmljZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdLTW91c2VEZXZpY2VPYnNlcnZlci5oOyBwYXRoID0gaW9zL1dLTW91c2VEZXZp
Y2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODIzNCw2ICs4MjU0
LDcgQEAKIAkJCQkxQ0FFQ0I1RDI3NDY1QUUzMDBBQjc4RDAgLyogVW5pZmllZFNvdXJjZTEwOS5j
cHAgKi8sCiAJCQkJMUNBRUNCNjAyNzQ2NUFFMzAwQUI3OEQwIC8qIFVuaWZpZWRTb3VyY2UxMTAu
Y3BwICovLAogCQkJCTFDQUVDQjVFMjc0NjVBRTMwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTEx
LmNwcCAqLywKKwkJCQk5M0U3OTlEMTI3NjBBQTVBMDA3NDAwOEEgLyogVW5pZmllZFNvdXJjZTEx
Mi5jcHAgKi8sCiAJCQkpOwogCQkJbmFtZSA9ICJ1bmlmaWVkLXNvdXJjZXMiOwogCQkJcGF0aCA9
ICJEZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzIjsKQEAgLTEwMzE0LDExICsx
MDMzNSwyMyBAQAogCQkJCTkzNUI1Nzk4MjZGNTEyNzAwMDhCNDhBQyAvKiBGaWxlU3lzdGVtU3Rv
cmFnZUhhbmRsZVJlZ2lzdHJ5LmggKi8sCiAJCQkJOTMxQTA3NTEyNkYwNjMxMDAwNDQ3NENEIC8q
IEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5jcHAgKi8sCiAJCQkJOTMxQTA3NTAyNkYwNjMxMDAw
NDQ3NENEIC8qIEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5oICovLAorCQkJCTkzRTc5OUM5Mjc2
MDQ5N0EwMDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcCAqLywKKwkJCQk5M0U3OTlD
QjI3NjA0OTdBMDA3NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFuYWdlci5oICovLAorCQkJCTkzRTc5
OUQ4Mjc2MTIxMDgwMDc0MDA4QSAvKiBNZW1vcnlTdG9yYWdlQXJlYS5jcHAgKi8sCisJCQkJOTNF
Nzk5RDUyNzYxMjEwNzAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmggKi8sCiAJCQkJOTMw
ODVEQzMyNkUxQkJCRDAwMEVDNkE3IC8qIE5ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAgKi8sCiAJ
CQkJOTMwODVEQzQyNkUxQkJCRDAwMEVDNkE3IC8qIE5ldHdvcmtTdG9yYWdlTWFuYWdlci5oICov
LAogCQkJCTkzMDg1REM3MjZFMUM2RUUwMDBFQzZBNyAvKiBOZXR3b3JrU3RvcmFnZU1hbmFnZXIu
bWVzc2FnZXMuaW4gKi8sCiAJCQkJOTMwODVEQzUyNkUxQzZDRjAwMEVDNkE3IC8qIE9yaWdpblN0
b3JhZ2VNYW5hZ2VyLmNwcCAqLywKIAkJCQk5MzA4NURDNjI2RTFDNkNGMDAwRUM2QTcgLyogT3Jp
Z2luU3RvcmFnZU1hbmFnZXIuaCAqLywKKwkJCQk5M0U3OTlDQzI3NjA0OTdCMDA3NDAwOEEgLyog
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcCAqLywKKwkJCQk5M0U3OTlDQTI3NjA0OTdBMDA3NDAw
OEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmggKi8sCisJCQkJOTNFNzk5RDMyNzYxMjEwNzAw
NzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmNwcCAqLywKKwkJCQk5M0U3OTlENDI3NjEyMTA3
MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuaCAqLywKKwkJCQk5M0U3OTlENzI3NjEyMTA4
MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmNwcCAqLywKKwkJCQk5M0U3OTlENjI3NjEyMTA4
MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmggKi8sCisJCQkJOTNFNzk5QzUyNzYwMjczNjAw
NzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwICovLAorCQkJCTkzRTc5OUM2Mjc2MDI3
MzcwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9
IHN0b3JhZ2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTI5NzMsNiArMTMwMDYs
NyBAQAogCQkJCTU3RENFREFFMjE0QzYwMzMwMDE2Qjg0NyAvKiBMb2NhbFNlcnZpY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzQjI2MTRFMjI3RDE0QjEwMEI5N0E3NiAvKiBMb2NhbFN0b3JhZ2VE
YXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNCMjYxNEYyMjdEMTRCMTAwQjk3QTc2IC8q
IExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNzk5
Q0YyNzYwNDk3QjAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ2QkVCNkRCMjJGQjlENDgwMDI2OTg2NyAvKiBMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTdGMkYzMTI1QkY4MjAwMDhBRUIxRCAvKiBMb2dnaW5n
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRDRDdGNzFENDdFOTJBMDA5RjA4QkMgLyogTG9nSW5p
dGlhbGl6YXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMTI5OTEsNiArMTMwMjUsNyBAQAogCQkJ
CUExNTc5OUJEMjU4NDQzMzIwMDUyODIzNiAvKiBNZWRpYVNhbXBsZUN1cnNvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDc1QTlDRjMyNjE2OUJBQjAwNkRGQTNBIC8qIE1lZGlhU2Vzc2lvbkNvb3Jk
aW5hdG9yUHJveHlQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU3OTlCNzI1ODQ0MzMy
MDA1MjgyMzYgLyogTWVkaWFUcmFja1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNzk5
REIyNzYxMjEwODAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MTkzM0RFRjE5NjVFQjMxMDA4QUMzRUEgLyogTWVudVV0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOUI0NzkwOEQyNTMxNEQ4MzAwRUMxMUFCIC8qIE1lc3NhZ2VBcmd1bWVudERl
c2NyaXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDNEM4MjkxNkI4NzZBOTAwNjlEQ0NE
IC8qIE1lc3NhZ2VGbGFncy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzAzOSw3ICsxMzA3NCw2IEBA
CiAJCQkJNTMyMTU5NTYxREJBRTcyRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4Mzk5MDIwMzFCRTlBMDJCMDAwRjM2NTMgLyogTmV0d29ya0xv
YWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzRDQ1NEQ3MUJFOUQzQzQwMDZDOTNCRCAvKiBOZXR3
b3JrTG9hZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE3QjVGOTcyNzVFQzVFNTAwMkRD
MjJEIC8qIFdlYlB1c2hNZXNzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzkxNDk2NTFCRUE4
Mzg1MDBEMkQ5NTMgLyogTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFNDdGQzhBMDI1QjgzMzFDMDA1NDk1RkMgLyogTmV0d29ya0xvYWRTY2hlZHVsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxNDUyNkVEMjcxRTE2NDcwMDA0NjdCNiAvKiBOZXR3b3JrTm90aWZp
Y2F0aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzEyNyw2ICsxMzE2MSw3IEBACiAJ
CQkJMkQyNzlFMTkyNjk1NTc2ODAwNEIzRUVCIC8qIFByb3RvdHlwZVRvb2xzU1BJLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTdCNUY4MTI3NUU5N0I2MDAyREMyMkQgLyogUHVzaEFwcEJ1bmRsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGN0QyNzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hDbGll
bnRDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTdCNUY5NTI3NUVCQTYzMDAyREMy
MkQgLyogUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUU2ODg3
MDFGNkUyQkFCMDA3MDA2QTYgLyogUXVhcmFudGluZVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUEwQzIyN0UyNDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5r
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUVFNTcyNTI0MDlGMTQyMDAyMDA1RDYgLyogUXVpY2tM
b29rVGh1bWJuYWlsTG9hZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTEzMjExLDYgKzEzMjQ2LDcg
QEAKIAkJCQk1MTREOUY1NzE5MTE5RDM1MDAwMDYzQTcgLyogU2VydmljZXNDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUZERTY1QTE5NTRBNDJCMDBDNDhGRkEgLyogU2Vzc2lvblN0
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTAwMkQ0OTE5NkIzNDVEMDBCOUFENDQgLyogU2Vz
c2lvblN0YXRlQ29kaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3OTlDRTI3NjA0OTdCMDA3
NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkJF
QjZERjIyRkJCMTZCMDAyNjk4NjcgLyogU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBNjQyMEU1MTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRtYXAu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY0M0E5Q0UwMjVENzJGMUMwMDk5MEUyNiAvKiBTaGFyZWFi
bGVCaXRtYXBVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTMyMzksMTEgKzEzMjc1LDE0
IEBACiAJCQkJOTNENkI3NzIyNTRCQjUxOTAwNThERDNBIC8qIFNwZWVjaFJlY29nbml0aW9uU2Vy
dmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Q2Qjc4NDI1NENDRDBFMDA1OEREM0EgLyogU3Bl
ZWNoUmVjb2duaXRpb25TZXJ2ZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNENkI3
ODUyNTRDQ0Q0MzAwNThERDNBIC8qIFNwZWVjaFJlY29nbml0aW9uU2VydmVyTWVzc2FnZXNSZXBs
aWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3OTlEQTI3NjEyMTA4MDA3NDAwOEEgLyogU1FM
aXRlU3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBM0ZFQ0EyMjFGN0MwOTcwMEYy
NjdDRCAvKiBTdG9yYWdlQWNjZXNzU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkJFQjZE
NzIyRkI5QkQ3MDAyNjk4NjcgLyogU3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovLAorCQkJCTkz
RTc5OURDMjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBRDMzMDZGMTZCMUQ5OTEwMDRGNjBFNyAvKiBTdG9yYWdlQXJlYUltcGwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBQ0VDRDI1MTcxNjJEQjEwMDFGQzlFRiAvKiBTdG9yYWdlQXJlYU1h
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzMzRERUUxNkRFOEY4ODAwNkE4RTM4IC8qIFN0b3Jh
Z2VBcmVhTWFwTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTc5OUM3Mjc2MDI3NDYw
MDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Iy
NjE0RDIyN0QxNDlFMDBCOTdBNzYgLyogU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzNkIwNTk4MjMwMzkwOTcwMDJGQzA2QiAvKiBTdG9yYWdlTWFuYWdlclNldC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTM2OEVFREYyMzAzQTlFRDAwQkRCMTFBIC8qIFN0b3JhZ2VNYW5hZ2Vy
U2V0TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTM1MTMsNiArMTM1NTIsNyBAQAogCQkJ
CTUxN0I1RjJFMjc1NzM4MkEwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZp
Z3VyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkNENjlBMjcyMUYwQTkwMEY3RjhFQyAv
KiBXZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUY3MzI3
NUU5NjA5MDAyREMyMkQgLyogV2ViUHVzaERhZW1vbk1haW4uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUxN0I1Rjk3Mjc1RUM1RTUwMDJEQzIyRCAvKiBXZWJQdXNoTWVzc2FnZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDYxQ0NDQTYyMzE0ODVBQTAwQjY1OUI5IC8qIFdlYlJlbW90ZU9iamVjdFJlZ2lz
dHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTg2MEU3MTIzMEY2N0ZDMDA0NjFBQUUgLyogV2Vi
UmVzb3VyY2VJbnRlcmNlcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTBBRkZC
QTE2NTQyMDQ4MDAxQkEwNUUgLyogV2ViUmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMTM1NDcsNyArMTM1ODcsNiBAQAogCQkJCTkzNTZGMkRDMjE1MkI2QjUwMEU2RDVERiAvKiBX
ZWJTV0NsaWVudENvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0E1MzEwMUY0N0E4
NjIwMERDREMwQSAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDY2QkMwM0MxRkEyNjZEQTAwMkZBOUMxIC8qIFdlYlNXQ29udGV4dE1hbmFnZXJD
b25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTdCNUY5NTI3NUVCQTYzMDAyREMyMkQg
LyogUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NjBGNDg5MDFG
OTk2RjcxMDBDRjRCODcgLyogV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb25NZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzExQTlFQ0MyMTQwMzVGODAwQ0ZCMjBBIC8qIFdlYlN3aXRj
aGluZ0dQVUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1NkYyREUyMTUyQjcxMDAwRTZE
NURGIC8qIFdlYlNXT3JpZ2luU3RvcmUuaCBpbiBIZWFkZXJzICovLApAQCAtMTUxMTYsOSArMTUx
NTUsOSBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAog
CQkJCTUxN0I1RjlBMjc1RjNBODYwMDJEQzIyRCAvKiBBcmd1bWVudENvZGVycy5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk1MTdCNUY2ODI3NUE5QTc4MDAyREMyMkQgLyogV2ViUHVzaFRvb2xDb25u
ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3QjVGOUIyNzVGM0E5ODAwMkRDMjJEIC8q
IERhZW1vblV0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxN0I1RjlDMjc1RjNDMzcw
MDJEQzIyRCAvKiBEYWVtb25FbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxN0I1RjlC
Mjc1RjNBOTgwMDJEQzIyRCAvKiBEYWVtb25VdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQk1MTdCNUY2ODI3NUE5QTc4MDAyREMyMkQgLyogV2ViUHVzaFRvb2xDb25uZWN0aW9uLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTE3QjVGNjUyNzVBOEQ3RjAwMkRDMjJEIC8qIFdlYlB1c2hUb29s
TWFpbi5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwpAQCAtMTUyMTQsNyArMTUyNTMsNiBAQAogCQkJCUNEQTkzREIxMjJG
OEJDRjQwMDQ5MEE2OSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWNQYXJhbWV0ZXJzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUMxQTE1MkQ3MjRFNUEyOUEwMDk3OEM4QiAvKiBIYW5kbGVY
UENFbmRwb2ludE1lc3NhZ2VzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjc0OUY2NDQyMTQ2NTYx
QjAwODM4MEJGIC8qIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1MTdCNUY5OTI3NUVDNjAxMDAyREMyMkQgLyogV2ViUHVzaE1lc3NhZ2VDb2NvYS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTI3NDlGNjQ1MjE0NjU2MUUwMDgzODBCRiAvKiBJbmplY3RlZEJ1
bmRsZVJhbmdlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlCRjVFQzY0MjU0MTE0NTYw
MDk4NEU3NyAvKiBKU0lQQ0JpbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzE0RDM3RkUy
NEFDRTA4NjAwN0ZGMDE0IC8qIExhdW5jaFNlcnZpY2VzRGF0YWJhc2VNYW5hZ2VyLm1tIGluIFNv
dXJjZXMgKi8sCkBAIC0xNTUwMyw2ICsxNTU0MSw3IEBACiAJCQkJMUNBRUNCNjUyNzQ2NUFFNDAw
QUI3OEQwIC8qIFVuaWZpZWRTb3VyY2UxMDkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNBRUNC
NjgyNzQ2NUFFNDAwQUI3OEQwIC8qIFVuaWZpZWRTb3VyY2UxMTAuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUNBRUNCNjYyNzQ2NUFFNDAwQUI3OEQwIC8qIFVuaWZpZWRTb3VyY2UxMTEuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJOTNFNzk5RDIyNzYwQUE1QjAwNzQwMDhBIC8qIFVuaWZpZWRTb3Vy
Y2UxMTIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM4QTFGQzAyM0E1NTFCRjAwRDIzNzRGIC8q
IFVzZXJJbnRlcmZhY2VJZGlvbS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNENDkxQjBEMUU3MzJF
NEQwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDRDQ5MUIxNzFFNzM1MjU1MDAwMDkwNjYgLyogVXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTE1NTc0LDYgKzE1NjEzLDcgQEAKIAkJCQlCQ0VFN0FEMDEyODE3OTg4MDA5ODI3REEgLyogV2Vi
UHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxN0I1
RjdBMjc1RTk3QTQwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTE3QjVGNzkyNzVFOTdBMTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25NYWluLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJNTE3QjVGOTkyNzVFQzYwMTAwMkRDMjJEIC8qIFdlYlB1c2hNZXNzYWdl
Q29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUYwNjBFMTE2NTQzMTg1MDBGMzI4MUIgLyog
V2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFGMDYwRTExNjU0MzE4NTAwRjMyODFGIC8qIFdlYlJUQ01vbml0b3JNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODJDIC8qIFdlYlJU
Q1Jlc29sdmVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCmlu
ZGV4IDBmYTZhYzE4ZmQ5NDcwNTkwY2YxMDdkNmE0NDA2NmQ5MmQ5YTQzNmQuLjJjZjdhNmQ0YjYw
MDVjMWQ3ZWMyNTZiZDYzODg3NjI5NGU5ZTRjZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24uaCIKKyNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZU1hbmFnZXJNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwTWVz
c2FnZXMuaCIKICNpbmNsdWRlICJTdG9yYWdlTWFuYWdlclNldE1lc3NhZ2VzLmgiCkBAIC05NSw3
ICs5Niw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OnNldEl0ZW0oRnJhbWUqIHNvdXJjZUZyYW1l
LCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUFyZWEsIGNvCiAgICAgbV9wZW5kaW5nVmFsdWVDaGFu
Z2VzLmFkZChrZXkpOwogCiAgICAgaWYgKG1fbWFwSUQpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5z
ZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6U2V0SXRlbSgqbV9tYXBJRCwgc291cmNl
QXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHZhbHVlLCBzb3VyY2VGcmFt
ZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6U2V0SXRlbSgqbV9tYXBJRCwg
c291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHZhbHVlLCBzb3Vy
Y2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKICAgICBlbHNlCiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTdG9yYWdlQXJlYU1hcDo6c2V0SXRlbSBm
YWlsZWQgYmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CiB9CkBAIC0xMTQsNyAr
MTE1LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbShXZWJDb3JlOjpGcmFtZSog
c291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc28KICAgICBtX3BlbmRpbmdWYWx1ZUNoYW5n
ZXMuYWRkKGtleSk7CiAKICAgICBpZiAobV9tYXBJRCkKLSAgICAgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNl
bmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpSZW1vdmVJdGVtKCptX21hcElELCBzb3Vy
Y2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIGtleSwgc291cmNlRnJhbWUtPmRv
Y3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgMCk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OlJlbW92ZUl0ZW0oKm1fbWFwSUQsIHNv
dXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwga2V5LCBzb3VyY2VGcmFtZS0+
ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKICAgICBlbHNlCiAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbSBmYWlsZWQg
YmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CiB9CkBAIC0xMjksNyArMTMwLDcg
QEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6Y2xlYXIoV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1l
LCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUEKICAgICBtX21hcCA9IG1ha2VVbmlxdWU8U3RvcmFn
ZU1hcD4obV9xdW90YUluQnl0ZXMpOwogCiAgICAgaWYgKG1fbWFwSUQpCi0gICAgICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q2xlYXIoKm1fbWFwSUQs
IHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwgc291cmNlRnJhbWUtPmRv
Y3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgMCk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNsZWFyKCptX21hcElELCBzb3VyY2VB
cmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgp
LT51cmwoKS5zdHJpbmcoKSksIDApOwogICAgIGVsc2UKICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVhTWFwOjpjbGVhciBmYWlsZWQgYmVjYXVzZSBzdG9yYWdl
IG1hcCBJRCBpcyBpbnZhbGlkIik7CiB9CkBAIC0xNjAsNyArMTYxLDcgQEAgU3RvcmFnZU1hcCYg
U3RvcmFnZUFyZWFNYXA6OmVuc3VyZU1hcCgpCiAgICAgICAgICAgICAvLyBmcm9tIG91ciBTdG9y
YWdlTWFuYWdlclNldDo6R2V0VmFsdWVzKCkgSVBDLiBUaGlzIElQQyBtYXkgYmUgdmVyeSBzbG93
IGJlY2F1c2UgaXQgbWF5IG5lZWQgdG8gZmV0Y2ggdGhlIHZhbHVlcyBmcm9tIGRpc2sgYW5kIHRo
ZXJlIG1heSBiZSBhIGxvdCBvZiBkYXRhLgogICAgICAgICAgICAgSVBDOjpVbmJvdW5kZWRTeW5j
aHJvbm91c0lQQ1Njb3BlIHVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGU7CiAgICAgICAgICAg
ICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YWx1ZXM7Ci0gICAgICAgICAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCkuc2VuZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpHZXRWYWx1ZXMoKm1fbWFw
SUQpLCBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkdldFZhbHVlczo6UmVwbHkodmFsdWVz
KSwgMCk7CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdv
cmtTdG9yYWdlTWFuYWdlcjo6R2V0VmFsdWVzKCptX21hcElEKSwgTWVzc2FnZXM6OlN0b3JhZ2VN
YW5hZ2VyU2V0OjpHZXRWYWx1ZXM6OlJlcGx5KHZhbHVlcyksIDApOwogICAgICAgICAgICAgbV9t
YXAtPmltcG9ydEl0ZW1zKFdURk1vdmUodmFsdWVzKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVhTWFwOjplbnN1cmVN
YXAgZmFpbGVkIHRvIGxvYWQgZnJvbSBuZXR3b3JrIHByb2Nlc3MgYmVjYXVzZSBzdG9yYWdlIG1h
cCBJRCBpcyBpbnZhbGlkIik7CkBAIC0zNDgsMjAgKzM0OSwyMyBAQCB2b2lkIFN0b3JhZ2VBcmVh
TWFwOjpjb25uZWN0KCkKICAgICBpZiAobV9tYXBJRCkKICAgICAgICAgcmV0dXJuOwogCisgICAg
U3RvcmFnZUFyZWFJZGVudGlmaWVyIG1hcElEOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAg
Y2FzZSBTdG9yYWdlVHlwZTo6TG9jYWw6CiAgICAgY2FzZSBTdG9yYWdlVHlwZTo6VHJhbnNpZW50
TG9jYWw6CiAgICAgICAgIGlmIChTZWN1cml0eU9yaWdpbiogdG9wTGV2ZWxPcmlnaW4gPSBtX25h
bWVzcGFjZS50b3BMZXZlbE9yaWdpbigpKQotICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRT
eW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRvVHJhbnNpZW50TG9jYWxT
dG9yYWdlQXJlYShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9uSUQoKSwgbV9uYW1lc3Bh
Y2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCksIHRvcExldmVsT3JpZ2luLT5kYXRhKCksIG1fc2VjdXJp
dHlPcmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRv
VHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYTo6UmVwbHkobV9tYXBJRCksIDApOworICAgICAgICAg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OkNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEobV9uYW1lc3BhY2Uuc3RvcmFnZU5h
bWVzcGFjZUlEKCksIHRvcExldmVsT3JpZ2luLT5kYXRhKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRh
dGEoKSksIE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5lY3RUb1RyYW5zaWVu
dExvY2FsU3RvcmFnZUFyZWE6OlJlcGx5KG1hcElEKSwgMCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6
OkNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2Vzc2lv
bklEKCksIG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2lu
LT5kYXRhKCkpLCBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb0xvY2FsU3Rv
cmFnZUFyZWE6OlJlcGx5KG1fbWFwSUQpLCAwKTsKKyAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5z
ZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9Mb2NhbFN0
b3JhZ2VBcmVhKG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3Jp
Z2luLT5kYXRhKCkpLCBNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9M
b2NhbFN0b3JhZ2VBcmVhOjpSZXBseShtYXBJRCksIDApOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIFN0b3JhZ2VUeXBlOjpTZXNzaW9uOgotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMo
TWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEo
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2Vzc2lvbklEKCksIG1fbmFtZXNwYWNlLnN0b3JhZ2VO
YW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6U3RvcmFn
ZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYTo6UmVwbHkobV9tYXBJRCks
IDApOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6Q29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKG1fbmFtZXNwYWNlLnN0b3Jh
Z2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6TmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWE6OlJlcGx5KG1h
cElEKSwgMCk7CiAgICAgfQogCi0gICAgaWYgKG1fbWFwSUQpCisgICAgaWYgKG1hcElELmlzVmFs
aWQoKSkgeworICAgICAgICBtX21hcElEID0gbWFwSUQ7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnJlZ2lzdGVyU3RvcmFnZUFyZWFNYXAoKnRoaXMpOworICAgIH0KIH0KIAogdm9p
ZCBTdG9yYWdlQXJlYU1hcDo6ZGlzY29ubmVjdCgpCkBAIC0zNzMsNyArMzc3LDcgQEAgdm9pZCBT
dG9yYWdlQXJlYU1hcDo6ZGlzY29ubmVjdCgpCiAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
dW5yZWdpc3RlclN0b3JhZ2VBcmVhTWFwKCp0aGlzKTsKIAogICAgIGlmIChhdXRvKiBuZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5leGlzdGluZ05ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbigpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24t
PmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6RGlzY29ubmVj
dEZyb21TdG9yYWdlQXJlYSgqbV9tYXBJRCksIDApOworICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OkRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoKm1fbWFwSUQpLCAwKTsKIAogICAgIG1fbWFw
SUQgPSB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKaW5kZXggZjg0ZDAyZmM2ZjdlM2Ji
MWUzMTQzM2M1ZjAwZTYxZTBmZGViZjkzMi4uZGViNmEzNDMzY2FiYWZhZjdkY2FhNTYwY2RjM2Ex
NWUzYWNhN2U3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcApAQCAtMjcsOSArMjcsOSBAQAog
I2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgiCiAKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZU1hbmFnZXJNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVh
TWFwLmgiCi0jaW5jbHVkZSAiU3RvcmFnZU1hbmFnZXJTZXRNZXNzYWdlcy5oIgogI2luY2x1ZGUg
IldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXBQcm94eS5oIgogI2luY2x1ZGUgIldl
YlByb2Nlc3MuaCIKQEAgLTExNCw3ICsxMTQsNyBAQCBSZWY8U3RvcmFnZU5hbWVzcGFjZT4gU3Rv
cmFnZU5hbWVzcGFjZUltcGw6OmNvcHkoUGFnZSYgbmV3UGFnZSkKICAgICBBU1NFUlQobV9zdG9y
YWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6U2Vzc2lvbik7CiAKICAgICBpZiAoYXV0byBuZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5leGlzdGluZ05ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbigpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24t
PmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q2xvbmVTZXNz
aW9uU3RvcmFnZU5hbWVzcGFjZShzZXNzaW9uSUQoKSwgbV9zdG9yYWdlTmFtZXNwYWNlSUQsIFdl
YlBhZ2U6OmZyb21Db3JlUGFnZShuZXdQYWdlKS5zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUlkZW50
aWZpZXIoKSksIDApOworICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rp
b24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNsb25lU2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2UobV9zdG9yYWdlTmFtZXNwYWNlSUQsIFdlYlBhZ2U6OmZyb21Db3JlUGFn
ZShuZXdQYWdlKS5zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIoKSksIDApOwogCiAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFnZU5hbWVzcGFjZUltcGwobV9zdG9yYWdlVHlw
ZSwgV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKG5ld1BhZ2UpLnNlc3Npb25TdG9yYWdlTmFtZXNwYWNl
SWRlbnRpZmllcigpLCBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UobmV3UGFnZSkuaWRlbnRpZmllcigp
LCBtX3RvcExldmVsT3JpZ2luLmdldCgpLCBtX3F1b3RhSW5CeXRlcykpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446838</attachid>
            <date>2021-12-10 16:12:06 -0800</date>
            <delta_ts>2021-12-12 01:34:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234087-20211210161205.patch</filename>
            <type>text/plain</type>
            <size>164468</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2ODU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDE5ZTUxYmY4NWIwNDFm
ZTk5N2Y3NmVjM2I2OGRlMTQyYTU1MWNlYi4uYWZlZDdlMDQ0YWJmMjQwNmM0YWZkMGJkMTcxZTYz
OThlYjk4NGYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTEyLTEwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIFN0b3JhZ2VNYW5h
Z2VyIHdpdGggTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIHRvIG1hbmFnZSBXZWJTdG9yYWdlIGJ5IG9y
aWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVGaWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwv
U1FMaXRlRmlsZVN5c3RlbS5oOgorCiAyMDIxLTEyLTA5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBVc2Ugc2ltcGxlciBpZGlvbXMgZm9yIHN0ZDo6bGVzcyBhbmQg
c3RkOjpncmVhdGVyIHBvc3NpYmxlIGluIG1vZGVybiBDKysKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYmM3NWExOTY0
MzRmZjUwNTc5OWU3ODIzOWUyYTZhOTYwNGZiNzAyYS4uMDQxNzUwODY4NGY3ZDc2NDRlMTZmZjc0
MzdlYWMzOTZiM2E2YWYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMTEgQEAKKzIwMjEtMTItMTAg
IFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgTWVyZ2UgU3RvcmFn
ZU1hbmFnZXIgd2l0aCBOZXR3b3JrU3RvcmFnZU1hbmFnZXIgdG8gbWFuYWdlIFdlYlN0b3JhZ2Ug
Ynkgb3JpZ2luCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzQwODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbiBuZXR3b3JrIHByb2Nlc3MsIFdlYlN0b3JhZ2UgZGF0YSBpcyBtYW5hZ2VkIGJ5IFdlYktp
dDo6U3RvcmFnZU1hbmFnZXIgY2xhc3MuIEVhY2ggU3RvcmFnZU1hbmFnZXIgb3ducyBvbmUgb3IK
KyAgICAgICAgbWFueSBTdG9yYWdlTmFtZVNwYWNlcywgYW5kIGVhY2ggU3RvcmFnZU5hbWVzcGFj
ZXMgb3ducyBvbmUgb3IgbW9yZSBTdG9yYWdlQXJlYXMuIEVhY2ggU3RvcmFnZUFyZWEgY29ycmVw
b25kcworICAgICAgICB0byBvbmUgc3RvcmFnZSBtYXAgKG9uZSBsb2NhbFN0b3JhZ2Ugb3Igc2Vz
c2lvblN0b3JhZ2Ugb2JqZWN0KSwgYW5kIGhhcyB0d28gdHlwZXMgb2YgYmFja2VuZDogYSBTUUxp
dGUgZGF0YWJhc2UsCisgICAgICAgIG9yIGEgaW4tbWVtb3J5IGhhc2ggbWFwLiBOb3cgdGhhdCB3
ZSBoYXZlIE5ldHdvcmtTdG9yYWdlTWFuYWdlciwgd2hpY2ggbWFuYWdlcyBzdG9yYWdlIGJ5IG9y
aWdpbi4gV2UgY2FuIG1lcmdlCisgICAgICAgIFN0b3JhZ2VNYW5hZ2VyIHdpdGggTmV0d29ya1N0
b3JhZ2VNYW5hZ2VyLCBiZWNhdXNlIGxvY2FsU3RvcmFnZSBhbmQgc2Vzc2lvblN0b3JhZ2UgYXJl
IG5vdCBzaGFyZWQgYmV0d2VlbiAKKyAgICAgICAgZGlmZmVyZW50IG9yaWdpbnMuCisKKyAgICAg
ICAgVGhlIG5ldyBzdHJ1Y3R1cmUgaXM6CisgICAgICAgIE5ldHdvcmtTdG9yYWdlTWFuYWdlciAo
bWFuYWdlIHN0b3JhZ2UgZm9yIGEgc2Vzc2lvbiwgb3ducyBvbmUgb3IgbW9yZSBPcmlnaW5TdG9y
YWdlTWFuYWdlcikKKyAgICAgICAgT3JpZ2luU3RvcmFnZU1hbmFnZXIgKG1hbmFnZSBzdG9yYWdl
IGZvciBhbiBvcmlnaW4sIG93bnMgb25lIExvY2FsU3RvcmFnZU1hbmFnZXIgYW5kIG9uZSBTZXNz
aW9uU3RvcmFnZU1hbmFnZXIpCisgICAgICAgIExvY2FsU3RvcmFnZU1hbmFnZXIgLyBTZXNzaW9u
U3RvcmFnZU1hbmFnZXIgKG1hbmFnZSBMb2NhbFN0b3JhZ2UgYW5kIFNlc3Npb25TdG9yYWdlLCBv
d25zIG9uZSBvciBtb3JlIAorICAgICAgICBTdG9yYWdlQXJlYUJhc2VzKQorICAgICAgICBNZW1v
cnlTdG9yYWdlQXJlYSAvIFNRTGl0ZVN0b3JhZ2VBcmVhIChpbmhlcml0cyBTdG9yYWdlQXJlYUJh
c2VzOyBtYW5hZ2Ugb25lIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZSwgbGlrZSAKKyAgICAgICAg
V2Via2l0OjpTdG9yYWdlQXJlYSkKKworICAgICAgICBTdG9yYWdlTmFtZXNwYWNlIGxheWVyIGlz
IHJlbW92ZWQuIEZvciBTZXNzaW9uU3RvcmFnZSwgZGlmZmVyZW50IFN0b3JhZ2VOYW1lc3BhY2Vz
IG1lYW5zIGRpZmZlcmVudCB3ZWIgcGFnZXMsIAorICAgICAgICBhbmQgc2FtZSBvcmlnaW4gY2Fu
IGhhdmUgZGlmZmVyZW50IHNlc3Npb25TdG9yYWdlcyBvbiBkaWZmZXJlbnQgcGFnZXMsIHNvIHdl
IGtlZXAgYSBTdG9yYWdlTmFtZXNwYWNlIDw9PgorICAgICAgICBTdG9yYWdlQXJlYSBtYXAgaW4g
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLiBGb3IgTG9jYWxTdG9yYWdlLCBkaWZmZXJudCBTdG9yYWdl
TmFtZXNwYWNlcyBtZWFucyBkaWZmZXJlbnQgcGFnZSAKKyAgICAgICAgZ3JvdXBzLiBPdXIgb3Jp
Z2luYWwgcGxhbiB3YXMgdGhlIHNhbWUgb3JpZ2luIGNhbiBoYXZlIGRpZmZlcmVudCBsb2NhbFN0
b3JhZ2VzIGluIGRpZmZlcmVudCBwYWdlIGdyb3VwcywgYnV0IG91cgorICAgICAgICBvbGQgaW1w
bGVtZW50YXRpb24gYWN0dWFsbHkgbWFkZSBhbGwgcGFnZSBncm91cHMgcG9pbnQgdG8gdGhlIHNh
bWUgZGF0YWJhc2UgZmlsZS4gVG8ga2VlcCBleGlzdGluZyBiZWhhdmlvciAKKyAgICAgICAgKHRo
YXQgYWxsIHBhZ2UgZ3JvdXBzIHdpdGggc2FtZSBvcmlnaW4gc2hhcmUgdGhlIHN0b3JhZ2UpLCB3
ZSBub3cga2VlcCBvbmUgU3RvcmFnZUFyZWEgcGVyIExvY2FsU3RvcmFnZU1hbmFnZXIuCisKKyAg
ICAgICAgTW9zdGx5IHJlZmFjdG9yaW5nIGFuZCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgor
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6bG93TWVtb3J5SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZXN0cm95U2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpoYXNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlQW5kUmVzdHJpY3RXZWJzaXRlRGF0YUZvclJl
Z2lzdHJhYmxlRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwcmVw
YXJlVG9TdXNwZW5kKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJlc3VtZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y29ubmVjdGlvblRvV2ViUHJvY2Vz
c0Nsb3NlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpnZXRMb2NhbFN0b3Jh
Z2VPcmlnaW5EZXRhaWxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdl
TWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpmaWxlTmFtZVRvT3JpZ2luKToK
KyAgICAgICAgKFdlYktpdDo6b3JpZ2luVG9GaWxlTmFtZSk6CisgICAgICAgIChXZWJLaXQ6Okxv
Y2FsU3RvcmFnZU1hbmFnZXI6Om9yaWdpbnNPZkxvY2FsU3RvcmFnZURhdGEpOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VGaWxlUGF0aCk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU1hbmFnZXIpOgor
ICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OmNsZWFyRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OmNsb3NlKToKKyAgICAgICAgKFdl
YktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6aGFuZGxlTG93TWVtb3J5V2FybmluZyk6CisgICAg
ICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKToKKyAg
ICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6ZW5zdXJlU3RvcmFnZUFyZWEpOgor
ICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9Mb2NhbFN0b3Jh
Z2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRv
VHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpNZW1vcnlTdG9yYWdlQXJlYSk6CisgICAg
ICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjppc0VtcHR5KToKKyAgICAgICAgKFdlYktp
dDo6TWVtb3J5U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3Rv
cmFnZUFyZWE6OmFsbEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6
OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpNZW1vcnlTdG9yYWdlQXJlYTo6cmVtb3ZlSXRl
bSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpjbG9uZSBjb25zdCk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5oOiBBZGRl
ZC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9O
ZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpyZWFkT3JpZ2luRnJv
bUZpbGUpOgorICAgICAgICAoV2ViS2l0Ojp3cml0ZU9yaWdpblRvRmlsZUlmTmVjZXNzYXJ5KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsb3NlKToKKyAgICAg
ICAgKFdlYktpdDo6b3JpZ2luRGlyZWN0b3J5UGF0aCk6CisgICAgICAgIChXZWJLaXQ6Om9yaWdp
bkZpbGVQYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpsb2Nh
bE9yaWdpblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VN
YW5hZ2VyOjpyZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZU9yaWdpbkRpcmVjdG9yeUlmUG9z
c2libGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsZWFyU3Rv
cmFnZUZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmZvckVhY2hPcmlnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OmdldEFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OmZldGNoRGF0YUZyb21EaXNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1N0b3JhZ2VNYW5hZ2VyOjptb3ZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6c3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFu
YWdlcjo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpo
YW5kbGVMb3dNZW1vcnlXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VN
YW5hZ2VyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVh
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9TZXNz
aW9uU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
dG9yYWdlTWFuYWdlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0Ojp0b1dlYnNpdGVEYXRhVHlw
ZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3Rv
cmFnZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtT
dG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OlN0b3JhZ2VCdWNrZXQpOgorICAgICAgICAoV2Vi
S2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6dG9XZWJzaXRlRGF0YVR5
cGUpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tl
dDo6dG9TdG9yYWdlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VN
YW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojpsb2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdl
YktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmV4aXN0aW5nTG9jYWxT
dG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpT
dG9yYWdlQnVja2V0OjpzZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZXhpc3RpbmdTZXNzaW9uU3RvcmFn
ZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFn
ZUJ1Y2tldDo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpmZXRjaERhdGFUeXBlc0luTGlz
dCk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0
OjpkZWxldGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0
b3JhZ2VCdWNrZXQ6Om1vdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1h
bmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmZldGNoRGF0YVR5cGVzSW5MaXN0RnJvbU1lbW9yeSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpmZXRj
aERhdGFUeXBlc0luTGlzdEZyb21EaXNrKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFn
ZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0ZUxvY2FsU3RvcmFnZURhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZGVsZXRlU2Vz
c2lvblN0b3JhZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6
Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1h
bmFnZXI6OmRlZmF1bHRCdWNrZXQpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFu
YWdlcjo6bG9jYWxTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3Jh
Z2VNYW5hZ2VyOjpleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0
OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6c2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAg
KFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmlzRW1wdHkpOgor
ICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZmV0Y2hEYXRhVHlwZXNJbkxp
c3QpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YSk6
CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjptb3ZlRGF0YSk6CisgICAg
ICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojppc0FjdGl2
ZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9y
YWdlTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3Rv
cmFnZUFyZWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6
OnN0YXRlbWVudFN0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VB
cmVhOjpTUUxpdGVTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VB
cmVhOjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjp+U1FMaXRl
U3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6aXNFbXB0
eSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjbGVhcik6CisgICAgICAg
IChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjcmVhdGVUYWJsZUlmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnByZXBhcmVEYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpzdGFydFRyYW5zYWN0aW9uSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6Y2FjaGVkU3RhdGVtZW50
KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW0pOgorICAgICAg
ICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0SXRlbUZyb21EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjphbGxJdGVtcyk6CisgICAgICAgIChXZWJL
aXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRl
U3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdl
QXJlYTo6Y29tbWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlNR
TGl0ZVN0b3JhZ2VBcmVhOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmg6IEFkZGVkLgorICAgICAgICAo
aXNUeXBlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1Nlc3Npb25TdG9yYWdl
TWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFn
ZXI6OlNlc3Npb25TdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25TdG9y
YWdlTWFuYWdlcjo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3Rv
cmFnZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlNl
c3Npb25TdG9yYWdlTWFuYWdlcjo6Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6U2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyOjphZGRTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OlNl
c3Npb25TdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKToKKyAgICAg
ICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpkaXNjb25uZWN0RnJvbVN0b3JhZ2VB
cmVhKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjbG9uZVN0b3Jh
Z2VBcmVhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1Nlc3Npb25TdG9yYWdl
TWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3Jh
Z2VBcmVhQmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6
OlN0b3JhZ2VBcmVhQmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6YWRk
TGlzdGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6OnJlbW92ZUxpc3Rl
bmVyKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlOjpoYXNMaXN0ZW5lcnMgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6Om5vdGlmeUxpc3RlbmVyc0Fi
b3V0Q2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6OmRpc3BhdGNoRXZl
bnRzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVh
QmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlOjppZGVudGlm
aWVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlOjpvcmlnaW4gY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6OnF1b3RhIGNvbnN0KToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFSZWdpc3RyeTo6cmVnaXN0ZXJTdG9y
YWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhUmVnaXN0cnk6OnVucmVnaXN0
ZXJTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhUmVnaXN0cnk6Omdl
dFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VB
cmVhUmVnaXN0cnkuaDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9nZW5lcmF0ZS11bmlmaWVk
LXNvdXJjZXMuc2g6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzUHJveHk6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOiBEZWxldGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoK
KyAgICAgICAgKiBVbmlmaWVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBX
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJl
YU1hcDo6c2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJ
dGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmNsZWFyKToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmVuc3VyZU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhTWFwOjpjb25uZWN0KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6
OmRpc2Nvbm5lY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpj
b3B5KToKKwogMjAyMS0xMi0wOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgVXNlIHNpbXBsZXIgaWRpb21zIGZvciBzdGQ6Omxlc3MgYW5kIHN0ZDo6Z3JlYXRlciBw
b3NzaWJsZSBpbiBtb2Rlcm4gQysrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlRmlsZVN5c3RlbS5jcHAKaW5kZXggNzZlNDVhZjM0ZWQwOTNmZDlmMjc2ZGQ1ZDRiOTIy
YTQxNjM0ZDlhZS4uZTdjZGNiZjVhYmQyMDY5Njg1ZTFmYWQxZDc0NDE5Y2ExMDgxYTliYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcApA
QCAtNDMsNiArNDMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdGV4
cHIgc3RkOjphcnJheTxjb25zdCBjaGFyICosIDM+IGRhdGFiYXNlRmlsZVN1ZmZpeGVzIHsgIiIs
ICItc2htIiwgIi13YWwiIH07CisKIFNRTGl0ZUZpbGVTeXN0ZW06OlNRTGl0ZUZpbGVTeXN0ZW0o
KQogewogfQpAQCAtNzcsMTggKzc5LDIyIEBAIGJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRl
RW1wdHlEYXRhYmFzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgcmV0dXJuIEZp
bGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KHBhdGgpOwogfQogCi1ib29sIFNRTGl0ZUZp
bGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQorYm9v
bCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxl
UGF0aCkKIHsKLSAgICBhdXRvIHdhbEZpbGVOYW1lID0gbWFrZVN0cmluZyhmaWxlTmFtZSwgIi13
YWwiX3MpOwotICAgIGF1dG8gc2htRmlsZU5hbWUgPSBtYWtlU3RyaW5nKGZpbGVOYW1lLCAiLXNo
bSJfcyk7CisgICAgYm9vbCBmaWxlRXhpc3RzID0gZmFsc2U7CisgICAgZm9yIChjb25zdCBhdXRv
KiBzdWZmaXggOiBkYXRhYmFzZUZpbGVTdWZmaXhlcykgeworICAgICAgICBTdHJpbmcgcGF0aCA9
IGZpbGVQYXRoICsgc3VmZml4OworICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHBhdGgp
OworICAgICAgICBmaWxlRXhpc3RzIHw9IEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMocGF0aCk7Cisg
ICAgfQogCi0gICAgLy8gVHJ5IHRvIGRlbGV0ZSBhbGwgdGhyZWUgZmlsZXMgd2hldGhlciBvciBu
b3QgdGhleSBhcmUgdGhlcmUuCi0gICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShmaWxlTmFtZSk7
Ci0gICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZSh3YWxGaWxlTmFtZSk7Ci0gICAgRmlsZVN5c3Rl
bTo6ZGVsZXRlRmlsZShzaG1GaWxlTmFtZSk7CisgICAgcmV0dXJuICFmaWxlRXhpc3RzOworfQog
Ci0gICAgLy8gSWYgYW55IG9mIHRoZSB3YWwgb3Igc2htIGZpbGVzIHJlbWFpbiBhZnRlciB0aGUg
ZGVsZXRlIGF0dGVtcHQsIHRoZSBvdmVyYWxsIGRlbGV0ZSBvcGVyYXRpb24gZmFpbGVkLgotICAg
IHJldHVybiAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxlTmFtZSkgJiYgIUZpbGVTeXN0ZW06
OmZpbGVFeGlzdHMod2FsRmlsZU5hbWUpICYmICFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHNobUZp
bGVOYW1lKTsKK3ZvaWQgU1FMaXRlRmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZShjb25zdCBT
dHJpbmcmIG9sZEZpbGVQYXRoLCBjb25zdCBTdHJpbmcmIG5ld0ZpbGVQYXRoKQoreworICAgIGZv
ciAoY29uc3QgYXV0byogc3VmZml4IDogZGF0YWJhc2VGaWxlU3VmZml4ZXMpCisgICAgICAgIEZp
bGVTeXN0ZW06Om1vdmVGaWxlKG1ha2VTdHJpbmcob2xkRmlsZVBhdGgsIHN1ZmZpeCksIG1ha2VT
dHJpbmcobmV3RmlsZVBhdGgsIHN1ZmZpeCkpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKQEAgLTk4LDE4ICsxMDQsMTMgQEAgYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjp0cnVuY2F0ZURh
dGFiYXNlRmlsZShzcWxpdGUzKiBkYXRhYmFzZSkKIH0KICNlbmRpZgogICAgIAotdWludDY0X3Qg
U1FMaXRlRmlsZVN5c3RlbTo6ZGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1l
KQoteyAgICAgICAgCit1aW50NjRfdCBTUUxpdGVGaWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXpl
KGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCit7CiAgICAgdWludDY0X3QgdG90YWxTaXplID0gMDsK
LQotICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmlsZVN5c3RlbTo6ZmlsZVNpemUoZmlsZU5hbWUp
KQotICAgICAgICB0b3RhbFNpemUgKz0gKmZpbGVTaXplOwotCi0gICAgaWYgKGF1dG8gZmlsZVNp
emUgPSBGaWxlU3lzdGVtOjpmaWxlU2l6ZShtYWtlU3RyaW5nKGZpbGVOYW1lLCAiLXdhbCJfcykp
KQotICAgICAgICB0b3RhbFNpemUgKz0gKmZpbGVTaXplOwotCi0gICAgaWYgKGF1dG8gZmlsZVNp
emUgPSBGaWxlU3lzdGVtOjpmaWxlU2l6ZShtYWtlU3RyaW5nKGZpbGVOYW1lLCAiLXNobSJfcykp
KQotICAgICAgICB0b3RhbFNpemUgKz0gKmZpbGVTaXplOworICAgIGZvciAoY29uc3QgYXV0byog
c3VmZml4IDogZGF0YWJhc2VGaWxlU3VmZml4ZXMpIHsKKyAgICAgICAgaWYgKGF1dG8gZmlsZVNp
emUgPSBGaWxlU3lzdGVtOjpmaWxlU2l6ZShmaWxlUGF0aCArIHN1ZmZpeCkpCisgICAgICAgICAg
ICB0b3RhbFNpemUgKz0gKmZpbGVTaXplOworICAgIH0KIAogICAgIHJldHVybiB0b3RhbFNpemU7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5
c3RlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaApp
bmRleCBjNjhkOWM3ZTdhZjk4OTc2YTFlZDNkY2I2ZjJhY2ZlNGI2Y2Y1YzJmLi45OGU3ZWEwZDA3
YTI1NDExZmE0ZjYyYWE3MjE2NTkzZjYzZTM5YzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKQEAgLTc4LDkgKzc4LDExIEBAIHB1YmxpYzoK
ICAgICAvLyBEZWxldGVzIGEgZGF0YWJhc2UgZmlsZS4KICAgICAvLwogICAgIC8vIGZpbGVOYW1l
IC0gVGhlIGZpbGUgbmFtZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWxldGVE
YXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIGJvb2wgZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBjb21wdXRlSGFzaEZvckZpbGVOYW1l
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworICAgIC8vIE1vdmVzIGEgZGF0YWJhc2UgZmlsZSB0
byBhIG5ldyBwbGFjZS4KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBtb3ZlRGF0YWJh
c2VGaWxlKGNvbnN0IFN0cmluZyYgb2xkRmlsZVBhdGgsIGNvbnN0IFN0cmluZyYgbmV3RmlsZVBh
dGgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUhhc2hGb3JGaWxl
TmFtZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgLy8gVHJ1bmNhdGVzIGEgZGF0YWJhc2UgZmlsZS4gVXNlZCB3aGVuIE1vYmlsZVNhZmFy
aVNldHRpbmdzIGRlbGV0ZXMgYSBkYXRhYmFzZSBmaWxlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCAxZWYzM2E2ZTYyNzM3MTA0NDc3
NTFhNTczYzI3NDg5N2VkMjk0MGE2Li45MTIzNmQyNGUyODFlNDg1YTI1Y2NkMWRiOTAzZTAzNjZk
NmExNWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcApAQCAtMTU4LDcgKzE1OCw2IEBAIHN0YXRpYyBpbmxpbmUgTWVzc2FnZVBvcnRDaGFu
bmVsUmVnaXN0cnkgY3JlYXRlTWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnkoTmV0d29yCiAKIE5l
dHdvcmtQcm9jZXNzOjpOZXR3b3JrUHJvY2VzcyhBdXhpbGlhcnlQcm9jZXNzSW5pdGlhbGl6YXRp
b25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKICAgICA6IG1fZG93bmxvYWRNYW5hZ2VyKCp0aGlz
KQotICAgICwgbV9zdG9yYWdlTWFuYWdlclNldChTdG9yYWdlTWFuYWdlclNldDo6Y3JlYXRlKCkp
CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICAsIG1fbmV0d29ya0NvbnRlbnRS
dWxlTGlzdE1hbmFnZXIoKnRoaXMpCiAjZW5kaWYKQEAgLTMxNCwxMiArMzEzLDEzIEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6Omxvd01lbW9yeUhhbmRsZXIoQ3JpdGljYWwgY3JpdGljYWwpCiAgICAg
ICAgIG5ldHdvcmtTZXNzaW9uLmNsZWFyUHJlZmV0Y2hDYWNoZSgpOwogICAgIH0pOwogCi0gICAg
bV9zdG9yYWdlTWFuYWdlclNldC0+aGFuZGxlTG93TWVtb3J5V2FybmluZygpOwotCiAjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGZvciAoYXV0byYgc3dTZXJ2ZXIgOiBtX3N3U2VydmVy
cy52YWx1ZXMoKSkKICAgICAgICAgc3dTZXJ2ZXItPmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsK
ICNlbmRpZgorCisgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zdG9yYWdlTWFuYWdlcnMudmFs
dWVzKCkpCisgICAgICAgIG1hbmFnZXItPmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKIH0KIAog
dm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKQEAgLTQwMiw3ICs0MDIsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyhQ
cm9jZXNzSWRlbnRpZmllciBpZGVudAogCiAgICAgY29ubmVjdGlvbi5zZXRPbkxpbmVTdGF0ZShO
ZXR3b3JrU3RhdGVOb3RpZmllcjo6c2luZ2xldG9uKCkub25MaW5lKCkpOwogCi0gICAgbV9zdG9y
YWdlTWFuYWdlclNldC0+YWRkQ29ubmVjdGlvbihjb25uZWN0aW9uLmNvbm5lY3Rpb24oKSk7CiAg
ICAgd2ViSURCU2VydmVyKHNlc3Npb25JRCkuYWRkQ29ubmVjdGlvbihjb25uZWN0aW9uLmNvbm5l
Y3Rpb24oKSwgaWRlbnRpZmllcik7CiAgICAgaWYgKGF1dG8gbWFuYWdlciA9IG1fc3RvcmFnZU1h
bmFnZXJzLmdldChzZXNzaW9uSUQpKQogICAgICAgICBtYW5hZ2VyLT5zdGFydFJlY2VpdmluZ01l
c3NhZ2VGcm9tQ29ubmVjdGlvbihjb25uZWN0aW9uLmNvbm5lY3Rpb24oKSk7CkBAIC00MjEsNyAr
NDIwLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMKIHsKICAgICBhdXRvIHNlc3Npb25JRCA9
IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKIAotICAgIGFk
ZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZ2VuZXJhbFN0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGUp
OworICAgIGFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMu
Z2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3Rv
cnlIYW5kbGUsIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxv
Y2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgYWRkU2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90
YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJz
LmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwogCiAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9u
SUQsIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CkBAIC00MzAsOCArNDI5LDYgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyYmIHBhcmFtZXRlcnMKICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihzZXNz
aW9uSUQsIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5h
YmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwogI2VuZGlmCiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lv
bklELCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCiAgICAgUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpKTsKIH0KIApAQCAtNDU0LDExICs0NTEsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQogICAgIG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzLnJlbW92ZShzZXNzaW9uSUQpOwog
fQogCi12b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGdlbmVyYWxTdG9yYWdlUGF0aCwg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBnZW5lcmFsU3RvcmFnZVBhdGhIYW5kbGUpCit2b2lk
IE5ldHdvcmtQcm9jZXNzOjphZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGdlbmVyYWxTdG9yYWdlUGF0aCwgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJiBnZW5lcmFsU3RvcmFnZVBhdGhIYW5kbGUsIGNvbnN0IFN0cmluZyYg
bG9jYWxTdG9yYWdlUGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBsb2NhbFN0b3JhZ2VQ
YXRoSGFuZGxlKQogewogICAgIG1fc3RvcmFnZU1hbmFnZXJzLmVuc3VyZShzZXNzaW9uSUQsIFsm
XSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShnZW5lcmFs
U3RvcmFnZVBhdGhIYW5kbGUpOwotICAgICAgICByZXR1cm4gTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
OjpjcmVhdGUoc2Vzc2lvbklELCBnZW5lcmFsU3RvcmFnZVBhdGgpOworICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkobG9jYWxTdG9yYWdlUGF0aEhhbmRsZSk7Cisg
ICAgICAgIHJldHVybiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShzZXNzaW9uSUQsIGdl
bmVyYWxTdG9yYWdlUGF0aCwgbG9jYWxTdG9yYWdlUGF0aCk7CiAgICAgfSk7CiB9CiAKQEAgLTU3
NSw3ICs1NzMsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZXN0cm95U2Vzc2lvbihQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiAgICAgbV9zZXJ2aWNlV29ya2VySW5mby5yZW1vdmUoc2Vzc2lv
bklEKTsKICNlbmRpZgogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+cmVtb3ZlKHNlc3Npb25J
RCk7CiAgICAgaWYgKGF1dG8gc2VydmVyID0gbV93ZWJJREJTZXJ2ZXJzLnRha2Uoc2Vzc2lvbklE
KSkKICAgICAgICAgc2VydmVyLT5jbG9zZSgpOwogICAgIHJlbW92ZVN0b3JhZ2VNYW5hZ2VyRm9y
U2Vzc2lvbihzZXNzaW9uSUQpOwpAQCAtMTA2NSwxNSArMTA2MiwxNiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpjbGVhclVzZXJJbnRlcmFjdGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFJlZ2lzdAogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpoYXNMb2NhbFN0b3JhZ2UoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlm
IChtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKSB7Ci0gICAgICAgIG1f
c3RvcmFnZU1hbmFnZXJTZXQtPmdldExvY2FsU3RvcmFnZU9yaWdpbnMoc2Vzc2lvbklELCBbZG9t
YWluLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRv
JiYgb3JpZ2lucykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6
OmFueU9mKG9yaWdpbnMsIFsmZG9tYWluXShhdXRvJiBvcmlnaW4pIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZG9tYWluLm1hdGNoZXMob3JpZ2luKTsKLSAgICAgICAgICAgIH0pKTsKLSAgICAg
ICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoZmFs
c2UpOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25J
RCk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKQorICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworCisgICAgYXV0byB0eXBlcyA9IE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHsgV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2Ug
fTsKKyAgICBpdGVyYXRvci0+dmFsdWUtPmZldGNoRGF0YSh0eXBlcywgW2RvbWFpbiwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byBlbnRyaWVzKSBt
dXRhYmxlIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjphbnlPZihlbnRyaWVzLCBb
JmRvbWFpbl0oYXV0byYgZW50cnkpIHsKKyAgICAgICAgICAgIHJldHVybiBkb21haW4ubWF0Y2hl
cyhlbnRyeS5vcmlnaW4pOworICAgICAgICB9KSk7CisgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgU2Vjb25kcyBzZWNvbmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNDkxLDIwICsxNDg5LDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9w
dGlvblNldDxXZWJzaXQKICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgaWYgKHdlYnNpdGVEYXRh
VHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkgJiYgbV9zdG9y
YWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewotICAgICAgICBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5nZXRTZXNzaW9uU3RvcmFnZU9yaWdpbnMoc2Vzc2lvbklELCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXShhdXRvJiYgb3JpZ2lucykgewotICAgICAgICAgICAgd2hpbGUgKCFvcmlnaW5z
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0
ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2lucy50YWtlQW55
KCksIFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UsIDAgfSk7Ci0gICAgICAgIH0pOwot
ICAgIH0KLQotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6TG9jYWxTdG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9u
SUQpKSB7Ci0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmdldExvY2FsU3RvcmFnZU9yaWdp
bnMoc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvJiYgb3JpZ2lucykgewotICAg
ICAgICAgICAgd2hpbGUgKCFvcmlnaW5zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjYWxs
YmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6
OkVudHJ5IHsgb3JpZ2lucy50YWtlQW55KCksIFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdl
LCAwIH0pOwotICAgICAgICB9KTsKLSAgICB9Ci0KICNpZiBQTEFURk9STShDT0NPQSkgfHwgVVNF
KFNPVVApCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpIU1RTQ2FjaGUpKQogICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEu
aG9zdE5hbWVzV2l0aEhTVFNDYWNoZSA9IGhvc3ROYW1lc1dpdGhIU1RTQ2FjaGUoc2Vzc2lvbklE
KTsKQEAgLTE1NTcsMTAgKzE1NDEsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJz
aXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXQKICAgICB9
CiAjZW5kaWYKIAotICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmlu
ZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkgewotICAg
ICAgICBpdGVyYXRvci0+dmFsdWUtPmZldGNoRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBbY2FsbGJh
Y2tBZ2dyZWdhdG9yXShhdXRvIGVudHJpZXMpIG11dGFibGUgewotICAgICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUo
ZW50cmllcykpOwotICAgICAgICB9KTsKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpj
YW5IYW5kbGVUeXBlcyh3ZWJzaXRlRGF0YVR5cGVzKSkgeworICAgICAgICBpZiAoYXV0byBpdGVy
YXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0b3IgIT0gbV9z
dG9yYWdlTWFuYWdlcnMuZW5kKCkpIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZmV0
Y2hEYXRhKHdlYnNpdGVEYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8gZW50cmll
cykgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNp
dGVEYXRhLmVudHJpZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUoZW50cmllcykpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTE1ODcsMTIgKzE1NzMsNiBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIE9wdGlvblNldDxXZWJzaQogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6RE9NQ2FjaGUpKQogICAgICAgICBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6
Y2xlYXJBbGxDYWNoZXMoKnRoaXMsIHNlc3Npb25JRCwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0p
OwogCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpT
ZXNzaW9uU3RvcmFnZSkgJiYgbV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklE
KSkKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2Uoc2Vz
c2lvbklELCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7Ci0KLSAgICBpZiAod2Vic2l0ZURhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkgJiYgbV9zdG9yYWdl
TWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+ZGVsZXRlTG9jYWxTdG9yYWdlTW9kaWZpZWRTaW5jZShzZXNzaW9uSUQsIG1vZGlmaWVk
U2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKLQogICAgIGlmICh3ZWJzaXRlRGF0YVR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzKSAmJiAhc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHdlYklEQlNlcnZlcihzZXNzaW9uSUQpLmNs
b3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZShtb2RpZmllZFNpbmNlLCBbY2xlYXJU
YXNrc0hhbmRsZXJdIHsgfSk7CiAKQEAgLTE2MzcsOCArMTYxNywxMCBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlv
blNldDxXZWJzaQogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0
b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFn
ZXJzLmVuZCgpKQotICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRlbGV0ZURhdGFNb2RpZmllZFNp
bmNlKHdlYnNpdGVEYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0g
eyB9KTsKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJz
aXRlRGF0YVR5cGVzKSkgeworICAgICAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1h
bmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5k
KCkpCisgICAgICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRlbGV0ZURhdGFNb2RpZmllZFNpbmNl
KHdlYnNpdGVEYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9
KTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFyRGlza0NhY2hlRW50cmllcyhOZXR3b3Jr
Q2FjaGU6OkNhY2hlKiBjYWNoZSwgY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mIG9y
aWdpbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTE3MDMsMTIgKzE2ODUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0
YUZvck9yaWdpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpbwogICAgICAgICAgICAg
Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OmNsZWFyQ2FjaGVzRm9yT3JpZ2luKCp0aGlzLCBzZXNzaW9u
SUQsIFNlY3VyaXR5T3JpZ2luRGF0YSB7IG9yaWdpbkRhdGEgfSwgW2NsZWFyVGFza3NIYW5kbGVy
XSB7IH0pOwogICAgIH0KIAotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNp
dGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRh
aW5zKHNlc3Npb25JRCkpCi0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRlbGV0ZVNlc3Np
b25TdG9yYWdlRm9yT3JpZ2lucyhzZXNzaW9uSUQsIG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNrc0hh
bmRsZXJdIHsgfSk7Ci0KLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkgJiYgbV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMo
c2Vzc2lvbklEKSkKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+ZGVsZXRlTG9jYWxTdG9y
YWdlRm9yT3JpZ2lucyhzZXNzaW9uSUQsIG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNrc0hhbmRsZXJd
IHsgfSk7Ci0KICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OkluZGV4ZWREQkRhdGFiYXNlcykgJiYgIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAg
ICAgICB3ZWJJREJTZXJ2ZXIoc2Vzc2lvbklEKS5jbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9y
aWdpbnMob3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKIApAQCAtMTc0Niw4
ICsxNzIyLDEwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3Jp
Z2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvCiAgICAgfQogI2VuZGlmCiAKLSAg
ICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsg
aXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCi0gICAgICAgIGl0ZXJhdG9yLT52
YWx1ZS0+ZGVsZXRlRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBvcmlnaW5EYXRhcywgW2NsZWFyVGFz
a3NIYW5kbGVyXSB7IH0pOworICAgIGlmIChOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRs
ZVR5cGVzKHdlYnNpdGVEYXRhVHlwZXMpKSB7CisgICAgICAgIGlmIChhdXRvIGl0ZXJhdG9yID0g
bV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VN
YW5hZ2Vycy5lbmQoKSkKKyAgICAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YSh3
ZWJzaXRlRGF0YVR5cGVzLCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwor
ICAgIH0KIAogICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNz
aW9uKHNlc3Npb25JRCkpIHsKICAgICAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbj4gZG9tYWluc1RvRGVsZXRlTmV0d29ya0RhdGFGb3I7CkBAIC0xOTA0LDI4ICsxODgyLDYg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlQW5kUmVzdHJpY3RXZWJzaXRlRGF0YUZvclJl
Z2lzdHJhYmxlRG9tYWlucyhQQUw6OlNlc3MKICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgaWYg
KG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAgaWYg
KHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFn
ZSkpIHsKLSAgICAgICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmdldFNlc3Npb25TdG9yYWdl
T3JpZ2lucyhzZXNzaW9uSUQsIFtwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdGhpcywg
c2Vzc2lvbklELCBjYWxsYmFja0FnZ3JlZ2F0b3IsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tp
ZVdlYnNpdGVEYXRhRm9yXShhdXRvJiYgb3JpZ2lucykgewotICAgICAgICAgICAgICAgIGlmICgh
bV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgYXV0byBvcmlnaW5zVG9EZWxldGUgPSBm
aWx0ZXJGb3JSZWdpc3RyYWJsZURvbWFpbnMob3JpZ2lucywgZG9tYWluc1RvRGVsZXRlQWxsTm9u
Q29va2llV2Vic2l0ZURhdGFGb3IsIGNhbGxiYWNrQWdncmVnYXRvci0+bV9kb21haW5zKTsKLSAg
ICAgICAgICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5kZWxldGVTZXNzaW9uU3RvcmFnZUZv
ck9yaWdpbnMoc2Vzc2lvbklELCBvcmlnaW5zVG9EZWxldGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3ZWJzaXRl
RGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkgewotICAg
ICAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhzZXNz
aW9uSUQsIFtwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdGhpcywgc2Vzc2lvbklELCBj
YWxsYmFja0FnZ3JlZ2F0b3IsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRh
Rm9yXShhdXRvJiYgb3JpZ2lucykgewotICAgICAgICAgICAgICAgIGlmICghbV9zdG9yYWdlTWFu
YWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgICAgICAgICAgYXV0byBvcmlnaW5zVG9EZWxldGUgPSBmaWx0ZXJGb3JSZWdp
c3RyYWJsZURvbWFpbnMob3JpZ2lucywgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0
ZURhdGFGb3IsIGNhbGxiYWNrQWdncmVnYXRvci0+bV9kb21haW5zKTsKLSAgICAgICAgICAgICAg
ICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5kZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW5zKHNlc3Np
b25JRCwgb3JpZ2luc1RvRGVsZXRlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBhdXRvIHBhdGggPSBtX2lkYkRhdGFi
YXNlUGF0aHMuZ2V0KHNlc3Npb25JRCk7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSAmJiB3ZWJz
aXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2Vz
KSkgewogICAgICAgICB3ZWJJREJTZXJ2ZXIoc2Vzc2lvbklEKS5nZXRPcmlnaW5zKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgc2Vzc2lvbklELCBjYWxsYmFja0FnZ3JlZ2F0
b3IsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yXShhdXRvJiYgb3Jp
Z2lucykgewpAQCAtMTk3MiwxMSArMTkyOCwxMyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxl
dGVBbmRSZXN0cmljdFdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKFBBTDo6U2Vzcwog
ICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1h
bmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5k
KCkpIHsKLSAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhRm9yUmVnaXN0cmFibGVE
b21haW5zKHdlYnNpdGVEYXRhVHlwZXMsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNp
dGVEYXRhRm9yLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvIGRlbGV0ZWREb21haW5zKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgIGZvciAoYXV0byBkb21haW4gOiBkZWxldGVkRG9tYWlucykKLSAg
ICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fZG9tYWlucy5hZGQoV1RGTW92ZShk
b21haW4pKTsKLSAgICAgICAgfSk7CisgICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2Fu
SGFuZGxlVHlwZXMod2Vic2l0ZURhdGFUeXBlcykpIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlcmF0
b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3Rv
cmFnZU1hbmFnZXJzLmVuZCgpKSB7CisgICAgICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRlbGV0
ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMod2Vic2l0ZURhdGFUeXBlcywgZG9tYWluc1RvRGVs
ZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8g
ZGVsZXRlZERvbWFpbnMpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byBkb21h
aW4gOiBkZWxldGVkRG9tYWlucykKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5tX2RvbWFpbnMuYWRkKFdURk1vdmUoZG9tYWluKSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIGF1dG8gZGF0YVR5cGVzRm9yVUlQcm9jZXNzID0gV2Vic2l0
ZURhdGE6OmZpbHRlcih3ZWJzaXRlRGF0YVR5cGVzLCBXZWJzaXRlRGF0YVByb2Nlc3NUeXBlOjpV
SSk7CkBAIC0yMzA3LDcgKzIyNjUsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwcmVwYXJlVG9T
dXNwZW5kKGJvb2wgaXNTdXNwZW5zaW9uSW1taW5lbnQsIENvbXBsZXRpb25IYW5kbAogICAgIH0K
ICNlbmRpZgogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+c3VzcGVuZChbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOworICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1fc3RvcmFnZU1hbmFnZXJz
LnZhbHVlcygpKQorICAgICAgICBtYW5hZ2VyLT5zdXNwZW5kKFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNr
Z3JvdW5kKCkKQEAgLTIzNDYsNyArMjMwNSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlc3Vt
ZSgpCiAgICAgbV9zaG91bGRTdXNwZW5kSURCU2VydmVycyA9IGZhbHNlOwogI2VuZGlmCiAKLSAg
ICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZXN1bWUoKTsKKyAgICBmb3IgKGF1dG8mIG1hbmFnZXIg
OiBtX3N0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAgbWFuYWdlci0+cmVzdW1lKCk7
CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9z
dG5hbWUpCkBAIC0yNDQyLDggKzI0MDIsOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRTZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKFBBTDo6U2Vzc2lvbklEIHNlcwogCiB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT53
YWl0VW50aWxTeW5jaW5nTG9jYWxTdG9yYWdlRmluaXNoZWQoKTsKLSAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworICAgIGF1dG8gYWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBt
X3N0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAgbWFuYWdlci0+c3luY0xvY2FsU3Rv
cmFnZShbYWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzZXRR
dW90YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTI0NzMsMTAgKzI0MzQsOCBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpyZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgVQogICAgIGlmIChvbGRPcmlnaW4uaXNFbXB0eSgpIHx8IG5ld09yaWdpbi5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vi
c2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpKSB7Ci0gICAgICAgIGlmIChtX3N0b3JhZ2VNYW5h
Z2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAgICAgICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+cmVuYW1lT3JpZ2luKHNlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgW2FnZ3JlZ2F0
b3JdIHsgfSk7Ci0gICAgfQorICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdl
cnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkK
KyAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5tb3ZlRGF0YShvbGRPcmlnaW4sIG5ld09yaWdpbiwg
W2FnZ3JlZ2F0b3JdIHsgfSk7CiAKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVE
YXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzKSkgewogICAgICAgICBhdXRvIHBhdGggPSBtX2lk
YkRhdGFiYXNlUGF0aHMuZ2V0KHNlc3Npb25JRCk7CkBAIC0yNzcxLDIxICsyNzMwLDggQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6cmVtb3ZlS2VwdEFsaXZlTG9hZChOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXImIGxvYWRlcikKICAgICAgICAgc2Vzc2lvbi0+cmVtb3ZlS2VwdEFsaXZlTG9hZChsb2FkZXIp
OwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxz
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNl
c3Npb25JRCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDYW5ub3QgZ2V0IGxvY2FsIHN0b3JhZ2Ug
aW5mb3JtYXRpb24gZm9yIGFuIHVua25vd24gc2Vzc2lvbiIpOwotICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcih7IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zdG9yYWdlTWFu
YWdlclNldC0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhzZXNzaW9uSUQsIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29ubmVjdGlv
blRvV2ViUHJvY2Vzc0Nsb3NlZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZW1vdmVDb25u
ZWN0aW9uKGNvbm5lY3Rpb24pOwotCiAgICAgaWYgKGF1dG8qIHNlcnZlciA9IG1fd2ViSURCU2Vy
dmVycy5nZXQoc2Vzc2lvbklEKSkKICAgICAgICAgc2VydmVyLT5yZW1vdmVDb25uZWN0aW9uKGNv
bm5lY3Rpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKaW5kZXggODgwMTdjNDRhMTA1ZjFjMGZkZTU1YjI0YzJmZTA5OWI3NjZmYWY4MS4uNWEy
MGE3Y2Y5NzAxNzBlOTRkZDdhYThlMzhmYmFkYjk1NDZhMDVjMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMTA3LDcgKzEwNyw2IEBAIGNs
YXNzIE5ldHdvcmtQcm94aW1pdHlNYW5hZ2VyOwogY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZGVy
OwogY2xhc3MgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOwogY2xhc3MgUHJvY2Vzc0Fzc2VydGlvbjsK
LWNsYXNzIFN0b3JhZ2VNYW5hZ2VyU2V0OwogY2xhc3MgV2ViUGFnZU5ldHdvcmtQYXJhbWV0ZXJz
OwogY2xhc3MgV2ViU1dTZXJ2ZXJDb25uZWN0aW9uOwogY2xhc3MgV2ViU1dTZXJ2ZXJUb0NvbnRl
eHRDb25uZWN0aW9uOwpAQCAtMjk2LDcgKzI5NSw2IEBAIHB1YmxpYzoKICAgICBib29sIHNlc3Np
b25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwogCiAgICAg
dm9pZCBjb25uZWN0aW9uVG9XZWJQcm9jZXNzQ2xvc2VkKElQQzo6Q29ubmVjdGlvbiYsIFBBTDo6
U2Vzc2lvbklEKTsKLSAgICB2b2lkIGdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoUEFMOjpT
ZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYpOwogCiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKICAgICBOZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlciYgbmV0d29ya0Nv
bnRlbnRSdWxlTGlzdE1hbmFnZXIoKSB7IHJldHVybiBtX25ldHdvcmtDb250ZW50UnVsZUxpc3RN
YW5hZ2VyOyB9CkBAIC01NTQsNyArNTUyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZFNlc3Np
b25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCB1aW50NjRfdCBkZWZhdWx0UXVv
dGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0IFN0cmluZyYgY2FjaGVS
b290UGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgdm9pZCByZW1vdmVTZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCk7CiAKLSAgICB2b2lkIGFkZFN0
b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRo
LCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKKyAgICB2b2lkIGFkZFN0b3JhZ2VNYW5hZ2Vy
Rm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUmLCBjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZVBhdGgsIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlU3RvcmFnZU1hbmFnZXJGb3JTZXNz
aW9uKFBBTDo6U2Vzc2lvbklEKTsKIAogICAgIC8vIENvbm5lY3Rpb25zIHRvIFdlYlByb2Nlc3Nl
cy4KQEAgLTU3Nyw4ICs1NzUsNiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9u
SUQsIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwog
ICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7CiAKLSAgICBSZWY8
U3RvcmFnZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7Ci0KICNpZiBQTEFURk9STShD
T0NPQSkKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29u
c3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5k
ZXggZjNjMjNkMWMxODQ2ZDU0MzVkMGIxMzMxMzE4NDRmNDk1ZDIwNTM5MC4uMmVhNjQ1Yjc4MWFl
NzNmZGYyMjAzZjFlOTRkNDA1ZTM2MWZkOTZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0xNzMsNyAr
MTczLDYgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogICAg
IE1hcmtQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0aW5nKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCkgLT4gKCkgQXN5bmMKICAgICBTZXRQQ01GcmF1ZFByZXZlbnRpb25W
YWx1ZXNGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nIHNlY3JldFRv
a2VuLCBTdHJpbmcgdW5saW5rYWJsZVRva2VuLCBTdHJpbmcgc2lnbmF0dXJlLCBTdHJpbmcga2V5
SUQpIC0+ICgpIEFzeW5jCiAgICAgU2V0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBcHBCdW5kbGVJ
REZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcgYXBwQnVuZGxlSURG
b3JUZXN0aW5nKSAtPiAoKSBBc3luYwotICAgIEdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiAoVmVjdG9yPFdlYktpdDo6TG9jYWxTdG9yYWdl
RGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiBkZXRhaWxzKSBBc3luYwogCiAgICAgU2V0
U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyBzZWNvbmRzKSAtPiAo
KSBTeW5jaHJvbm91cwogICAgIFJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3Rp
bmcoKSAtPiAoKSBTeW5jaHJvbm91cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFhNjE1MDJiMDIwMjg0OTBkZDc4YWEzZWFiMDEwZTFlYjA4YTQ0ODUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFu
YWdlci5jcHAKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlTWFuYWdlci5oIgorCisjaW5jbHVkZSAiTWVtb3J5
U3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJTUUxpdGVTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUg
IlN0b3JhZ2VBcmVhUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2lu
RGF0YS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gU3VnZ2VzdGVkIGJ5IGh0dHBzOi8v
d3d3LnczLm9yZy9UUi93ZWJzdG9yYWdlLyNkaXNrLXNwYWNlCitjb25zdGV4cHIgdW5zaWduZWQg
bG9jYWxTdG9yYWdlUXVvdGFJbkJ5dGVzID0gNSAqIE1COworY29uc3RleHByIGF1dG8gZmlsZVN1
ZmZpeCA9ICIubG9jYWxzdG9yYWdlIl9zOworCisvLyBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVz
ZWQgZm9yIGV4aXN0aW5nIGZpbGVzLgorLy8gV2Ugc2hvdWxkIG5vdCBpbmNsdWRlIG9yaWdpbiBp
biBmaWxlIG5hbWUuCitzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGE+IGZpbGVOYW1lVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK3sKKyAgICBp
ZiAoIWZpbGVOYW1lLmVuZHNXaXRoKGZpbGVTdWZmaXgpKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgYXV0byBzdWZmaXhMZW5ndGggPSBzdHJsZW4oZmlsZVN1ZmZpeCk7Cisg
ICAgYXV0byBmaWxlTmFtZUxlbmd0aCA9IGZpbGVOYW1lLmxlbmd0aCgpOworICAgIGlmIChmaWxl
TmFtZUxlbmd0aCA8PSBzdWZmaXhMZW5ndGgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBhdXRvIG9yaWdpbklkZW50aWZpZXIgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmls
ZU5hbWVMZW5ndGggLSBzdWZmaXhMZW5ndGgpOworICAgIHJldHVybiBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcik7Cit9
CisKK3N0YXRpYyBTdHJpbmcgb3JpZ2luVG9GaWxlTmFtZShjb25zdCBXZWJDb3JlOjpDbGllbnRP
cmlnaW4mIG9yaWdpbikKK3sKKyAgICByZXR1cm4gb3JpZ2luLmNsaWVudE9yaWdpbi5kYXRhYmFz
ZUlkZW50aWZpZXIoKSArICIubG9jYWxzdG9yYWdlIjsKK30KKworVmVjdG9yPFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luRGF0YT4gTG9jYWxTdG9yYWdlTWFuYWdlcjo6b3JpZ2luc09mTG9jYWxTdG9y
YWdlRGF0YShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgVmVjdG9yPFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBvcmlnaW5zOworCisgICAgZm9yIChhdXRvJiBmaWxlTmFtZSA6IEZpbGVTeXN0ZW06
Omxpc3REaXJlY3RvcnkocGF0aCkpIHsKKyAgICAgICAgaWYgKGF1dG8gb3JpZ2luID0gZmlsZU5h
bWVUb09yaWdpbihmaWxlTmFtZSkpCisgICAgICAgICAgICBvcmlnaW5zLmFwcGVuZCgqb3JpZ2lu
KTsKKyAgICB9CisKKyAgICByZXR1cm4gb3JpZ2luczsKK30KKworU3RyaW5nIExvY2FsU3RvcmFn
ZU1hbmFnZXI6OmxvY2FsU3RvcmFnZUZpbGVQYXRoKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBj
b25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBpZiAoZGlyZWN0b3J5
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyB7IH07CisKKyAgICByZXR1cm4gRmls
ZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRpcmVjdG9yeSwgb3JpZ2luVG9GaWxl
TmFtZShvcmlnaW4pKTsKK30KKworTG9jYWxTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTWFu
YWdlcihjb25zdCBTdHJpbmcmIHBhdGgsIFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQor
ICAgIDogbV9wYXRoKHBhdGgpCisgICAgLCBtX3JlZ2lzdHJ5KHJlZ2lzdHJ5KQoreworfQorCiti
b29sIExvY2FsU3RvcmFnZU1hbmFnZXI6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zdG9yYWdlQXJlYSAmJiBtX3N0b3JhZ2VBcmVhLT5oYXNMaXN0ZW5lcnMoKTsKK30KKworYm9v
bCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpoYXNEYXRhSW5NZW1vcnkoKSBjb25zdAoreworICAgIGlm
IChtX3N0b3JhZ2VBcmVhICYmIGlzPE1lbW9yeVN0b3JhZ2VBcmVhPigqbV9zdG9yYWdlQXJlYSkp
CisgICAgICAgIHJldHVybiAhbV9zdG9yYWdlQXJlYS0+aXNFbXB0eSgpOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6OmNsZWFyRGF0YSgpCit7Cisg
ICAgaWYgKG1fc3RvcmFnZUFyZWEpCisgICAgICAgIG1fc3RvcmFnZUFyZWEtPmNsZWFyKCk7Cit9
CisKK3ZvaWQgTG9jYWxTdG9yYWdlTWFuYWdlcjo6Y2xvc2UoKQoreworICAgIGlmIChtX3N0b3Jh
Z2VBcmVhICYmIGlzPFNRTGl0ZVN0b3JhZ2VBcmVhPigqbV9zdG9yYWdlQXJlYSkpCisgICAgICAg
IGRvd25jYXN0PFNRTGl0ZVN0b3JhZ2VBcmVhPigqbV9zdG9yYWdlQXJlYSkuY2xvc2UoKTsKK30K
Kwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCkKK3sK
KyAgICBpZiAobV9zdG9yYWdlQXJlYSAmJiBpczxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fc3RvcmFn
ZUFyZWEpKQorICAgICAgICBkb3duY2FzdDxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fc3RvcmFnZUFy
ZWEpLmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5h
Z2VyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYSAmJiBpczxT
UUxpdGVTdG9yYWdlQXJlYT4oKm1fc3RvcmFnZUFyZWEpKQorICAgICAgICBkb3duY2FzdDxTUUxp
dGVTdG9yYWdlQXJlYT4oKm1fc3RvcmFnZUFyZWEpLmNvbW1pdFRyYW5zYWN0aW9uSWZOZWNlc3Nh
cnkoKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKElQ
Qzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbikKK3sKKyAgICBBU1NFUlQobV9zdG9y
YWdlQXJlYSk7CisgICAgbV9zdG9yYWdlQXJlYS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7
CisKKyAgICBpZiAoaGFzRGF0YUluTWVtb3J5KCkgfHwgaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9yZWdpc3RyeS51bnJlZ2lzdGVyU3RvcmFnZUFyZWEobV9zdG9yYWdlQXJl
YS0+aWRlbnRpZmllcigpKTsKKyAgICBtX3N0b3JhZ2VBcmVhID0gbnVsbHB0cjsKK30KKwordm9p
ZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjplbnN1cmVTdG9yYWdlQXJlYShjb25zdCBXZWJDb3JlOjpD
bGllbnRPcmlnaW4mIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoLCBSZWZQdHI8V29ya1F1ZXVl
PiYmIHdvcmtRdWV1ZSkKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSAmJiB3b3JrUXVldWUpCisgICAgICAgIG1fc3Rv
cmFnZUFyZWEgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0b3JhZ2VBcmVhPihsb2NhbFN0b3JhZ2VRdW90
YUluQnl0ZXMsIG9yaWdpbiwgcGF0aCwgUmVmIHsgKndvcmtRdWV1ZSB9KTsKKyAgICBlbHNlCisg
ICAgICAgIG1fc3RvcmFnZUFyZWEgPSBtYWtlVW5pcXVlPE1lbW9yeVN0b3JhZ2VBcmVhPihvcmln
aW4sIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGU6OkxvY2FsKTsKKyAgICBtX3JlZ2lzdHJ5
LnJlZ2lzdGVyU3RvcmFnZUFyZWEobV9zdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpLCAqbV9zdG9y
YWdlQXJlYSk7Cit9CisKK1N0b3JhZ2VBcmVhSWRlbnRpZmllciBMb2NhbFN0b3JhZ2VNYW5hZ2Vy
Ojpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29u
bmVjdGlvbiwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIFJlZjxXb3JrUXVl
dWU+JiYgd29ya1F1ZXVlKQoreworICAgIGVuc3VyZVN0b3JhZ2VBcmVhKG9yaWdpbiwgbV9wYXRo
LCBXVEZNb3ZlKHdvcmtRdWV1ZSkpOworICAgIEFTU0VSVChtX3BhdGguaXNFbXB0eSgpIHx8IG1f
c3RvcmFnZUFyZWEtPnR5cGUoKSA9PSBTdG9yYWdlQXJlYUJhc2U6OlR5cGU6OlNRTGl0ZSk7CisK
KyAgICBtX3N0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25uZWN0aW9uKTsKKyAgICByZXR1cm4g
bV9zdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpOworfQorCitTdG9yYWdlQXJlYUlkZW50aWZpZXIg
TG9jYWxTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShJ
UEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYgb3JpZ2luKQoreworICAgIGVuc3VyZVN0b3JhZ2VBcmVhKG9yaWdpbiwgU3RyaW5n
IHsgfSwgbnVsbHB0cik7CisgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWEtPnR5cGUoKSA9PSBTdG9y
YWdlQXJlYUJhc2U6OlR5cGU6Ok1lbW9yeSk7CisKKyAgICBtX3N0b3JhZ2VBcmVhLT5hZGRMaXN0
ZW5lcihjb25uZWN0aW9uKTsKKyAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+aWRlbnRpZmllcigp
OworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFy
ZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50
aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBpZiAoIW1fc3RvcmFnZUFyZWEgfHwgbV9zdG9yYWdl
QXJlYS0+aWRlbnRpZmllcigpICE9IGlkZW50aWZpZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IGNvbm5lY3Rpb25DbG9zZWQoY29ubmVjdGlvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0xvY2Fs
U3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9M
b2NhbFN0b3JhZ2VNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNmZDg2ZTUyMjA4MjIzNTA3MGU5YWY4
MTY0MDhmOTZkZDI5ZDE2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmgKQEAgLTAsMCArMSw2OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJZGVudGlm
aWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBDbGllbnRPcmlnaW47CitzdHJ1
Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
U3RvcmFnZUFyZWFCYXNlOworY2xhc3MgU3RvcmFnZUFyZWFSZWdpc3RyeTsKKworY2xhc3MgTG9j
YWxTdG9yYWdlTWFuYWdlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnNP
ZkxvY2FsU3RvcmFnZURhdGEoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBzdGF0aWMgU3RyaW5n
IGxvY2FsU3RvcmFnZUZpbGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJik7CisKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2VyKGNvbnN0IFN0cmluZyYg
cGF0aCwgU3RvcmFnZUFyZWFSZWdpc3RyeSYpOworICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsK
KyAgICBib29sIGhhc0RhdGFJbk1lbW9yeSgpIGNvbnN0OworICAgIHZvaWQgY2xlYXJEYXRhKCk7
CisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgaGFuZGxlTG93TWVtb3J5V2FybmluZygpOwor
ICAgIHZvaWQgc3luY0xvY2FsU3RvcmFnZSgpOworICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChJ
UEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKKworICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBj
b25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIGNvbnN0
IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIFJlZjxXb3JrUXVldWU+JiYpOworICAgIFN0b3JhZ2VB
cmVhSWRlbnRpZmllciBjb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIHZv
aWQgZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBT
dG9yYWdlQXJlYUlkZW50aWZpZXIpOworCitwcml2YXRlOgorICAgIHZvaWQgZW5zdXJlU3RvcmFn
ZUFyZWEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgY29uc3QgU3RyaW5nJiwgUmVmUHRy
PFdvcmtRdWV1ZT4mJik7CisKKyAgICBTdHJpbmcgbV9wYXRoOworICAgIFN0b3JhZ2VBcmVhUmVn
aXN0cnkmIG1fcmVnaXN0cnk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2VBcmVhQmFzZT4g
bV9zdG9yYWdlQXJlYTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJl
YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFn
ZUFyZWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjNWMwNjVkYjE3NGRjNDMxZjg3ZjIwNTZmMGIwYzdkMjcy
ZTlkZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuY3BwCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZW1vcnlTdG9yYWdlQXJlYS5o
IgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworTWVtb3J5U3RvcmFnZUFyZWE6Ok1lbW9yeVN0b3Jh
Z2VBcmVhKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBTdG9yYWdlQXJlYUJh
c2U6OlN0b3JhZ2VUeXBlIHR5cGUpCisgICAgOiBTdG9yYWdlQXJlYUJhc2UoV2ViQ29yZTo6U3Rv
cmFnZU1hcDo6bm9RdW90YSwgb3JpZ2luKQorICAgICwgbV9tYXAoV2ViQ29yZTo6U3RvcmFnZU1h
cChXZWJDb3JlOjpTdG9yYWdlTWFwOjpub1F1b3RhKSkKKyAgICAsIG1fc3RvcmFnZVR5cGUodHlw
ZSkKK3sKK30KKworYm9vbCBNZW1vcnlTdG9yYWdlQXJlYTo6aXNFbXB0eSgpCit7CisgICAgcmV0
dXJuICFtX21hcC5sZW5ndGgoKTsKK30KKwordm9pZCBNZW1vcnlTdG9yYWdlQXJlYTo6Y2xlYXIo
KQoreworICAgIG1fbWFwLmNsZWFyKCk7CisgICAgbm90aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcigp
OworfQorCitIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNZW1vcnlTdG9yYWdlQXJlYTo6YWxsSXRl
bXMoKQoreworICAgIHJldHVybiBtX21hcC5pdGVtcygpOworfQorCitFeHBlY3RlZDx2b2lkLCBT
dG9yYWdlRXJyb3I+IE1lbW9yeVN0b3JhZ2VBcmVhOjpzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6
VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJl
YUltcGxJRCwgU3RyaW5nJiYga2V5LCBTdHJpbmcmJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcpCit7CisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIGJvb2wgaGFzUXVvdGFFcnJvciA9
IGZhbHNlOworICAgIG1fbWFwLnNldEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFsdWUsIGhhc1F1b3Rh
RXJyb3IpOworICAgIGlmIChoYXNRdW90YUVycm9yKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoU3RvcmFnZUVycm9yOjpRdW90YUV4Y2VlZGVkKTsKKworICAgIGRpc3BhdGNoRXZlbnRz
KGNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBrZXksIG9sZFZhbHVlLCB2YWx1ZSwgdXJs
U3RyaW5nKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK0V4cGVjdGVkPHZvaWQsIFN0b3JhZ2VF
cnJvcj4gTWVtb3J5U3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIHN0b3JhZ2VBcmVhSW1w
bElELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAg
U3RyaW5nIG9sZFZhbHVlOworICAgIG1fbWFwLnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7Cisg
ICAgZGlzcGF0Y2hFdmVudHMoY29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIGtleSwgb2xk
VmFsdWUsIFN0cmluZygpLCB1cmxTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworRXhw
ZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBNZW1vcnlTdG9yYWdlQXJlYTo6Y2xlYXIoSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVy
IGltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBpZiAoIW1f
bWFwLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgbV9tYXAuY2xlYXIoKTsK
KyAgICBkaXNwYXRjaEV2ZW50cyhjb25uZWN0aW9uLCBpbXBsSWRlbnRpZmllciwgU3RyaW5nKCks
IFN0cmluZygpLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxNZW1vcnlTdG9yYWdlQXJlYT4gTWVtb3J5U3RvcmFnZUFyZWE6OmNs
b25lKCkgY29uc3QKK3sKKyAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbWFrZVVuaXF1ZTxNZW1vcnlT
dG9yYWdlQXJlYT4ob3JpZ2luKCksIG1fc3RvcmFnZVR5cGUpOworICAgIHN0b3JhZ2VBcmVhLT5t
X21hcCA9IG1fbWFwOworCisgICAgcmV0dXJuIHN0b3JhZ2VBcmVhOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWMwYTE1NGU2Zjg3ZjdhMjI0
MjUwYjEwYWRiNzY2NDM3ZTk2ODRhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5oCkBAIC0wLDAgKzEsNjIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3RvcmFnZUFy
ZWFCYXNlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlTWFwLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIFN0b3JhZ2VNYXA7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBNZW1vcnlTdG9yYWdlQXJlYSBmaW5hbCA6IHB1YmxpYyBTdG9yYWdlQXJlYUJhc2Ugewor
cHVibGljOgorICAgIGV4cGxpY2l0IE1lbW9yeVN0b3JhZ2VBcmVhKGNvbnN0IFdlYkNvcmU6OkNs
aWVudE9yaWdpbiYsIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGUgPSBTdG9yYWdlQXJlYUJh
c2U6OlN0b3JhZ2VUeXBlOjpTZXNzaW9uKTsKKworICAgIGJvb2wgaXNFbXB0eSgpIGZpbmFsOwor
ICAgIHZvaWQgY2xlYXIoKSBmaW5hbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFn
ZUFyZWE+IGNsb25lKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgLy8gU3RvcmFnZUFyZWFCYXNl
CisgICAgU3RvcmFnZUFyZWFCYXNlOjpUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBT
dG9yYWdlQXJlYUJhc2U6OlR5cGU6Ok1lbW9yeTsgfTsKKyAgICBTdG9yYWdlQXJlYUJhc2U6OlN0
b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdG9yYWdlVHlw
ZTsgfQorICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGFsbEl0ZW1zKCkgZmluYWw7CisgICAg
RXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIFN0cmluZyYmIGtleSwgU3RyaW5nJiYg
dmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2b2lk
LCBTdG9yYWdlRXJyb3I+IHJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3Rv
cmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IGNsZWFy
KElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKworICAgIG11dGFibGUgV2ViQ29yZTo6U3Rv
cmFnZU1hcCBtX21hcDsKKyAgICBTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlIG1fc3RvcmFn
ZVR5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhKQorICAgIHN0YXRpYyBib29sIGlz
VHlwZShjb25zdCBXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZSYgYXJlYSkgeyByZXR1cm4gYXJlYS50
eXBlKCkgPT0gV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6OlR5cGU6Ok1lbW9yeTsgfQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmNwcAppbmRleCBj
MTBhY2JkZDY0ZmUwNGVmZjE2YTFjOGI3NGQyYmZjMTk1M2RiZDczLi5kNzM0OWE2NDlkMzY3ODM2
YjViMWVhOTc4ZjFmODYwNTg2NmY5MzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmNwcApA
QCAtMjgsMTIgKzI4LDE5IEBACiAKICNpbmNsdWRlICJGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJl
Z2lzdHJ5LmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVk
ZSAiTG9jYWxTdG9yYWdlTWFuYWdlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJOZXR3b3JrU3RvcmFnZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk9yaWdpblN0b3Jh
Z2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVk
ZSAiU3RvcmFnZUFyZWFCYXNlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFNYXBNZXNzYWdlcy5o
IgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhUmVnaXN0cnkuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0
YVR5cGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgogI2luY2x1
ZGUgPHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlLmg+Cisj
aW5jbHVkZSA8d3RmL1N1c3BlbmRhYmxlV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3BlcnNp
c3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4K
IApAQCAtNDMsNyArNTAsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpDbGllbnRP
cmlnaW4+IHJlYWRPcmlnaW5Gcm9tRmlsZShjb25zdCBTdHJpbmcmIGZpbAogewogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3Rz
KGZpbGVQYXRoKSkKKyAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpIHx8ICFGaWxlU3lzdGVtOjpm
aWxlRXhpc3RzKGZpbGVQYXRoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAg
IGF1dG8gb3JpZ2luRmlsZUhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKGZpbGVQYXRoLCBG
aWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQpOwpAQCAtNjYsNyArNzMsNyBAQCBzdGF0aWMg
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IHJlYWRPcmlnaW5Gcm9tRmlsZShj
b25zdCBTdHJpbmcmIGZpbAogCiBzdGF0aWMgdm9pZCB3cml0ZU9yaWdpblRvRmlsZUlmTmVjZXNz
YXJ5KGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYg
b3JpZ2luKQogewotICAgIGlmIChGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGZpbGVQYXRoKSkKKyAg
ICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpIHx8IEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZVBh
dGgpKQogICAgICAgICByZXR1cm47CiAKICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3Jp
ZXMoRmlsZVN5c3RlbTo6cGFyZW50UGF0aChmaWxlUGF0aCkpOwpAQCAtNzYsNyArODMsNyBAQCBz
dGF0aWMgdm9pZCB3cml0ZU9yaWdpblRvRmlsZUlmTmVjZXNzYXJ5KGNvbnN0IFN0cmluZyYgZmls
ZVBhdGgsIGNvbnN0IFdlYkNvcmU6OgogICAgIH0pOwogCiAgICAgaWYgKCFGaWxlU3lzdGVtOjpp
c0hhbmRsZVZhbGlkKG9yaWdpbkZpbGVIYW5kbGUpKSB7Ci0gICAgICAgIExPR19FUlJPUigid3Jp
dGVPcmlnaW5Ub0ZpbGVJZk5lY2Vzc2FyeTogRmFpbGVkIHRvIG9wZW4gb3JpZ2luIGZpbGUiKTsK
KyAgICAgICAgTE9HX0VSUk9SKCJ3cml0ZU9yaWdpblRvRmlsZUlmTmVjZXNzYXJ5OiBGYWlsZWQg
dG8gb3BlbiBvcmlnaW4gZmlsZSAnJXMnIiwgZmlsZVBhdGgudXRmOCgpLmRhdGEoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTkzLDIwICsxMDAsMjIgQEAgc3RhdGljIHZvaWQgZGVs
ZXRlT3JpZ2luRmlsZUlmTmVjZXNzYXJ5KGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCiAgICAgICAg
IEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZmlsZVBhdGgpOwogfQogCi1SZWY8TmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyPiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCkKK1JlZjxOZXR3b3JrU3RvcmFnZU1hbmFnZXI+
IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Y29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyKHNlc3Np
b25JRCwgcGF0aCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtTdG9yYWdlTWFu
YWdlcihzZXNzaW9uSUQsIHBhdGgsIGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgpKTsKIH0KIAotTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBhdGgpCitOZXR3b3JrU3RvcmFnZU1hbmFnZXI6Ok5l
dHdvcmtTdG9yYWdlTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKQogICAgIDogbV9z
ZXNzaW9uSUQoc2Vzc2lvbklEKQotICAgICwgbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29t
LmFwcGxlLldlYktpdC5TdG9yYWdlIikpCisgICAgLCBtX3F1ZXVlKFN1c3BlbmRhYmxlV29ya1F1
ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZSIpKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHBhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpXSgpIG11
dGFibGUgeworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVm
IHsgKnRoaXMgfSwgcGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCksIGN1c3RvbUxvY2FsU3RvcmFn
ZVBhdGggPSBjcm9zc1RocmVhZENvcHkoY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCldKCkgbXV0YWJs
ZSB7CiAgICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSA9IG1ha2VVbmlx
dWU8RmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeT4oKTsKKyAgICAgICAgbV9zdG9yYWdl
QXJlYVJlZ2lzdHJ5ID0gbWFrZVVuaXF1ZTxTdG9yYWdlQXJlYVJlZ2lzdHJ5PigpOwogICAgICAg
ICBtX3BhdGggPSBwYXRoOworICAgICAgICBtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGggPSBjdXN0
b21Mb2NhbFN0b3JhZ2VQYXRoOwogICAgICAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIGF1dG8gc2FsdFBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQobV9wYXRoLCAic2FsdCIpOwogICAgICAgICAgICAgbV9zYWx0ID0gRmlsZVN5c3RlbTo6
cmVhZE9yTWFrZVNhbHQoc2FsdFBhdGgpLnZhbHVlX29yKEZpbGVTeXN0ZW06OlNhbHQoKSk7CkBA
IC0xMjAsNiArMTI5LDExIEBAIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6fk5ldHdvcmtTdG9yYWdl
TWFuYWdlcigpCiAgICAgQVNTRVJUKG1fY2xvc2VkKTsKIH0KIAorYm9vbCBOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OmNhbkhhbmRsZVR5cGVzKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVz
KQoreworICAgIHJldHVybiB0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3Rv
cmFnZSkgfHwgdHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkg
fHwgdHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtKTsKK30KKwogdm9p
ZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsb3NlKCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwpAQCAtMTMzLDcgKzE0Nyw2IEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
OjpjbG9zZSgpCiAKICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IFJlZiB7ICp0aGlzIH1dKCkgbXV0YWJsZSB7CiAgICAgICAgIG1fbG9jYWxPcmlnaW5TdG9yYWdl
TWFuYWdlcnMuY2xlYXIoKTsKLSAgICAgICAgbV9zZXNzaW9uT3JpZ2luU3RvcmFnZU1hbmFnZXJz
LmNsZWFyKCk7CiAgICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSA9IG51
bGxwdHI7CiAKICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlz
ID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0geyB9KTsKQEAgLTE3Nyw3ICsxOTAsNyBAQCBzdGF0
aWMgU3RyaW5nIGVuY29kZShjb25zdCBTdHJpbmcmIHN0cmluZywgRmlsZVN5c3RlbTo6U2FsdCBz
YWx0KQogc3RhdGljIFN0cmluZyBvcmlnaW5EaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgcm9v
dFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBGaWxlU3lzdGVtOjpT
YWx0IHNhbHQpCiB7CiAgICAgaWYgKHJvb3RQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IHJvb3RQYXRoOworICAgICAgICByZXR1cm4gU3RyaW5nIHsgfTsKIAogICAgIGF1dG8gZW5jb2Rl
ZFRvcE9yaWdpbiA9IGVuY29kZShvcmlnaW4udG9wT3JpZ2luLnRvU3RyaW5nKCksIHNhbHQpOwog
ICAgIGF1dG8gZW5jb2RlZE9wZW5pbmdPcmlnaW4gPSBlbmNvZGUob3JpZ2luLmNsaWVudE9yaWdp
bi50b1N0cmluZygpLCBzYWx0KTsKQEAgLTE4Niw2ICsxOTksOCBAQCBzdGF0aWMgU3RyaW5nIG9y
aWdpbkRpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJiByb290UGF0aCwgY29uc3QgV2ViQ29yZTo6
Q2xpZW50TwogCiBzdGF0aWMgU3RyaW5nIG9yaWdpbkZpbGVQYXRoKGNvbnN0IFN0cmluZyYgZGly
ZWN0b3J5KQogeworICAgIGlmIChkaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
U3RyaW5nIHsgfTsKICAgICByZXR1cm4gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KGRpcmVjdG9yeSwgIm9yaWdpbiJfcyk7CiB9CiAKQEAgLTE5NiwxNiArMjExLDM0IEBAIE9y
aWdpblN0b3JhZ2VNYW5hZ2VyJiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmxvY2FsT3JpZ2luU3Rv
cmFnZU1hbmFnZXIoY29uc3QgV2ViCiAgICAgcmV0dXJuICptX2xvY2FsT3JpZ2luU3RvcmFnZU1h
bmFnZXJzLmVuc3VyZShvcmlnaW4sIFsmXSB7CiAgICAgICAgIGF1dG8gb3JpZ2luRGlyZWN0b3J5
ID0gb3JpZ2luRGlyZWN0b3J5UGF0aChtX3BhdGgsIG9yaWdpbiwgbV9zYWx0KTsKICAgICAgICAg
d3JpdGVPcmlnaW5Ub0ZpbGVJZk5lY2Vzc2FyeShvcmlnaW5GaWxlUGF0aChvcmlnaW5EaXJlY3Rv
cnkpLCBvcmlnaW4pOwotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxPcmlnaW5TdG9yYWdlTWFu
YWdlcj4oV1RGTW92ZShvcmlnaW5EaXJlY3RvcnkpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlx
dWU8T3JpZ2luU3RvcmFnZU1hbmFnZXI+KFdURk1vdmUob3JpZ2luRGlyZWN0b3J5KSwgTG9jYWxT
dG9yYWdlTWFuYWdlcjo6bG9jYWxTdG9yYWdlRmlsZVBhdGgobV9jdXN0b21Mb2NhbFN0b3JhZ2VQ
YXRoLCBvcmlnaW4pKTsKICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKLXZvaWQgTmV0d29y
a1N0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUoY29u
c3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pCitib29sIE5ldHdvcmtTdG9yYWdlTWFu
YWdlcjo6cmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxlKGNvbnN0IFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYgb3JpZ2luKQogewotICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9sb2Nh
bE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5maW5kKG9yaWdpbik7IGl0ZXJhdG9yICE9IG1fbG9jYWxP
cmlnaW5TdG9yYWdlTWFuYWdlcnMuZW5kKCkpIHsKLSAgICAgICAgaWYgKCFpdGVyYXRvci0+dmFs
dWUtPmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJz
LnJlbW92ZShpdGVyYXRvcik7Ci0gICAgfQorICAgIGF1dG8gaXRlcmF0b3IgPSBtX2xvY2FsT3Jp
Z2luU3RvcmFnZU1hbmFnZXJzLmZpbmQob3JpZ2luKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9s
b2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAoaXRlcmF0b3ItPnZhbHVlLT5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLnJlbW92ZShpdGVyYXRvcik7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxl
dGVPcmlnaW5EaXJlY3RvcnlJZlBvc3NpYmxlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYg
b3JpZ2luKQoreworICAgIGJvb2wgaXNFbXB0eSA9IGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIo
b3JpZ2luKS5pc0VtcHR5KCk7CisgICAgYm9vbCByZW1vdmVkID0gcmVtb3ZlT3JpZ2luU3RvcmFn
ZU1hbmFnZXJJZlBvc3NpYmxlKG9yaWdpbik7CisgICAgaWYgKCFyZW1vdmVkIHx8ICFpc0VtcHR5
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG9yaWdpbkRpcmVjdG9yeSA9IG9yaWdpbkRp
cmVjdG9yeVBhdGgobV9wYXRoLCBvcmlnaW4sIG1fc2FsdCk7CisgICAgYXV0byBmaWxlUGF0aCA9
IG9yaWdpbkZpbGVQYXRoKG9yaWdpbkRpcmVjdG9yeSk7CisgICAgZGVsZXRlT3JpZ2luRmlsZUlm
TmVjZXNzYXJ5KGZpbGVQYXRoKTsKKyAgICBGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9y
eShvcmlnaW5EaXJlY3RvcnkpOwogfQogCiB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6cGVy
c2lzdGVkKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjMyLDkgKzI2NSw2IEBA
IHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbGVhclN0b3JhZ2VGb3JUZXN0aW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjCiAgICAgICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1f
bG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpCiAgICAgICAgICAgICBtYW5hZ2Vy
LT5zZXRQZXJzaXN0ZWQoZmFsc2UpOwogCi0gICAgICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1f
c2Vzc2lvbk9yaWdpblN0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKLSAgICAgICAgICAgIG1hbmFn
ZXItPnNldFBlcnNpc3RlZChmYWxzZSk7Ci0KICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgICAgIH0pOwpAQCAtMzgyLDE0ICs0MTIsNiBA
QCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Z2V0SGFuZGxlKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgV2ViQ29yZTo6RmlsZQogICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhbmRsZS0+
Z2V0SGFuZGxlKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgV1RGTW92ZShuYW1lKSkpOwogfQogCi1z
dGF0aWMgc3RkOjpvcHRpb25hbDxXZWJzaXRlRGF0YVR5cGU+IHRvV2Vic2l0ZURhdGFUeXBlKGNv
bnN0IFN0cmluZyYgc3RvcmFnZVR5cGUpCi17Ci0gICAgaWYgKHN0b3JhZ2VUeXBlID09ICJGaWxl
U3lzdGVtIikKLSAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbTsKLQot
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
Ojpmb3JFYWNoT3JpZ2luRGlyZWN0b3J5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5n
Jik+JiBhcHBseSkKIHsKICAgICBmb3IgKGF1dG8mIHRvcE9yaWdpbiA6IEZpbGVTeXN0ZW06Omxp
c3REaXJlY3RvcnkobV9wYXRoKSkgewpAQCAtNDAxLDMwICs0MjMsNDMgQEAgdm9pZCBOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmZvckVhY2hPcmlnaW5EaXJlY3RvcnkoY29uc3QgRnVuY3Rpb248dm9p
ZChjb25zdCBTdHIKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoYXV0byYgb3BlbmluZ09yaWdp
biA6IG9wZW5pbmdPcmlnaW5zKSB7CisgICAgICAgICAgICBpZiAob3BlbmluZ09yaWdpbi5zdGFy
dHNXaXRoKCIuIikpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgICAgIGF1
dG8gb3BlbmluZ09yaWdpbkRpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudCh0b3BPcmlnaW5EaXJlY3RvcnksIG9wZW5pbmdPcmlnaW4pOwogICAgICAgICAgICAg
YXBwbHkob3BlbmluZ09yaWdpbkRpcmVjdG9yeSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKK0hh
c2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmdldEFs
bE9yaWdpbnMoKQoreworICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBhbGxPcmln
aW5zOworICAgIGZvciAoYXV0byYgb3JpZ2luIDogbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vy
cy5rZXlzKCkpCisgICAgICAgIGFsbE9yaWdpbnMuYWRkKG9yaWdpbik7CisKKyAgICBmb3JFYWNo
T3JpZ2luRGlyZWN0b3J5KFsmXShhdXRvIGRpcmVjdG9yeSkgeworICAgICAgICBpZiAoYXV0byBv
cmlnaW4gPSByZWFkT3JpZ2luRnJvbUZpbGUob3JpZ2luRmlsZVBhdGgoZGlyZWN0b3J5KSkpCisg
ICAgICAgICAgICBhbGxPcmlnaW5zLmFkZCgqb3JpZ2luKTsKKyAgICB9KTsKKworICAgIGZvciAo
YXV0byYgb3JpZ2luIDogTG9jYWxTdG9yYWdlTWFuYWdlcjo6b3JpZ2luc09mTG9jYWxTdG9yYWdl
RGF0YShtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgpKQorICAgICAgICBhbGxPcmlnaW5zLmFkZChX
ZWJDb3JlOjpDbGllbnRPcmlnaW4geyBvcmlnaW4sIG9yaWdpbiB9KTsKKworICAgIHJldHVybiBh
bGxPcmlnaW5zOworfQorCiBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OmZldGNoRGF0YUZyb21EaXNrKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHRh
cmdldFR5cGVzKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgSGFz
aE1hcDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+PiBvcmlnaW5UeXBlczsKLSAgICBmb3JFYWNoT3JpZ2luRGlyZWN0b3J5KFsmXShhdXRvIGRp
cmVjdG9yeSkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gb3JpZ2luID0gcmVhZE9yaWdpbkZyb21G
aWxlKG9yaWdpbkZpbGVQYXRoKGRpcmVjdG9yeSkpOwotICAgICAgICBpZiAoIW9yaWdpbikKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBmb3IgKGF1dG8mIHN0b3JhZ2VUeXBlIDogRmls
ZVN5c3RlbTo6bGlzdERpcmVjdG9yeShkaXJlY3RvcnkpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0
byB0eXBlID0gdG9XZWJzaXRlRGF0YVR5cGUoc3RvcmFnZVR5cGUpOyB0eXBlICYmIHRhcmdldFR5
cGVzLmNvbnRhaW5zKCp0eXBlKSkgewotICAgICAgICAgICAgICAgIC8vIFJldHVybiBib3RoIHRv
cCBvcmlnaW4gYW5kIG9wZW5pbmcgb3JpZ2luIGZvciB0aGlzIGRhdGEuCi0gICAgICAgICAgICAg
ICAgb3JpZ2luVHlwZXMuYWRkKG9yaWdpbi0+Y2xpZW50T3JpZ2luLCBPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQoKnR5cGUpOwotICAgICAgICAgICAg
ICAgIG9yaWdpblR5cGVzLmFkZChvcmlnaW4tPnRvcE9yaWdpbiwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4geyB9KS5pdGVyYXRvci0+dmFsdWUuYWRkKCp0eXBlKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0pOworICAgIGZvciAoYXV0byBvcmlnaW4gOiBnZXRBbGxPcmlnaW5z
KCkpIHsKKyAgICAgICAgYXV0byB0eXBlcyA9IGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3Jp
Z2luKS5mZXRjaERhdGFUeXBlc0luTGlzdCh0YXJnZXRUeXBlcyk7CisgICAgICAgIG9yaWdpblR5
cGVzLmFkZChvcmlnaW4uY2xpZW50T3JpZ2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB7
IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQodHlwZXMpOworICAgICAgICBvcmlnaW5UeXBlcy5hZGQo
b3JpZ2luLnRvcE9yaWdpbiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4geyB9KS5pdGVyYXRv
ci0+dmFsdWUuYWRkKHR5cGVzKTsKKyAgICAgICAgcmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJ
ZlBvc3NpYmxlKG9yaWdpbik7CisgICAgfQogCiAgICAgVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRy
eT4gZW50cmllczsKICAgICBmb3IgKGF1dG8gW29yaWdpbiwgdHlwZXNdIDogb3JpZ2luVHlwZXMp
IHsKQEAgLTQ0OCwzNSArNDgzLDE5IEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpmZXRj
aERhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIENvbXBsZXRpCiAgICAgfSk7
CiB9CiAKLVZlY3RvcjxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IE5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6ZGVsZXRlRGF0YU9uRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgV2Fs
bFRpbWUgbW9kaWZpZWRTaW5jZVRpbWUsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luJik+JiBmaWx0ZXIpCitIYXNoU2V0PFdlYkNvcmU6OkNsaWVudE9yaWdp
bj4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrKE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IHR5cGVzLCBXYWxsVGltZSBtb2RpZmllZFNpbmNlVGltZSwgY29uc3QgRnVu
Y3Rpb248Ym9vbChjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKT4mIGZpbHRlcikKIHsKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpDbGll
bnRPcmlnaW4+IGRlbGV0ZWRPcmlnaW5zOwotICAgIGZvckVhY2hPcmlnaW5EaXJlY3RvcnkoWyZd
KGF1dG8gZGlyZWN0b3J5KSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBmaWxlUGF0aCA9IG9yaWdp
bkZpbGVQYXRoKGRpcmVjdG9yeSk7Ci0gICAgICAgIGF1dG8gb3JpZ2luID0gcmVhZE9yaWdpbkZy
b21GaWxlKGZpbGVQYXRoKTsKLSAgICAgICAgaWYgKCFvcmlnaW4pIHsKLSAgICAgICAgICAgIC8v
IElmIG9yaWdpbiBjYW5ub3QgYmUgcmV0cmlldmVkLCBidXQgd2UgYXJlIGFza2VkIHRvIHJlbW92
ZSBkYXRhIGZvciBhbGwgb3JpZ2lucywgcmVtb3ZlIGl0LgotICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoU3RvcmFnZSwgIk5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YU9uRGlz
ayBmYWlsZWQgdG8gcmVhZCBvcmlnaW4gZnJvbSAnJXMnIiwgZmlsZVBhdGgudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyKFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IH0pKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byB0ZW1wT3JpZ2luU3RvcmFnZU1hbmFnZXIgPSBtYWtlVW5p
cXVlPE9yaWdpblN0b3JhZ2VNYW5hZ2VyPihTdHJpbmcgeyBkaXJlY3RvcnkgfSk7Ci0gICAgICAg
ICAgICAgICAgdGVtcE9yaWdpblN0b3JhZ2VNYW5hZ2VyLT5kZWxldGVEYXRhKHR5cGVzLCBtb2Rp
ZmllZFNpbmNlVGltZSk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZUlmTmVjZXNz
YXJ5KGZpbGVQYXRoKTsKLSAgICAgICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURp
cmVjdG9yeShkaXJlY3RvcnkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFmaWx0ZXIoKm9yaWdpbikpCi0gICAgICAgICAgICBy
ZXR1cm47CisgICAgSGFzaFNldDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IGRlbGV0ZWRPcmlnaW5z
OworICAgIGZvciAoYXV0byBvcmlnaW4gOiBnZXRBbGxPcmlnaW5zKCkpIHsKKyAgICAgICAgaWYg
KCFmaWx0ZXIob3JpZ2luKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGRlbGV0
ZWRPcmlnaW5zLmFwcGVuZCgqb3JpZ2luKTsKLSAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFu
YWdlcigqb3JpZ2luKS5kZWxldGVEYXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlVGltZSk7Ci0gICAg
ICAgIHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZSgqb3JpZ2luKTsKLSAgICAg
ICAgZGVsZXRlT3JpZ2luRmlsZUlmTmVjZXNzYXJ5KGZpbGVQYXRoKTsKLSAgICAgICAgRmlsZVN5
c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkoZGlyZWN0b3J5KTsKLSAgICB9KTsKKyAgICAgICAg
ZGVsZXRlZE9yaWdpbnMuYWRkKG9yaWdpbik7CisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1h
bmFnZXIob3JpZ2luKS5kZWxldGVEYXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlVGltZSk7CisgICAg
ICAgIGRlbGV0ZU9yaWdpbkRpcmVjdG9yeUlmUG9zc2libGUob3JpZ2luKTsKKyAgICB9CiAKICAg
ICByZXR1cm4gZGVsZXRlZE9yaWdpbnM7CiB9CkBAIC01NDEsNSArNTYwLDE2MCBAQCB2b2lkIE5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhPcHRp
b25TZXQ8V2Vic2l0ZURhdAogICAgIH0pOwogfQogCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6bW92ZURhdGEoY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBzb3VyY2UsIGNv
bnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICBBU1NFUlQoIW1fY2xvc2VkKTsKKworICAgIG1fcXVldWUtPmRpc3BhdGNo
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgc291cmNlID0gY3Jvc3NUaHJl
YWRDb3B5KHNvdXJjZSksIHRhcmdldCA9IGNyb3NzVGhyZWFkQ29weSh0YXJnZXQpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAg
ICAgICBhdXRvIHNvdXJjZU9yaWdpbiA9IFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IHNvdXJjZSwg
c291cmNlIH07CisgICAgICAgIGF1dG8gdGFyZ2V0T3JpZ2luID0gV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luIHsgdGFyZ2V0LCB0YXJnZXQgfTsKKyAgICAgICAgCisgICAgICAgIC8vIENsZWFyIGV4aXN0
aW5nIGRhdGEgb2YgdGFyZ2V0IG9yaWdpbi4KKyAgICAgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gdHlwZXMgPSB7IFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSwgV2Vic2l0ZURhdGFU
eXBlOjpMb2NhbFN0b3JhZ2UsIFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UgIH07Cisg
ICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIodGFyZ2V0T3JpZ2luKS5kZWxldGVEYXRh
KHR5cGVzLCAtV2FsbFRpbWU6OmluZmluaXR5KCkpOworICAgICAgICByZW1vdmVPcmlnaW5TdG9y
YWdlTWFuYWdlcklmUG9zc2libGUodGFyZ2V0T3JpZ2luKTsKKworICAgICAgICAvLyBNb3ZlIGRh
dGEgZnJvbSBzb3VyY2Ugb3JpZ2luIHRvIHRhcmdldCBvcmlnaW4uCisgICAgICAgIGxvY2FsT3Jp
Z2luU3RvcmFnZU1hbmFnZXIoc291cmNlT3JpZ2luKS5tb3ZlRGF0YShvcmlnaW5EaXJlY3RvcnlQ
YXRoKG1fcGF0aCwgdGFyZ2V0T3JpZ2luLCBtX3NhbHQpLCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjps
b2NhbFN0b3JhZ2VGaWxlUGF0aChtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgsIHRhcmdldE9yaWdp
bikpOworICAgICAgICByZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUoc291cmNl
T3JpZ2luKTsKKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6c3VzcGVuZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcXVldWUtPnN1c3Bl
bmQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSB7CisgICAgICAgIGZvciAo
YXV0byYgbWFuYWdlciA6IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpIHsK
KyAgICAgICAgICAgIGlmIChhdXRvIGxvY2FsU3RvcmFnZU1hbmFnZXIgPSBtYW5hZ2VyLT5leGlz
dGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKSkKKyAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2VN
YW5hZ2VyLT5zeW5jTG9jYWxTdG9yYWdlKCk7CisgICAgICAgIH0KKyAgICB9LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZXN1
bWUoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3F1ZXVlLT5y
ZXN1bWUoKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmhhbmRsZUxvd01lbW9y
eVdhcm5pbmcoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3F1
ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dIHsKKyAg
ICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy52
YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gbG9jYWxTdG9yYWdlTWFuYWdlciA9IG1h
bmFnZXItPmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcigpKQorICAgICAgICAgICAgICAgIGxv
Y2FsU3RvcmFnZU1hbmFnZXItPmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKKyAgICAgICAgfQor
ICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c3luY0xvY2FsU3RvcmFn
ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgZm9yIChhdXRvJiBt
YW5hZ2VyIDogbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkgeworICAgICAg
ICAgICAgaWYgKGF1dG8gbG9jYWxTdG9yYWdlTWFuYWdlciA9IG1hbmFnZXItPmV4aXN0aW5nTG9j
YWxTdG9yYWdlTWFuYWdlcigpKQorICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZU1hbmFnZXIt
PnN5bmNMb2NhbFN0b3JhZ2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisKK3Zv
aWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmIHRvcE9yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChTdG9yYWdlQXJlYUlkZW50aWZpZXIpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgV2ViQ29yZTo6Q2xpZW50T3JpZ2luIG9y
aWdpbiA9IHsgdG9wT3JpZ2luLCB0b3BPcmlnaW4gfTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihs
b2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbikubG9jYWxTdG9yYWdlTWFuYWdlcigqbV9z
dG9yYWdlQXJlYVJlZ2lzdHJ5KS5jb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24u
dW5pcXVlSUQoKSwgb3JpZ2luLCBtX3F1ZXVlLmNvcHlSZWYoKSkpOworfQorCit2b2lkIE5ldHdv
cmtTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiB0b3BPcmlnaW4sIFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YSYmIG9wZW5pbmdPcmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFy
ZWFJZGVudGlmaWVyKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBXZWJDb3JlOjpDbGll
bnRPcmlnaW4gb3JpZ2luID0geyB0b3BPcmlnaW4sIG9wZW5pbmdPcmlnaW4gfTsKKyAgICBjb21w
bGV0aW9uSGFuZGxlcihsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbikubG9jYWxTdG9y
YWdlTWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5KS5jb25uZWN0VG9UcmFuc2llbnRMb2Nh
bFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgb3JpZ2luKSk7Cit9CisKK3ZvaWQg
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBpZGVudGlm
aWVyLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiB0b3BPcmlnaW4sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU3RvcmFnZUFyZWFJZGVudGlmaWVyKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luID0geyB0b3BPcmlnaW4sIHRvcE9y
aWdpbiB9OworICAgIGNvbXBsZXRpb25IYW5kbGVyKGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIo
b3JpZ2luKS5zZXNzaW9uU3RvcmFnZU1hbmFnZXIoKm1fc3RvcmFnZUFyZWFSZWdpc3RyeSkuY29u
bmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgb3JpZ2luLCBp
ZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkaXNjb25uZWN0
RnJvbVN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9y
YWdlQXJlYShpZGVudGlmaWVyKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoc3RvcmFnZUFyZWEtPnN0b3JhZ2VUeXBlKCkgPT0gU3RvcmFnZUFyZWFC
YXNlOjpTdG9yYWdlVHlwZTo6TG9jYWwpCisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFn
ZXIoc3RvcmFnZUFyZWEtPm9yaWdpbigpKS5sb2NhbFN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VB
cmVhUmVnaXN0cnkpLmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJ
RCgpLCBpZGVudGlmaWVyKTsKKyAgICBlbHNlCisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1h
bmFnZXIoc3RvcmFnZUFyZWEtPm9yaWdpbigpKS5zZXNzaW9uU3RvcmFnZU1hbmFnZXIoKm1fc3Rv
cmFnZUFyZWFSZWdpc3RyeSkuZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShjb25uZWN0aW9uLnVu
aXF1ZUlEKCksIGlkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Y2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIGZyb21JZGVudGlmaWVyLCBTdG9yYWdlTmFtZXNw
YWNlSWRlbnRpZmllciB0b0lkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1h
bmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChhdXRvKiBzZXNzaW9uU3RvcmFnZU1hbmFn
ZXIgPSBtYW5hZ2VyLT5leGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigpKQorICAgICAgICAg
ICAgc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5jbG9uZVN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5p
cXVlSUQoKSwgZnJvbUlkZW50aWZpZXIsIHRvSWRlbnRpZmllcik7CisgICAgfQorfQorCit2b2lk
IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Z2V0VmFsdWVzKFN0b3JhZ2VBcmVhSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBpZiAoYXV0byBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFSZWdp
c3RyeS0+Z2V0U3RvcmFnZUFyZWEoaWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihzdG9yYWdlQXJlYS0+YWxsSXRlbXMoKSk7CisgICAgCisgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpz
ZXRJdGVtKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJZGVudGlmaWVy
IGlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVp
bnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcmJiBrZXksIFN0cmluZyYmIHZhbHVlLCBTdHJp
bmcmJiB1cmxTdHJpbmcpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBib29sIGhhc1F1b3RhRXJyb3IgPSBmYWxzZTsKKyAgICBpZiAoYXV0byBzdG9yYWdlQXJlYSA9
IG1fc3RvcmFnZUFyZWFSZWdpc3RyeS0+Z2V0U3RvcmFnZUFyZWEoaWRlbnRpZmllcikpIHsKKyAg
ICAgICAgYXV0byByZXN1bHQgPSBzdG9yYWdlQXJlYS0+c2V0SXRlbShjb25uZWN0aW9uLnVuaXF1
ZUlEKCksIGltcGxJZGVudGlmaWVyLCBTdHJpbmcgeyBrZXkgfSwgV1RGTW92ZSh2YWx1ZSksIFdU
Rk1vdmUodXJsU3RyaW5nKSk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgaGFz
UXVvdGFFcnJvciA9IChyZXN1bHQuZXJyb3IoKSA9PSBTdG9yYWdlRXJyb3I6OlF1b3RhRXhjZWVk
ZWQpOworICAgIH0KKworICAgIGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFN
YXA6OkRpZFNldEl0ZW0oc3RvcmFnZU1hcFNlZWQsIGtleSwgaGFzUXVvdGFFcnJvciksIGlkZW50
aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVy
LCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIGltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9y
YWdlTWFwU2VlZCwgU3RyaW5nJiYga2V5LCBTdHJpbmcmJiB1cmxTdHJpbmcpCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoYXV0byBzdG9yYWdlQXJlYSA9IG1f
c3RvcmFnZUFyZWFSZWdpc3RyeS0+Z2V0U3RvcmFnZUFyZWEoaWRlbnRpZmllcikpCisgICAgICAg
IHN0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaW1wbElkZW50
aWZpZXIsIGtleSwgV1RGTW92ZSh1cmxTdHJpbmcpKTsKKworICAgIGNvbm5lY3Rpb24uc2VuZChN
ZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFJlbW92ZUl0ZW0oc3RvcmFnZU1hcFNlZWQsIFdU
Rk1vdmUoa2V5KSksIGlkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6Y2xlYXIoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZp
ZXIgaWRlbnRpZmllciwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwg
dWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIFN0cmluZyYmIHVybFN0cmluZykKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChhdXRvIHN0b3JhZ2VBcmVhID0gbV9z
dG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9yYWdlQXJlYShpZGVudGlmaWVyKSkKKyAgICAgICAg
c3RvcmFnZUFyZWEtPmNsZWFyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaW1wbElkZW50aWZpZXIs
IFdURk1vdmUodXJsU3RyaW5nKSk7CisKKyAgICBjb25uZWN0aW9uLnNlbmQoTWVzc2FnZXM6OlN0
b3JhZ2VBcmVhTWFwOjpEaWRDbGVhcihzdG9yYWdlTWFwU2VlZCksIGlkZW50aWZpZXIpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oCmluZGV4IDJh
ZGRmMmI1ZTIwYWQzNmQyOGU0NDU5N2VhNDEzZmZlODk2MWE0MGYuLmI4MDk3MjU4ZmRiOTJkMTBj
NTcwMDM0MDVjZjgzY2QxMDllMDBmZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmgKQEAgLTI4
LDYgKzI4LDkgQEAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3Rl
bVN0b3JhZ2VFcnJvci5oIgogI2luY2x1ZGUgIk9yaWdpblN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5j
bHVkZSAiU3RvcmFnZUFyZWFJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBs
SWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLmgiCiAj
aW5jbHVkZSAiV2Vic2l0ZURhdGEuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIuaD4KQEAgLTQ2
LDEwICs0OSwxMiBAQCBzdHJ1Y3QgQ2xpZW50T3JpZ2luOwogbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnk7CitjbGFzcyBTdG9yYWdlQXJl
YVJlZ2lzdHJ5OwogCiBjbGFzcyBOZXR3b3JrU3RvcmFnZU1hbmFnZXIgZmluYWwgOiBwdWJsaWMg
SVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8TmV0d29ya1N0b3JhZ2VNYW5hZ2VyPiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQs
IGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJp
bmcmIGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgpOworICAgIHN0YXRpYyBib29sIGNhbkhhbmRsZVR5
cGVzKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+KTsKIAogICAgIHZvaWQgc3RhcnRSZWNlaXZp
bmdNZXNzYWdlRnJvbUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uJik7CiAgICAgdm9pZCBzdG9w
UmVjZWl2aW5nTWVzc2FnZUZyb21Db25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiYpOwpAQCAtNjEs
MjIgKzY2LDMwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGRlbGV0ZURhdGFNb2RpZmll
ZFNpbmNlKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGRlbGV0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFp
bnMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbj4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhhc2hTZXQ8V2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4+JiYpPiYmKTsKKyAgICB2b2lkIG1vdmVEYXRhKGNvbnN0IFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgc291cmNlLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkRhdGEmIHRhcmdldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lk
IHN1c3BlbmQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHJlc3VtZSgp
OworICAgIHZvaWQgaGFuZGxlTG93TWVtb3J5V2FybmluZygpOworICAgIHZvaWQgc3luY0xvY2Fs
U3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiBwcml2YXRlOgotICAgIE5l
dHdvcmtTdG9yYWdlTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoKTsK
KyAgICBOZXR3b3JrU3RvcmFnZU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgU3RyaW5nJiBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKTsKICAgICB+TmV0d29y
a1N0b3JhZ2VNYW5hZ2VyKCk7CiAgICAgT3JpZ2luU3RvcmFnZU1hbmFnZXImIGxvY2FsT3JpZ2lu
U3RvcmFnZU1hbmFnZXIoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7Ci0gICAgdm9pZCBy
ZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUoY29uc3QgV2ViQ29yZTo6Q2xpZW50
T3JpZ2luJik7CisgICAgYm9vbCByZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUo
Y29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgdm9pZCBkZWxldGVPcmlnaW5EaXJl
Y3RvcnlJZlBvc3NpYmxlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOwogICAgIEZpbGVT
eXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkmIGZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0
cnkoKTsKIAogICAgIHZvaWQgZm9yRWFjaE9yaWdpbkRpcmVjdG9yeShjb25zdCBGdW5jdGlvbjx2
b2lkKGNvbnN0IFN0cmluZyYpPiYpOworICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2lu
PiBnZXRBbGxPcmlnaW5zKCk7CiAgICAgVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4gZmV0Y2hE
YXRhRnJvbURpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4pOwotICAgIFZlY3RvcjxXZWJD
b3JlOjpDbGllbnRPcmlnaW4+IGRlbGV0ZURhdGFPbkRpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4sIFdhbGxUaW1lLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYpPiYpOworICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBkZWxldGVE
YXRhT25EaXNrKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSwgY29uc3QgRnVu
Y3Rpb248Ym9vbChjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKT4mKTsKIAogICAgIC8vIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyIChpbXBsZW1lbnRlZCBieSBnZW5lcmF0ZWQgY29kZSkKICAgICB2
b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwor
ICAgIGJvb2wgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYsIFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpOwogCi0gICAgLy8g
TWVzc2FnZSBoYW5kbGVycworICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMgZm9yIEZpbGVTeXN0ZW0u
CiAgICAgdm9pZCBwZXJzaXN0ZWQoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCBwZXJzaXN0KGNvbnN0IFdlYkNv
cmU6OkNsaWVudE9yaWdpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAg
IHZvaWQgZmlsZVN5c3RlbUdldERpcmVjdG9yeShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBXZWJD
b3JlOjpDbGllbnRPcmlnaW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cGVjdGVkPFdlYkNv
cmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+
JiYpOwpAQCAtODgsMjIgKzEwMSwzMyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlRW50cnko
V2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCBkZWxldGVSZWN1cnNpdmVseSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlv
bmFsPEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCByZXNvbHZlKFdlYkNv
cmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxl
SWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeHBlY3RlZDxWZWN0b3I8U3RyaW5n
PiwgRmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsKICAgICB2b2lkIGdldEZpbGUoV2ViQ29y
ZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhw
ZWN0ZWQ8U3RyaW5nLCBGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOwotCiAgICAgdXNpbmcg
QWNjZXNzSGFuZGxlSW5mbyA9IHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxlU3lzdGVtU3luY0FjY2Vz
c0hhbmRsZUlkZW50aWZpZXIsIElQQzo6U2hhcmVkRmlsZUhhbmRsZT47CiAgICAgdm9pZCBjcmVh
dGVTeW5jQWNjZXNzSGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cGVjdGVkPEFjY2Vzc0hhbmRsZUluZm8sIEZpbGVTeXN0
ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCBjbG9zZUFjY2Vzc0hhbmRsZShXZWJDb3Jl
OjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgV2ViQ29yZTo6RmlsZVN5c3RlbVN5bmNBY2Nl
c3NIYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8
RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsKICAgICB2b2lkIGdldEhhbmRsZU5hbWVzKFdl
YkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOwog
ICAgIHZvaWQgZ2V0SGFuZGxlKElQQzo6Q29ubmVjdGlvbiYsIFdlYkNvcmU6OkZpbGVTeXN0ZW1I
YW5kbGVJZGVudGlmaWVyLCBTdHJpbmcmJiBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4
cGVjdGVkPHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgYm9v
bD4sIEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CisgICAgCisgICAgLy8gTWVzc2FnZSBo
YW5kbGVycyBmb3IgV2ViU3RvcmFnZS4KKyAgICB2b2lkIGNvbm5lY3RUb0xvY2FsU3RvcmFnZUFy
ZWEoSVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBcmVh
SWRlbnRpZmllcik+JiYpOworICAgIHZvaWQgY29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdl
QXJlYShJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBcmVhSWRlbnRpZmllcik+JiYpOworICAgIHZv
aWQgY29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VO
YW1lc3BhY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQXJlYUlkZW50aWZpZXIpPiYmKTsKKyAgICB2b2lkIGRp
c2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZUFyZWFJZGVu
dGlmaWVyKTsKKyAgICB2b2lkIGNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoSVBDOjpDb25u
ZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFN0b3JhZ2VOYW1lc3BhY2VJZGVu
dGlmaWVyKTsKKyAgICB2b2lkIGdldFZhbHVlcyhTdG9yYWdlQXJlYUlkZW50aWZpZXIsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKT4mJik7Cisg
ICAgdm9pZCBzZXRJdGVtKElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllciwg
U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc2VlZCwgU3RyaW5nJiYga2V5LCBT
dHJpbmcmJiB2YWx1ZSwgU3RyaW5nJiYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIHJlbW92ZUl0ZW0o
SVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyLCBTdG9yYWdlQXJlYUltcGxJ
ZGVudGlmaWVyLCB1aW50NjRfdCBzZWVkLCBTdHJpbmcmJiBrZXksIFN0cmluZyYmIHVybFN0cmlu
Zyk7CisgICAgdm9pZCBjbGVhcihJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlQXJlYUlkZW50aWZp
ZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHNlZWQsIFN0cmluZyYmIHVy
bFN0cmluZyk7CiAKICAgICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKLSAgICBSZWY8V29y
a1F1ZXVlPiBtX3F1ZXVlOworICAgIFJlZjxTdXNwZW5kYWJsZVdvcmtRdWV1ZT4gbV9xdWV1ZTsK
ICAgICBTdHJpbmcgbV9wYXRoOwogICAgIEZpbGVTeXN0ZW06OlNhbHQgbV9zYWx0OwogICAgIGJv
b2wgbV9jbG9zZWQgeyBmYWxzZSB9OwogICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2lu
LCBzdGQ6OnVuaXF1ZV9wdHI8T3JpZ2luU3RvcmFnZU1hbmFnZXI+PiBtX2xvY2FsT3JpZ2luU3Rv
cmFnZU1hbmFnZXJzOwotICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVu
aXF1ZV9wdHI8T3JpZ2luU3RvcmFnZU1hbmFnZXI+PiBtX3Nlc3Npb25PcmlnaW5TdG9yYWdlTWFu
YWdlcnM7CiAgICAgV2Vha0hhc2hTZXQ8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb25zOyAv
LyBNYWluIHRocmVhZCBvbmx5LgogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWxlU3lzdGVtU3RvcmFn
ZUhhbmRsZVJlZ2lzdHJ5PiBtX2ZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2VBcmVhUmVnaXN0cnk+IG1fc3RvcmFnZUFyZWFSZWdpc3Ry
eTsKKyAgICBTdHJpbmcgbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbgpp
bmRleCA0ZTQwNWM2ZWVhZDMyNmUyNWI0MzE2NDIwNzA4MDk1ZmE2MGRjODM4Li4wNDIyYjYzNDc1
MWQwMzg1Zjg0ZTAxZjY0YWM2MWRhZjMxYzE1ZTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmlu
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFn
ZU1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTM1LDkgKzM1LDE4IEBACiAgICAgUmVzb2x2ZShXZWJD
b3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGaWxl
U3lzdGVtSGFuZGxlSWRlbnRpZmllciB0YXJnZXRJZGVudGlmaWVyKSAtPiAoRXhwZWN0ZWQ8VmVj
dG9yPFN0cmluZz4sIFdlYktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3lu
YwogICAgIE1vdmUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgZGVzdGluYXRpb25JZGVudGlm
aWVyLCBTdHJpbmcgbmV3TmFtZSkgLT4gKHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpGaWxlU3lzdGVt
U3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5jCiAgICAgR2V0RmlsZShXZWJDb3JlOjpGaWxlU3lz
dGVtSGFuZGxlSWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAoRXhwZWN0ZWQ8U3RyaW5nLCBXZWJL
aXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkgQXN5bmMKLQogICAgIENyZWF0ZVN5
bmNBY2Nlc3NIYW5kbGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRp
ZmllcikgLT4gKEV4cGVjdGVkPHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxlU3lzdGVtU3luY0FjY2Vz
c0hhbmRsZUlkZW50aWZpZXIsIElQQzo6U2hhcmVkRmlsZUhhbmRsZT4sIFdlYktpdDo6RmlsZVN5
c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYwogICAgIENsb3NlQWNjZXNzSGFuZGxlKFdl
YkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZp
bGVTeXN0ZW1TeW5jQWNjZXNzSGFuZGxlSWRlbnRpZmllciBhY2Nlc3NIYW5kbGVJZGVudGlmaWVy
KSAtPiAoc3RkOjpvcHRpb25hbDxXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3Vs
dCkgQXN5bmMKICAgICBHZXRIYW5kbGVOYW1lcyhXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRl
bnRpZmllciBpZGVudGlmaWVyKSAtPiAoRXhwZWN0ZWQ8VmVjdG9yPFN0cmluZz4sIFdlYktpdDo6
RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYwogICAgIEdldEhhbmRsZShXZWJD
b3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBTdHJpbmcgbmFtZSkg
LT4gKEV4cGVjdGVkPHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmll
ciwgYm9vbD4sIFdlYktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYyBX
YW50c0Nvbm5lY3Rpb24KKworICAgIENvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoV2ViS2l0OjpT
dG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBzdG9yYWdlTmFtZXNwYWNlSUQsIHN0cnVjdCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgc2VjdXJpdHlPcmlnaW5EYXRhKSAtPiAoV2ViS2l0OjpT
dG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikgU3luY2hyb25vdXMgV2FudHNDb25uZWN0
aW9uCisgICAgQ29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShXZWJLaXQ6OlN0b3Jh
Z2VOYW1lc3BhY2VJZGVudGlmaWVyIHN0b3JhZ2VOYW1lc3BhY2VJRCwgc3RydWN0IFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSB0b3BMZXZlbFNlY3VyaXR5T3JpZ2luRGF0YSwgc3RydWN0IFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBzZWN1cml0eU9yaWdpbkRhdGEpIC0+IChXZWJLaXQ6
OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKSBTeW5jaHJvbm91cyBXYW50c0Nvbm5l
Y3Rpb24KKyAgICBDb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoV2ViS2l0OjpTdG9yYWdlTmFt
ZXNwYWNlSWRlbnRpZmllciBzdG9yYWdlTmFtZXNwYWNlSUQsIHN0cnVjdCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGEgc2VjdXJpdHlPcmlnaW5EYXRhKSAtPiAoV2ViS2l0OjpTdG9yYWdlQXJl
YUlkZW50aWZpZXIgaWRlbnRpZmllcikgU3luY2hyb25vdXMgV2FudHNDb25uZWN0aW9uCisgICAg
RGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBp
ZGVudGlmaWVyKSBXYW50c0Nvbm5lY3Rpb24KKyAgICBDbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNw
YWNlKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgZnJvbVN0b3JhZ2VOYW1lc3Bh
Y2VJRCwgV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciB0b1N0b3JhZ2VOYW1lc3Bh
Y2VJRCkgV2FudHNDb25uZWN0aW9uCisgICAgR2V0VmFsdWVzKFdlYktpdDo6U3RvcmFnZUFyZWFJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YWx1ZXMp
IFN5bmNocm9ub3VzCisgICAgU2V0SXRlbShXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZp
ZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUsIFN0
cmluZyB1cmxTdHJpbmcpIFdhbnRzQ29ubmVjdGlvbgorICAgIFJlbW92ZUl0ZW0oV2ViS2l0OjpT
dG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTdG9yYWdlQXJlYUltcGxJ
ZGVudGlmaWVyIGltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgU3RyaW5n
IGtleSwgU3RyaW5nIHVybFN0cmluZykgV2FudHNDb25uZWN0aW9uCisgICAgQ2xlYXIoV2ViS2l0
OjpTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTdG9yYWdlQXJlYUlt
cGxJZGVudGlmaWVyIGltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgU3Ry
aW5nIHVybFN0cmluZykgV2FudHNDb25uZWN0aW9uCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNw
cAppbmRleCAyNTRkZmUzYmZmNGE1NmQyZTk1OTIyNmJmY2ZiZmVkNTVhMjE1NjZjLi43MjYxOTQy
MjU2YzU1NTZmNWIyOWZjYTE0Yzc5OTAzYWE5MWZhZWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdl
ci5jcHAKQEAgLTI4LDE5ICsyOCwyNSBAQAogCiAjaW5jbHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VI
YW5kbGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5oIgor
I2luY2x1ZGUgIkxvY2FsU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJTZXNzaW9uU3RvcmFn
ZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi
V2Vic2l0ZURhdGFUeXBlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVGaWxlU3lzdGVtLmg+
CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0
YXRpYyBjb25zdGV4cHIgYXV0byBvcmlnaW5GaWxlTmFtZSA9ICJvcmlnaW4iX3M7CiBlbnVtIGNs
YXNzIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0TW9kZSA6IGJvb2wgeyBCZXN0
RWZmb3J0LCBQZXJzaXN0ZW50IH07CiAKIGNsYXNzIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9y
YWdlQnVja2V0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBT
dG9yYWdlQnVja2V0KGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllcikKKyAgICBTdG9yYWdlQnVja2V0KGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRoKQogICAgICAg
ICA6IG1fcm9vdFBhdGgocm9vdFBhdGgpCiAgICAgICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZp
ZXIpCisgICAgICAgICwgbV9sb2NhbFN0b3JhZ2VQYXRoKGxvY2FsU3RvcmFnZVBhdGgpCiAgICAg
ewogICAgIH0KIApAQCAtNTUsMTMgKzYxLDMxIEBAIHB1YmxpYzoKIAogICAgIGVudW0gY2xhc3Mg
U3RvcmFnZVR5cGUgOiB1aW50OF90IHsKICAgICAgICAgRmlsZVN5c3RlbSwKKyAgICAgICAgTG9j
YWxTdG9yYWdlLAorICAgICAgICBTZXNzaW9uU3RvcmFnZSwKICAgICB9OwogCisgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8V2Vic2l0ZURhdGFUeXBlPiB0b1dlYnNpdGVEYXRhVHlwZShjb25zdCBT
dHJpbmcmIHN0b3JhZ2VJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgaWYgKHN0b3JhZ2VJZGVu
dGlmaWVyID09ICJGaWxlU3lzdGVtIl9zKQorICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRh
VHlwZTo6RmlsZVN5c3RlbTsKKyAgICAgICAgaWYgKHN0b3JhZ2VJZGVudGlmaWVyID09ICJMb2Nh
bFN0b3JhZ2UiX3MpCisgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0
b3JhZ2U7CisgICAgICAgIGlmIChzdG9yYWdlSWRlbnRpZmllciA9PSAiU2Vzc2lvblN0b3JhZ2Ui
X3MpCisgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZTsK
KworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwogICAgIHN0YXRpYyBTdHJp
bmcgdG9TdG9yYWdlSWRlbnRpZmllcihTdG9yYWdlVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgU3RvcmFnZVR5cGU6OkZpbGVTeXN0ZW06CiAg
ICAgICAgICAgICByZXR1cm4gIkZpbGVTeXN0ZW0iX3M7CisgICAgICAgIGNhc2UgU3RvcmFnZVR5
cGU6OkxvY2FsU3RvcmFnZToKKyAgICAgICAgICAgIHJldHVybiAiTG9jYWxTdG9yYWdlIl9zOwor
ICAgICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpTZXNzaW9uU3RvcmFnZToKKyAgICAgICAgICAgIHJl
dHVybiAiU2Vzc2lvblN0b3JhZ2UiX3M7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtODYsMTggKzExMCwxMTQgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gKm1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOwogICAgIH0KIAotICAgIGJvb2wgaXNB
Y3RpdmUoKQorICAgIExvY2FsU3RvcmFnZU1hbmFnZXImIGxvY2FsU3RvcmFnZU1hbmFnZXIoU3Rv
cmFnZUFyZWFSZWdpc3RyeSYgcmVnaXN0cnkpCisgICAgeworICAgICAgICBpZiAoIW1fbG9jYWxT
dG9yYWdlTWFuYWdlcikKKyAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlciA9IG1ha2VV
bmlxdWU8TG9jYWxTdG9yYWdlTWFuYWdlcj4obV9sb2NhbFN0b3JhZ2VQYXRoLCByZWdpc3RyeSk7
CisKKyAgICAgICAgcmV0dXJuICptX2xvY2FsU3RvcmFnZU1hbmFnZXI7CisgICAgfQorCisgICAg
TG9jYWxTdG9yYWdlTWFuYWdlciogZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2xvY2FsU3RvcmFnZU1hbmFnZXIuZ2V0KCk7CisgICAgfQorCisg
ICAgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyJiBzZXNzaW9uU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFy
ZWFSZWdpc3RyeSYgcmVnaXN0cnkpCisgICAgeworICAgICAgICBpZiAoIW1fc2Vzc2lvblN0b3Jh
Z2VNYW5hZ2VyKQorICAgICAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIgPSBtYWtlVW5p
cXVlPFNlc3Npb25TdG9yYWdlTWFuYWdlcj4ocmVnaXN0cnkpOworCisgICAgICAgIHJldHVybiAq
bV9zZXNzaW9uU3RvcmFnZU1hbmFnZXI7CisgICAgfQorCisgICAgU2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyKiBleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigpCisgICAgeworICAgICAgICByZXR1
cm4gbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIuZ2V0KCk7CisgICAgfQorCisgICAgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9maWxlU3lzdGVtU3RvcmFnZU1h
bmFnZXIgfHwgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyIHx8IG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
OworICAgIH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICBhdXRv
IGZpbGVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShtX3Jvb3RQYXRoKTsKKyAgICAgICAg
YXV0byBoYXNWYWxpZEZpbGUgPSBXVEY6OmFueU9mKGZpbGVzLCBbJl0oYXV0byBmaWxlKSB7Cisg
ICAgICAgICAgICByZXR1cm4gZmlsZSAhPSAiLkRTX1N0b3JlIl9zICYmIGZpbGUgIT0gb3JpZ2lu
RmlsZU5hbWU7CisgICAgICAgIH0pOworICAgICAgICBpZiAoaGFzVmFsaWRGaWxlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiAhRmlsZVN5c3RlbTo6ZmlsZUV4
aXN0cyhtX2xvY2FsU3RvcmFnZVBhdGgpOworICAgIH0KKworICAgIE9wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+IGZldGNoRGF0YVR5cGVzSW5MaXN0KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IHR5cGVzKQogICAgIHsKLSAgICAgICAgcmV0dXJuICEhbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFn
ZXI7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9tTWVtb3J5
KHR5cGVzKTsKKyAgICAgICAgcmVzdWx0LmFkZChmZXRjaERhdGFUeXBlc0luTGlzdEZyb21EaXNr
KHR5cGVzKSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICB2b2lkIGRl
bGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlm
aWVkU2luY2VUaW1lKQogICAgIHsKICAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVE
YXRhVHlwZTo6RmlsZVN5c3RlbSkpCiAgICAgICAgICAgICBkZWxldGVGaWxlU3lzdGVtU3RvcmFn
ZURhdGEobW9kaWZpZWRTaW5jZVRpbWUpOworCisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkpCisgICAgICAgICAgICBkZWxldGVMb2NhbFN0
b3JhZ2VEYXRhKG1vZGlmaWVkU2luY2VUaW1lKTsKKworICAgICAgICBpZiAodHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkgJiYgbW9kaWZpZWRTaW5jZVRpbWUg
PT0gLVdhbGxUaW1lOjppbmZpbml0eSgpKQorICAgICAgICAgICAgZGVsZXRlU2Vzc2lvblN0b3Jh
Z2VEYXRhKCk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlRGF0YShjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlUGF0aCkKKyAgICB7CisgICAgICAgIG1fZmlsZVN5
c3RlbVN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdl
TWFuYWdlcikKKyAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+Y2xvc2UoKTsKKwor
ICAgICAgICBGaWxlU3lzdGVtOjptb3ZlRmlsZShtX3Jvb3RQYXRoLCBwYXRoKTsKKworICAgICAg
ICBpZiAoIW1fbG9jYWxTdG9yYWdlUGF0aC5pc0VtcHR5KCkgJiYgIWxvY2FsU3RvcmFnZVBhdGgu
aXNFbXB0eSgpKQorICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6bW92ZURh
dGFiYXNlRmlsZShtX2xvY2FsU3RvcmFnZVBhdGgsIGxvY2FsU3RvcmFnZVBhdGgpOwogICAgIH0K
IAogcHJpdmF0ZToKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGFUeXBl
c0luTGlzdEZyb21NZW1vcnkoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCisgICAg
eworICAgICAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiByZXN1bHQ7CisgICAgICAgIGlm
ICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKKyAgICAg
ICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZU1hbmFnZXIgJiYgbV9sb2NhbFN0b3JhZ2VNYW5hZ2Vy
LT5oYXNEYXRhSW5NZW1vcnkoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVE
YXRhVHlwZTo6TG9jYWxTdG9yYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlcy5j
b250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSkgeworICAgICAgICAgICAg
aWYgKG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyICYmIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5o
YXNEYXRhSW5NZW1vcnkoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRh
VHlwZTo6U2Vzc2lvblN0b3JhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGFUeXBl
c0luTGlzdEZyb21EaXNrKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzKQorICAgIHsK
KyAgICAgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gcmVzdWx0OworICAgICAgICBmb3Ig
KGF1dG8mIHN0b3JhZ2VUeXBlIDogRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShtX3Jvb3RQYXRo
KSkgeworICAgICAgICAgICAgaWYgKGF1dG8gdHlwZSA9IHRvV2Vic2l0ZURhdGFUeXBlKHN0b3Jh
Z2VUeXBlKTsgdHlwZSAmJiB0eXBlcy5jb250YWlucygqdHlwZSkpCisgICAgICAgICAgICAgICAg
cmVzdWx0LmFkZCgqdHlwZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpICYmICFyZXN1bHQuY29udGFpbnMoV2Vi
c2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpKSB7CisgICAgICAgICAgICBpZiAoRmlsZVN5c3Rl
bTo6ZmlsZUV4aXN0cyhtX2xvY2FsU3RvcmFnZVBhdGgpKQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICB2b2lkIGRlbGV0ZUZpbGVTeXN0ZW1TdG9y
YWdlRGF0YShXYWxsVGltZSBtb2RpZmllZFNpbmNlVGltZSkKICAgICB7CiAgICAgICAgIG1fZmls
ZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0cjsKQEAgLTEwNiwxNCArMjI2LDUzIEBAIHBy
aXZhdGU6CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUFsbEZpbGVzTW9kaWZpZWRTaW5jZShm
aWxlU3lzdGVtU3RvcmFnZVBhdGgsIG1vZGlmaWVkU2luY2VUaW1lKTsKICAgICB9CiAKKyAgICB2
b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZURhdGEoV2FsbFRpbWUgdGltZSkKKyAgICB7CisgICAgICAg
IGF1dG8gY2xlYXJMb2NhbFN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZSA9IFsmXSgpIG11dGFibGUg
eworICAgICAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdlcikKKyAgICAgICAgICAgICAg
ICBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmNsZWFyRGF0YSgpOworCisgICAgICAgICAgICBpZiAo
IW1fbG9jYWxTdG9yYWdlTWFuYWdlci0+aXNBY3RpdmUoKSkKKyAgICAgICAgICAgICAgICBtX2xv
Y2FsU3RvcmFnZU1hbmFnZXIgPSBudWxscHRyOworICAgICAgICB9OworCisgICAgICAgIGlmICgh
bV9sb2NhbFN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBtb2RpZmlj
YXRpb25UaW1lID0gRmlsZVN5c3RlbTo6ZmlsZU1vZGlmaWNhdGlvblRpbWUobV9sb2NhbFN0b3Jh
Z2VQYXRoKTsKKyAgICAgICAgICAgIGlmICghbW9kaWZpY2F0aW9uVGltZSB8fCAqbW9kaWZpY2F0
aW9uVGltZSA8IHRpbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBj
bGVhckxvY2FsU3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxlKCk7CisKKyAgICAgICAgICAgIFdlYkNv
cmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShtX2xvY2FsU3RvcmFnZVBh
dGgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fbG9j
YWxTdG9yYWdlTWFuYWdlciAmJiBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmhhc0RhdGFJbk1lbW9y
eSgpKQorICAgICAgICAgICAgY2xlYXJMb2NhbFN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZSgpOwor
ICAgIH0KKworICAgIHZvaWQgZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKCkKKyAgICB7CisgICAg
ICAgIGlmICghbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXItPmNsZWFyRGF0YSgpOworICAgICAgICBp
ZiAoIW1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgbV9z
ZXNzaW9uU3RvcmFnZU1hbmFnZXIgPSBudWxscHRyOworICAgIH0KKyAgICAKICAgICBTdHJpbmcg
bV9yb290UGF0aDsKICAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwogICAgIFN0b3JhZ2VCdWNrZXRN
b2RlIG1fbW9kZSB7IFN0b3JhZ2VCdWNrZXRNb2RlOjpCZXN0RWZmb3J0IH07CiAgICAgc3RkOjp1
bmlxdWVfcHRyPEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcj4gbV9maWxlU3lzdGVtU3RvcmFnZU1h
bmFnZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPExvY2FsU3RvcmFnZU1hbmFnZXI+IG1fbG9jYWxT
dG9yYWdlTWFuYWdlcjsKKyAgICBTdHJpbmcgbV9sb2NhbFN0b3JhZ2VQYXRoOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxTZXNzaW9uU3RvcmFnZU1hbmFnZXI+IG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
OwogfTsKIAotT3JpZ2luU3RvcmFnZU1hbmFnZXI6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyKFN0cmlu
ZyYmIHBhdGgpCitPcmlnaW5TdG9yYWdlTWFuYWdlcjo6T3JpZ2luU3RvcmFnZU1hbmFnZXIoU3Ry
aW5nJiYgcGF0aCwgU3RyaW5nJiYgbG9jYWxTdG9yYWdlUGF0aCkKICAgICA6IG1fcGF0aChXVEZN
b3ZlKHBhdGgpKQorICAgICwgbV9sb2NhbFN0b3JhZ2VQYXRoKFdURk1vdmUobG9jYWxTdG9yYWdl
UGF0aCkpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiB9CkBAIC0xMjksNyAr
Mjg4LDcgQEAgdm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZChJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24KIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpT
dG9yYWdlQnVja2V0JiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZGVmYXVsdEJ1Y2tldCgpCiB7CiAg
ICAgaWYgKCFtX2RlZmF1bHRCdWNrZXQpCi0gICAgICAgIG1fZGVmYXVsdEJ1Y2tldCA9IG1ha2VV
bmlxdWU8U3RvcmFnZUJ1Y2tldD4obV9wYXRoLCAiZGVmYXVsdCJfcyk7CisgICAgICAgIG1fZGVm
YXVsdEJ1Y2tldCA9IG1ha2VVbmlxdWU8U3RvcmFnZUJ1Y2tldD4obV9wYXRoLCAiZGVmYXVsdCJf
cywgbV9sb2NhbFN0b3JhZ2VQYXRoKTsKIAogICAgIHJldHVybiAqbV9kZWZhdWx0QnVja2V0Owog
fQpAQCAtMTM5LDE1ICsyOTgsMzQgQEAgRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyJiBPcmlnaW5T
dG9yYWdlTWFuYWdlcjo6ZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyKEZpbGVTeXMKICAgICByZXR1
cm4gZGVmYXVsdEJ1Y2tldCgpLmZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcihyZWdpc3RyeSk7CiB9
CiAKK0xvY2FsU3RvcmFnZU1hbmFnZXImIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpsb2NhbFN0b3Jh
Z2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQoreworICAgIHJldHVybiBk
ZWZhdWx0QnVja2V0KCkubG9jYWxTdG9yYWdlTWFuYWdlcihyZWdpc3RyeSk7Cit9CisKK0xvY2Fs
U3RvcmFnZU1hbmFnZXIqIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ0xvY2FsU3RvcmFn
ZU1hbmFnZXIoKQoreworICAgIHJldHVybiBkZWZhdWx0QnVja2V0KCkuZXhpc3RpbmdMb2NhbFN0
b3JhZ2VNYW5hZ2VyKCk7Cit9CisKK1Nlc3Npb25TdG9yYWdlTWFuYWdlciYgT3JpZ2luU3RvcmFn
ZU1hbmFnZXI6OnNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdp
c3RyeSkKK3sKKyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLnNlc3Npb25TdG9yYWdlTWFuYWdl
cihyZWdpc3RyeSk7Cit9CisKK1Nlc3Npb25TdG9yYWdlTWFuYWdlciogT3JpZ2luU3RvcmFnZU1h
bmFnZXI6OmV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCkKK3sKKyAgICByZXR1cm4gZGVm
YXVsdEJ1Y2tldCgpLmV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCk7Cit9CisKIGJvb2wg
T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmlzQWN0aXZlKCkKIHsKICAgICByZXR1cm4gZGVmYXVsdEJ1
Y2tldCgpLmlzQWN0aXZlKCk7CiB9CiAKLXZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmRlbGV0
ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVk
U2luY2UpCitib29sIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjppc0VtcHR5KCkKIHsKLSAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBkZWZhdWx0QnVja2V0KCkuZGVsZXRlRGF0YSh0
eXBlcywgbW9kaWZpZWRTaW5jZSk7CisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5pc0VtcHR5
KCk7CiB9CiAKIHZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OnNldFBlcnNpc3RlZChib29sIHZh
bHVlKQpAQCAtMTU4LDUgKzMzNiwyNiBAQCB2b2lkIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpzZXRQ
ZXJzaXN0ZWQoYm9vbCB2YWx1ZSkKICAgICBkZWZhdWx0QnVja2V0KCkuc2V0TW9kZSh2YWx1ZSA/
IFN0b3JhZ2VCdWNrZXRNb2RlOjpQZXJzaXN0ZW50IDogU3RvcmFnZUJ1Y2tldE1vZGU6OkJlc3RF
ZmZvcnQpOwogfQogCitPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBPcmlnaW5TdG9yYWdlTWFu
YWdlcjo6ZmV0Y2hEYXRhVHlwZXNJbkxpc3QoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlw
ZXMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gZGVm
YXVsdEJ1Y2tldCgpLmZldGNoRGF0YVR5cGVzSW5MaXN0KHR5cGVzKTsKK30KKwordm9pZCBPcmln
aW5TdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0
eXBlcywgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGRlZmF1bHRCdWNrZXQoKS5kZWxldGVEYXRhKHR5cGVzLCBtb2RpZmll
ZFNpbmNlKTsKK30KKwordm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6bW92ZURhdGEoY29uc3Qg
U3RyaW5nJiBuZXdQYXRoLCBjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZVBhdGgpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBkZWZhdWx0QnVja2V0KCkubW92ZURh
dGEobmV3UGF0aCwgbG9jYWxTdG9yYWdlUGF0aCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3Jp
Z2luU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oCmluZGV4IDdhZGZhNWIwM2I2YmE2ZTNmODY5ODBiMTJk
MmY4YTQ0ZDllNGU2NGIuLjVlNzY2OTk4NmU0NjY4NWYzODliN2E1MjcxZTY2ZDBlNjNjMmQxOWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5T
dG9yYWdlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oCkBAIC0zNiwyMCArMzYsMzAgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnk7CiBjbGFzcyBG
aWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI7CitjbGFzcyBMb2NhbFN0b3JhZ2VNYW5hZ2VyOworY2xh
c3MgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOworY2xhc3MgU3RvcmFnZUFyZWFSZWdpc3RyeTsKIGVu
dW0gY2xhc3MgV2Vic2l0ZURhdGFUeXBlIDogdWludDMyX3Q7CiAKIGNsYXNzIE9yaWdpblN0b3Jh
Z2VNYW5hZ2VyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBPcmlnaW5TdG9yYWdlTWFuYWdlcihTdHJpbmcmJiBwYXRoKTsKKyAgICBPcmlnaW5T
dG9yYWdlTWFuYWdlcihTdHJpbmcmJiBwYXRoLCBTdHJpbmcmJiBsb2NhbFN0b3JhZ2VQYXRoKTsK
ICAgICB+T3JpZ2luU3RvcmFnZU1hbmFnZXIoKTsKIAogICAgIHZvaWQgY29ubmVjdGlvbkNsb3Nl
ZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKICAgICBib29sIHBlcnNpc3RlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGVyc2lzdGVkOyB9CiAgICAgdm9pZCBzZXRQZXJzaXN0ZWQoYm9vbCB2YWx1
ZSk7CiAgICAgRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyJiBmaWxlU3lzdGVtU3RvcmFnZU1hbmFn
ZXIoRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSYpOworICAgIExvY2FsU3RvcmFnZU1h
bmFnZXImIGxvY2FsU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYpOworICAgIExv
Y2FsU3RvcmFnZU1hbmFnZXIqIGV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcigpOworICAgIFNl
c3Npb25TdG9yYWdlTWFuYWdlciYgc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVn
aXN0cnkmKTsKKyAgICBTZXNzaW9uU3RvcmFnZU1hbmFnZXIqIGV4aXN0aW5nU2Vzc2lvblN0b3Jh
Z2VNYW5hZ2VyKCk7CiAgICAgYm9vbCBpc0FjdGl2ZSgpOworICAgIGJvb2wgaXNFbXB0eSgpOwor
ICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGZldGNoRGF0YVR5cGVzSW5MaXN0KE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+KTsKICAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lKTsKKyAgICB2b2lkIG1vdmVEYXRhKGNvbnN0IFN0cmlu
ZyYgbmV3UGF0aCwgY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRoKTsKIAogcHJpdmF0ZToK
ICAgICBlbnVtIGNsYXNzIFN0b3JhZ2VCdWNrZXRNb2RlIDogYm9vbDsKQEAgLTYyLDYgKzcyLDcg
QEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZUJ1Y2tldD4gbV9kZWZhdWx0
QnVja2V0OwogICAgIFN0cmluZyBtX3BhdGg7CiAgICAgYm9vbCBtX3BlcnNpc3RlZCB7IGZhbHNl
IH07CisgICAgU3RyaW5nIG1fbG9jYWxTdG9yYWdlUGF0aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWJiZjY2MzYyMmMyZjdkZDY0
Mjk0ZTgzZDdlNjI0ZmJjZGVjZDIzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKQEAgLTAsMCArMSwz
OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
UUxpdGVTdG9yYWdlQXJlYS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVGaWxlU3lzdGVt
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1NRTGl0ZVRyYW5zYWN0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlTWFwLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjb25zdGV4cHIgU2Vjb25kcyB0cmFuc2FjdGlvbkR1
cmF0aW9uIHsgNTAwX21zIH07Citjb25zdGV4cHIgdW5zaWduZWQgbWF4aW11bVNpemVGb3JWYWx1
ZXNLZXB0SW5NZW1vcnkgeyAxICogS0IgfTsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZUl0ZW1UYWJs
ZVN0YXRlbWVudEFsdGVybmF0aXZlID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEl0ZW1U
YWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9U
IE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiX3M7Citjb25zdGV4cHIgYXV0byBjcmVhdGVJdGVtVGFi
bGVTdGF0ZW1lbnQgPSAiQ1JFQVRFIFRBQkxFIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9O
IENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCki
X3M7CisKK0FTQ0lJTGl0ZXJhbCBTUUxpdGVTdG9yYWdlQXJlYTo6c3RhdGVtZW50U3RyaW5nKFN0
YXRlbWVudFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IFN0YXRlbWVudFR5cGU6OkNvdW50SXRlbXM6CisgICAgICAgIHJldHVybiAiU0VMRUNUIENPVU5U
KCopIEZST00gSXRlbVRhYmxlIl9zOworICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6RGVsZXRlSXRl
bToKKyAgICAgICAgcmV0dXJuICJERUxFVEUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iX3M7
CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpEZWxldGVBbGxJdGVtczoKKyAgICAgICAgcmV0dXJu
ICJERUxFVEUgRlJPTSBJdGVtVGFibGUiX3M7CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpHZXRJ
dGVtOgorICAgICAgICByZXR1cm4gIlNFTEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBr
ZXk9PyJfczsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OkdldEFsbEl0ZW1zOgorICAgICAgICBy
ZXR1cm4gIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIl9zOworICAgIGNhc2UgU3Rh
dGVtZW50VHlwZTo6U2V0SXRlbToKKyAgICAgICAgcmV0dXJuICJJTlNFUlQgSU5UTyBJdGVtVGFi
bGUgVkFMVUVTICg/LCA/KSJfczsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OkludmFsaWQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAiIl9zOworfQorCitTUUxpdGVTdG9yYWdlQXJlYTo6U1FMaXRlU3RvcmFnZUFyZWEodW5z
aWduZWQgcXVvdGEsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBjb25zdCBT
dHJpbmcmIHBhdGgsIFJlZjxXb3JrUXVldWU+JiYgd29ya1F1ZXVlKQorICAgIDogU3RvcmFnZUFy
ZWFCYXNlKHF1b3RhLCBvcmlnaW4pCisgICAgLCBtX3BhdGgocGF0aCkKKyAgICAsIG1fcXVldWUo
V1RGTW92ZSh3b3JrUXVldWUpKQoreworICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZW1lbnRU
eXBlOjpJbnZhbGlkKTsgKytpKQorICAgICAgICBtX2NhY2hlZFN0YXRlbWVudHMuYXBwZW5kKG51
bGxwdHIpOworfQorCit2b2lkIFNRTGl0ZVN0b3JhZ2VBcmVhOjpjbG9zZSgpCit7CisgICAgQVNT
RVJUKCFpc01haW5SdW5Mb29wKCkpOworCisgICAgbV9jYWNoZSA9IHN0ZDo6bnVsbG9wdDsKKyAg
ICBjb21taXRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KFN0YXRlbWVudFR5cGU6OkludmFsaWQpOyArK2kpCisg
ICAgICAgIG1fY2FjaGVkU3RhdGVtZW50c1tpXSA9IG51bGxwdHI7CisgICAgbV9kYXRhYmFzZSA9
IG51bGxwdHI7Cit9CisKK1NRTGl0ZVN0b3JhZ2VBcmVhOjp+U1FMaXRlU3RvcmFnZUFyZWEoKQor
eworICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKKworICAgIGJvb2wgZGF0YWJhc2VJc0Vt
cHR5ID0gaXNFbXB0eSgpOworICAgIGNsb3NlKCk7CisgICAgaWYgKGRhdGFiYXNlSXNFbXB0eSkK
KyAgICAgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKG1f
cGF0aCk7Cit9CisKK2Jvb2wgU1FMaXRlU3RvcmFnZUFyZWE6OmlzRW1wdHkoKQoreworICAgIEFT
U0VSVCghaXNNYWluUnVuTG9vcCgpKTsKKworICAgIGlmIChtX2NhY2hlKQorICAgICAgICByZXR1
cm4gbV9jYWNoZS0+aXNFbXB0eSgpOworCisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBhdXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVu
dChTdGF0ZW1lbnRUeXBlOjpDb3VudEl0ZW1zKTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCBzdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6aXNFbXB0eSBmYWlsZWQgb24gZXhlY3V0aW5n
IHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFz
ZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gIXN0YXRlbWVudC0+Y29sdW1uSW50KDApOworfQorCit2b2lkIFNRTGl0ZVN0b3JhZ2VB
cmVhOjpjbGVhcigpCit7CisgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOworCisgICAgY2xv
c2UoKTsKKyAgICBXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUo
bV9wYXRoKTsKKyAgICBub3RpZnlMaXN0ZW5lcnNBYm91dENsZWFyKCk7Cit9CisKK2Jvb2wgU1FM
aXRlU3RvcmFnZUFyZWE6OmNyZWF0ZVRhYmxlSWZOZWNlc3NhcnkoKQoreworICAgIGlmICghbV9k
YXRhYmFzZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5nIHN0YXRlbWVudCA9
IG1fZGF0YWJhc2UtPnRhYmxlU1FMKCJJdGVtVGFibGUiX3MpOworICAgIGlmIChzdGF0ZW1lbnQg
PT0gY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50IHx8IHN0YXRlbWVudCA9PSBjcmVhdGVJdGVtVGFi
bGVTdGF0ZW1lbnRBbHRlcm5hdGl2ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBU
YWJsZSBleGlzdHMgYnV0IHN0YXRlbWVudCBpcyB3cm9uZzsgZHJvcCBpdC4KKyAgICBpZiAoIXN0
YXRlbWVudC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFtX2RhdGFiYXNlLT5leGVjdXRlQ29t
bWFuZCgiRFJPUCBUQUJMRSBJdGVtVGFibGUiX3MpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmNyZWF0ZVRhYmxlSWZOZWNlc3Nh
cnkgZmFpbGVkIHRvIGRyb3AgZXhpc3RpbmcgaXRlbSB0YWJsZSAoJWQpIC0gJXMiLCBtX2RhdGFi
YXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGFibGUgZG9lcyBu
b3QgZXhpc3QuCisgICAgaWYgKCFtX2RhdGFiYXNlLT5leGVjdXRlQ29tbWFuZChjcmVhdGVJdGVt
VGFibGVTdGF0ZW1lbnQpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJT
UUxpdGVTdG9yYWdlQXJlYTo6Y3JlYXRlVGFibGVJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gY3JlYXRl
IGl0ZW0gdGFibGUgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJh
c2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFNRTGl0ZVN0b3JhZ2VBcmVhOjpwcmVwYXJlRGF0YWJh
c2UoKQoreworICAgIGlmIChtX2RhdGFiYXNlICYmIG1fZGF0YWJhc2UtPmlzT3BlbigpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1fZGF0YWJhc2UgPSBtYWtlVW5pcXVlPFdlYkNvcmU6
OlNRTGl0ZURhdGFiYXNlPigpOworICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbihtX3BhdGgpKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6
cHJlcGFyZURhdGFiYXNlIGZhaWxlZCB0byBvcGVuIGRhdGFiYXNlIGF0ICclcyciLCBtX3BhdGgu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1fZGF0YWJhc2UgPSBudWxscHRyOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKKyAgICAvLyBTaW5jZSBhIFdvcmtRdWV1ZSBp
c24ndCBib3VuZCB0byBhIHNwZWNpZmljIHRocmVhZCwgd2UgbmVlZCB0byBkaXNhYmxlIHRocmVh
ZGluZyBjaGVjay4KKyAgICAvLyBXZSB3aWxsIG5ldmVyIGFjY2VzcyB0aGUgZGF0YWJhc2UgZnJv
bSBkaWZmZXJlbnQgdGhyZWFkcyBzaW11bHRhbmVvdXNseS4KKyAgICBtX2RhdGFiYXNlLT5kaXNh
YmxlVGhyZWFkaW5nQ2hlY2tzKCk7CisKKyAgICBpZiAoIWNyZWF0ZVRhYmxlSWZOZWNlc3Nhcnko
KSkgeworICAgICAgICBtX2RhdGFiYXNlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmIChxdW90YSgpICE9IFdlYkNvcmU6OlN0b3JhZ2VNYXA6Om5vUXVv
dGEpCisgICAgICAgIG1fZGF0YWJhc2UtPnNldE1heGltdW1TaXplKHF1b3RhKCkpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1FMaXRlU3RvcmFnZUFyZWE6OnN0YXJ0VHJhbnNhY3Rp
b25JZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uKQorICAgICAgICBtX3Ry
YW5zYWN0aW9uID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbj4oKm1fZGF0
YWJhc2UpOworCisgICAgaWYgKG1fdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV90cmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICBtX3F1ZXVlLT5kaXNw
YXRjaEFmdGVyKHRyYW5zYWN0aW9uRHVyYXRpb24sIFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhp
cyB9XSB7CisgICAgICAgIGlmICghd2Vha1RoaXMgfHwgIXdlYWtUaGlzLT5tX3RyYW5zYWN0aW9u
KQorICAgICAgICAgICAgcmV0dXJuOworICAgIAorICAgICAgICBhdXRvIHRyYW5zYWN0aW9uID0g
c3RkOjpleGNoYW5nZSh3ZWFrVGhpcy0+bV90cmFuc2FjdGlvbiwgbnVsbHB0cik7CisgICAgICAg
IHRyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICB9KTsKK30KKworV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50QXV0b1Jlc2V0U2NvcGUgU1FMaXRlU3RvcmFnZUFyZWE6OmNhY2hlZFN0YXRlbWVudChT
dGF0ZW1lbnRUeXBlIHR5cGUpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIEFTU0VS
VCh0eXBlIDwgU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7CisKKyAgICBhdXRvIGluZGV4ID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4odHlwZSk7CisgICAgaWYgKCFtX2NhY2hlZFN0YXRlbWVudHNbaW5k
ZXhdKSB7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IG1fZGF0YWJhc2UtPnByZXBhcmVIZWFw
U3RhdGVtZW50KHN0YXRlbWVudFN0cmluZyh0eXBlKSkpCisgICAgICAgICAgICBtX2NhY2hlZFN0
YXRlbWVudHNbaW5kZXhdID0gcmVzdWx0LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAg
fQorCisgICAgcmV0dXJuIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsg
bV9jYWNoZWRTdGF0ZW1lbnRzW2luZGV4XS5nZXQoKSB9OworfQorCitFeHBlY3RlZDxTdHJpbmcs
IFN0b3JhZ2VFcnJvcj4gU1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBr
ZXkpCit7CisgICAgaWYgKG1fY2FjaGUpIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fY2Fj
aGUtPmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fY2FjaGUtPmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIGlmICghaXRlcmF0b3ItPnZh
bHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZ2V0SXRlbUZyb21EYXRhYmFzZShrZXkpOworfQorCitFeHBlY3RlZDxT
dHJpbmcsIFN0b3JhZ2VFcnJvcj4gU1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJh
c2UoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworCisg
ICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZTo6R2V0SXRl
bSk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBrZXkpKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6
Z2V0SXRlbUZyb21EYXRhYmFzZSBmYWlsZWQgb24gY3JlYXRpbmcgc3RhdGVtZW50ICglZCkgLSAl
cyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsK
KyAgICB9CisKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgaWYgKHJl
c3VsdCA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gc3RhdGVtZW50LT5jb2x1bW5CbG9i
QXNTdHJpbmcoMCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW1Gcm9t
RGF0YWJhc2UgZmFpbGVkIG9uIHN0ZXBwaW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFi
YXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6SXRlbU5vdEZvdW5kKTsKK30K
KworSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gU1FMaXRlU3RvcmFnZUFyZWE6OmFsbEl0ZW1zKCkK
K3sKKyAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CisKKyAgICBpZiAoIXByZXBhcmVEYXRh
YmFzZSgpKQorICAgICAgICByZXR1cm4gSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4geyB9OworCisg
ICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaXRlbXM7CisgICAgaWYgKG1fY2FjaGUpIHsKKyAg
ICAgICAgaXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NhY2hlLT5zaXplKCkpOworICAg
ICAgICBmb3IgKGF1dG8mIFtrZXksIHZhbHVlXSA6ICptX2NhY2hlKSB7CisgICAgICAgICAgICBp
ZiAoIXZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgaXRlbXMuYWRkKGtleSwgdmFs
dWUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoYXV0byByZXN1bHQgPSBnZXRJdGVtRnJvbURhdGFiYXNlKGtleSkpCisgICAgICAg
ICAgICAgICAgaXRlbXMuYWRkKGtleSwgcmVzdWx0LnZhbHVlKCkpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBpdGVtczsKKyAgICB9CisKKyAgICAvLyBJbXBvcnQgZnJvbSBkYXRhYmFzZS4K
KyAgICBhdXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlOjpHZXRB
bGxJdGVtcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRBbGxJdGVtcyBmYWlsZWQgb24gY3Jl
YXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2Rh
dGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisg
ICAgbV9jYWNoZSA9IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsgfTsKKyAgICBpbnQgcmVzdWx0
ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7
CisgICAgICAgIFN0cmluZyBrZXkgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMCk7CisgICAgICAg
IFN0cmluZyB2YWx1ZSA9IHN0YXRlbWVudC0+Y29sdW1uQmxvYkFzU3RyaW5nKDEpOworICAgICAg
ICBpZiAoIWtleS5pc051bGwoKSAmJiAhdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1f
Y2FjaGUtPmFkZChrZXksIHZhbHVlLnNpemVJbkJ5dGVzKCkgPiBtYXhpbXVtU2l6ZUZvclZhbHVl
c0tlcHRJbk1lbW9yeSA/IFN0cmluZygpIDogdmFsdWUpOworICAgICAgICAgICAgaXRlbXMuYWRk
KFdURk1vdmUoa2V5KSwgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICB9CisKKyAgICAgICAgcmVz
dWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgfQorCisgICAgaWYgKHJlc3VsdCAhPSBTUUxJ
VEVfRE9ORSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3Jh
Z2VBcmVhOjpnZXRBbGxJdGVtcyBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRlbWVudCAoJWQpIC0g
JXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkp
OworCisgICAgcmV0dXJuIGl0ZW1zOworfQorCitFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+
IFNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29u
bmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUltcGxJRCwgU3Ry
aW5nJiYga2V5LCBTdHJpbmcmJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7Cisg
ICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOworCisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2Uo
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2Up
OworCisgICAgc3RhcnRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBTdHJpbmcgb2xk
VmFsdWU7CisgICAgaWYgKGF1dG8gdmFsdWVPckVycm9yID0gZ2V0SXRlbShrZXkpKQorICAgICAg
ICBvbGRWYWx1ZSA9IHZhbHVlT3JFcnJvci52YWx1ZSgpOworCisgICAgYXV0byBzdGF0ZW1lbnQg
PSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZTo6U2V0SXRlbSk7CisgICAgaWYgKCFzdGF0
ZW1lbnQgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBrZXkpIHx8IHN0YXRlbWVudC0+YmluZEJs
b2IoMiwgdmFsdWUpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxp
dGVTdG9yYWdlQXJlYTo6c2V0SXRlbSBmYWlsZWQgb24gY3JlYXRpbmcgc3RhdGVtZW50ICglZCkg
LSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNl
KTsKKyAgICB9CisKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgaWYg
KHJlc3VsdCA9PSBTUUxJVEVfRlVMTCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0
b3JhZ2VFcnJvcjo6UXVvdGFFeGNlZWRlZCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFy
ZWE6OnNldEl0ZW0gZmFpbGVkIG9uIHN0ZXBwaW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2Rh
dGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQor
CisgICAgZGlzcGF0Y2hFdmVudHMoY29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIGtleSwg
b2xkVmFsdWUsIHZhbHVlLCB1cmxTdHJpbmcpOworCisgICAgaWYgKG1fY2FjaGUpCisgICAgICAg
IG1fY2FjaGUtPnNldChXVEZNb3ZlKGtleSksIHZhbHVlLnNpemVJbkJ5dGVzKCkgPiBtYXhpbXVt
U2l6ZUZvclZhbHVlc0tlcHRJbk1lbW9yeSA/IFN0cmluZygpIDogV1RGTW92ZSh2YWx1ZSkpOwor
CisgICAgcmV0dXJuIHsgfTsKK30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBTUUxp
dGVTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5l
Y3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBBU1NFUlQoIWlz
TWFpblJ1bkxvb3AoKSk7CisKKyAgICBpZiAoIXByZXBhcmVEYXRhYmFzZSgpKQorICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisKKyAgICBzdGFy
dFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKyAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgaWYg
KGF1dG8gdmFsdWVPckVycm9yID0gZ2V0SXRlbShrZXkpKQorICAgICAgICBvbGRWYWx1ZSA9IHZh
bHVlT3JFcnJvci52YWx1ZSgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKFN0b3JhZ2VFcnJvcjo6SXRlbU5vdEZvdW5kKTsKKworICAgIGF1dG8gc3RhdGVtZW50ID0g
Y2FjaGVkU3RhdGVtZW50KFN0YXRlbWVudFR5cGU6OkRlbGV0ZUl0ZW0pOworICAgIGlmICghc3Rh
dGVtZW50IHx8IHN0YXRlbWVudC0+YmluZFRleHQoMSwga2V5KSB8fCBzdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAi
U1FMaXRlU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0gZmFpbGVkIG9uIGV4ZWN1dGluZyBzdGF0ZW1l
bnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6
RGF0YWJhc2UpOworICAgIH0KKworICAgIGRpc3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24sIHN0b3Jh
Z2VBcmVhSW1wbElELCBrZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsKKworICAg
IGlmIChtX2NhY2hlKQorICAgICAgICBtX2NhY2hlLT5yZW1vdmUoa2V5KTsKKworICAgIHJldHVy
biB7IH07Cit9CisKK0V4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gU1FMaXRlU3RvcmFnZUFy
ZWE6OmNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFy
ZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcpCit7CisgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOworCisgICAgaWYgKCFwcmVwYXJl
RGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6
RGF0YWJhc2UpOworCisgICAgaWYgKG1fY2FjaGUgJiYgbV9jYWNoZS0+aXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpJdGVtTm90Rm91bmQpOwor
CisgICAgaWYgKG1fY2FjaGUpCisgICAgICAgIG1fY2FjaGUtPmNsZWFyKCk7CisKKyAgICBzdGFy
dFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0
YXRlbWVudChTdGF0ZW1lbnRUeXBlOjpEZWxldGVBbGxJdGVtcyk7CisgICAgaWYgKCFzdGF0ZW1l
bnQgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpjbGVhciBmYWlsZWQgb24g
ZXhlY3V0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwg
bV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgaWYgKG1fZGF0YWJhc2Ut
Pmxhc3RDaGFuZ2VzKCkgPD0gMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3Jh
Z2VFcnJvcjo6SXRlbU5vdEZvdW5kKTsKKworICAgIGRpc3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24s
IHN0b3JhZ2VBcmVhSW1wbElELCBTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCB1cmxTdHJp
bmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y29t
bWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKGF1dG8gdHJhbnNhY3Rpb24g
PSBzdGQ6OmV4Y2hhbmdlKG1fdHJhbnNhY3Rpb24sIG51bGxwdHIpKQorICAgICAgICB0cmFuc2Fj
dGlvbi0+Y29tbWl0KCk7Cit9CisKK3ZvaWQgU1FMaXRlU3RvcmFnZUFyZWE6OmhhbmRsZUxvd01l
bW9yeVdhcm5pbmcoKQoreworICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKKworICAgIGlm
IChtX2RhdGFiYXNlICYmIG1fZGF0YWJhc2UtPmlzT3BlbigpKQorICAgICAgICBtX2RhdGFiYXNl
LT5yZWxlYXNlTWVtb3J5KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFy
ZWEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdl
QXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmU5MDU2YTEzNWFiYzAzMzFiMDNkNDg5OWRhNzcyMWNlNmZiNjM0
OTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvU1FMaXRlU3RvcmFnZUFyZWEuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhQmFzZS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTUUxp
dGVTdG9yYWdlQXJlYSBmaW5hbCA6IHB1YmxpYyBTdG9yYWdlQXJlYUJhc2UgeworcHVibGljOgor
ICAgIFNRTGl0ZVN0b3JhZ2VBcmVhKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGll
bnRPcmlnaW4mLCBjb25zdCBTdHJpbmcmIHBhdGgsIFJlZjxXb3JrUXVldWU+JiYpOworICAgIH5T
UUxpdGVTdG9yYWdlQXJlYSgpOworCisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgaGFuZGxl
TG93TWVtb3J5V2FybmluZygpOworICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2Fy
eSgpOworCitwcml2YXRlOgorICAgIC8vIFN0b3JhZ2VBcmVhQmFzZQorICAgIFR5cGUgdHlwZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIFN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6U1FMaXRlOyB9Owor
ICAgIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU3RvcmFn
ZUFyZWFCYXNlOjpTdG9yYWdlVHlwZTo6TG9jYWw7IH07CisgICAgYm9vbCBpc0VtcHR5KCkgZmlu
YWw7CisgICAgdm9pZCBjbGVhcigpIGZpbmFsOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
IGFsbEl0ZW1zKCkgZmluYWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBzZXRJ
dGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIs
IFN0cmluZyYmIGtleSwgU3RyaW5nJiYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBm
aW5hbDsKKyAgICBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IHJlbW92ZUl0ZW0oSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2
b2lkLCBTdG9yYWdlRXJyb3I+IGNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3Jh
Z2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKwor
ICAgIGJvb2wgY3JlYXRlVGFibGVJZk5lY2Vzc2FyeSgpOworICAgIGJvb2wgcHJlcGFyZURhdGFi
YXNlKCk7CisgICAgdm9pZCBzdGFydFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGVu
dW0gY2xhc3MgU3RhdGVtZW50VHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBDb3VudEl0ZW1zLAor
ICAgICAgICBEZWxldGVJdGVtLAorICAgICAgICBEZWxldGVBbGxJdGVtcywKKyAgICAgICAgR2V0
SXRlbSwKKyAgICAgICAgR2V0QWxsSXRlbXMsCisgICAgICAgIFNldEl0ZW0sCisgICAgICAgIElu
dmFsaWQKKyAgICB9OworICAgIEFTQ0lJTGl0ZXJhbCBzdGF0ZW1lbnRTdHJpbmcoU3RhdGVtZW50
VHlwZSkgY29uc3Q7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUg
Y2FjaGVkU3RhdGVtZW50KFN0YXRlbWVudFR5cGUpOworICAgIEV4cGVjdGVkPFN0cmluZywgU3Rv
cmFnZUVycm9yPiBnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KTsKKyAgICBFeHBlY3RlZDxTdHJp
bmcsIFN0b3JhZ2VFcnJvcj4gZ2V0SXRlbUZyb21EYXRhYmFzZShjb25zdCBTdHJpbmcmIGtleSk7
CisKKyAgICBTdHJpbmcgbV9wYXRoOworICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiBtX2RhdGFiYXNlOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlv
bjsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4+
IG1fY2FjaGVkU3RhdGVtZW50czsKKyAgICBzdGQ6Om9wdGlvbmFsPEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+PiBtX2NhY2hlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYSkKKyAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2UmIGFyZWEpIHsgcmV0
dXJuIGFyZWEudHlwZSgpID09IFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlOjpUeXBlOjpTUUxpdGU7
IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlTWFuYWdlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDBmZDc5NjBhYzVkYjY3NjU5ZTJkNzM5MTdkZjI2YjRjMDczZmQzMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9T
ZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlTWFuYWdlci5oIgor
CisjaW5jbHVkZSAiTWVtb3J5U3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVJl
Z2lzdHJ5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTZXNzaW9uU3RvcmFnZU1hbmFnZXI6
OlNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKKyAg
ICA6IG1fcmVnaXN0cnkocmVnaXN0cnkpCit7Cit9CisKK2Jvb2wgU2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6YW55T2YobV9zdG9yYWdl
QXJlYXMudmFsdWVzKCksIFsmXSAoYXV0byYgc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgcmV0dXJu
IHN0b3JhZ2VBcmVhLT5oYXNMaXN0ZW5lcnMoKTsKKyAgICB9KTsKK30KKworYm9vbCBTZXNzaW9u
U3RvcmFnZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdU
Rjo6YW55T2YobV9zdG9yYWdlQXJlYXMudmFsdWVzKCksIFsmXSAoYXV0byYgc3RvcmFnZUFyZWEp
IHsKKyAgICAgICAgcmV0dXJuICFzdG9yYWdlQXJlYS0+aXNFbXB0eSgpOworICAgIH0pOworfQor
Cit2b2lkIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y2xlYXJEYXRhKCkKK3sKKyAgICBmb3IgKGF1
dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYXMudmFsdWVzKCkpCisgICAgICAgIHN0b3Jh
Z2VBcmVhLT5jbGVhcigpOworfQorCit2b2lkIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y29ubmVj
dGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24pCit7CisgICAg
Zm9yIChhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpKQorICAgICAg
ICBzdG9yYWdlQXJlYS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7Cit9CisKK1N0b3JhZ2VB
cmVhSWRlbnRpZmllciBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmFkZFN0b3JhZ2VBcmVhKHN0ZDo6
dW5pcXVlX3B0cjxNZW1vcnlTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEsIElQQzo6Q29ubmVjdGlv
bjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgbmFtZXNw
YWNlSWRlbnRpZmllcikKK3sKKyAgICBhdXRvIGlkZW50aWZpZXIgPSBzdG9yYWdlQXJlYS0+aWRl
bnRpZmllcigpOworICAgIG1fcmVnaXN0cnkucmVnaXN0ZXJTdG9yYWdlQXJlYShpZGVudGlmaWVy
LCAqc3RvcmFnZUFyZWEpOworICAgIHN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25uZWN0aW9u
KTsKKyAgICBtX3N0b3JhZ2VBcmVhc0J5TmFtZXNwYWNlLmFkZChuYW1lc3BhY2VJZGVudGlmaWVy
LCBpZGVudGlmaWVyKTsKKyAgICBtX3N0b3JhZ2VBcmVhcy5hZGQoaWRlbnRpZmllciwgV1RGTW92
ZShzdG9yYWdlQXJlYSkpOworCisgICAgcmV0dXJuIGlkZW50aWZpZXI7Cit9CisKK1N0b3JhZ2VB
cmVhSWRlbnRpZmllciBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RUb1Nlc3Npb25TdG9y
YWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNv
cmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBuYW1l
c3BhY2VJZGVudGlmaWVyKQoreworICAgIGF1dG8gaWRlbnRpZmllciA9IG1fc3RvcmFnZUFyZWFz
QnlOYW1lc3BhY2UuZ2V0KG5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIGlmIChpZGVudGlmaWVy
LmlzVmFsaWQoKSkgeworICAgICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYXMuY29udGFpbnMoaWRl
bnRpZmllcikpOworICAgICAgICByZXR1cm4gaWRlbnRpZmllcjsKKyAgICB9CisKKyAgICBhdXRv
IG5ld1N0b3JhZ2VBcmVhID0gbWFrZVVuaXF1ZTxNZW1vcnlTdG9yYWdlQXJlYT4ob3JpZ2luKTsK
KyAgICByZXR1cm4gYWRkU3RvcmFnZUFyZWEoV1RGTW92ZShuZXdTdG9yYWdlQXJlYSksIGNvbm5l
Y3Rpb24sIG5hbWVzcGFjZUlkZW50aWZpZXIpOworfQorCit2b2lkIFNlc3Npb25TdG9yYWdlTWFu
YWdlcjo6ZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlE
IGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIGlm
IChhdXRvKiBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFzLmdldChpZGVudGlmaWVyKSkKKyAg
ICAgICAgc3RvcmFnZUFyZWEtPnJlbW92ZUxpc3RlbmVyKGNvbm5lY3Rpb24pOworfQorCit2b2lk
IFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y2xvbmVTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHNvdXJjZU5h
bWVzcGFjZUlkZW50aWZpZXIsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHRhcmdldE5hbWVz
cGFjZUlkZW50aWZpZXIpCit7CisgICAgYXV0byBpZGVudGlmaWVyID0gbV9zdG9yYWdlQXJlYXNC
eU5hbWVzcGFjZS5nZXQoc291cmNlTmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAgaWYgKCFpZGVu
dGlmaWVyLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8gaXRlcmF0
b3IgPSBtX3N0b3JhZ2VBcmVhcy5maW5kKGlkZW50aWZpZXIpOyBpdGVyYXRvciAhPSBtX3N0b3Jh
Z2VBcmVhcy5lbmQoKSkgeworICAgICAgICBhdXRvIG5ld1N0b3JhZ2VBcmVhID0gaXRlcmF0b3It
PnZhbHVlLT5jbG9uZSgpOworICAgICAgICBhZGRTdG9yYWdlQXJlYShXVEZNb3ZlKG5ld1N0b3Jh
Z2VBcmVhKSwgY29ubmVjdGlvbiwgdGFyZ2V0TmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAgfQor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zZGNjNjlkN2VkNzUxYzFjMTdhN2NhZmYyNGZjMTkzZjc5NjQzMjI0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1Nlc3Npb25TdG9y
YWdlTWFuYWdlci5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VO
YW1lc3BhY2VJZGVudGlmaWVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBNZW1v
cnlTdG9yYWdlQXJlYTsKK2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnk7CisKK2NsYXNzIFNlc3Np
b25TdG9yYWdlTWFuYWdlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkm
KTsKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgYm9vbCBoYXNEYXRhSW5NZW1vcnko
KSBjb25zdDsKKyAgICB2b2lkIGNsZWFyRGF0YSgpOworICAgIHZvaWQgY29ubmVjdGlvbkNsb3Nl
ZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKKworICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmll
ciBjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwg
Y29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIp
OworICAgIHZvaWQgZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVu
aXF1ZUlELCBTdG9yYWdlQXJlYUlkZW50aWZpZXIpOworICAgIHZvaWQgY2xvbmVTdG9yYWdlQXJl
YShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwg
U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIpOworCitwcml2YXRlOgorICAgIFN0b3JhZ2VBcmVh
SWRlbnRpZmllciBhZGRTdG9yYWdlQXJlYShzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFy
ZWE+LCBJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmll
cik7CisKKyAgICBTdG9yYWdlQXJlYVJlZ2lzdHJ5JiBtX3JlZ2lzdHJ5OworICAgIEhhc2hNYXA8
U3RvcmFnZUFyZWFJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+
PiBtX3N0b3JhZ2VBcmVhczsKKyAgICBIYXNoTWFwPFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVy
LCBTdG9yYWdlQXJlYUlkZW50aWZpZXI+IG1fc3RvcmFnZUFyZWFzQnlOYW1lc3BhY2U7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0
NGJhMDEzNWE2NDNjMDFhNWI5MDBjNzYzMWJhMTQ5OThmOGYzYzEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmNw
cApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU3RvcmFnZUFyZWFCYXNlLmgiCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYU1h
cE1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTdG9yYWdlQXJlYUJhc2U6OlN0
b3JhZ2VBcmVhQmFzZSh1bnNpZ25lZCBxdW90YSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiBvcmlnaW4pCisgICAgOiBtX2lkZW50aWZpZXIoU3RvcmFnZUFyZWFJZGVudGlmaWVyOjpnZW5l
cmF0ZSgpKQorICAgICwgbV9xdW90YShxdW90YSkKKyAgICAsIG1fb3JpZ2luKG9yaWdpbikKK3sK
K30KKworU3RvcmFnZUFyZWFCYXNlOjp+U3RvcmFnZUFyZWFCYXNlKCkgPSBkZWZhdWx0OworCit2
b2lkIFN0b3JhZ2VBcmVhQmFzZTo6YWRkTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJ
RCBjb25uZWN0aW9uKQoreworICAgIEFTU0VSVCghbV9saXN0ZW5lcnMuY29udGFpbnMoY29ubmVj
dGlvbikpOworCisgICAgbV9saXN0ZW5lcnMuYWRkKGNvbm5lY3Rpb24pOworfQorCit2b2lkIFN0
b3JhZ2VBcmVhQmFzZTo6cmVtb3ZlTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBj
b25uZWN0aW9uKQoreworICAgIG1fbGlzdGVuZXJzLnJlbW92ZShjb25uZWN0aW9uKTsKK30KKwor
Ym9vbCBTdG9yYWdlQXJlYUJhc2U6Omhhc0xpc3RlbmVycygpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICFtX2xpc3RlbmVycy5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFCYXNlOjpub3Rp
ZnlMaXN0ZW5lcnNBYm91dENsZWFyKCkKK3sKKyAgICBmb3IgKGF1dG8mIGNvbm5lY3Rpb24gOiBt
X2xpc3RlbmVycykKKyAgICAgICAgSVBDOjpDb25uZWN0aW9uOjpzZW5kKGNvbm5lY3Rpb24sIE1l
c3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6Q2xlYXJDYWNoZSgpLCBtX2lkZW50aWZpZXIudG9VSW50
NjQoKSk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFCYXNlOjpkaXNwYXRjaEV2ZW50cyhJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50
aWZpZXIgc291cmNlSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0
cmluZykgY29uc3QKK3sKKyAgICBBU1NFUlQoc291cmNlSW1wbElkZW50aWZpZXIpOworCisgICAg
Zm9yIChhdXRvJiBjb25uZWN0aW9uIDogbV9saXN0ZW5lcnMpIHsKKyAgICAgICAgc3RkOjpvcHRp
b25hbDxTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyPiBpbXBsSWRlbnRpZmllcjsKKyAgICAgICAg
aWYgKGNvbm5lY3Rpb24gPT0gc291cmNlQ29ubmVjdGlvbikKKyAgICAgICAgICAgIGltcGxJZGVu
dGlmaWVyID0gc291cmNlSW1wbElkZW50aWZpZXI7CisgICAgICAgIElQQzo6Q29ubmVjdGlvbjo6
c2VuZChjb25uZWN0aW9uLCBNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpc3BhdGNoU3RvcmFn
ZUV2ZW50KGltcGxJZGVudGlmaWVyLCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgdXJsU3RyaW5n
KSwgbV9pZGVudGlmaWVyLnRvVUludDY0KCkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
U3RvcmFnZUFyZWFCYXNlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
U3RvcmFnZUFyZWFCYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWQzZWQxNDIwNmUxNzVkY2FjYzhjMWY5OTQ5
MDc1MDU0NWUzNGU5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuaApAQCAtMCwwICsxLDgzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNs
dWRlICJTdG9yYWdlQXJlYUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGxJ
ZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KKyNpbmNsdWRl
IDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgQ2xpZW50T3Jp
Z2luOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBjbGFzcyBTdG9yYWdlRXJyb3Ig
OiB1aW50OF90IHsKKyAgICBEYXRhYmFzZSwKKyAgICBJdGVtTm90Rm91bmQsCisgICAgUXVvdGFF
eGNlZWRlZCwKK307CisKK2NsYXNzIFN0b3JhZ2VBcmVhQmFzZSA6IHB1YmxpYyBDYW5NYWtlV2Vh
a1B0cjxTdG9yYWdlQXJlYUJhc2U+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdG9yYWdl
QXJlYUJhc2UpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZp
cnR1YWwgflN0b3JhZ2VBcmVhQmFzZSgpOworCisgICAgZW51bSBjbGFzcyBUeXBlIDogYm9vbCB7
IFNRTGl0ZSwgTWVtb3J5IH07CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7Cisg
ICAgZW51bSBjbGFzcyBTdG9yYWdlVHlwZSA6IGJvb2wgeyBTZXNzaW9uLCBMb2NhbCB9OworICAg
IHZpcnR1YWwgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBib29sIGlzRW1wdHkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOworCisg
ICAgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lk
ZW50aWZpZXI7IH0KKyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcmlnaW47IH0KKyAgICB1bnNpZ25lZCBxdW90YSgpIGNvbnN0IHsgcmV0dXJuIG1f
cXVvdGE7IH0KKyAgICB2b2lkIGFkZExpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQp
OworICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7Cisg
ICAgYm9vbCBoYXNMaXN0ZW5lcnMoKSBjb25zdDsKKyAgICB2b2lkIG5vdGlmeUxpc3RlbmVyc0Fi
b3V0Q2xlYXIoKTsKKworICAgIHZpcnR1YWwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gYWxsSXRl
bXMoKSA9IDA7CisgICAgdmlydHVhbCBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IHNldEl0
ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwg
U3RyaW5nJiYga2V5LCBTdHJpbmcmJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpID0g
MDsKKyAgICB2aXJ0dWFsIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gcmVtb3ZlSXRlbShJ
UEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpID0gMDsKKyAgICB2aXJ0dWFs
IEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gY2xlYXIoSVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
ID0gMDsKKworcHJvdGVjdGVkOgorICAgIFN0b3JhZ2VBcmVhQmFzZSh1bnNpZ25lZCBxdW90YSwg
Y29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50cyhJ
UEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdW
YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0
b3JhZ2VBcmVhSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisgICAgdW5zaWduZWQgbV9xdW90YTsK
KyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gbV9vcmlnaW47CisgICAgSGFzaFNldDxJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlEPiBtX2xpc3RlbmVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0
b3JhZ2VBcmVhUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkZDE0YzZmNTBjOTQ2YTRj
ZTRkODUwMDM5NjFkM2ZmYzZiOWNiNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdG9y
YWdlQXJlYVJlZ2lzdHJ5LmgiCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUJhc2UuaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1N0b3JhZ2VBcmVhUmVnaXN0cnk6OlN0b3JhZ2VBcmVhUmVnaXN0
cnkoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgU3RvcmFnZUFyZWFSZWdpc3RyeTo6cmVnaXN0ZXJTdG9y
YWdlQXJlYShTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgU3RvcmFnZUFyZWFCYXNl
JiBzdG9yYWdlQXJlYSkKK3sKKyAgICBBU1NFUlQoIW1fc3RvcmFnZUFyZWFzLmNvbnRhaW5zKGlk
ZW50aWZpZXIpKTsKKworICAgIG1fc3RvcmFnZUFyZWFzLmFkZChpZGVudGlmaWVyLCBzdG9yYWdl
QXJlYSk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFSZWdpc3RyeTo6dW5yZWdpc3RlclN0b3JhZ2VB
cmVhKFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIEFTU0VSVChtX3N0
b3JhZ2VBcmVhcy5jb250YWlucyhpZGVudGlmaWVyKSk7CisKKyAgICBtX3N0b3JhZ2VBcmVhcy5y
ZW1vdmUoaWRlbnRpZmllcik7Cit9CisKK1N0b3JhZ2VBcmVhQmFzZSogU3RvcmFnZUFyZWFSZWdp
c3RyeTo6Z2V0U3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7
CisgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWFzLmdldChpZGVudGlmaWVyKS5nZXQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MGNj
NzQyMzc2NTJmNWMxNjdjNjhiZTFmNmEyYjZjYzRlZWU0M2Y0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnku
aApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJTdG9yYWdlQXJlYUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU3RvcmFnZUFyZWFCYXNlOworCitjbGFzcyBTdG9y
YWdlQXJlYVJlZ2lzdHJ5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBTdG9yYWdlQXJlYVJlZ2lzdHJ5KCk7CisgICAgdm9pZCByZWdpc3RlclN0b3JhZ2VBcmVh
KFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgU3RvcmFnZUFyZWFCYXNlJik7CisgICAgdm9pZCB1bnJl
Z2lzdGVyU3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVyKTsKKyAgICBTdG9yYWdlQXJl
YUJhc2UqIGdldFN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhSWRlbnRpZmllcik7CisKK3ByaXZhdGU6
CisgICAgSGFzaE1hcDxTdG9yYWdlQXJlYUlkZW50aWZpZXIsIFdlYWtQdHI8U3RvcmFnZUFyZWFC
YXNlPj4gbV9zdG9yYWdlQXJlYXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy9nZW5lcmF0ZS11bmlmaWVkLXNvdXJjZXMuc2gg
Yi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtdW5pZmllZC1zb3VyY2VzLnNoCmluZGV4
IGI2ZDQwYWQ5ZTk1NDdiZDQwZGU4NWM5Yzg1YTM1YzFlMjVjZGYxOTEuLjRmMWFjODNjYjNhMjI2
ZWNjZDA3ODM5ODM3OTIzY2JjNDRiYWI5MjMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy9nZW5lcmF0ZS11bmlmaWVkLXNvdXJjZXMuc2gKKysrIGIvU291cmNlL1dlYktpdC9TY3Jp
cHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaApAQCAtMTQsNyArMTQsNyBAQCBpZiBbIC16
ICIke0JVSUxEX1NDUklQVFNfRElSfSIgXTsgdGhlbgogICAgIGZpCiBmaQogCi1VbmlmaWVkU291
cmNlQ3BwRmlsZUNvdW50PTExMQorVW5pZmllZFNvdXJjZUNwcEZpbGVDb3VudD0xMTIKIFVuaWZp
ZWRTb3VyY2VNbUZpbGVDb3VudD04MAogCiBpZiBbICQjIC1lcSAwIF07IHRoZW4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0
CmluZGV4IDA1YTg1YjAxOTYwNDIwMTZhYjY4NWYyMGQ0YmVmNzNjNDYyNjU2MDcuLjQyZmI2MWIx
Nzc1MWUxMTk3MzJmYWFiMjZlMTU4YTUyNjM1NTM1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMTQzLDgg
KzE0MywxNCBAQCBOZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2VyL1dlYlNXU2VydmVyVG9Db250
ZXh0Q29ubmVjdGlvbi5jcHAgQG5vLXVuaWZ5CiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0ZpbGVT
eXN0ZW1TdG9yYWdlTWFuYWdlci5jcHAKIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvRmlsZVN5c3Rl
bVN0b3JhZ2VIYW5kbGUuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0ZpbGVTeXN0ZW1TdG9y
YWdlSGFuZGxlUmVnaXN0cnkuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFn
ZU1hbmFnZXIuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNw
cAogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwCiBOZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcAorTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKK05ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcAorTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdl
QXJlYUJhc2UuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnku
Y3BwCiAKIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3Bw
CiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuY3BwCmluZGV4IGY0MDAwYTZiNzE5MTM1YzM0M2I0Y2QwOWMwMjNhNjhmMmM1
ZTc4NWUuLmIxMWYyZDUzY2ZmYTg1Zjk2ZjI3NDExZDlkMmRiMDdkOTZhMDdjMzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5LmNwcApAQCAtMTU3MiwxNiArMTU3Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKGNvbnN0IFN0cmluZyYgaW5kZXhlZERhdGFiCiAg
ICAgICAgIEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGljTGluayhpbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnksIG9sZFZlcnNpb25EaXJlY3RvcnkpOwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzUHJv
eHk6OmdldExvY2FsU3RvcmFnZURldGFpbHMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9y
aWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICghY2FuU2Vu
ZE1lc3NhZ2UoKSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6R2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhzZXNzaW9uSUQpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cHJl
Y29ubmVjdFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViUGFnZVByb3h5SWRlbnRpZmll
ciB3ZWJQYWdlUHJveHlJRCwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgd2ViUGFnZUlELCBjb25z
dCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIFdlYkNvcmU6OlN0b3JlZENyZWRl
bnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBzdGQ6Om9wdGlvbmFsPE5hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBMYXN0
TmF2aWdhdGlvbldhc0FwcEluaXRpYXRlZCBsYXN0TmF2aWdhdGlvbldhc0FwcEluaXRpYXRlZCkK
IHsKICAgICBpZiAoIXVybC5pc1ZhbGlkKCkgfHwgIXVybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDkwOTc5M2UzNzU2OGMwNDJiMTAwMmEyNmFhMDI3NDc4
NGE5MWU0Y2EuLjcyMmQ5NzMxYTAxMmRlMzRmYjZjMzMyYjkxMTQ1ZGQwMzAyZjU2M2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuY3BwCkBAIC0xOTY5LDE4ICsxOTY5LDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUm
IFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tpZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3Rv
cmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhG
dW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRl
dGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICghaXNQZXJzaXN0ZW50
KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nl
c3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KGF1dG8mJiBkZXRhaWxzKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0
YWlscykpOwotICAgIH0pOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDFkZTI1YTY2MDU3ZjJkNjZj
NjI5OWU1ZWJiYjgxNDZiZWU5YjgxZTMuLjM0YWU1YWY2MDczYzI1OTE0MjBmMjA5Y2UwZjc1MzJi
YWJkYzgzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTE2Nyw3ICsxNjcsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2Rp
ZmllZFNpbmNlLCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZv
aWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9yPFdl
YnNpdGVEYXRhUmVjb3JkPiYsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7
CiAKLSAgICB2b2lkIGdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8
TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJik7CiAgICAg
dm9pZCBzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVNb2RlbCk7CiAg
ICAgdm9pZCBzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyk7CiAgICAg
dm9pZCByZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9X
ZWJLaXQvVW5pZmllZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggNTA4OThlNDYzMDE3
MzE5NGFlNGVmN2NjZTQzYWU4ZWI0NjczYTg2Yi4uMmFkNzk2NDVkNmVmNjgzZGFkNGViMDc2ZjVk
ZDcyNDcyYmY4NjBiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L1VuaWZpZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0CkBAIC0xNyw2ICsxNyw3IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMS1tbS5tCiAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNl
cy9VbmlmaWVkU291cmNlMTEuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTEwLmNwcAogJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmll
ZFNvdXJjZTExMS5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMTIuY3BwCiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNl
MTItbW0ubW0KICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5p
ZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMi5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMy1tbS5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggYTQ1ZDRkMzY5MzE3ODQ0NzA0ZDQ3MTgwZmM0ZGFkNmYxYjk2NjIzNi4uZGQ5ODY5OTk4NWI0
NmZiZmQwMjUyMzc4YjU4MmU0MjQ0NDU1NGU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTE0LDYgKzE1MTQsMTMgQEAKIAkJOTNF
Nzk5ODUyNzU2RkE1NTAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5M0U3OTk4MjI3NTZGQTU0MDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VD
b25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJOTNFNzk5ODcyNzU2RkFCNDAw
NzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzUmVwbGllcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5ODMy
NzU2RkE1NDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2Vz
UmVwbGllcy5oICovOyB9OwogCQk5M0U3OTk4ODI3NTZGQUMyMDA3NDAwOEEgLyogV2ViRmlsZVN5
c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OTgxMjc1NkZBNTMwMDc0MDA4QSAvKiBXZWJGaWxl
U3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlcy5oICovOyB9OworCQk5M0U3OTlDNzI3NjAy
NzQ2MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5QzYyNzYwMjczNzAwNzQwMDhBIC8qIFN0
b3JhZ2VBcmVhUmVnaXN0cnkuaCAqLzsgfTsKKwkJOTNFNzk5Q0UyNzYwNDk3QjAwNzQwMDhBIC8q
IFNlc3Npb25TdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTNFNzk5Q0EyNzYwNDk3QTAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdl
TWFuYWdlci5oICovOyB9OworCQk5M0U3OTlDRjI3NjA0OTdCMDA3NDAwOEEgLyogTG9jYWxTdG9y
YWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNFNzk5Q0IyNzYwNDk3QTAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFnZXIuaCAqLzsg
fTsKKwkJOTNFNzk5RDIyNzYwQUE1QjAwNzQwMDhBIC8qIFVuaWZpZWRTb3VyY2UxMTIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5RDEyNzYw
QUE1QTAwNzQwMDhBIC8qIFVuaWZpZWRTb3VyY2UxMTIuY3BwICovOyB9OworCQk5M0U3OTlEQTI3
NjEyMTA4MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUQ0Mjc2MTIxMDcwMDc0MDA4QSAvKiBT
UUxpdGVTdG9yYWdlQXJlYS5oICovOyB9OworCQk5M0U3OTlEQjI3NjEyMTA4MDA3NDAwOEEgLyog
TWVtb3J5U3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzRTc5OUQ1Mjc2MTIxMDcwMDc0MDA4QSAvKiBNZW1vcnlTdG9yYWdlQXJlYS5o
ICovOyB9OworCQk5M0U3OTlEQzI3NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTlENjI3
NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmggKi87IH07CiAJCTkzRjU0OUI0MUUz
MTc0QjcwMDBFNzIzOSAvKiBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGNTQ5QjMxRTMxNzRCNzAwMEU3MjM5
IC8qIFdLU25hcHNob3RDb25maWd1cmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHVibGljLCApOyB9OyB9OwogCQk5NTBGMjg4MDI1MjQxNEVBMDBCNzRGMUMgLyogV0tNb3Vz
ZURldmljZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NTBGMjg3RTI1MjQxNEU5MDBCNzRGMUMgLyogV0tNb3VzZURldmljZU9ic2VydmVy
LmggKi87IH07CiAJCTk1NjUwODM5MjZEODdBMkIwMEUxNUNCNyAvKiBBcHBsZU1lZGlhU2Vydmlj
ZXNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1
NjUwODM3MjZEODdBMkIwMEUxNUNCNyAvKiBBcHBsZU1lZGlhU2VydmljZXNTUEkuaCAqLzsgfTsK
QEAgLTUzNTMsNiArNTM2MCwxOSBAQAogCQk5M0U3OTk4MTI3NTZGQTUzMDA3NDAwOEEgLyogV2Vi
RmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFNzk5ODIyNzU2RkE1NDAwNzQwMDhBIC8q
IFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5l
Y3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0U3OTk4MzI3NTZGQTU0MDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9u
TWVzc2FnZXNSZXBsaWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZp
bGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzUmVwbGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5M0U3OTlDNTI3NjAyNzM2MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFS
ZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdl
QXJlYVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5QzYy
NzYwMjczNzAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUFyZWFSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5M0U3OTlDOTI3NjA0OTdBMDA3NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFu
YWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NhbFN0b3Jh
Z2VNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5Q0EyNzYw
NDk3QTAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTNFNzk5Q0IyNzYwNDk3QTAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1h
bmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9jYWxTdG9yYWdlTWFu
YWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlDQzI3NjA0OTdCMDA3
NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNlc3Npb25TdG9yYWdlTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTkzRTc5OUQxMjc2MEFBNUEwMDc0MDA4QSAvKiBVbmlmaWVkU291cmNl
MTEyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuaWZpZWRTb3Vy
Y2UxMTIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlEMzI3NjEyMTA3
MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU1FMaXRlU3RvcmFnZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5M0U3OTlENDI3NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMaXRlU3RvcmFnZUFyZWEuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDUyNzYxMjEwNzAwNzQwMDhBIC8q
IE1lbW9yeVN0b3JhZ2VBcmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1l
bW9yeVN0b3JhZ2VBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQ2
Mjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3RvcmFnZUFyZWFCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTkzRTc5OUQ3Mjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZUFyZWFCYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDgyNzYxMjEwODAwNzQwMDhBIC8q
IE1lbW9yeVN0b3JhZ2VBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1lbW9yeVN0b3JhZ2VBcmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTNGNTQ5QjMxRTMxNzRCNzAwMEU3MjM5IC8qIFdLU25hcHNob3RDb25maWd1cmF0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLU25hcHNob3RDb25maWd1cmF0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjU0OUI1MUUzMTc0REEwMDBFNzIzOSAv
KiBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdLU25hcHNob3RDb25maWd1cmF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5NTBGMjg3RTI1MjQxNEU5MDBCNzRGMUMgLyogV0tNb3VzZURldmljZU9i
c2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLTW91c2VEZXZpY2VP
YnNlcnZlci5oOyBwYXRoID0gaW9zL1dLTW91c2VEZXZpY2VPYnNlcnZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODIzNCw2ICs4MjU0LDcgQEAKIAkJCQkxQ0FFQ0I1RDI3NDY1
QUUzMDBBQjc4RDAgLyogVW5pZmllZFNvdXJjZTEwOS5jcHAgKi8sCiAJCQkJMUNBRUNCNjAyNzQ2
NUFFMzAwQUI3OEQwIC8qIFVuaWZpZWRTb3VyY2UxMTAuY3BwICovLAogCQkJCTFDQUVDQjVFMjc0
NjVBRTMwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTExLmNwcCAqLywKKwkJCQk5M0U3OTlEMTI3
NjBBQTVBMDA3NDAwOEEgLyogVW5pZmllZFNvdXJjZTExMi5jcHAgKi8sCiAJCQkpOwogCQkJbmFt
ZSA9ICJ1bmlmaWVkLXNvdXJjZXMiOwogCQkJcGF0aCA9ICJEZXJpdmVkU291cmNlcy9XZWJLaXQv
dW5pZmllZC1zb3VyY2VzIjsKQEAgLTEwMzE0LDExICsxMDMzNSwyMyBAQAogCQkJCTkzNUI1Nzk4
MjZGNTEyNzAwMDhCNDhBQyAvKiBGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5LmggKi8s
CiAJCQkJOTMxQTA3NTEyNkYwNjMxMDAwNDQ3NENEIC8qIEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdl
ci5jcHAgKi8sCiAJCQkJOTMxQTA3NTAyNkYwNjMxMDAwNDQ3NENEIC8qIEZpbGVTeXN0ZW1TdG9y
YWdlTWFuYWdlci5oICovLAorCQkJCTkzRTc5OUM5Mjc2MDQ5N0EwMDc0MDA4QSAvKiBMb2NhbFN0
b3JhZ2VNYW5hZ2VyLmNwcCAqLywKKwkJCQk5M0U3OTlDQjI3NjA0OTdBMDA3NDAwOEEgLyogTG9j
YWxTdG9yYWdlTWFuYWdlci5oICovLAorCQkJCTkzRTc5OUQ4Mjc2MTIxMDgwMDc0MDA4QSAvKiBN
ZW1vcnlTdG9yYWdlQXJlYS5jcHAgKi8sCisJCQkJOTNFNzk5RDUyNzYxMjEwNzAwNzQwMDhBIC8q
IE1lbW9yeVN0b3JhZ2VBcmVhLmggKi8sCiAJCQkJOTMwODVEQzMyNkUxQkJCRDAwMEVDNkE3IC8q
IE5ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAgKi8sCiAJCQkJOTMwODVEQzQyNkUxQkJCRDAwMEVD
NkE3IC8qIE5ldHdvcmtTdG9yYWdlTWFuYWdlci5oICovLAogCQkJCTkzMDg1REM3MjZFMUM2RUUw
MDBFQzZBNyAvKiBOZXR3b3JrU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCiAJCQkJOTMw
ODVEQzUyNkUxQzZDRjAwMEVDNkE3IC8qIE9yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcCAqLywKIAkJ
CQk5MzA4NURDNjI2RTFDNkNGMDAwRUM2QTcgLyogT3JpZ2luU3RvcmFnZU1hbmFnZXIuaCAqLywK
KwkJCQk5M0U3OTlDQzI3NjA0OTdCMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNw
cCAqLywKKwkJCQk5M0U3OTlDQTI3NjA0OTdBMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyLmggKi8sCisJCQkJOTNFNzk5RDMyNzYxMjEwNzAwNzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VB
cmVhLmNwcCAqLywKKwkJCQk5M0U3OTlENDI3NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFn
ZUFyZWEuaCAqLywKKwkJCQk5M0U3OTlENzI3NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFC
YXNlLmNwcCAqLywKKwkJCQk5M0U3OTlENjI3NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFC
YXNlLmggKi8sCisJCQkJOTNFNzk5QzUyNzYwMjczNjAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVn
aXN0cnkuY3BwICovLAorCQkJCTkzRTc5OUM2Mjc2MDI3MzcwMDc0MDA4QSAvKiBTdG9yYWdlQXJl
YVJlZ2lzdHJ5LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHN0b3JhZ2U7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwpAQCAtMTI5NzMsNiArMTMwMDYsNyBAQAogCQkJCTU3RENFREFFMjE0QzYw
MzMwMDE2Qjg0NyAvKiBMb2NhbFNlcnZpY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQjI2MTRF
MjI3RDE0QjEwMEI5N0E3NiAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNCMjYxNEYyMjdEMTRCMTAwQjk3QTc2IC8qIExvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNzk5Q0YyNzYwNDk3QjAwNzQwMDhBIC8qIExv
Y2FsU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2QkVCNkRCMjJGQjlENDgw
MDI2OTg2NyAvKiBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
QTdGMkYzMTI1QkY4MjAwMDhBRUIxRCAvKiBMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkRDRDdGNzFENDdFOTJBMDA5RjA4QkMgLyogTG9nSW5pdGlhbGl6YXRpb24uaCBpbiBIZWFkZXJz
ICovLApAQCAtMTI5OTEsNiArMTMwMjUsNyBAQAogCQkJCUExNTc5OUJEMjU4NDQzMzIwMDUyODIz
NiAvKiBNZWRpYVNhbXBsZUN1cnNvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc1QTlDRjMyNjE2
OUJBQjAwNkRGQTNBIC8qIE1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9yUHJveHlQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMTU3OTlCNzI1ODQ0MzMyMDA1MjgyMzYgLyogTWVkaWFUcmFja1Jl
YWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNzk5REIyNzYxMjEwODAwNzQwMDhBIC8qIE1l
bW9yeVN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTkzM0RFRjE5NjVFQjMxMDA4
QUMzRUEgLyogTWVudVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUI0NzkwOEQyNTMx
NEQ4MzAwRUMxMUFCIC8qIE1lc3NhZ2VBcmd1bWVudERlc2NyaXB0aW9ucy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUFDNEM4MjkxNkI4NzZBOTAwNjlEQ0NEIC8qIE1lc3NhZ2VGbGFncy5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xMzAzOSw3ICsxMzA3NCw2IEBACiAJCQkJNTMyMTU5NTYxREJBRTcyRDAw
NTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Mzk5
MDIwMzFCRTlBMDJCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTgzRDQ1NEQ3MUJFOUQzQzQwMDZDOTNCRCAvKiBOZXR3b3JrTG9hZENsaWVudC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNTE3QjVGOTcyNzVFQzVFNTAwMkRDMjJEIC8qIFdlYlB1c2hNZXNzYWdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4MzkxNDk2NTFCRUE4Mzg1MDBEMkQ5NTMgLyogTmV0d29ya0xv
YWRQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDdGQzhBMDI1QjgzMzFDMDA1NDk1
RkMgLyogTmV0d29ya0xvYWRTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNDUyNkVE
MjcxRTE2NDcwMDA0NjdCNiAvKiBOZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xMzEyNyw2ICsxMzE2MSw3IEBACiAJCQkJMkQyNzlFMTkyNjk1NTc2ODAwNEIz
RUVCIC8qIFByb3RvdHlwZVRvb2xzU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUY4MTI3
NUU5N0I2MDAyREMyMkQgLyogUHVzaEFwcEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3
QjVGN0QyNzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hDbGllbnRDb25uZWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1MTdCNUY5NTI3NUVCQTYzMDAyREMyMkQgLyogUHVzaE1lc3NhZ2VGb3JUZXN0
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUU2ODg3MDFGNkUyQkFCMDA3MDA2QTYgLyogUXVh
cmFudGluZVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwQzIyN0UyNDUxMTMwQTAwRUQ2MTRE
IC8qIFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUVFNTcyNTI0MDlGMTQyMDAyMDA1RDYgLyogUXVpY2tMb29rVGh1bWJuYWlsTG9hZGVyLmggaW4g
SGVhZGVycyAqLywKQEAgLTEzMjExLDYgKzEzMjQ2LDcgQEAKIAkJCQk1MTREOUY1NzE5MTE5RDM1
MDAwMDYzQTcgLyogU2VydmljZXNDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZE
RTY1QTE5NTRBNDJCMDBDNDhGRkEgLyogU2Vzc2lvblN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTAwMkQ0OTE5NkIzNDVEMDBCOUFENDQgLyogU2Vzc2lvblN0YXRlQ29kaW5nLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5M0U3OTlDRTI3NjA0OTdCMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VN
YW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkJFQjZERjIyRkJCMTZCMDAyNjk4NjcgLyog
U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNjQyMEU1MTJE
Q0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRtYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0
M0E5Q0UwMjVENzJGMUMwMDk5MEUyNiAvKiBTaGFyZWFibGVCaXRtYXBVdGlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTMyMzksMTEgKzEzMjc1LDE0IEBACiAJCQkJOTNENkI3NzIyNTRCQjUx
OTAwNThERDNBIC8qIFNwZWVjaFJlY29nbml0aW9uU2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5M0Q2Qjc4NDI1NENDRDBFMDA1OEREM0EgLyogU3BlZWNoUmVjb2duaXRpb25TZXJ2ZXJNZXNz
YWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNENkI3ODUyNTRDQ0Q0MzAwNThERDNBIC8qIFNw
ZWVjaFJlY29nbml0aW9uU2VydmVyTWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk5M0U3OTlEQTI3NjEyMTA4MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdBM0ZFQ0EyMjFGN0MwOTcwMEYyNjdDRCAvKiBTdG9yYWdlQWNjZXNzU3Rh
dHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkJFQjZENzIyRkI5QkQ3MDAyNjk4NjcgLyogU3Rv
cmFnZUFyZWEuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTc5OURDMjc2MTIxMDgwMDc0MDA4QSAv
KiBTdG9yYWdlQXJlYUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRDMzMDZGMTZCMUQ5OTEw
MDRGNjBFNyAvKiBTdG9yYWdlQXJlYUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQ0VDRDI1
MTcxNjJEQjEwMDFGQzlFRiAvKiBTdG9yYWdlQXJlYU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUEzMzRERUUxNkRFOEY4ODAwNkE4RTM4IC8qIFN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTkzRTc5OUM3Mjc2MDI3NDYwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJl
Z2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0IyNjE0RDIyN0QxNDlFMDBCOTdBNzYgLyog
U3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNkIwNTk4MjMwMzkwOTcwMDJG
QzA2QiAvKiBTdG9yYWdlTWFuYWdlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM2OEVFREYy
MzAzQTlFRDAwQkRCMTFBIC8qIFN0b3JhZ2VNYW5hZ2VyU2V0TWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTM1MTMsNiArMTM1NTIsNyBAQAogCQkJCTUxN0I1RjJFMjc1NzM4MkEwMDJEQzIy
RCAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxMkNENjlBMjcyMUYwQTkwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29uc3RhbnRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUY3MzI3NUU5NjA5MDAyREMyMkQgLyogV2ViUHVz
aERhZW1vbk1haW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0I1Rjk3Mjc1RUM1RTUwMDJEQzIy
RCAvKiBXZWJQdXNoTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDYxQ0NDQTYyMzE0ODVB
QTAwQjY1OUI5IC8qIFdlYlJlbW90ZU9iamVjdFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTg2MEU3MTIzMEY2N0ZDMDA0NjFBQUUgLyogV2ViUmVzb3VyY2VJbnRlcmNlcHRDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTBBRkZCQTE2NTQyMDQ4MDAxQkEwNUUgLyogV2Vi
UmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTM1NDcsNyArMTM1ODcsNiBAQAog
CQkJCTkzNTZGMkRDMjE1MkI2QjUwMEU2RDVERiAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTUxN0E1MzEwMUY0N0E4NjIwMERDREMwQSAvKiBXZWJTV0NsaWVu
dENvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDY2QkMwM0MxRkEyNjZE
QTAwMkZBOUMxIC8qIFdlYlNXQ29udGV4dE1hbmFnZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQk1MTdCNUY5NTI3NUVCQTYzMDAyREMyMkQgLyogUHVzaE1lc3NhZ2VGb3JUZXN0aW5n
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0NjBGNDg5MDFGOTk2RjcxMDBDRjRCODcgLyogV2ViU1dD
b250ZXh0TWFuYWdlckNvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzEx
QTlFQ0MyMTQwMzVGODAwQ0ZCMjBBIC8qIFdlYlN3aXRjaGluZ0dQVUNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTM1NkYyREUyMTUyQjcxMDAwRTZENURGIC8qIFdlYlNXT3JpZ2luU3RvcmUu
aCBpbiBIZWFkZXJzICovLApAQCAtMTUxMTYsOSArMTUxNTUsOSBAQAogCQkJYnVpbGRBY3Rpb25N
YXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTUxN0I1RjlBMjc1RjNBODYwMDJE
QzIyRCAvKiBBcmd1bWVudENvZGVycy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTdCNUY2ODI3
NUE5QTc4MDAyREMyMkQgLyogV2ViUHVzaFRvb2xDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJNTE3QjVGOUIyNzVGM0E5ODAwMkRDMjJEIC8qIERhZW1vblV0aWxpdGllcy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTUxN0I1RjlDMjc1RjNDMzcwMDJEQzIyRCAvKiBEYWVtb25FbmNvZGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxN0I1RjlCMjc1RjNBOTgwMDJEQzIyRCAvKiBEYWVt
b25VdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTdCNUY2ODI3NUE5QTc4MDAyREMy
MkQgLyogV2ViUHVzaFRvb2xDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QjVG
NjUyNzVBOEQ3RjAwMkRDMjJEIC8qIFdlYlB1c2hUb29sTWFpbi5tbSBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMTUy
MTQsNyArMTUyNTMsNiBAQAogCQkJCUNEQTkzREIxMjJGOEJDRjQwMDQ5MEE2OSAvKiBGdWxsc2Ny
ZWVuVG91Y2hTZWNoZXVyaXN0aWNQYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMx
QTE1MkQ3MjRFNUEyOUEwMDk3OEM4QiAvKiBIYW5kbGVYUENFbmRwb2ludE1lc3NhZ2VzLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMjc0OUY2NDQyMTQ2NTYxQjAwODM4MEJGIC8qIEluamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTdCNUY5OTI3NUVDNjAxMDAy
REMyMkQgLyogV2ViUHVzaE1lc3NhZ2VDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI3NDlG
NjQ1MjE0NjU2MUUwMDgzODBCRiAvKiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTlCRjVFQzY0MjU0MTE0NTYwMDk4NEU3NyAvKiBKU0lQQ0JpbmRpbmcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzE0RDM3RkUyNEFDRTA4NjAwN0ZGMDE0IC8qIExhdW5j
aFNlcnZpY2VzRGF0YWJhc2VNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0xNTUwMyw2ICsx
NTU0MSw3IEBACiAJCQkJMUNBRUNCNjUyNzQ2NUFFNDAwQUI3OEQwIC8qIFVuaWZpZWRTb3VyY2Ux
MDkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNBRUNCNjgyNzQ2NUFFNDAwQUI3OEQwIC8qIFVu
aWZpZWRTb3VyY2UxMTAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNBRUNCNjYyNzQ2NUFFNDAw
QUI3OEQwIC8qIFVuaWZpZWRTb3VyY2UxMTEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTNFNzk5
RDIyNzYwQUE1QjAwNzQwMDhBIC8qIFVuaWZpZWRTb3VyY2UxMTIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTM4QTFGQzAyM0E1NTFCRjAwRDIzNzRGIC8qIFVzZXJJbnRlcmZhY2VJZGlvbS5tbSBp
biBTb3VyY2VzICovLAogCQkJCUNENDkxQjBEMUU3MzJFNEQwMDAwOTA2NiAvKiBVc2VyTWVkaWFD
YXB0dXJlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDQ5
MUIxNzFFNzM1MjU1MDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE1NTc0LDYgKzE1NjEzLDcgQEAKIAkJ
CQlCQ0VFN0FEMDEyODE3OTg4MDA5ODI3REEgLyogV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxN0I1RjdBMjc1RTk3QTQwMDJEQzIyRCAvKiBX
ZWJQdXNoRGFlbW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QjVGNzkyNzVFOTdBMTAwMkRD
MjJEIC8qIFdlYlB1c2hEYWVtb25NYWluLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE3QjVGOTky
NzVFQzYwMTAwMkRDMjJEIC8qIFdlYlB1c2hNZXNzYWdlQ29jb2EubW0gaW4gU291cmNlcyAqLywK
IAkJCQk1MUYwNjBFMTE2NTQzMTg1MDBGMzI4MUIgLyogV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODFG
IC8qIFdlYlJUQ01vbml0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFGMDYwRTExNjU0MzE4NTAwRjMyODJDIC8qIFdlYlJUQ1Jlc29sdmVyTWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCmluZGV4IDBmYTZhYzE4ZmQ5NDcwNTkwY2Yx
MDdkNmE0NDA2NmQ5MmQ5YTQzNmQuLjJjZjdhNmQ0YjYwMDVjMWQ3ZWMyNTZiZDYzODg3NjI5NGU5
ZTRjZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0
b3JhZ2VBcmVhTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFn
ZS9TdG9yYWdlQXJlYU1hcC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJO
ZXR3b3JrU3RvcmFnZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1w
bC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCIKICNpbmNsdWRlICJTdG9y
YWdlTWFuYWdlclNldE1lc3NhZ2VzLmgiCkBAIC05NSw3ICs5Niw3IEBAIHZvaWQgU3RvcmFnZUFy
ZWFNYXA6OnNldEl0ZW0oRnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJj
ZUFyZWEsIGNvCiAgICAgbV9wZW5kaW5nVmFsdWVDaGFuZ2VzLmFkZChrZXkpOwogCiAgICAgaWYg
KG1fbWFwSUQpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFu
YWdlclNldDo6U2V0SXRlbSgqbV9tYXBJRCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1
cnJlbnRTZWVkLCBrZXksIHZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3Ry
aW5nKCkpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtT
dG9yYWdlTWFuYWdlcjo6U2V0SXRlbSgqbV9tYXBJRCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigp
LCBtX2N1cnJlbnRTZWVkLCBrZXksIHZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJs
KCkuc3RyaW5nKCkpLCAwKTsKICAgICBlbHNlCiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0
b3JhZ2UsICJTdG9yYWdlQXJlYU1hcDo6c2V0SXRlbSBmYWlsZWQgYmVjYXVzZSBzdG9yYWdlIG1h
cCBJRCBpcyBpbnZhbGlkIik7CiB9CkBAIC0xMTQsNyArMTE1LDcgQEAgdm9pZCBTdG9yYWdlQXJl
YU1hcDo6cmVtb3ZlSXRlbShXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVh
SW1wbCogc28KICAgICBtX3BlbmRpbmdWYWx1ZUNoYW5nZXMuYWRkKGtleSk7CiAKICAgICBpZiAo
bV9tYXBJRCkKLSAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5h
Z2VyU2V0OjpSZW1vdmVJdGVtKCptX21hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1f
Y3VycmVudFNlZWQsIGtleSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygp
KSwgMCk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OlJlbW92ZUl0ZW0oKm1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwg
bV9jdXJyZW50U2VlZCwga2V5LCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5n
KCkpLCAwKTsKICAgICBlbHNlCiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJT
dG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbSBmYWlsZWQgYmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBp
cyBpbnZhbGlkIik7CiB9CkBAIC0xMjksNyArMTMwLDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6
Y2xlYXIoV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJj
ZUEKICAgICBtX21hcCA9IG1ha2VVbmlxdWU8U3RvcmFnZU1hcD4obV9xdW90YUluQnl0ZXMpOwog
CiAgICAgaWYgKG1fbWFwSUQpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpT
dG9yYWdlTWFuYWdlclNldDo6Q2xlYXIoKm1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIo
KSwgbV9jdXJyZW50U2VlZCwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygp
KSwgMCk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OkNsZWFyKCptX21hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3Vy
cmVudFNlZWQsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOwog
ICAgIGVsc2UKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVh
TWFwOjpjbGVhciBmYWlsZWQgYmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CiB9
CkBAIC0xNjAsNyArMTYxLDcgQEAgU3RvcmFnZU1hcCYgU3RvcmFnZUFyZWFNYXA6OmVuc3VyZU1h
cCgpCiAgICAgICAgICAgICAvLyBmcm9tIG91ciBTdG9yYWdlTWFuYWdlclNldDo6R2V0VmFsdWVz
KCkgSVBDLiBUaGlzIElQQyBtYXkgYmUgdmVyeSBzbG93IGJlY2F1c2UgaXQgbWF5IG5lZWQgdG8g
ZmV0Y2ggdGhlIHZhbHVlcyBmcm9tIGRpc2sgYW5kIHRoZXJlIG1heSBiZSBhIGxvdCBvZiBkYXRh
LgogICAgICAgICAgICAgSVBDOjpVbmJvdW5kZWRTeW5jaHJvbm91c0lQQ1Njb3BlIHVuYm91bmRl
ZFN5bmNocm9ub3VzSVBDU2NvcGU7CiAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiB2YWx1ZXM7Ci0gICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6OlN0
b3JhZ2VNYW5hZ2VyU2V0OjpHZXRWYWx1ZXMoKm1fbWFwSUQpLCBNZXNzYWdlczo6U3RvcmFnZU1h
bmFnZXJTZXQ6OkdldFZhbHVlczo6UmVwbHkodmFsdWVzKSwgMCk7CisgICAgICAgICAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25u
ZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6R2V0VmFs
dWVzKCptX21hcElEKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpHZXRWYWx1ZXM6OlJl
cGx5KHZhbHVlcyksIDApOwogICAgICAgICAgICAgbV9tYXAtPmltcG9ydEl0ZW1zKFdURk1vdmUo
dmFsdWVzKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
U3RvcmFnZSwgIlN0b3JhZ2VBcmVhTWFwOjplbnN1cmVNYXAgZmFpbGVkIHRvIGxvYWQgZnJvbSBu
ZXR3b3JrIHByb2Nlc3MgYmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CkBAIC0z
NDgsMjAgKzM0OSwyMyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpjb25uZWN0KCkKICAgICBpZiAo
bV9tYXBJRCkKICAgICAgICAgcmV0dXJuOwogCisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVyIG1h
cElEOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBTdG9yYWdlVHlwZTo6TG9jYWw6
CiAgICAgY2FzZSBTdG9yYWdlVHlwZTo6VHJhbnNpZW50TG9jYWw6CiAgICAgICAgIGlmIChTZWN1
cml0eU9yaWdpbiogdG9wTGV2ZWxPcmlnaW4gPSBtX25hbWVzcGFjZS50b3BMZXZlbE9yaWdpbigp
KQotICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFu
YWdlclNldDo6Q29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5zZXNzaW9uSUQoKSwgbV9uYW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCks
IHRvcExldmVsT3JpZ2luLT5kYXRhKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIE1lc3Nh
Z2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJl
YTo6UmVwbHkobV9tYXBJRCksIDApOworICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5j
KE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5lY3RUb1RyYW5zaWVudExvY2Fs
U3RvcmFnZUFyZWEobV9uYW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCksIHRvcExldmVsT3Jp
Z2luLT5kYXRhKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OkNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWE6OlJlcGx5
KG1hcElEKSwgMCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5k
U3luYyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb0xvY2FsU3RvcmFnZUFy
ZWEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2Vzc2lvbklEKCksIG1fbmFtZXNwYWNlLnN0b3Jh
Z2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6U3Rv
cmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWE6OlJlcGx5KG1fbWFwSUQp
LCAwKTsKKyAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29y
a1N0b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKG1fbmFtZXNwYWNlLnN0
b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhOjpSZXBseSht
YXBJRCksIDApOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpTZXNzaW9u
OgotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2Vy
U2V0OjpDb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
c2Vzc2lvbklEKCksIG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5
T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb1Nl
c3Npb25TdG9yYWdlQXJlYTo6UmVwbHkobV9tYXBJRCksIDApOworICAgICAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q29ubmVjdFRvU2Vz
c2lvblN0b3JhZ2VBcmVhKG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3Vy
aXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25u
ZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWE6OlJlcGx5KG1hcElEKSwgMCk7CiAgICAgfQogCi0gICAg
aWYgKG1fbWFwSUQpCisgICAgaWYgKG1hcElELmlzVmFsaWQoKSkgeworICAgICAgICBtX21hcElE
ID0gbWFwSUQ7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyU3RvcmFn
ZUFyZWFNYXAoKnRoaXMpOworICAgIH0KIH0KIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlzY29u
bmVjdCgpCkBAIC0zNzMsNyArMzc3LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlzY29ubmVj
dCgpCiAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudW5yZWdpc3RlclN0b3JhZ2VBcmVhTWFw
KCp0aGlzKTsKIAogICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5leGlzdGluZ05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpKQot
ICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3Nh
Z2VzOjpTdG9yYWdlTWFuYWdlclNldDo6RGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYSgqbV9tYXBJ
RCksIDApOworICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkRpc2Nvbm5lY3RGcm9tU3RvcmFn
ZUFyZWEoKm1fbWFwSUQpLCAwKTsKIAogICAgIG1fbWFwSUQgPSB7IH07CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNw
YWNlSW1wbC5jcHAKaW5kZXggZjg0ZDAyZmM2ZjdlM2JiMWUzMTQzM2M1ZjAwZTYxZTBmZGViZjkz
Mi4uZGViNmEzNDMzY2FiYWZhZjdkY2FhNTYwY2RjM2ExNWUzYWNhN2U3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1l
c3BhY2VJbXBsLmNwcApAQCAtMjcsOSArMjcsOSBAQAogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3Bh
Y2VJbXBsLmgiCiAKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNs
dWRlICJOZXR3b3JrU3RvcmFnZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VB
cmVhSW1wbC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwLmgiCi0jaW5jbHVkZSAiU3RvcmFn
ZU1hbmFnZXJTZXRNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJX
ZWJQYWdlR3JvdXBQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKQEAgLTExNCw3ICsx
MTQsNyBAQCBSZWY8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHko
UGFnZSYgbmV3UGFnZSkKICAgICBBU1NFUlQobV9zdG9yYWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6
U2Vzc2lvbik7CiAKICAgICBpZiAoYXV0byBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5leGlzdGluZ05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpKQot
ICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3Nh
Z2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShzZXNz
aW9uSUQoKSwgbV9zdG9yYWdlTmFtZXNwYWNlSUQsIFdlYlBhZ2U6OmZyb21Db3JlUGFnZShuZXdQ
YWdlKS5zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIoKSksIDApOworICAgICAgICBu
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrU3RvcmFnZU1hbmFnZXI6OkNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UobV9zdG9yYWdl
TmFtZXNwYWNlSUQsIFdlYlBhZ2U6OmZyb21Db3JlUGFnZShuZXdQYWdlKS5zZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZUlkZW50aWZpZXIoKSksIDApOwogCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U3RvcmFnZU5hbWVzcGFjZUltcGwobV9zdG9yYWdlVHlwZSwgV2ViUGFnZTo6ZnJvbUNvcmVQYWdl
KG5ld1BhZ2UpLnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcigpLCBXZWJQYWdlOjpm
cm9tQ29yZVBhZ2UobmV3UGFnZSkuaWRlbnRpZmllcigpLCBtX3RvcExldmVsT3JpZ2luLmdldCgp
LCBtX3F1b3RhSW5CeXRlcykpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446928</attachid>
            <date>2021-12-12 01:34:07 -0800</date>
            <delta_ts>2021-12-12 11:33:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234087-20211212013406.patch</filename>
            <type>text/plain</type>
            <size>166385</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2OTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGY2OWY2MzMyMDEzYWZk
MzcyMmZjYTk1OGJmNjc5NWNiNDNlMzkxMy4uNTgxNmFlMTNkNTUyOGQxNDE1ZDNhOGVjNGZjNDg2
MmM1MTZhY2NiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTEyLTEyICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIFN0b3JhZ2VNYW5h
Z2VyIHdpdGggTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIHRvIG1hbmFnZSBXZWJTdG9yYWdlIGJ5IG9y
aWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
RmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FM
aXRlRmlsZVN5c3RlbS5oOgorCiAyMDIxLTEyLTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6Om1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCBzaG91bGQgYmUgcHJpdmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA4ZWZkNDBkYWE5YzM1
M2MyYzU0OTA3Zjk4N2ZhYzI3YTdjMmE5ZWJlLi43ZjlmY2NlZjhkZDA1NmY5NGVhMjZkOTViMjJh
NDUyOGNiMjEwOGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNCBAQAorMjAyMS0xMi0xMiAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBNZXJnZSBTdG9yYWdlTWFu
YWdlciB3aXRoIE5ldHdvcmtTdG9yYWdlTWFuYWdlciB0byBtYW5hZ2UgV2ViU3RvcmFnZSBieSBv
cmlnaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
NDA4NworCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgIEluIG5l
dHdvcmsgcHJvY2VzcywgV2ViU3RvcmFnZSBkYXRhIGlzIG1hbmFnZWQgYnkgV2ViS2l0OjpTdG9y
YWdlTWFuYWdlciBjbGFzcy4gRWFjaCBTdG9yYWdlTWFuYWdlciBvd25zIG9uZSBvcgorICAgICAg
ICBtYW55IFN0b3JhZ2VOYW1lU3BhY2VzLCBhbmQgZWFjaCBTdG9yYWdlTmFtZXNwYWNlIG93bnMg
b25lIG9yIG1vcmUgU3RvcmFnZUFyZWFzLiBFYWNoIFN0b3JhZ2VBcmVhIGNvcnJlcG9uZHMKKyAg
ICAgICAgdG8gb25lIHN0b3JhZ2UgbWFwIChvbmUgbG9jYWxTdG9yYWdlIG9yIHNlc3Npb25TdG9y
YWdlIG9iamVjdCksIHVzaW5nIGVpdGhlciBhIFNRTGl0ZSBkYXRhYmFzZSBvciBhIGluLW1lbW9y
eQorICAgICAgICBtYXAgYXMgYmFja2VuZC4gTm93IHRoYXQgd2UgaGF2ZSBOZXR3b3JrU3RvcmFn
ZU1hbmFnZXIsIHdoaWNoIG1hbmFnZXMgc3RvcmFnZSBieSBvcmlnaW4uIFdlIGNhbiBtZXJnZQor
ICAgICAgICBTdG9yYWdlTWFuYWdlciB3aXRoIE5ldHdvcmtTdG9yYWdlTWFuYWdlciwgc2luY2Ug
bG9jYWxTdG9yYWdlIGFuZCBzZXNzaW9uU3RvcmFnZSBhcmUgbm90IHNoYXJlZCBiZXR3ZWVuIAor
ICAgICAgICBkaWZmZXJlbnQgb3JpZ2lucy4KKworICAgICAgICBUaGUgbmV3IHN0cnVjdHVyZSBp
czoKKyAgICAgICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIChtYW5hZ2Ugc3RvcmFnZSBmb3IgYSBz
ZXNzaW9uLCBvd25zIG9uZSBvciBtb3JlIE9yaWdpblN0b3JhZ2VNYW5hZ2VycykKKyAgICAgICAg
T3JpZ2luU3RvcmFnZU1hbmFnZXIgKG1hbmFnZSBzdG9yYWdlIGZvciBhbiBvcmlnaW4sIG93bnMg
b25lIExvY2FsU3RvcmFnZU1hbmFnZXIgYW5kIG9uZSBTZXNzaW9uU3RvcmFnZU1hbmFnZXIpCisg
ICAgICAgIExvY2FsU3RvcmFnZU1hbmFnZXIgLyBTZXNzaW9uU3RvcmFnZU1hbmFnZXIgKG1hbmFn
ZSBMb2NhbFN0b3JhZ2UgYW5kIFNlc3Npb25TdG9yYWdlLCBvd25zIG9uZSBvciBtb3JlIAorICAg
ICAgICBTdG9yYWdlQXJlYUJhc2VzKQorICAgICAgICBNZW1vcnlTdG9yYWdlQXJlYSAvIFNRTGl0
ZVN0b3JhZ2VBcmVhIChpbmhlcml0cyBTdG9yYWdlQXJlYUJhc2VzOyBtYW5hZ2Ugb25lIGxvY2Fs
IG9yIHNlc3Npb24gc3RvcmFnZSwgbGlrZSAKKyAgICAgICAgV2Via2l0OjpTdG9yYWdlQXJlYSkK
KworICAgICAgICBTdG9yYWdlTmFtZXNwYWNlIGxheWVyIGlzIHJlbW92ZWQuIEZvciBTZXNzaW9u
U3RvcmFnZSwgZGlmZmVyZW50IFN0b3JhZ2VOYW1lc3BhY2VzIG1lYW5zIGRpZmZlcmVudCB3ZWIg
cGFnZXMsIAorICAgICAgICBhbmQgc2FtZSBvcmlnaW4gY2FuIGhhdmUgZGlmZmVyZW50IHNlc3Np
b25TdG9yYWdlcyBvbiBkaWZmZXJlbnQgcGFnZXMsIHNvIHdlIGtlZXAgYSBTdG9yYWdlTmFtZXNw
YWNlIDw9PgorICAgICAgICBTdG9yYWdlQXJlYSBtYXAgaW4gU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
LiBGb3IgTG9jYWxTdG9yYWdlLCBkaWZmZXJudCBTdG9yYWdlTmFtZXNwYWNlcyBtZWFucyBkaWZm
ZXJlbnQgcGFnZSAKKyAgICAgICAgZ3JvdXBzLiBPdXIgb3JpZ2luYWwgcGxhbiB3YXMgdGhlIHNh
bWUgb3JpZ2luIGNhbiBoYXZlIGRpZmZlcmVudCBsb2NhbFN0b3JhZ2VzIGluIGRpZmZlcmVudCBw
YWdlIGdyb3VwcywgYnV0IG91cgorICAgICAgICBvbGQgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkg
bWFkZSBhbGwgcGFnZSBncm91cHMgcG9pbnQgdG8gdGhlIHNhbWUgZGF0YWJhc2UgZmlsZS4gVG8g
a2VlcCBleGlzdGluZyBiZWhhdmlvciAKKyAgICAgICAgdGhhdCBhbGwgcGFnZSBncm91cHMgd2l0
aCBzYW1lIG9yaWdpbiBzaGFyZSB0aGUgc3RvcmFnZSwgd2Ugbm93IGtlZXAgb25lIGxvY2FsIFN0
b3JhZ2VBcmVhIGFuZCBvbmUgdHJhbnNpZW50CisgICAgICAgIFN0b3JhZ2VBcmVhIHBlciBMb2Nh
bFN0b3JhZ2VNYW5hZ2VyLgorCisgICAgICAgIE1vc3RseSByZWZhY3RvcmluZyBhbmQgY292ZXJl
ZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6Omxvd01lbW9yeUhhbmRsZXIp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWRkV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRTdG9y
YWdlTWFuYWdlckZvclNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
ZGVzdHJveVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aGFzTG9j
YWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURh
dGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFG
b3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFuZFJl
c3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cHJlcGFyZVRvU3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpyZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZW5h
bWVPcmlnaW5JbldlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyk6IERlbGV0ZWQuCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6ZmlsZU5hbWVUb09yaWdpbik6CisgICAgICAgIChXZWJLaXQ6Om9yaWdpblRvRmlsZU5hbWUp
OgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpvcmlnaW5zT2ZMb2NhbFN0
b3JhZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6bG9jYWxT
dG9yYWdlRmlsZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpM
b2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdl
cjo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2Vy
OjpoYXNEYXRhSW5NZW1vcnkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VN
YW5hZ2VyOjpjbGVhckRhdGFJbk1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNsZWFyRGF0YU9uRGlzayk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6
aGFuZGxlTG93TWVtb3J5V2FybmluZyk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1h
bmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VN
YW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdl
TWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZEZvckxvY2FsU3RvcmFnZUFyZWEpOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkRm9yVHJhbnNpZW50
U3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25u
ZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFu
YWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpNZW1vcnlTdG9y
YWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKFdl
YktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmFsbEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6TWVt
b3J5U3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpNZW1vcnlTdG9yYWdl
QXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpj
bG9uZSBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9y
YWdlQXJlYS5oOiBBZGRlZC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpyZWFkT3JpZ2luRnJvbUZpbGUpOgorICAgICAgICAoV2ViS2l0Ojp3cml0ZU9yaWdpblRvRmls
ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6Ok5ldHdvcmtT
dG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Y2FuSGFuZGxlVHlwZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6b3JpZ2luRGlyZWN0b3J5UGF0aCk6CisgICAgICAg
IChXZWJLaXQ6Om9yaWdpbkZpbGVQYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2li
bGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZU9yaWdp
bkRpcmVjdG9yeUlmUG9zc2libGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1h
bmFnZXI6OmNsZWFyU3RvcmFnZUZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmZvckVhY2hPcmlnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmdldEFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YUZyb21EaXNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjptb3ZlRGF0YSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9UcmFuc2llbnRM
b2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
Ojpjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2Up
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c2V0SXRlbSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0Ojp0
b1dlYnNpdGVEYXRhVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OlN0b3JhZ2VCdWNrZXQp
OgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6
dG9XZWJzaXRlRGF0YVR5cGUpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6U3RvcmFnZUJ1Y2tldDo6dG9TdG9yYWdlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6
Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojpsb2NhbFN0b3JhZ2VNYW5hZ2Vy
KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6
OmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0
b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpzZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAg
ICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZXhpc3Rp
bmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6aXNFbXB0eSBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpmZXRj
aERhdGFUeXBlc0luTGlzdCk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpTdG9yYWdlQnVja2V0OjpkZWxldGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6Om1vdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6
T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmZldGNoRGF0YVR5cGVzSW5MaXN0
RnJvbU1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9y
YWdlQnVja2V0OjpmZXRjaERhdGFUeXBlc0luTGlzdEZyb21EaXNrKToKKyAgICAgICAgKFdlYktp
dDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0ZUxvY2FsU3RvcmFn
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1
Y2tldDo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2lu
U3RvcmFnZU1hbmFnZXI6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmRlZmF1bHRCdWNrZXQpOgorICAgICAgICAoV2ViS2l0OjpP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6bG9jYWxTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJL
aXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIpOgor
ICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6c2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmV4aXN0aW5nU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFn
ZXI6OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZmV0
Y2hEYXRhVHlwZXNJbkxpc3QpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6ZGVsZXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpt
b3ZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0Ojppc0FjdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U1FM
aXRlU3RvcmFnZUFyZWE6OnN0YXRlbWVudFN0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlNRTGl0ZVN0b3JhZ2VBcmVhOjpTUUxpdGVTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6
OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3Jh
Z2VBcmVhOjp+U1FMaXRlU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9y
YWdlQXJlYTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpj
bGVhcik6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjcmVhdGVUYWJsZUlm
TmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnByZXBhcmVE
YXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpzdGFydFRyYW5z
YWN0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6
Y2FjaGVkU3RhdGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6Omdl
dEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0SXRlbUZyb21E
YXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjphbGxJdGVtcyk6
CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtKToKKyAgICAgICAg
KFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpTUUxpdGVTdG9yYWdlQXJlYTo6Y29tbWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSk6CisgICAg
ICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmg6IEFk
ZGVkLgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L1Nlc3Npb25TdG9yYWdlTWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTZXNz
aW9uU3RvcmFnZU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJL
aXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y2xlYXJEYXRhKToKKyAgICAgICAg
KFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKToKKyAgICAg
ICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjphZGRTdG9yYWdlQXJlYSk6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvU2Vzc2lvblN0b3Jh
Z2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpkaXNjb25u
ZWN0RnJvbVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyOjpjbG9uZVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L1Nlc3Npb25TdG9yYWdlTWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHA6IEFkZGVkLiBTb21lIGNvZGUgaXMgbW92ZWQg
ZnJvbSBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yZWFnZS9TdG9yYWdlQXJlYS5jcHAuCisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZUFyZWFCYXNlKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZUFyZWFCYXNlOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhQmFzZTo6cmVtb3ZlTGlzdGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
QXJlYUJhc2U6Omhhc0xpc3RlbmVycyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VB
cmVhQmFzZTo6bm90aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhQmFzZTo6ZGlzcGF0Y2hFdmVudHMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmg6IEFkZGVkLiBTb21lIGNvZGUgaXMgbW92
ZWQgZnJvbSBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yZWFnZS9TdG9yYWdlQXJlYS5oLgorICAgICAg
ICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6Om9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VBcmVhQmFzZTo6cXVvdGEgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpyZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZUFyZWFSZWdpc3RyeTo6dW5yZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZUFyZWFSZWdpc3RyeTo6Z2V0U3RvcmFnZUFyZWEpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oOiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaDoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TG9j
YWxTdG9yYWdlRGV0YWlscyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAqIFVuaWZpZWRTb3Vy
Y2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1h
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVtKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYU1hcDo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1h
cDo6ZW5zdXJlTWFwKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmNvbm5lY3Qp
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6ZGlzY29ubmVjdCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkpOgorCiAyMDIxLTEyLTExICBU
aW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIE1vbWVudHVt
IEV2ZW50IERpc3BhdGNoZXI6IFRhaWwgZnJhbWVzIGFyZSB0aGUgd3JvbmcgdmVsb2NpdHkgaWYg
bW9tZW50dW0gZXZlbnQgZGlzcGF0Y2ggcmF0ZSBkb2Vzbid0IG1hdGNoIHNjcmVlbiByZWZyZXNo
IHJhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxl
U3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVt
LmNwcAppbmRleCA3NmU0NWFmMzRlZDA5M2ZkOWYyNzZkZDVkNGI5MjJhNDE2MzRkOWFlLi5lN2Nk
Y2JmNWFiZDIwNjk2ODVlMWZhZDFkNzQ0MTljYTEwODFhOWJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCkBAIC00Myw2ICs0Myw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PGNv
bnN0IGNoYXIgKiwgMz4gZGF0YWJhc2VGaWxlU3VmZml4ZXMgeyAiIiwgIi1zaG0iLCAiLXdhbCIg
fTsKKwogU1FMaXRlRmlsZVN5c3RlbTo6U1FMaXRlRmlsZVN5c3RlbSgpCiB7CiB9CkBAIC03Nywx
OCArNzksMjIgQEAgYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gRmlsZVN5c3RlbTo6ZGVsZXRl
RW1wdHlEaXJlY3RvcnkocGF0aCk7CiB9CiAKLWJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRl
RGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCitib29sIFNRTGl0ZUZpbGVTeXN0
ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQogewotICAgIGF1
dG8gd2FsRmlsZU5hbWUgPSBtYWtlU3RyaW5nKGZpbGVOYW1lLCAiLXdhbCJfcyk7Ci0gICAgYXV0
byBzaG1GaWxlTmFtZSA9IG1ha2VTdHJpbmcoZmlsZU5hbWUsICItc2htIl9zKTsKKyAgICBib29s
IGZpbGVFeGlzdHMgPSBmYWxzZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8qIHN1ZmZpeCA6IGRhdGFi
YXNlRmlsZVN1ZmZpeGVzKSB7CisgICAgICAgIFN0cmluZyBwYXRoID0gZmlsZVBhdGggKyBzdWZm
aXg7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUocGF0aCk7CisgICAgICAgIGZpbGVF
eGlzdHMgfD0gRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhwYXRoKTsKKyAgICB9CiAKLSAgICAvLyBU
cnkgdG8gZGVsZXRlIGFsbCB0aHJlZSBmaWxlcyB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSB0aGVy
ZS4KLSAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZpbGVOYW1lKTsKLSAgICBGaWxlU3lzdGVt
OjpkZWxldGVGaWxlKHdhbEZpbGVOYW1lKTsKLSAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHNo
bUZpbGVOYW1lKTsKKyAgICByZXR1cm4gIWZpbGVFeGlzdHM7Cit9CiAKLSAgICAvLyBJZiBhbnkg
b2YgdGhlIHdhbCBvciBzaG0gZmlsZXMgcmVtYWluIGFmdGVyIHRoZSBkZWxldGUgYXR0ZW1wdCwg
dGhlIG92ZXJhbGwgZGVsZXRlIG9wZXJhdGlvbiBmYWlsZWQuCi0gICAgcmV0dXJuICFGaWxlU3lz
dGVtOjpmaWxlRXhpc3RzKGZpbGVOYW1lKSAmJiAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh3YWxG
aWxlTmFtZSkgJiYgIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc2htRmlsZU5hbWUpOwordm9pZCBT
UUxpdGVGaWxlU3lzdGVtOjptb3ZlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgb2xkRmlsZVBh
dGgsIGNvbnN0IFN0cmluZyYgbmV3RmlsZVBhdGgpCit7CisgICAgZm9yIChjb25zdCBhdXRvKiBz
dWZmaXggOiBkYXRhYmFzZUZpbGVTdWZmaXhlcykKKyAgICAgICAgRmlsZVN5c3RlbTo6bW92ZUZp
bGUobWFrZVN0cmluZyhvbGRGaWxlUGF0aCwgc3VmZml4KSwgbWFrZVN0cmluZyhuZXdGaWxlUGF0
aCwgc3VmZml4KSk7CiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtOTgsMTggKzEw
NCwxMyBAQCBib29sIFNRTGl0ZUZpbGVTeXN0ZW06OnRydW5jYXRlRGF0YWJhc2VGaWxlKHNxbGl0
ZTMqIGRhdGFiYXNlKQogfQogI2VuZGlmCiAgICAgCi11aW50NjRfdCBTUUxpdGVGaWxlU3lzdGVt
OjpkYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCi17ICAgICAgICAKK3Vp
bnQ2NF90IFNRTGl0ZUZpbGVTeXN0ZW06OmRhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBm
aWxlUGF0aCkKK3sKICAgICB1aW50NjRfdCB0b3RhbFNpemUgPSAwOwotCi0gICAgaWYgKGF1dG8g
ZmlsZVNpemUgPSBGaWxlU3lzdGVtOjpmaWxlU2l6ZShmaWxlTmFtZSkpCi0gICAgICAgIHRvdGFs
U2l6ZSArPSAqZmlsZVNpemU7Ci0KLSAgICBpZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06
OmZpbGVTaXplKG1ha2VTdHJpbmcoZmlsZU5hbWUsICItd2FsIl9zKSkpCi0gICAgICAgIHRvdGFs
U2l6ZSArPSAqZmlsZVNpemU7Ci0KLSAgICBpZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06
OmZpbGVTaXplKG1ha2VTdHJpbmcoZmlsZU5hbWUsICItc2htIl9zKSkpCi0gICAgICAgIHRvdGFs
U2l6ZSArPSAqZmlsZVNpemU7CisgICAgZm9yIChjb25zdCBhdXRvKiBzdWZmaXggOiBkYXRhYmFz
ZUZpbGVTdWZmaXhlcykgeworICAgICAgICBpZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06
OmZpbGVTaXplKGZpbGVQYXRoICsgc3VmZml4KSkKKyAgICAgICAgICAgIHRvdGFsU2l6ZSArPSAq
ZmlsZVNpemU7CisgICAgfQogCiAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCmluZGV4IGM2OGQ5YzdlN2Fm
OTg5NzZhMWVkM2RjYjZmMmFjZmU0YjZjZjVjMmYuLjk4ZTdlYTBkMDdhMjU0MTFmYTRmNjJhYTcy
MTY1OTNmNjNlMzljNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVGaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0
ZUZpbGVTeXN0ZW0uaApAQCAtNzgsOSArNzgsMTEgQEAgcHVibGljOgogICAgIC8vIERlbGV0ZXMg
YSBkYXRhYmFzZSBmaWxlLgogICAgIC8vCiAgICAgLy8gZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1l
LgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGRlbGV0ZURhdGFiYXNlRmlsZShjb25z
dCBTdHJpbmcmIGZpbGVOYW1lKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWxl
dGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCk7CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVIYXNoRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSk7CisgICAgLy8gTW92ZXMgYSBkYXRhYmFzZSBmaWxlIHRvIGEgbmV3IHBsYWNlLgor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIG1vdmVEYXRhYmFzZUZpbGUoY29uc3QgU3Ry
aW5nJiBvbGRGaWxlUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdGaWxlUGF0aCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFN0cmluZyBjb21wdXRlSGFzaEZvckZpbGVOYW1lKGNvbnN0IFN0cmlu
ZyYgZmlsZVBhdGgpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBUcnVuY2F0
ZXMgYSBkYXRhYmFzZSBmaWxlLiBVc2VkIHdoZW4gTW9iaWxlU2FmYXJpU2V0dGluZ3MgZGVsZXRl
cyBhIGRhdGFiYXNlIGZpbGUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuY3BwCmluZGV4IDFlZjMzYTZlNjI3MzcxMDQ0Nzc1MWE1NzNjMjc0ODk3ZWQy
OTQwYTYuLjI3YWY5MWU0ZjU5ZjMzNDEzNzhiNmFiYWZlYjg3YTVkNzc3ZjhkMDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0xNTgs
NyArMTU4LDYgQEAgc3RhdGljIGlubGluZSBNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeSBjcmVh
dGVNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeShOZXR3b3IKIAogTmV0d29ya1Byb2Nlc3M6Ok5l
dHdvcmtQcm9jZXNzKEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmJiBw
YXJhbWV0ZXJzKQogICAgIDogbV9kb3dubG9hZE1hbmFnZXIoKnRoaXMpCi0gICAgLCBtX3N0b3Jh
Z2VNYW5hZ2VyU2V0KFN0b3JhZ2VNYW5hZ2VyU2V0OjpjcmVhdGUoKSkKICNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQogICAgICwgbV9uZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlcigq
dGhpcykKICNlbmRpZgpAQCAtMzE0LDEyICszMTMsMTMgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
bG93TWVtb3J5SGFuZGxlcihDcml0aWNhbCBjcml0aWNhbCkKICAgICAgICAgbmV0d29ya1Nlc3Np
b24uY2xlYXJQcmVmZXRjaENhY2hlKCk7CiAgICAgfSk7CiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2Vy
U2V0LT5oYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7Ci0KICNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCiAgICAgZm9yIChhdXRvJiBzd1NlcnZlciA6IG1fc3dTZXJ2ZXJzLnZhbHVlcygpKQogICAg
ICAgICBzd1NlcnZlci0+aGFuZGxlTG93TWVtb3J5V2FybmluZygpOwogI2VuZGlmCisKKyAgICBm
b3IgKGF1dG8mIG1hbmFnZXIgOiBtX3N0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAg
bWFuYWdlci0+aGFuZGxlTG93TWVtb3J5V2FybmluZygpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMmJiBwYXJhbWV0ZXJzKQpAQCAtNDAyLDcgKzQwMiw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmNyZWF0ZU5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKFByb2Nlc3NJZGVudGlmaWVy
IGlkZW50CiAKICAgICBjb25uZWN0aW9uLnNldE9uTGluZVN0YXRlKE5ldHdvcmtTdGF0ZU5vdGlm
aWVyOjpzaW5nbGV0b24oKS5vbkxpbmUoKSk7CiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5h
ZGRDb25uZWN0aW9uKGNvbm5lY3Rpb24uY29ubmVjdGlvbigpKTsKICAgICB3ZWJJREJTZXJ2ZXIo
c2Vzc2lvbklEKS5hZGRDb25uZWN0aW9uKGNvbm5lY3Rpb24uY29ubmVjdGlvbigpLCBpZGVudGlm
aWVyKTsKICAgICBpZiAoYXV0byBtYW5hZ2VyID0gbV9zdG9yYWdlTWFuYWdlcnMuZ2V0KHNlc3Np
b25JRCkpCiAgICAgICAgIG1hbmFnZXItPnN0YXJ0UmVjZWl2aW5nTWVzc2FnZUZyb21Db25uZWN0
aW9uKGNvbm5lY3Rpb24uY29ubmVjdGlvbigpKTsKQEAgLTQyMSw3ICs0MjAsNyBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzJiYgcGFyYW1ldGVycwogewogICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwogCi0gICAgYWRkU3RvcmFnZU1hbmFnZXJG
b3JTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZSk7CisgICAgYWRkU3RvcmFn
ZU1hbmFnZXJGb3JTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURp
cmVjdG9yeSwgcGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZSwgcGFyYW1l
dGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihz
ZXNzaW9uSUQsIHBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAKICAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKQEAgLTQzMCw4ICs0MjksNiBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiYgcGFy
YW1ldGVycwogICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBh
cmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMu
c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5k
aWYKIAotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMu
bG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vi
c2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycykpOwogfQogCkBA
IC00NTQsMTEgKzQ1MSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgbV9zZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcnMucmVtb3ZlKHNlc3Npb25JRCk7CiB9CiAKLXZvaWQgTmV0d29y
a1Byb2Nlc3M6OmFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IFN0cmluZyYgZ2VuZXJhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUmIGdlbmVyYWxTdG9yYWdlUGF0aEhhbmRsZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6
OmFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgZ2VuZXJhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
IGdlbmVyYWxTdG9yYWdlUGF0aEhhbmRsZSwgY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRo
LCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGxvY2FsU3RvcmFnZVBhdGhIYW5kbGUpCiB7CiAg
ICAgbV9zdG9yYWdlTWFuYWdlcnMuZW5zdXJlKHNlc3Npb25JRCwgWyZdIHsKICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGdlbmVyYWxTdG9yYWdlUGF0aEhhbmRs
ZSk7Ci0gICAgICAgIHJldHVybiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShzZXNzaW9u
SUQsIGdlbmVyYWxTdG9yYWdlUGF0aCk7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1
bWVQZXJtYW5lbnRseShsb2NhbFN0b3JhZ2VQYXRoSGFuZGxlKTsKKyAgICAgICAgcmV0dXJuIE5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlKHNlc3Npb25JRCwgZ2VuZXJhbFN0b3JhZ2VQYXRo
LCBsb2NhbFN0b3JhZ2VQYXRoKTsKICAgICB9KTsKIH0KIApAQCAtNTc1LDcgKzU3Myw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCkKICAgICBtX3NlcnZpY2VXb3JrZXJJbmZvLnJlbW92ZShzZXNzaW9uSUQpOwogI2VuZGlmCiAK
LSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZW1vdmUoc2Vzc2lvbklEKTsKICAgICBpZiAoYXV0
byBzZXJ2ZXIgPSBtX3dlYklEQlNlcnZlcnMudGFrZShzZXNzaW9uSUQpKQogICAgICAgICBzZXJ2
ZXItPmNsb3NlKCk7CiAgICAgcmVtb3ZlU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKHNlc3Npb25J
RCk7CkBAIC0xMDY1LDE1ICsxMDYyLDE2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyVXNl
ckludGVyYWN0aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6Omhhc0xvY2FsU3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNl
dC0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQsIFtkb21haW4sIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBvcmlnaW5zKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6YW55T2Yob3JpZ2lucywg
WyZkb21haW5dKGF1dG8mIG9yaWdpbikgewotICAgICAgICAgICAgICAgIHJldHVybiBkb21haW4u
bWF0Y2hlcyhvcmlnaW4pOwotICAgICAgICAgICAgfSkpOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgYXV0byBp
dGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsKKyAgICBpZiAoaXRl
cmF0b3IgPT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCisgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBhdXRvIHR5cGVzID0gT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4geyBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSB9OworICAgIGl0ZXJhdG9y
LT52YWx1ZS0+ZmV0Y2hEYXRhKHR5cGVzLCBbZG9tYWluLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvIGVudHJpZXMpIG11dGFibGUgeworICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEY6OmFueU9mKGVudHJpZXMsIFsmZG9tYWluXShhdXRvJiBl
bnRyeSkgeworICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5tYXRjaGVzKGVudHJ5Lm9yaWdpbik7
CisgICAgICAgIH0pKTsKKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0Q2Fj
aGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTE0OTEsMjAgKzE0ODksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRj
aFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdAog
ICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5j
b250YWlucyhzZXNzaW9uSUQpKSB7Ci0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmdldFNl
c3Npb25TdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8m
JiBvcmlnaW5zKSB7Ci0gICAgICAgICAgICB3aGlsZSAoIW9yaWdpbnMuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFw
cGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW5zLnRha2VBbnkoKSwgV2Vic2l0ZURhdGFU
eXBlOjpTZXNzaW9uU3RvcmFnZSwgMCB9KTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgaWYg
KHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2Up
ICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAg
bV9zdG9yYWdlTWFuYWdlclNldC0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mJiBvcmlnaW5zKSB7Ci0gICAgICAgICAgICB3aGlsZSAo
IW9yaWdpbnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW5z
LnRha2VBbnkoKSwgV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UsIDAgfSk7Ci0gICAgICAg
IH0pOwotICAgIH0KLQogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoU09VUCkKICAgICBpZiAo
d2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkhTVFNDYWNoZSkpCiAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5ob3N0TmFtZXNXaXRoSFNU
U0NhY2hlID0gaG9zdE5hbWVzV2l0aEhTVFNDYWNoZShzZXNzaW9uSUQpOwpAQCAtMTU1NywxMCAr
MTU0MSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdAogICAgIH0KICNlbmRpZgogCi0gICAg
aWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0
ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKSB7Ci0gICAgICAgIGl0ZXJhdG9yLT52
YWx1ZS0+ZmV0Y2hEYXRhKHdlYnNpdGVEYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1
dG8gZW50cmllcykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1f
d2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmRWZWN0b3IoV1RGTW92ZShlbnRyaWVzKSk7Ci0gICAg
ICAgIH0pOworICAgIGlmIChOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5cGVzKHdl
YnNpdGVEYXRhVHlwZXMpKSB7CisgICAgICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdl
TWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5l
bmQoKSkgeworICAgICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5mZXRjaERhdGEod2Vic2l0ZURh
dGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5h
cHBlbmRWZWN0b3IoV1RGTW92ZShlbnRyaWVzKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQogICAgIH0KIH0KIApAQCAtMTU4NywxMiArMTU3Myw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdl
YnNpCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpE
T01DYWNoZSkpCiAgICAgICAgIENhY2hlU3RvcmFnZTo6RW5naW5lOjpjbGVhckFsbENhY2hlcygq
dGhpcywgc2Vzc2lvbklELCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAKLSAgICBpZiAod2Vi
c2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSAm
JiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAgICBtX3N0
b3JhZ2VNYW5hZ2VyU2V0LT5kZWxldGVTZXNzaW9uU3RvcmFnZShzZXNzaW9uSUQsIFtjbGVhclRh
c2tzSGFuZGxlcl0geyB9KTsKLQotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250
YWlucyhzZXNzaW9uSUQpKQotICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5kZWxldGVMb2Nh
bFN0b3JhZ2VNb2RpZmllZFNpbmNlKHNlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFz
a3NIYW5kbGVyXSB7IH0pOwotCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vi
c2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSkKICAgICAgICAgd2ViSURCU2VydmVyKHNlc3Npb25JRCkuY2xvc2VBbmREZWxldGVEYXRh
YmFzZXNNb2RpZmllZFNpbmNlKG1vZGlmaWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9
KTsKIApAQCAtMTYzNyw4ICsxNjE3LDEwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdl
YnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpCiAgICAg
fQogI2VuZGlmCiAKLSAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZp
bmQoc2Vzc2lvbklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCi0gICAg
ICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YU1vZGlmaWVkU2luY2Uod2Vic2l0ZURhdGFU
eXBlcywgbW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOworICAgIGlmIChO
ZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5cGVzKHdlYnNpdGVEYXRhVHlwZXMpKSB7
CisgICAgICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNz
aW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKKyAgICAgICAgICAg
IGl0ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YU1vZGlmaWVkU2luY2Uod2Vic2l0ZURhdGFUeXBl
cywgbW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOworICAgIH0KIH0KIAog
c3RhdGljIHZvaWQgY2xlYXJEaXNrQ2FjaGVFbnRyaWVzKE5ldHdvcmtDYWNoZTo6Q2FjaGUqIGNh
Y2hlLCBjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lucywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcwMywxMiArMTY4NSw2
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvCiAgICAgICAgICAgICBDYWNoZVN0b3JhZ2U6OkVu
Z2luZTo6Y2xlYXJDYWNoZXNGb3JPcmlnaW4oKnRoaXMsIHNlc3Npb25JRCwgU2VjdXJpdHlPcmln
aW5EYXRhIHsgb3JpZ2luRGF0YSB9LCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAgICAgfQog
Ci0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNz
aW9uU3RvcmFnZSkgJiYgbV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkK
LSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2VGb3JPcmln
aW5zKHNlc3Npb25JRCwgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKLQot
ICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxT
dG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAg
ICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5kZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW5zKHNl
c3Npb25JRCwgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKLQogICAgIGlm
ICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0
YWJhc2VzKSAmJiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHdlYklEQlNlcnZl
cihzZXNzaW9uSUQpLmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhvcmlnaW5EYXRh
cywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwogCkBAIC0xNzQ2LDggKzE3MjIsMTAgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgT3B0aW8KICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChhdXRvIGl0ZXJh
dG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0
b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKLSAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRh
KHdlYnNpdGVEYXRhVHlwZXMsIG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7
CisgICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMod2Vic2l0ZURh
dGFUeXBlcykpIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vy
cy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKQor
ICAgICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhKHdlYnNpdGVEYXRhVHlwZXMs
IG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CisgICAgfQogCiAgICAgaWYg
KGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkg
ewogICAgICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBkb21haW5zVG9E
ZWxldGVOZXR3b3JrRGF0YUZvcjsKQEAgLTE5MDQsMjggKzE4ODIsNiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpkZWxldGVBbmRSZXN0cmljdFdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5z
KFBBTDo6U2VzcwogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAobV9zdG9yYWdlTWFuYWdl
clNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewotICAgICAgICBpZiAod2Vic2l0ZURhdGFUeXBl
cy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSkgewotICAgICAgICAg
ICAgbV9zdG9yYWdlTWFuYWdlclNldC0+Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKHNlc3Npb25J
RCwgW3Byb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCB0aGlzLCBzZXNzaW9uSUQsIGNhbGxi
YWNrQWdncmVnYXRvciwgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3Jd
KGF1dG8mJiBvcmlnaW5zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3N0b3JhZ2VNYW5hZ2Vy
U2V0LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgICAgICAgICBhdXRvIG9yaWdpbnNUb0RlbGV0ZSA9IGZpbHRlckZvclJlZ2lzdHJh
YmxlRG9tYWlucyhvcmlnaW5zLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0
YUZvciwgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX2RvbWFpbnMpOwotICAgICAgICAgICAgICAgIG1f
c3RvcmFnZU1hbmFnZXJTZXQtPmRlbGV0ZVNlc3Npb25TdG9yYWdlRm9yT3JpZ2lucyhzZXNzaW9u
SUQsIG9yaWdpbnNUb0RlbGV0ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpKSB7Ci0gICAgICAgICAgICBtX3N0b3Jh
Z2VNYW5hZ2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW3Byb3RlY3Rl
ZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCB0aGlzLCBzZXNzaW9uSUQsIGNhbGxiYWNrQWdncmVnYXRv
ciwgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3JdKGF1dG8mJiBvcmln
aW5zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlu
cyhzZXNzaW9uSUQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAg
ICAgICBhdXRvIG9yaWdpbnNUb0RlbGV0ZSA9IGZpbHRlckZvclJlZ2lzdHJhYmxlRG9tYWlucyhv
cmlnaW5zLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvciwgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5tX2RvbWFpbnMpOwotICAgICAgICAgICAgICAgIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbnMoc2Vzc2lvbklELCBvcmlnaW5zVG9E
ZWxldGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgfQotICAgIH0KLQogICAgIGF1dG8gcGF0aCA9IG1faWRiRGF0YWJhc2VQYXRocy5nZXQoc2Vz
c2lvbklEKTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpICYmIHdlYnNpdGVEYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpKSB7CiAgICAgICAgIHdl
YklEQlNlcnZlcihzZXNzaW9uSUQpLmdldE9yaWdpbnMoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBS
ZWYgeyAqdGhpcyB9LCBzZXNzaW9uSUQsIGNhbGxiYWNrQWdncmVnYXRvciwgZG9tYWluc1RvRGVs
ZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3JdKGF1dG8mJiBvcmlnaW5zKSB7CkBAIC0xOTcy
LDExICsxOTI4LDEzIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFuZFJlc3RyaWN0V2Vi
c2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMoUEFMOjpTZXNzCiAgICAgICAgIH0pOwogICAg
IH0KIAotICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNz
aW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkgewotICAgICAgICBp
dGVyYXRvci0+dmFsdWUtPmRlbGV0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMod2Vic2l0ZURh
dGFUeXBlcywgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdKGF1dG8gZGVsZXRlZERvbWFpbnMpIG11dGFibGUgewotICAgICAgICAg
ICAgZm9yIChhdXRvIGRvbWFpbiA6IGRlbGV0ZWREb21haW5zKQotICAgICAgICAgICAgICAgIGNh
bGxiYWNrQWdncmVnYXRvci0+bV9kb21haW5zLmFkZChXVEZNb3ZlKGRvbWFpbikpOwotICAgICAg
ICB9KTsKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJz
aXRlRGF0YVR5cGVzKSkgeworICAgICAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1h
bmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5k
KCkpIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YUZvclJlZ2lzdHJh
YmxlRG9tYWlucyh3ZWJzaXRlRGF0YVR5cGVzLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVX
ZWJzaXRlRGF0YUZvciwgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIGRlbGV0ZWREb21haW5z
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8gZG9tYWluIDogZGVsZXRlZERv
bWFpbnMpCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV9kb21haW5z
LmFkZChXVEZNb3ZlKGRvbWFpbikpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9
CiAKICAgICBhdXRvIGRhdGFUeXBlc0ZvclVJUHJvY2VzcyA9IFdlYnNpdGVEYXRhOjpmaWx0ZXIo
d2Vic2l0ZURhdGFUeXBlcywgV2Vic2l0ZURhdGFQcm9jZXNzVHlwZTo6VUkpOwpAQCAtMjMwNyw3
ICsyMjY1LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cHJlcGFyZVRvU3VzcGVuZChib29sIGlz
U3VzcGVuc2lvbkltbWluZW50LCBDb21wbGV0aW9uSGFuZGwKICAgICB9CiAjZW5kaWYKIAotICAg
IG1fc3RvcmFnZU1hbmFnZXJTZXQtPnN1c3BlbmQoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX3N0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAg
ICAgICAgbWFuYWdlci0+c3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIE5ldHdvcmtQcm9jZXNzOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpCkBAIC0y
MzQ2LDcgKzIzMDUsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXN1bWUoKQogICAgIG1fc2hv
dWxkU3VzcGVuZElEQlNlcnZlcnMgPSBmYWxzZTsKICNlbmRpZgogCi0gICAgbV9zdG9yYWdlTWFu
YWdlclNldC0+cmVzdW1lKCk7CisgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zdG9yYWdlTWFu
YWdlcnMudmFsdWVzKCkpCisgICAgICAgIG1hbmFnZXItPnJlc3VtZSgpOwogfQogCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQpAQCAtMjQ0
Miw4ICsyNDAyLDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0U2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXJJREJSb290UGF0aChQQUw6OlNlc3Npb25JRCBzZXMKIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6c3luY0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+d2FpdFVudGlsU3luY2lu
Z0xvY2FsU3RvcmFnZUZpbmlzaGVkKCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICBh
dXRvIGFnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CisgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zdG9yYWdlTWFuYWdl
cnMudmFsdWVzKCkpCisgICAgICAgIG1hbmFnZXItPnN5bmNMb2NhbFN0b3JhZ2UoW2FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlc2V0UXVvdGEoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0yNDczLDEwICsyNDM0LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVuYW1l
T3JpZ2luSW5XZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFUKICAg
ICBpZiAob2xkT3JpZ2luLmlzRW1wdHkoKSB8fCBuZXdPcmlnaW4uaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6
TG9jYWxTdG9yYWdlKSkgewotICAgICAgICBpZiAobV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFp
bnMoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPnJlbmFtZU9y
aWdpbihzZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIFthZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lv
bklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCisgICAgICAgIGl0ZXJh
dG9yLT52YWx1ZS0+bW92ZURhdGEob2xkT3JpZ2luLCBuZXdPcmlnaW4sIFthZ2dyZWdhdG9yXSB7
IH0pOwogCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4
ZWREQkRhdGFiYXNlcykpIHsKICAgICAgICAgYXV0byBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhz
LmdldChzZXNzaW9uSUQpOwpAQCAtMjc3MSwyMSArMjczMCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnJlbW92ZUtlcHRBbGl2ZUxvYWQoTmV0d29ya1Jlc291cmNlTG9hZGVyJiBsb2FkZXIpCiAg
ICAgICAgIHNlc3Npb24tPnJlbW92ZUtlcHRBbGl2ZUxvYWQobG9hZGVyKTsKIH0KIAotdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17
Ci0gICAgaWYgKCFtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiQ2Fubm90IGdldCBsb2NhbCBzdG9yYWdlIGluZm9ybWF0aW9uIGZv
ciBhbiB1bmtub3duIHNlc3Npb24iKTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmdldExv
Y2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3ND
bG9zZWQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCiB7Ci0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+cmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0
aW9uKTsKLQogICAgIGlmIChhdXRvKiBzZXJ2ZXIgPSBtX3dlYklEQlNlcnZlcnMuZ2V0KHNlc3Np
b25JRCkpCiAgICAgICAgIHNlcnZlci0+cmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IDg4
MDE3YzQ0YTEwNWYxYzBmZGU1NWIyNGMyZmUwOTliNzY2ZmFmODEuLjVhMjBhN2NmOTcwMTcwZTk0
ZGQ3YWE4ZTM4ZmJhZGI5NTQ2YTA1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTEwNyw3ICsxMDcsNiBAQCBjbGFzcyBOZXR3b3JrUHJv
eGltaXR5TWFuYWdlcjsKIGNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIE5ldHdv
cmtTdG9yYWdlTWFuYWdlcjsKIGNsYXNzIFByb2Nlc3NBc3NlcnRpb247Ci1jbGFzcyBTdG9yYWdl
TWFuYWdlclNldDsKIGNsYXNzIFdlYlBhZ2VOZXR3b3JrUGFyYW1ldGVyczsKIGNsYXNzIFdlYlNX
U2VydmVyQ29ubmVjdGlvbjsKIGNsYXNzIFdlYlNXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlvbjsK
QEAgLTI5Niw3ICsyOTUsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXNzaW9uSXNDb250cm9sbGVk
QnlBdXRvbWF0aW9uKFBBTDo6U2Vzc2lvbklEKSBjb25zdDsKIAogICAgIHZvaWQgY29ubmVjdGlv
blRvV2ViUHJvY2Vzc0Nsb3NlZChJUEM6OkNvbm5lY3Rpb24mLCBQQUw6OlNlc3Npb25JRCk7Ci0g
ICAgdm9pZCBnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKFBBTDo6U2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9y
aWdpbkRldGFpbHM+JiYpPiYmKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAg
ICAgTmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXImIG5ldHdvcmtDb250ZW50UnVsZUxpc3RN
YW5hZ2VyKCkgeyByZXR1cm4gbV9uZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlcjsgfQpAQCAt
NTU0LDcgKzU1Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGRTZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlcihQQUw6OlNlc3Npb25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBk
ZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgsIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgdm9pZCBhZGRTdG9yYWdlTWFuYWdlckZv
clNlc3Npb24oUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCwgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlJik7CisgICAgdm9pZCBhZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JiwgY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUmKTsKICAgICB2b2lkIHJlbW92ZVN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Np
b25JRCk7CiAKICAgICAvLyBDb25uZWN0aW9ucyB0byBXZWJQcm9jZXNzZXMuCkBAIC01NzcsOCAr
NTc1LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwogCi0gICAgUmVmPFN0b3JhZ2VNYW5hZ2Vy
U2V0PiBtX3N0b3JhZ2VNYW5hZ2VyU2V0OwotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IGYzYzIzZDFjMTg0
NmQ1NDM1ZDBiMTMzMTMxODQ0ZjQ5NWQyMDUzOTAuLjJlYTY0NWI3ODFhZTczZmRmMjIwM2YxZTk0
ZDQwNWUzNjFmZDk2YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMTczLDcgKzE3Myw2IEBAIG1lc3Nh
Z2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKICAgICBNYXJrUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpIC0+ICgpIEFzeW5jCiAgICAgU2V0UENNRnJhdWRQcmV2ZW50aW9uVmFsdWVzRm9yVGVzdGlu
ZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyBzZWNyZXRUb2tlbiwgU3RyaW5nIHVu
bGlua2FibGVUb2tlbiwgU3RyaW5nIHNpZ25hdHVyZSwgU3RyaW5nIGtleUlEKSAtPiAoKSBBc3lu
YwogICAgIFNldFByaXZhdGVDbGlja01lYXN1cmVtZW50QXBwQnVuZGxlSURGb3JUZXN0aW5nKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nIGFwcEJ1bmRsZUlERm9yVGVzdGluZykgLT4g
KCkgQXN5bmMKLSAgICBHZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkgLT4gKFZlY3RvcjxXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tl
cjo6T3JpZ2luRGV0YWlscz4gZGV0YWlscykgQXN5bmMKIAogICAgIFNldFNlcnZpY2VXb3JrZXJG
ZXRjaFRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMgc2Vjb25kcykgLT4gKCkgU3luY2hyb25vdXMK
ICAgICBSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKCkgLT4gKCkgU3lu
Y2hyb25vdXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c3RvcmFnZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZTQ1NGQ1NTUxMWUz
ZDFmYzU0ZWE3YjJjOWI3OTA0MGU4YTRkNDZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0w
LDAgKzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkxvY2FsU3RvcmFnZU1hbmFnZXIuaCIKKworI2luY2x1ZGUgIk1lbW9yeVN0b3JhZ2VBcmVhLmgi
CisjaW5jbHVkZSAiU1FMaXRlU3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVJl
Z2lzdHJ5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKKy8vIFN1Z2dlc3RlZCBieSBodHRwczovL3d3dy53My5vcmcvVFIv
d2Vic3RvcmFnZS8jZGlzay1zcGFjZQorY29uc3RleHByIHVuc2lnbmVkIGxvY2FsU3RvcmFnZVF1
b3RhSW5CeXRlcyA9IDUgKiBNQjsKK2NvbnN0ZXhwciBhdXRvIGZpbGVTdWZmaXggPSAiLmxvY2Fs
c3RvcmFnZSJfczsKKworLy8gVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBleGlzdGlu
ZyBmaWxlcy4KKy8vIFdlIHNob3VsZCBub3QgaW5jbHVkZSBvcmlnaW4gaW4gZmlsZSBuYW1lLgor
c3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBmaWxlTmFt
ZVRvT3JpZ2luKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCit7CisgICAgaWYgKCFmaWxlTmFtZS5l
bmRzV2l0aChmaWxlU3VmZml4KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IGF1dG8gc3VmZml4TGVuZ3RoID0gc3RybGVuKGZpbGVTdWZmaXgpOworICAgIGF1dG8gZmlsZU5h
bWVMZW5ndGggPSBmaWxlTmFtZS5sZW5ndGgoKTsKKyAgICBpZiAoZmlsZU5hbWVMZW5ndGggPD0g
c3VmZml4TGVuZ3RoKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byBv
cmlnaW5JZGVudGlmaWVyID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lTGVuZ3RoIC0g
c3VmZml4TGVuZ3RoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhOjpm
cm9tRGF0YWJhc2VJZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpOworfQorCitzdGF0aWMgU3Ry
aW5nIG9yaWdpblRvRmlsZU5hbWUoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4p
Cit7CisgICAgcmV0dXJuIG9yaWdpbi5jbGllbnRPcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkg
KyAiLmxvY2Fsc3RvcmFnZSI7Cit9CisKK1ZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+IExvY2FsU3RvcmFnZU1hbmFnZXI6Om9yaWdpbnNPZkxvY2FsU3RvcmFnZURhdGEoY29uc3Qg
U3RyaW5nJiBwYXRoKQoreworICAgIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
IG9yaWdpbnM7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gb3JpZ2lu
czsKKworICAgIGZvciAoYXV0byYgZmlsZU5hbWUgOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5
KHBhdGgpKSB7CisgICAgICAgIGlmIChhdXRvIG9yaWdpbiA9IGZpbGVOYW1lVG9PcmlnaW4oZmls
ZU5hbWUpKQorICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoKm9yaWdpbik7CisgICAgfQorCisg
ICAgcmV0dXJuIG9yaWdpbnM7Cit9CisKK1N0cmluZyBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpsb2Nh
bFN0b3JhZ2VGaWxlUGF0aChjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJiBvcmlnaW4pCit7CisgICAgaWYgKGRpcmVjdG9yeS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcgeyB9OworCisgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChkaXJlY3RvcnksIG9yaWdpblRvRmlsZU5hbWUob3JpZ2luKSk7
Cit9CisKK0xvY2FsU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU1hbmFnZXIoY29uc3QgU3Ry
aW5nJiBwYXRoLCBTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKKyAgICA6IG1fcGF0aChw
YXRoKQorICAgICwgbV9yZWdpc3RyeShyZWdpc3RyeSkKK3sKK30KKworYm9vbCBMb2NhbFN0b3Jh
Z2VNYW5hZ2VyOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX2xvY2FsU3RvcmFn
ZUFyZWEgJiYgbV9sb2NhbFN0b3JhZ2VBcmVhLT5oYXNMaXN0ZW5lcnMoKSkgfHwgKG1fdHJhbnNp
ZW50U3RvcmFnZUFyZWEgJiYgbV90cmFuc2llbnRTdG9yYWdlQXJlYS0+aGFzTGlzdGVuZXJzKCkp
OworfQorCitib29sIExvY2FsU3RvcmFnZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fdHJhbnNpZW50U3RvcmFnZUFyZWEgJiYgIW1fdHJhbnNpZW50U3Rv
cmFnZUFyZWEtPmlzRW1wdHkoKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjbGVh
ckRhdGFJbk1lbW9yeSgpCit7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlQXJlYSAmJiBpczxNZW1v
cnlTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkpCisgICAgICAgIG1fbG9jYWxTdG9y
YWdlQXJlYS0+Y2xlYXIoKTsKKworICAgIGlmIChtX3RyYW5zaWVudFN0b3JhZ2VBcmVhKQorICAg
ICAgICBtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5jbGVhcigpOworfQorCit2b2lkIExvY2FsU3Rv
cmFnZU1hbmFnZXI6OmNsZWFyRGF0YU9uRGlzaygpCit7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdl
QXJlYSAmJiBpczxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkpCisgICAg
ICAgIG1fbG9jYWxTdG9yYWdlQXJlYS0+Y2xlYXIoKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VN
YW5hZ2VyOjpjbG9zZSgpCit7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlQXJlYSAmJiBpczxTUUxp
dGVTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkpCisgICAgICAgIGRvd25jYXN0PFNR
TGl0ZVN0b3JhZ2VBcmVhPigqbV9sb2NhbFN0b3JhZ2VBcmVhKS5jbG9zZSgpOworfQorCit2b2lk
IExvY2FsU3RvcmFnZU1hbmFnZXI6OmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKQoreworICAgIGlm
IChtX2xvY2FsU3RvcmFnZUFyZWEgJiYgaXM8U1FMaXRlU3RvcmFnZUFyZWE+KCptX2xvY2FsU3Rv
cmFnZUFyZWEpKQorICAgICAgICBkb3duY2FzdDxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fbG9jYWxT
dG9yYWdlQXJlYSkuaGFuZGxlTG93TWVtb3J5V2FybmluZygpOworfQorCit2b2lkIExvY2FsU3Rv
cmFnZU1hbmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIGlmIChtX2xvY2FsU3RvcmFn
ZUFyZWEgJiYgaXM8U1FMaXRlU3RvcmFnZUFyZWE+KCptX2xvY2FsU3RvcmFnZUFyZWEpKQorICAg
ICAgICBkb3duY2FzdDxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkuY29t
bWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFn
ZXI6OmNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9u
KQoreworICAgIGNvbm5lY3Rpb25DbG9zZWRGb3JMb2NhbFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24p
OworICAgIGNvbm5lY3Rpb25DbG9zZWRGb3JUcmFuc2llbnRTdG9yYWdlQXJlYShjb25uZWN0aW9u
KTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkRm9yTG9j
YWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24pCit7Cisg
ICAgaWYgKCFtX2xvY2FsU3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbG9j
YWxTdG9yYWdlQXJlYS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7CisgICAgaWYgKG1fbG9j
YWxTdG9yYWdlQXJlYS0+aGFzTGlzdGVuZXJzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cmVnaXN0cnkudW5yZWdpc3RlclN0b3JhZ2VBcmVhKG1fbG9jYWxTdG9yYWdlQXJlYS0+aWRlbnRp
ZmllcigpKTsKKyAgICBtX2xvY2FsU3RvcmFnZUFyZWEgPSBudWxscHRyOworfQorCit2b2lkIExv
Y2FsU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3Rpb25DbG9zZWRGb3JUcmFuc2llbnRTdG9yYWdlQXJl
YShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24pCit7CisgICAgaWYgKCFtX3Ry
YW5zaWVudFN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RyYW5zaWVudFN0
b3JhZ2VBcmVhLT5yZW1vdmVMaXN0ZW5lcihjb25uZWN0aW9uKTsKKyAgICBpZiAobV90cmFuc2ll
bnRTdG9yYWdlQXJlYS0+aGFzTGlzdGVuZXJzKCkgfHwgIW1fdHJhbnNpZW50U3RvcmFnZUFyZWEt
PmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZWdpc3RyeS51bnJlZ2lzdGVy
U3RvcmFnZUFyZWEobV90cmFuc2llbnRTdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpKTsKKyAgICBt
X3RyYW5zaWVudFN0b3JhZ2VBcmVhID0gbnVsbHB0cjsKK30KKworU3RvcmFnZUFyZWFJZGVudGlm
aWVyIExvY2FsU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mIG9yaWdpbiwgUmVmPFdvcmtRdWV1ZT4mJiB3b3JrUXVldWUpCit7CisgICAgaWYgKCFtX2xv
Y2FsU3RvcmFnZUFyZWEpIHsKKyAgICAgICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKQorICAgICAg
ICAgICAgbV9sb2NhbFN0b3JhZ2VBcmVhID0gbWFrZVVuaXF1ZTxTUUxpdGVTdG9yYWdlQXJlYT4o
bG9jYWxTdG9yYWdlUXVvdGFJbkJ5dGVzLCBvcmlnaW4sIG1fcGF0aCwgV1RGTW92ZSh3b3JrUXVl
dWUpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VBcmVhID0gbWFr
ZVVuaXF1ZTxNZW1vcnlTdG9yYWdlQXJlYT4ob3JpZ2luLCBTdG9yYWdlQXJlYUJhc2U6OlN0b3Jh
Z2VUeXBlOjpMb2NhbCk7CisgICAgICAgIAorICAgICAgICBtX3JlZ2lzdHJ5LnJlZ2lzdGVyU3Rv
cmFnZUFyZWEobV9sb2NhbFN0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCksICptX2xvY2FsU3RvcmFn
ZUFyZWEpOworICAgIH0KKworICAgIEFTU0VSVChtX3BhdGguaXNFbXB0eSgpIHx8IG1fbG9jYWxT
dG9yYWdlQXJlYS0+dHlwZSgpID09IFN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6U1FMaXRlKTsKKyAg
ICBtX2xvY2FsU3RvcmFnZUFyZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb24pOworICAgIHJldHVy
biBtX2xvY2FsU3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKTsKK30KKworU3RvcmFnZUFyZWFJZGVu
dGlmaWVyIExvY2FsU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFn
ZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBjb25zdCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBpZiAoIW1fdHJhbnNpZW50U3RvcmFnZUFy
ZWEpIHsKKyAgICAgICAgbV90cmFuc2llbnRTdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8TWVtb3J5
U3RvcmFnZUFyZWE+KG9yaWdpbiwgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZTo6TG9jYWwp
OworICAgICAgICBtX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RvcmFnZUFyZWEobV90cmFuc2llbnRTdG9y
YWdlQXJlYS0+aWRlbnRpZmllcigpLCAqbV90cmFuc2llbnRTdG9yYWdlQXJlYSk7CisgICAgfQor
CisgICAgQVNTRVJUKG1fdHJhbnNpZW50U3RvcmFnZUFyZWEtPnR5cGUoKSA9PSBTdG9yYWdlQXJl
YUJhc2U6OlR5cGU6Ok1lbW9yeSk7CisgICAgbV90cmFuc2llbnRTdG9yYWdlQXJlYS0+YWRkTGlz
dGVuZXIoY29ubmVjdGlvbik7CisgICAgcmV0dXJuIG1fdHJhbnNpZW50U3RvcmFnZUFyZWEtPmlk
ZW50aWZpZXIoKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpkaXNjb25uZWN0RnJv
bVN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFn
ZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlQXJl
YSAmJiBtX2xvY2FsU3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyKSB7Cisg
ICAgICAgIGNvbm5lY3Rpb25DbG9zZWRGb3JMb2NhbFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fdHJhbnNpZW50U3RvcmFnZUFyZWEg
JiYgbV90cmFuc2llbnRTdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpID09IGlkZW50aWZpZXIpCisg
ICAgICAgIGNvbm5lY3Rpb25DbG9zZWRGb3JUcmFuc2llbnRTdG9yYWdlQXJlYShjb25uZWN0aW9u
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42NjZlNmQ1ZTJiZTEyOGNhOTc4YjdlMjVlYzdhYjUwOTYzYjhlMWZkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFn
ZU1hbmFnZXIuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50aWZpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworc3RydWN0IENsaWVudE9yaWdpbjsKK3N0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7Cit9CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBNZW1vcnlTdG9yYWdlQXJlYTsKK2NsYXNzIFN0
b3JhZ2VBcmVhQmFzZTsKK2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnk7CisKK2NsYXNzIExvY2Fs
U3RvcmFnZU1hbmFnZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zT2ZM
b2NhbFN0b3JhZ2VEYXRhKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgc3RhdGljIFN0cmluZyBs
b2NhbFN0b3JhZ2VGaWxlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFdlYkNvcmU6OkNs
aWVudE9yaWdpbiYpOworCisgICAgTG9jYWxTdG9yYWdlTWFuYWdlcihjb25zdCBTdHJpbmcmIHBh
dGgsIFN0b3JhZ2VBcmVhUmVnaXN0cnkmKTsKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7Cisg
ICAgYm9vbCBoYXNEYXRhSW5NZW1vcnkoKSBjb25zdDsKKyAgICB2b2lkIGNsZWFyRGF0YUluTWVt
b3J5KCk7CisgICAgdm9pZCBjbGVhckRhdGFPbkRpc2soKTsKKyAgICB2b2lkIGNsb3NlKCk7Cisg
ICAgdm9pZCBoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7CisgICAgdm9pZCBzeW5jTG9jYWxTdG9y
YWdlKCk7CisgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVl
SUQpOworCisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGNvbm5lY3RUb0xvY2FsU3RvcmFnZUFy
ZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiwgUmVmPFdvcmtRdWV1ZT4mJik7CisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGNvbm5lY3RU
b1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgY29u
c3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgdm9pZCBkaXNjb25uZWN0RnJvbVN0b3Jh
Z2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSWRlbnRpZmllcik7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkRm9yTG9jYWxTdG9yYWdlQXJl
YShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKKyAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWRG
b3JUcmFuc2llbnRTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKKworICAg
IFN0cmluZyBtX3BhdGg7CisgICAgU3RvcmFnZUFyZWFSZWdpc3RyeSYgbV9yZWdpc3RyeTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+IG1fdHJhbnNpZW50U3RvcmFnZUFy
ZWE7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2VBcmVhQmFzZT4gbV9sb2NhbFN0b3JhZ2VB
cmVhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYmM1YzA2NWRiMTc0ZGM0MzFmODdmMjA1NmYwYjBjN2QyNzJlOWRmMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1v
cnlTdG9yYWdlQXJlYS5jcHAKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1lbW9yeVN0b3JhZ2VBcmVhLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitNZW1vcnlTdG9yYWdlQXJlYTo6TWVtb3J5U3RvcmFnZUFyZWEoY29u
c3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFn
ZVR5cGUgdHlwZSkKKyAgICA6IFN0b3JhZ2VBcmVhQmFzZShXZWJDb3JlOjpTdG9yYWdlTWFwOjpu
b1F1b3RhLCBvcmlnaW4pCisgICAgLCBtX21hcChXZWJDb3JlOjpTdG9yYWdlTWFwKFdlYkNvcmU6
OlN0b3JhZ2VNYXA6Om5vUXVvdGEpKQorICAgICwgbV9zdG9yYWdlVHlwZSh0eXBlKQoreworfQor
Citib29sIE1lbW9yeVN0b3JhZ2VBcmVhOjppc0VtcHR5KCkKK3sKKyAgICByZXR1cm4gIW1fbWFw
Lmxlbmd0aCgpOworfQorCit2b2lkIE1lbW9yeVN0b3JhZ2VBcmVhOjpjbGVhcigpCit7CisgICAg
bV9tYXAuY2xlYXIoKTsKKyAgICBub3RpZnlMaXN0ZW5lcnNBYm91dENsZWFyKCk7Cit9CisKK0hh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IE1lbW9yeVN0b3JhZ2VBcmVhOjphbGxJdGVtcygpCit7Cisg
ICAgcmV0dXJuIG1fbWFwLml0ZW1zKCk7Cit9CisKK0V4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJv
cj4gTWVtb3J5U3RvcmFnZUFyZWE6OnNldEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBj
b25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIHN0b3JhZ2VBcmVhSW1wbElELCBT
dHJpbmcmJiBrZXksIFN0cmluZyYmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sK
KyAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgYm9vbCBoYXNRdW90YUVycm9yID0gZmFsc2U7Cisg
ICAgbV9tYXAuc2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSwgaGFzUXVvdGFFcnJvcik7Cisg
ICAgaWYgKGhhc1F1b3RhRXJyb3IpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9y
YWdlRXJyb3I6OlF1b3RhRXhjZWVkZWQpOworCisgICAgZGlzcGF0Y2hFdmVudHMoY29ubmVjdGlv
biwgc3RvcmFnZUFyZWFJbXBsSUQsIGtleSwgb2xkVmFsdWUsIHZhbHVlLCB1cmxTdHJpbmcpOwor
CisgICAgcmV0dXJuIHsgfTsKK30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBNZW1v
cnlTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5l
Y3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBTdHJpbmcgb2xk
VmFsdWU7CisgICAgbV9tYXAucmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKTsKKyAgICBkaXNwYXRj
aEV2ZW50cyhjb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJRCwga2V5LCBvbGRWYWx1ZSwgU3Ry
aW5nKCksIHVybFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OworfQorCitFeHBlY3RlZDx2b2lk
LCBTdG9yYWdlRXJyb3I+IE1lbW9yeVN0b3JhZ2VBcmVhOjpjbGVhcihJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIGlmICghbV9tYXAubGVuZ3Ro
KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBtX21hcC5jbGVhcigpOworICAgIGRpc3Bh
dGNoRXZlbnRzKGNvbm5lY3Rpb24sIGltcGxJZGVudGlmaWVyLCBTdHJpbmcoKSwgU3RyaW5nKCks
IFN0cmluZygpLCB1cmxTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworc3RkOjp1bmlx
dWVfcHRyPE1lbW9yeVN0b3JhZ2VBcmVhPiBNZW1vcnlTdG9yYWdlQXJlYTo6Y2xvbmUoKSBjb25z
dAoreworICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBtYWtlVW5pcXVlPE1lbW9yeVN0b3JhZ2VBcmVh
PihvcmlnaW4oKSwgbV9zdG9yYWdlVHlwZSk7CisgICAgc3RvcmFnZUFyZWEtPm1fbWFwID0gbV9t
YXA7CisKKyAgICByZXR1cm4gc3RvcmFnZUFyZWE7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9y
eVN0b3JhZ2VBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVt
b3J5U3RvcmFnZUFyZWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzc2ODk5ZDI4OTEzM2I1ZTk3ZjQzMDVjYjJl
NTFjNzQyZTFkOWNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUJhc2UuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgU3RvcmFnZU1hcDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE1lbW9y
eVN0b3JhZ2VBcmVhIGZpbmFsIDogcHVibGljIFN0b3JhZ2VBcmVhQmFzZSB7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgTWVtb3J5U3RvcmFnZUFyZWEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiwgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZSA9IFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFn
ZVR5cGU6OlNlc3Npb24pOworCisgICAgU3RvcmFnZUFyZWFCYXNlOjpUeXBlIHR5cGUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBTdG9yYWdlQXJlYUJhc2U6OlR5cGU6Ok1lbW9yeTsgfTsKKyAgICBi
b29sIGlzRW1wdHkoKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyKCkgZmluYWw7CisgICAgc3RkOjp1
bmlxdWVfcHRyPE1lbW9yeVN0b3JhZ2VBcmVhPiBjbG9uZSgpIGNvbnN0OworICAgIAorCitwcml2
YXRlOgorICAgIC8vIFN0b3JhZ2VBcmVhQmFzZQorICAgIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFn
ZVR5cGUgc3RvcmFnZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3N0b3JhZ2VUeXBlOyB9
CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gYWxsSXRlbXMoKSBmaW5hbDsKKyAgICBFeHBl
Y3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IHNldEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJ
RCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgU3RyaW5nJiYga2V5LCBTdHJpbmcmJiB2YWx1
ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGZpbmFsOworICAgIEV4cGVjdGVkPHZvaWQsIFN0
b3JhZ2VFcnJvcj4gcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdl
QXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcpIGZpbmFsOworICAgIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gY2xlYXIoSVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiB1cmxTdHJpbmcpIGZpbmFsOworCisgICAgbXV0YWJsZSBXZWJDb3JlOjpTdG9yYWdl
TWFwIG1fbWFwOworICAgIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlw
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0JFR0lOKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWEpCisgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlJiBhcmVhKSB7IHJldHVybiBhcmVhLnR5cGUo
KSA9PSBXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6TWVtb3J5OyB9CitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IGMxMGFj
YmRkNjRmZTA0ZWZmMTZhMWM4Yjc0ZDJiZmMxOTUzZGJkNzMuLjU2NDE4NWNhOTA3NWNhZDA4Zjc4
NDczZTE1MjA3NWQxNzI1NzAyOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0y
OCwxMiArMjgsMTkgQEAKIAogI2luY2x1ZGUgIkZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0
cnkuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJM
b2NhbFN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5l
dHdvcmtTdG9yYWdlTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiT3JpZ2luU3RvcmFnZU1h
bmFnZXIuaCIKKyNpbmNsdWRlICJTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJT
dG9yYWdlQXJlYUJhc2UuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiU3RvcmFnZUFyZWFSZWdpc3RyeS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhVHlw
ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CiAjaW5jbHVkZSA8
cGFsL2NyeXB0by9DcnlwdG9EaWdlc3QuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNs
dWRlIDx3dGYvU3VzcGVuZGFibGVXb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVu
Y2UvUGVyc2lzdGVudENvZGVycy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCkBA
IC00Myw3ICs1MCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdp
bj4gcmVhZE9yaWdpbkZyb21GaWxlKGNvbnN0IFN0cmluZyYgZmlsCiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBpZiAoIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmls
ZVBhdGgpKQorICAgIGlmIChmaWxlUGF0aC5pc0VtcHR5KCkgfHwgIUZpbGVTeXN0ZW06OmZpbGVF
eGlzdHMoZmlsZVBhdGgpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgYXV0
byBvcmlnaW5GaWxlSGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUoZmlsZVBhdGgsIEZpbGVT
eXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7CkBAIC02Niw3ICs3Myw3IEBAIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gcmVhZE9yaWdpbkZyb21GaWxlKGNvbnN0
IFN0cmluZyYgZmlsCiAKIHN0YXRpYyB2b2lkIHdyaXRlT3JpZ2luVG9GaWxlSWZOZWNlc3Nhcnko
Y29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmln
aW4pCiB7Ci0gICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZVBhdGgpKQorICAgIGlm
IChmaWxlUGF0aC5pc0VtcHR5KCkgfHwgRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxlUGF0aCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhG
aWxlU3lzdGVtOjpwYXJlbnRQYXRoKGZpbGVQYXRoKSk7CkBAIC03Niw3ICs4Myw3IEBAIHN0YXRp
YyB2b2lkIHdyaXRlT3JpZ2luVG9GaWxlSWZOZWNlc3NhcnkoY29uc3QgU3RyaW5nJiBmaWxlUGF0
aCwgY29uc3QgV2ViQ29yZTo6CiAgICAgfSk7CiAKICAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFu
ZGxlVmFsaWQob3JpZ2luRmlsZUhhbmRsZSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJ3cml0ZU9y
aWdpblRvRmlsZUlmTmVjZXNzYXJ5OiBGYWlsZWQgdG8gb3BlbiBvcmlnaW4gZmlsZSIpOworICAg
ICAgICBMT0dfRVJST1IoIndyaXRlT3JpZ2luVG9GaWxlSWZOZWNlc3Nhcnk6IEZhaWxlZCB0byBv
cGVuIG9yaWdpbiBmaWxlICclcyciLCBmaWxlUGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtOTMsMjAgKzEwMCwyMiBAQCBzdGF0aWMgdm9pZCBkZWxldGVP
cmlnaW5GaWxlSWZOZWNlc3NhcnkoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKICAgICAgICAgRmls
ZVN5c3RlbTo6ZGVsZXRlRmlsZShmaWxlUGF0aCk7CiB9CiAKLVJlZjxOZXR3b3JrU3RvcmFnZU1h
bmFnZXI+IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBwYXRoKQorUmVmPE5ldHdvcmtTdG9yYWdlTWFuYWdlcj4gTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrU3RvcmFnZU1hbmFnZXIoc2Vzc2lvbklE
LCBwYXRoKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
KHNlc3Npb25JRCwgcGF0aCwgY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkpOwogfQogCi1OZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCkKK05ldHdvcmtTdG9yYWdlTWFuYWdlcjo6TmV0d29y
a1N0b3JhZ2VNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBTdHJpbmcmIGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgpCiAgICAgOiBtX3Nlc3Np
b25JRChzZXNzaW9uSUQpCi0gICAgLCBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBw
bGUuV2ViS2l0LlN0b3JhZ2UiKSkKKyAgICAsIG1fcXVldWUoU3VzcGVuZGFibGVXb3JrUXVldWU6
OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5TdG9yYWdlIikpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKIAotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gUmVmIHsgKnRoaXMgfSwgcGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJs
ZSB7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAq
dGhpcyB9LCBwYXRoID0gcGF0aC5pc29sYXRlZENvcHkoKSwgY3VzdG9tTG9jYWxTdG9yYWdlUGF0
aCA9IGNyb3NzVGhyZWFkQ29weShjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKV0oKSBtdXRhYmxlIHsK
ICAgICAgICAgbV9maWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5ID0gbWFrZVVuaXF1ZTxG
aWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5PigpOworICAgICAgICBtX3N0b3JhZ2VBcmVh
UmVnaXN0cnkgPSBtYWtlVW5pcXVlPFN0b3JhZ2VBcmVhUmVnaXN0cnk+KCk7CiAgICAgICAgIG1f
cGF0aCA9IHBhdGg7CisgICAgICAgIG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCA9IGN1c3RvbUxv
Y2FsU3RvcmFnZVBhdGg7CiAgICAgICAgIGlmICghbV9wYXRoLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgYXV0byBzYWx0UGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChtX3BhdGgsICJzYWx0Iik7CiAgICAgICAgICAgICBtX3NhbHQgPSBGaWxlU3lzdGVtOjpyZWFk
T3JNYWtlU2FsdChzYWx0UGF0aCkudmFsdWVfb3IoRmlsZVN5c3RlbTo6U2FsdCgpKTsKQEAgLTEy
MCw2ICsxMjksMTEgQEAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjp+TmV0d29ya1N0b3JhZ2VNYW5h
Z2VyKCkKICAgICBBU1NFUlQobV9jbG9zZWQpOwogfQogCitib29sIE5ldHdvcmtTdG9yYWdlTWFu
YWdlcjo6Y2FuSGFuZGxlVHlwZXMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCit7
CisgICAgcmV0dXJuIHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdl
KSB8fCB0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSB8fCB0
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW0pOworfQorCiB2b2lkIE5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xvc2UoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CkBAIC0xMzMsNyArMTQ3LDYgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNs
b3NlKCkKIAogICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVm
IHsgKnRoaXMgfV0oKSBtdXRhYmxlIHsKICAgICAgICAgbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5h
Z2Vycy5jbGVhcigpOwotICAgICAgICBtX3Nlc3Npb25PcmlnaW5TdG9yYWdlTWFuYWdlcnMuY2xl
YXIoKTsKICAgICAgICAgbV9maWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5ID0gbnVsbHB0
cjsKIAogICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBX
VEZNb3ZlKHByb3RlY3RlZFRoaXMpXSB7IH0pOwpAQCAtMTc3LDcgKzE5MCw3IEBAIHN0YXRpYyBT
dHJpbmcgZW5jb2RlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaWxlU3lzdGVtOjpTYWx0IHNhbHQp
CiBzdGF0aWMgU3RyaW5nIG9yaWdpbkRpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJiByb290UGF0
aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIEZpbGVTeXN0ZW06OlNhbHQg
c2FsdCkKIHsKICAgICBpZiAocm9vdFBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcm9v
dFBhdGg7CisgICAgICAgIHJldHVybiBTdHJpbmcgeyB9OwogCiAgICAgYXV0byBlbmNvZGVkVG9w
T3JpZ2luID0gZW5jb2RlKG9yaWdpbi50b3BPcmlnaW4udG9TdHJpbmcoKSwgc2FsdCk7CiAgICAg
YXV0byBlbmNvZGVkT3BlbmluZ09yaWdpbiA9IGVuY29kZShvcmlnaW4uY2xpZW50T3JpZ2luLnRv
U3RyaW5nKCksIHNhbHQpOwpAQCAtMTg2LDYgKzE5OSw4IEBAIHN0YXRpYyBTdHJpbmcgb3JpZ2lu
RGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBjb25zdCBXZWJDb3JlOjpDbGll
bnRPCiAKIHN0YXRpYyBTdHJpbmcgb3JpZ2luRmlsZVBhdGgoY29uc3QgU3RyaW5nJiBkaXJlY3Rv
cnkpCiB7CisgICAgaWYgKGRpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJp
bmcgeyB9OwogICAgIHJldHVybiBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
ZGlyZWN0b3J5LCAib3JpZ2luIl9zKTsKIH0KIApAQCAtMTk2LDE2ICsyMTEsMzQgQEAgT3JpZ2lu
U3RvcmFnZU1hbmFnZXImIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6bG9jYWxPcmlnaW5TdG9yYWdl
TWFuYWdlcihjb25zdCBXZWIKICAgICByZXR1cm4gKm1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdl
cnMuZW5zdXJlKG9yaWdpbiwgWyZdIHsKICAgICAgICAgYXV0byBvcmlnaW5EaXJlY3RvcnkgPSBv
cmlnaW5EaXJlY3RvcnlQYXRoKG1fcGF0aCwgb3JpZ2luLCBtX3NhbHQpOwogICAgICAgICB3cml0
ZU9yaWdpblRvRmlsZUlmTmVjZXNzYXJ5KG9yaWdpbkZpbGVQYXRoKG9yaWdpbkRpcmVjdG9yeSks
IG9yaWdpbik7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPE9yaWdpblN0b3JhZ2VNYW5hZ2Vy
PihXVEZNb3ZlKG9yaWdpbkRpcmVjdG9yeSkpOworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxP
cmlnaW5TdG9yYWdlTWFuYWdlcj4oV1RGTW92ZShvcmlnaW5EaXJlY3RvcnkpLCBMb2NhbFN0b3Jh
Z2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VGaWxlUGF0aChtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgs
IG9yaWdpbikpOwogICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotdm9pZCBOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OnJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK2Jvb2wgTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
OjpyZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUoY29uc3QgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX2xvY2FsT3Jp
Z2luU3RvcmFnZU1hbmFnZXJzLmZpbmQob3JpZ2luKTsgaXRlcmF0b3IgIT0gbV9sb2NhbE9yaWdp
blN0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkgewotICAgICAgICBpZiAoIWl0ZXJhdG9yLT52YWx1ZS0+
aXNBY3RpdmUoKSkKLSAgICAgICAgICAgIG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMucmVt
b3ZlKGl0ZXJhdG9yKTsKLSAgICB9CisgICAgYXV0byBpdGVyYXRvciA9IG1fbG9jYWxPcmlnaW5T
dG9yYWdlTWFuYWdlcnMuZmluZChvcmlnaW4pOworICAgIGlmIChpdGVyYXRvciA9PSBtX2xvY2Fs
T3JpZ2luU3RvcmFnZU1hbmFnZXJzLmVuZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmIChpdGVyYXRvci0+dmFsdWUtPmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMucmVtb3ZlKGl0ZXJhdG9yKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZU9y
aWdpbkRpcmVjdG9yeUlmUG9zc2libGUoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmln
aW4pCit7CisgICAgYm9vbCBpc0VtcHR5ID0gbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihvcmln
aW4pLmlzRW1wdHkoKTsKKyAgICBib29sIHJlbW92ZWQgPSByZW1vdmVPcmlnaW5TdG9yYWdlTWFu
YWdlcklmUG9zc2libGUob3JpZ2luKTsKKyAgICBpZiAoIXJlbW92ZWQgfHwgIWlzRW1wdHkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gb3JpZ2luRGlyZWN0b3J5ID0gb3JpZ2luRGlyZWN0
b3J5UGF0aChtX3BhdGgsIG9yaWdpbiwgbV9zYWx0KTsKKyAgICBhdXRvIGZpbGVQYXRoID0gb3Jp
Z2luRmlsZVBhdGgob3JpZ2luRGlyZWN0b3J5KTsKKyAgICBkZWxldGVPcmlnaW5GaWxlSWZOZWNl
c3NhcnkoZmlsZVBhdGgpOworICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KG9y
aWdpbkRpcmVjdG9yeSk7CiB9CiAKIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpwZXJzaXN0
ZWQoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yMzIsOSArMjY1LDYgQEAgdm9p
ZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsZWFyU3RvcmFnZUZvclRlc3RpbmcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGMKICAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9sb2Nh
bE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKICAgICAgICAgICAgIG1hbmFnZXItPnNl
dFBlcnNpc3RlZChmYWxzZSk7CiAKLSAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zZXNz
aW9uT3JpZ2luU3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKQotICAgICAgICAgICAgbWFuYWdlci0+
c2V0UGVyc2lzdGVkKGZhbHNlKTsKLQogICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAgICAgfSk7CkBAIC0zODIsMTQgKzQxMiw2IEBAIHZv
aWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpnZXRIYW5kbGUoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBXZWJDb3JlOjpGaWxlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoaGFuZGxlLT5nZXRI
YW5kbGUoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBXVEZNb3ZlKG5hbWUpKSk7CiB9CiAKLXN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVEYXRhVHlwZT4gdG9XZWJzaXRlRGF0YVR5cGUoY29uc3Qg
U3RyaW5nJiBzdG9yYWdlVHlwZSkKLXsKLSAgICBpZiAoc3RvcmFnZVR5cGUgPT0gIkZpbGVTeXN0
ZW0iKQotICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtOwotCi0gICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQogdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZv
ckVhY2hPcmlnaW5EaXJlY3RvcnkoY29uc3QgRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4m
IGFwcGx5KQogewogICAgIGZvciAoYXV0byYgdG9wT3JpZ2luIDogRmlsZVN5c3RlbTo6bGlzdERp
cmVjdG9yeShtX3BhdGgpKSB7CkBAIC00MDEsMzAgKzQyMyw0MyBAQCB2b2lkIE5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6Zm9yRWFjaE9yaWdpbkRpcmVjdG9yeShjb25zdCBGdW5jdGlvbjx2b2lkKGNv
bnN0IFN0cgogICAgICAgICB9CiAKICAgICAgICAgZm9yIChhdXRvJiBvcGVuaW5nT3JpZ2luIDog
b3BlbmluZ09yaWdpbnMpIHsKKyAgICAgICAgICAgIGlmIChvcGVuaW5nT3JpZ2luLnN0YXJ0c1dp
dGgoJy4nKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICAgICAgYXV0byBv
cGVuaW5nT3JpZ2luRGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KHRvcE9yaWdpbkRpcmVjdG9yeSwgb3BlbmluZ09yaWdpbik7CiAgICAgICAgICAgICBhcHBs
eShvcGVuaW5nT3JpZ2luRGlyZWN0b3J5KTsKICAgICAgICAgfQogICAgIH0KIH0KIAorSGFzaFNl
dDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Z2V0QWxsT3Jp
Z2lucygpCit7CisgICAgSGFzaFNldDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IGFsbE9yaWdpbnM7
CisgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmtl
eXMoKSkKKyAgICAgICAgYWxsT3JpZ2lucy5hZGQob3JpZ2luKTsKKworICAgIGZvckVhY2hPcmln
aW5EaXJlY3RvcnkoWyZdKGF1dG8gZGlyZWN0b3J5KSB7CisgICAgICAgIGlmIChhdXRvIG9yaWdp
biA9IHJlYWRPcmlnaW5Gcm9tRmlsZShvcmlnaW5GaWxlUGF0aChkaXJlY3RvcnkpKSkKKyAgICAg
ICAgICAgIGFsbE9yaWdpbnMuYWRkKCpvcmlnaW4pOworICAgIH0pOworCisgICAgZm9yIChhdXRv
JiBvcmlnaW4gOiBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpvcmlnaW5zT2ZMb2NhbFN0b3JhZ2VEYXRh
KG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkpCisgICAgICAgIGFsbE9yaWdpbnMuYWRkKFdlYkNv
cmU6OkNsaWVudE9yaWdpbiB7IG9yaWdpbiwgb3JpZ2luIH0pOworCisgICAgcmV0dXJuIGFsbE9y
aWdpbnM7Cit9CisKIFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+IE5ldHdvcmtTdG9yYWdlTWFu
YWdlcjo6ZmV0Y2hEYXRhRnJvbURpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdGFyZ2V0
VHlwZXMpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBIYXNoTWFw
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4+
IG9yaWdpblR5cGVzOwotICAgIGZvckVhY2hPcmlnaW5EaXJlY3RvcnkoWyZdKGF1dG8gZGlyZWN0
b3J5KSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBvcmlnaW4gPSByZWFkT3JpZ2luRnJvbUZpbGUo
b3JpZ2luRmlsZVBhdGgoZGlyZWN0b3J5KSk7Ci0gICAgICAgIGlmICghb3JpZ2luKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIGZvciAoYXV0byYgc3RvcmFnZVR5cGUgOiBGaWxlU3lz
dGVtOjpsaXN0RGlyZWN0b3J5KGRpcmVjdG9yeSkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHR5
cGUgPSB0b1dlYnNpdGVEYXRhVHlwZShzdG9yYWdlVHlwZSk7IHR5cGUgJiYgdGFyZ2V0VHlwZXMu
Y29udGFpbnMoKnR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gUmV0dXJuIGJvdGggdG9wIG9y
aWdpbiBhbmQgb3BlbmluZyBvcmlnaW4gZm9yIHRoaXMgZGF0YS4KLSAgICAgICAgICAgICAgICBv
cmlnaW5UeXBlcy5hZGQob3JpZ2luLT5jbGllbnRPcmlnaW4sIE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+IHsgfSkuaXRlcmF0b3ItPnZhbHVlLmFkZCgqdHlwZSk7Ci0gICAgICAgICAgICAgICAg
b3JpZ2luVHlwZXMuYWRkKG9yaWdpbi0+dG9wT3JpZ2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQoKnR5cGUpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfSk7CisgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBnZXRBbGxPcmlnaW5zKCkp
IHsKKyAgICAgICAgYXV0byB0eXBlcyA9IGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2lu
KS5mZXRjaERhdGFUeXBlc0luTGlzdCh0YXJnZXRUeXBlcyk7CisgICAgICAgIG9yaWdpblR5cGVz
LmFkZChvcmlnaW4uY2xpZW50T3JpZ2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB7IH0p
Lml0ZXJhdG9yLT52YWx1ZS5hZGQodHlwZXMpOworICAgICAgICBvcmlnaW5UeXBlcy5hZGQob3Jp
Z2luLnRvcE9yaWdpbiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4geyB9KS5pdGVyYXRvci0+
dmFsdWUuYWRkKHR5cGVzKTsKKyAgICAgICAgcmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBv
c3NpYmxlKG9yaWdpbik7CisgICAgfQogCiAgICAgVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4g
ZW50cmllczsKICAgICBmb3IgKGF1dG8gW29yaWdpbiwgdHlwZXNdIDogb3JpZ2luVHlwZXMpIHsK
QEAgLTQ0OCwzNSArNDgzLDIyIEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpmZXRjaERh
dGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIENvbXBsZXRpCiAgICAgfSk7CiB9
CiAKLVZlY3RvcjxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
ZGVsZXRlRGF0YU9uRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgV2FsbFRp
bWUgbW9kaWZpZWRTaW5jZVRpbWUsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJik+JiBmaWx0ZXIpCitIYXNoU2V0PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4g
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrKE9wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+IHR5cGVzLCBXYWxsVGltZSBtb2RpZmllZFNpbmNlVGltZSwgY29uc3QgRnVuY3Rp
b248Ym9vbChjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKT4mIGZpbHRlcikKIHsKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpDbGllbnRP
cmlnaW4+IGRlbGV0ZWRPcmlnaW5zOwotICAgIGZvckVhY2hPcmlnaW5EaXJlY3RvcnkoWyZdKGF1
dG8gZGlyZWN0b3J5KSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBmaWxlUGF0aCA9IG9yaWdpbkZp
bGVQYXRoKGRpcmVjdG9yeSk7Ci0gICAgICAgIGF1dG8gb3JpZ2luID0gcmVhZE9yaWdpbkZyb21G
aWxlKGZpbGVQYXRoKTsKLSAgICAgICAgaWYgKCFvcmlnaW4pIHsKLSAgICAgICAgICAgIC8vIElm
IG9yaWdpbiBjYW5ub3QgYmUgcmV0cmlldmVkLCBidXQgd2UgYXJlIGFza2VkIHRvIHJlbW92ZSBk
YXRhIGZvciBhbGwgb3JpZ2lucywgcmVtb3ZlIGl0LgotICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoU3RvcmFnZSwgIk5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YU9uRGlzayBm
YWlsZWQgdG8gcmVhZCBvcmlnaW4gZnJvbSAnJXMnIiwgZmlsZVBhdGgudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBpZiAoZmlsdGVyKFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IH0pKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byB0ZW1wT3JpZ2luU3RvcmFnZU1hbmFnZXIgPSBtYWtlVW5pcXVl
PE9yaWdpblN0b3JhZ2VNYW5hZ2VyPihTdHJpbmcgeyBkaXJlY3RvcnkgfSk7Ci0gICAgICAgICAg
ICAgICAgdGVtcE9yaWdpblN0b3JhZ2VNYW5hZ2VyLT5kZWxldGVEYXRhKHR5cGVzLCBtb2RpZmll
ZFNpbmNlVGltZSk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZUlmTmVjZXNzYXJ5
KGZpbGVQYXRoKTsKLSAgICAgICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVj
dG9yeShkaXJlY3RvcnkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFmaWx0ZXIoKm9yaWdpbikpCi0gICAgICAgICAgICByZXR1
cm47CisgICAgSGFzaFNldDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IGRlbGV0ZWRPcmlnaW5zOwor
ICAgIGZvciAoYXV0byYgb3JpZ2luIDogZ2V0QWxsT3JpZ2lucygpKSB7CisgICAgICAgIGlmICgh
ZmlsdGVyKG9yaWdpbikpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBkZWxldGVk
T3JpZ2lucy5hcHBlbmQoKm9yaWdpbik7Ci0gICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFn
ZXIoKm9yaWdpbikuZGVsZXRlRGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZVRpbWUpOwotICAgICAg
ICByZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUoKm9yaWdpbik7Ci0gICAgICAg
IGRlbGV0ZU9yaWdpbkZpbGVJZk5lY2Vzc2FyeShmaWxlUGF0aCk7Ci0gICAgICAgIEZpbGVTeXN0
ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KGRpcmVjdG9yeSk7Ci0gICAgfSk7CisgICAgICAgIGF1
dG8gZXhpc3RpbmdEYXRhVHlwZXMgPSBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbiku
ZmV0Y2hEYXRhVHlwZXNJbkxpc3QodHlwZXMpOworICAgICAgICBpZiAoIWV4aXN0aW5nRGF0YVR5
cGVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZGVsZXRlZE9yaWdpbnMuYWRkKG9yaWdpbik7
CisgICAgICAgICAgICBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbikuZGVsZXRlRGF0
YSh0eXBlcywgbW9kaWZpZWRTaW5jZVRpbWUpOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZU9y
aWdpbkRpcmVjdG9yeUlmUG9zc2libGUob3JpZ2luKTsKKyAgICB9CiAKICAgICByZXR1cm4gZGVs
ZXRlZE9yaWdpbnM7CiB9CkBAIC01NDEsNSArNTYzLDE2MCBAQCB2b2lkIE5ldHdvcmtTdG9yYWdl
TWFuYWdlcjo6ZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0
ZURhdAogICAgIH0pOwogfQogCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6bW92ZURhdGEo
Y29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSYgdGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAg
ICBBU1NFUlQoIW1fY2xvc2VkKTsKKworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgc291cmNlID0gY3Jvc3NUaHJlYWRDb3B5KHNvdXJj
ZSksIHRhcmdldCA9IGNyb3NzVGhyZWFkQ29weSh0YXJnZXQpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBhdXRvIHNv
dXJjZU9yaWdpbiA9IFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IHNvdXJjZSwgc291cmNlIH07Cisg
ICAgICAgIGF1dG8gdGFyZ2V0T3JpZ2luID0gV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgdGFyZ2V0
LCB0YXJnZXQgfTsKKyAgICAgICAgCisgICAgICAgIC8vIENsZWFyIGV4aXN0aW5nIGRhdGEgb2Yg
dGFyZ2V0IG9yaWdpbi4KKyAgICAgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMg
PSB7IFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSwgV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0
b3JhZ2UsIFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UgIH07CisgICAgICAgIGxvY2Fs
T3JpZ2luU3RvcmFnZU1hbmFnZXIodGFyZ2V0T3JpZ2luKS5kZWxldGVEYXRhKHR5cGVzLCAtV2Fs
bFRpbWU6OmluZmluaXR5KCkpOworICAgICAgICByZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklm
UG9zc2libGUodGFyZ2V0T3JpZ2luKTsKKworICAgICAgICAvLyBNb3ZlIGRhdGEgZnJvbSBzb3Vy
Y2Ugb3JpZ2luIHRvIHRhcmdldCBvcmlnaW4uCisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1h
bmFnZXIoc291cmNlT3JpZ2luKS5tb3ZlRGF0YShvcmlnaW5EaXJlY3RvcnlQYXRoKG1fcGF0aCwg
dGFyZ2V0T3JpZ2luLCBtX3NhbHQpLCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VG
aWxlUGF0aChtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgsIHRhcmdldE9yaWdpbikpOworICAgICAg
ICByZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUoc291cmNlT3JpZ2luKTsKKwor
ICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c3VzcGVuZChD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcXVldWUtPnN1c3BlbmQoW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSB7CisgICAgICAgIGZvciAoYXV0byYgbWFuYWdl
ciA6IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgICAg
IGlmIChhdXRvIGxvY2FsU3RvcmFnZU1hbmFnZXIgPSBtYW5hZ2VyLT5leGlzdGluZ0xvY2FsU3Rv
cmFnZU1hbmFnZXIoKSkKKyAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2VNYW5hZ2VyLT5zeW5j
TG9jYWxTdG9yYWdlKCk7CisgICAgICAgIH0KKyAgICB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZXN1bWUoKQoreworICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3F1ZXVlLT5yZXN1bWUoKTsKK30K
Kwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKQor
eworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3F1ZXVlLT5kaXNwYXRj
aChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dIHsKKyAgICAgICAgZm9yIChh
dXRvJiBtYW5hZ2VyIDogbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkgewor
ICAgICAgICAgICAgaWYgKGF1dG8gbG9jYWxTdG9yYWdlTWFuYWdlciA9IG1hbmFnZXItPmV4aXN0
aW5nTG9jYWxTdG9yYWdlTWFuYWdlcigpKQorICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZU1h
bmFnZXItPmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKKyAgICAgICAgfQorICAgIH0pOworfQor
Cit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c3luY0xvY2FsU3RvcmFnZShDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gUmVmIHsgKnRoaXMgfSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9s
b2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKGF1
dG8gbG9jYWxTdG9yYWdlTWFuYWdlciA9IG1hbmFnZXItPmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFu
YWdlcigpKQorICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZU1hbmFnZXItPnN5bmNMb2NhbFN0
b3JhZ2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYmIHRvcE9yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQXJl
YUlkZW50aWZpZXIpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgV2ViQ29yZTo6Q2xpZW50T3JpZ2luIG9yaWdpbiA9IHsgdG9w
T3JpZ2luLCB0b3BPcmlnaW4gfTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihsb2NhbE9yaWdpblN0
b3JhZ2VNYW5hZ2VyKG9yaWdpbikubG9jYWxTdG9yYWdlTWFuYWdlcigqbV9zdG9yYWdlQXJlYVJl
Z2lzdHJ5KS5jb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwg
b3JpZ2luLCBtX3F1ZXVlLmNvcHlSZWYoKSkpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFu
YWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGEmJiB0b3BPcmlnaW4sIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmIG9w
ZW5pbmdPcmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFyZWFJZGVudGlmaWVy
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3Jp
Z2luID0geyB0b3BPcmlnaW4sIG9wZW5pbmdPcmlnaW4gfTsKKyAgICBjb21wbGV0aW9uSGFuZGxl
cihsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbikubG9jYWxTdG9yYWdlTWFuYWdlcigq
bV9zdG9yYWdlQXJlYVJlZ2lzdHJ5KS5jb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVh
KGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgb3JpZ2luKSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGEmJiB0b3BPcmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
U3RvcmFnZUFyZWFJZGVudGlmaWVyKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBXZWJD
b3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luID0geyB0b3BPcmlnaW4sIHRvcE9yaWdpbiB9OworICAg
IGNvbXBsZXRpb25IYW5kbGVyKGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5zZXNz
aW9uU3RvcmFnZU1hbmFnZXIoKm1fc3RvcmFnZUFyZWFSZWdpc3RyeSkuY29ubmVjdFRvU2Vzc2lv
blN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgb3JpZ2luLCBpZGVudGlmaWVyKSk7
Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkaXNjb25uZWN0RnJvbVN0b3JhZ2VB
cmVhKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlk
ZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRv
IHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9yYWdlQXJlYShpZGVu
dGlmaWVyKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoc3RvcmFnZUFyZWEtPnN0b3JhZ2VUeXBlKCkgPT0gU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdl
VHlwZTo6TG9jYWwpCisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIoc3RvcmFnZUFy
ZWEtPm9yaWdpbigpKS5sb2NhbFN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VBcmVhUmVnaXN0cnkp
LmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBpZGVudGlm
aWVyKTsKKyAgICBlbHNlCisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIoc3RvcmFn
ZUFyZWEtPm9yaWdpbigpKS5zZXNzaW9uU3RvcmFnZU1hbmFnZXIoKm1fc3RvcmFnZUFyZWFSZWdp
c3RyeSkuZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIGlk
ZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xvbmVTZXNzaW9u
U3RvcmFnZU5hbWVzcGFjZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFN0b3JhZ2VOYW1l
c3BhY2VJZGVudGlmaWVyIGZyb21JZGVudGlmaWVyLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmll
ciB0b0lkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLnZhbHVl
cygpKSB7CisgICAgICAgIGlmIChhdXRvKiBzZXNzaW9uU3RvcmFnZU1hbmFnZXIgPSBtYW5hZ2Vy
LT5leGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigpKQorICAgICAgICAgICAgc2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyLT5jbG9uZVN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgZnJv
bUlkZW50aWZpZXIsIHRvSWRlbnRpZmllcik7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6Z2V0VmFsdWVzKFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBpZiAoYXV0byBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFSZWdpc3RyeS0+Z2V0U3Rv
cmFnZUFyZWEoaWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihz
dG9yYWdlQXJlYS0+YWxsSXRlbXMoKSk7CisgICAgCisgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKHsgfSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzZXRJdGVtKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIs
IFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHN0b3Jh
Z2VNYXBTZWVkLCBTdHJpbmcmJiBrZXksIFN0cmluZyYmIHZhbHVlLCBTdHJpbmcmJiB1cmxTdHJp
bmcpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBib29sIGhhc1F1
b3RhRXJyb3IgPSBmYWxzZTsKKyAgICBpZiAoYXV0byBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFy
ZWFSZWdpc3RyeS0+Z2V0U3RvcmFnZUFyZWEoaWRlbnRpZmllcikpIHsKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBzdG9yYWdlQXJlYS0+c2V0SXRlbShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIGltcGxJ
ZGVudGlmaWVyLCBTdHJpbmcgeyBrZXkgfSwgV1RGTW92ZSh2YWx1ZSksIFdURk1vdmUodXJsU3Ry
aW5nKSk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgaGFzUXVvdGFFcnJvciA9
IChyZXN1bHQuZXJyb3IoKSA9PSBTdG9yYWdlRXJyb3I6OlF1b3RhRXhjZWVkZWQpOworICAgIH0K
KworICAgIGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFNldEl0
ZW0oc3RvcmFnZU1hcFNlZWQsIGtleSwgaGFzUXVvdGFFcnJvciksIGlkZW50aWZpZXIpOworfQor
Cit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBTdG9yYWdlQXJl
YUltcGxJZGVudGlmaWVyIGltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwg
U3RyaW5nJiYga2V5LCBTdHJpbmcmJiB1cmxTdHJpbmcpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBpZiAoYXV0byBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFS
ZWdpc3RyeS0+Z2V0U3RvcmFnZUFyZWEoaWRlbnRpZmllcikpCisgICAgICAgIHN0b3JhZ2VBcmVh
LT5yZW1vdmVJdGVtKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaW1wbElkZW50aWZpZXIsIGtleSwg
V1RGTW92ZSh1cmxTdHJpbmcpKTsKKworICAgIGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3Rv
cmFnZUFyZWFNYXA6OkRpZFJlbW92ZUl0ZW0oc3RvcmFnZU1hcFNlZWQsIFdURk1vdmUoa2V5KSks
IGlkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xlYXIoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3Rv
cmFnZU1hcFNlZWQsIFN0cmluZyYmIHVybFN0cmluZykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIGlmIChhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJl
Z2lzdHJ5LT5nZXRTdG9yYWdlQXJlYShpZGVudGlmaWVyKSkKKyAgICAgICAgc3RvcmFnZUFyZWEt
PmNsZWFyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaW1wbElkZW50aWZpZXIsIFdURk1vdmUodXJs
U3RyaW5nKSk7CisKKyAgICBjb25uZWN0aW9uLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFw
OjpEaWRDbGVhcihzdG9yYWdlTWFwU2VlZCksIGlkZW50aWZpZXIpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5oCmluZGV4IDJhZGRmMmI1ZTIwYWQz
NmQyOGU0NDU5N2VhNDEzZmZlODk2MWE0MGYuLmI4MDk3MjU4ZmRiOTJkMTBjNTcwMDM0MDVjZjgz
Y2QxMDllMDBmZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmgKQEAgLTI4LDYgKzI4LDkgQEAK
ICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VFcnJv
ci5oIgogI2luY2x1ZGUgIk9yaWdpblN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RvcmFn
ZUFyZWFJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllci5o
IgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiV2Vi
c2l0ZURhdGEuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIuaD4KQEAgLTQ2LDEwICs0OSwxMiBA
QCBzdHJ1Y3QgQ2xpZW50T3JpZ2luOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEZpbGVT
eXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnk7CitjbGFzcyBTdG9yYWdlQXJlYVJlZ2lzdHJ5Owog
CiBjbGFzcyBOZXR3b3JrU3RvcmFnZU1hbmFnZXIgZmluYWwgOiBwdWJsaWMgSVBDOjpDb25uZWN0
aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyPiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmlu
ZyYgcGF0aCk7CisgICAgc3RhdGljIFJlZjxOZXR3b3JrU3RvcmFnZU1hbmFnZXI+IGNyZWF0ZShQ
QUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGN1c3RvbUxv
Y2FsU3RvcmFnZVBhdGgpOworICAgIHN0YXRpYyBib29sIGNhbkhhbmRsZVR5cGVzKE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+KTsKIAogICAgIHZvaWQgc3RhcnRSZWNlaXZpbmdNZXNzYWdlRnJv
bUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uJik7CiAgICAgdm9pZCBzdG9wUmVjZWl2aW5nTWVz
c2FnZUZyb21Db25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiYpOwpAQCAtNjEsMjIgKzY2LDMwIEBA
IHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4s
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGRlbGV0ZURhdGFNb2RpZmllZFNpbmNlKE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKICAgICB2b2lkIGRlbGV0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMoT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
bj4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+JiYpPiYmKTsKKyAgICB2b2lkIG1vdmVEYXRhKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYgc291cmNlLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIHRh
cmdldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHN1c3BlbmQoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHJlc3VtZSgpOworICAgIHZvaWQg
aGFuZGxlTG93TWVtb3J5V2FybmluZygpOworICAgIHZvaWQgc3luY0xvY2FsU3RvcmFnZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiBwcml2YXRlOgotICAgIE5ldHdvcmtTdG9yYWdl
TWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBOZXR3b3Jr
U3RvcmFnZU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
U3RyaW5nJiBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKTsKICAgICB+TmV0d29ya1N0b3JhZ2VNYW5h
Z2VyKCk7CiAgICAgT3JpZ2luU3RvcmFnZU1hbmFnZXImIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFn
ZXIoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7Ci0gICAgdm9pZCByZW1vdmVPcmlnaW5T
dG9yYWdlTWFuYWdlcklmUG9zc2libGUoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7Cisg
ICAgYm9vbCByZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUoY29uc3QgV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luJik7CisgICAgdm9pZCBkZWxldGVPcmlnaW5EaXJlY3RvcnlJZlBvc3Np
YmxlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOwogICAgIEZpbGVTeXN0ZW1TdG9yYWdl
SGFuZGxlUmVnaXN0cnkmIGZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkoKTsKIAogICAg
IHZvaWQgZm9yRWFjaE9yaWdpbkRpcmVjdG9yeShjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0
cmluZyYpPiYpOworICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBnZXRBbGxPcmln
aW5zKCk7CiAgICAgVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4gZmV0Y2hEYXRhRnJvbURpc2so
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4pOwotICAgIFZlY3RvcjxXZWJDb3JlOjpDbGllbnRP
cmlnaW4+IGRlbGV0ZURhdGFPbkRpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxU
aW1lLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpPiYp
OworICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBkZWxldGVEYXRhT25EaXNrKE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSwgY29uc3QgRnVuY3Rpb248Ym9vbChj
b25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKT4mKTsKIAogICAgIC8vIElQQzo6TWVzc2FnZVJl
Y2VpdmVyIChpbXBsZW1lbnRlZCBieSBnZW5lcmF0ZWQgY29kZSkKICAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlk
UmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIFVuaXF1
ZVJlZjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpOwogCi0gICAgLy8gTWVzc2FnZSBoYW5k
bGVycworICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMgZm9yIEZpbGVTeXN0ZW0uCiAgICAgdm9pZCBw
ZXJzaXN0ZWQoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJik7CiAgICAgdm9pZCBwZXJzaXN0KGNvbnN0IFdlYkNvcmU6OkNsaWVudE9y
aWdpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgZmlsZVN5
c3RlbUdldERpcmVjdG9yeShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBXZWJDb3JlOjpDbGllbnRP
cmlnaW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cGVjdGVkPFdlYkNvcmU6OkZpbGVTeXN0
ZW1IYW5kbGVJZGVudGlmaWVyLCBGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOwpAQCAtODgs
MjIgKzEwMSwzMyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlRW50cnkoV2ViQ29yZTo6Rmls
ZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBkZWxldGVS
ZWN1cnNpdmVseSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPEZpbGVTeXN0
ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCByZXNvbHZlKFdlYkNvcmU6OkZpbGVTeXN0
ZW1IYW5kbGVJZGVudGlmaWVyLCBXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChFeHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgRmlsZVN5c3Rl
bVN0b3JhZ2VFcnJvcj4pPiYmKTsKICAgICB2b2lkIGdldEZpbGUoV2ViQ29yZTo6RmlsZVN5c3Rl
bUhhbmRsZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwZWN0ZWQ8U3RyaW5n
LCBGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOwotCiAgICAgdXNpbmcgQWNjZXNzSGFuZGxl
SW5mbyA9IHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50
aWZpZXIsIElQQzo6U2hhcmVkRmlsZUhhbmRsZT47CiAgICAgdm9pZCBjcmVhdGVTeW5jQWNjZXNz
SGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEV4cGVjdGVkPEFjY2Vzc0hhbmRsZUluZm8sIEZpbGVTeXN0ZW1TdG9yYWdlRXJy
b3I+KT4mJik7CiAgICAgdm9pZCBjbG9zZUFjY2Vzc0hhbmRsZShXZWJDb3JlOjpGaWxlU3lzdGVt
SGFuZGxlSWRlbnRpZmllciwgV2ViQ29yZTo6RmlsZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVu
dGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8RmlsZVN5c3RlbVN0
b3JhZ2VFcnJvcj4pPiYmKTsKICAgICB2b2lkIGdldEhhbmRsZU5hbWVzKFdlYkNvcmU6OkZpbGVT
eXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cGVjdGVkPFZl
Y3RvcjxTdHJpbmc+LCBGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOwogICAgIHZvaWQgZ2V0
SGFuZGxlKElQQzo6Q29ubmVjdGlvbiYsIFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlm
aWVyLCBTdHJpbmcmJiBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cGVjdGVkPHN0ZDo6
cGFpcjxXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgYm9vbD4sIEZpbGVTeXN0
ZW1TdG9yYWdlRXJyb3I+KT4mJik7CisgICAgCisgICAgLy8gTWVzc2FnZSBoYW5kbGVycyBmb3Ig
V2ViU3RvcmFnZS4KKyAgICB2b2lkIGNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25u
ZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YSYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBcmVhSWRlbnRpZmllcik+
JiYpOworICAgIHZvaWQgY29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShJUEM6OkNv
bm5lY3Rpb24mLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhJiYsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0b3JhZ2VBcmVhSWRlbnRpZmllcik+JiYpOworICAgIHZvaWQgY29ubmVjdFRv
U2Vzc2lvblN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VOYW1lc3BhY2VJZGVu
dGlmaWVyLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChTdG9yYWdlQXJlYUlkZW50aWZpZXIpPiYmKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RGcm9t
U3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyKTsKKyAg
ICB2b2lkIGNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoSVBDOjpDb25uZWN0aW9uJiwgU3Rv
cmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyKTsKKyAg
ICB2b2lkIGdldFZhbHVlcyhTdG9yYWdlQXJlYUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKT4mJik7CisgICAgdm9pZCBzZXRJ
dGVtKElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgU3RvcmFnZUFyZWFJ
bXBsSWRlbnRpZmllciwgdWludDY0X3Qgc2VlZCwgU3RyaW5nJiYga2V5LCBTdHJpbmcmJiB2YWx1
ZSwgU3RyaW5nJiYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIHJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0
aW9uJiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCB1
aW50NjRfdCBzZWVkLCBTdHJpbmcmJiBrZXksIFN0cmluZyYmIHVybFN0cmluZyk7CisgICAgdm9p
ZCBjbGVhcihJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIsIFN0b3JhZ2VB
cmVhSW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHNlZWQsIFN0cmluZyYmIHVybFN0cmluZyk7CiAK
ICAgICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKLSAgICBSZWY8V29ya1F1ZXVlPiBtX3F1
ZXVlOworICAgIFJlZjxTdXNwZW5kYWJsZVdvcmtRdWV1ZT4gbV9xdWV1ZTsKICAgICBTdHJpbmcg
bV9wYXRoOwogICAgIEZpbGVTeXN0ZW06OlNhbHQgbV9zYWx0OwogICAgIGJvb2wgbV9jbG9zZWQg
eyBmYWxzZSB9OwogICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1
ZV9wdHI8T3JpZ2luU3RvcmFnZU1hbmFnZXI+PiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJz
OwotICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8T3Jp
Z2luU3RvcmFnZU1hbmFnZXI+PiBtX3Nlc3Npb25PcmlnaW5TdG9yYWdlTWFuYWdlcnM7CiAgICAg
V2Vha0hhc2hTZXQ8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb25zOyAvLyBNYWluIHRocmVh
ZCBvbmx5LgogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lz
dHJ5PiBtX2ZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFN0b3JhZ2VBcmVhUmVnaXN0cnk+IG1fc3RvcmFnZUFyZWFSZWdpc3RyeTsKKyAgICBTdHJp
bmcgbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29y
a1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbgppbmRleCA0ZTQwNWM2
ZWVhZDMyNmUyNWI0MzE2NDIwNzA4MDk1ZmE2MGRjODM4Li4wNDIyYjYzNDc1MWQwMzg1Zjg0ZTAx
ZjY0YWM2MWRhZjMxYzE1ZTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIubWVz
c2FnZXMuaW4KQEAgLTM1LDkgKzM1LDE4IEBACiAgICAgUmVzb2x2ZShXZWJDb3JlOjpGaWxlU3lz
dGVtSGFuZGxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxl
SWRlbnRpZmllciB0YXJnZXRJZGVudGlmaWVyKSAtPiAoRXhwZWN0ZWQ8VmVjdG9yPFN0cmluZz4s
IFdlYktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYwogICAgIE1vdmUo
V2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6
RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgZGVzdGluYXRpb25JZGVudGlmaWVyLCBTdHJpbmcg
bmV3TmFtZSkgLT4gKHN0ZDo6b3B0aW9uYWw8V2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9y
PiByZXN1bHQpIEFzeW5jCiAgICAgR2V0RmlsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRl
bnRpZmllciBpZGVudGlmaWVyKSAtPiAoRXhwZWN0ZWQ8U3RyaW5nLCBXZWJLaXQ6OkZpbGVTeXN0
ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkgQXN5bmMKLQogICAgIENyZWF0ZVN5bmNBY2Nlc3NIYW5k
bGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKEV4
cGVjdGVkPHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50
aWZpZXIsIElQQzo6U2hhcmVkRmlsZUhhbmRsZT4sIFdlYktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VF
cnJvcj4gcmVzdWx0KSBBc3luYwogICAgIENsb3NlQWNjZXNzSGFuZGxlKFdlYkNvcmU6OkZpbGVT
eXN0ZW1IYW5kbGVJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZpbGVTeXN0ZW1TeW5j
QWNjZXNzSGFuZGxlSWRlbnRpZmllciBhY2Nlc3NIYW5kbGVJZGVudGlmaWVyKSAtPiAoc3RkOjpv
cHRpb25hbDxXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkgQXN5bmMKICAg
ICBHZXRIYW5kbGVOYW1lcyhXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBpZGVu
dGlmaWVyKSAtPiAoRXhwZWN0ZWQ8VmVjdG9yPFN0cmluZz4sIFdlYktpdDo6RmlsZVN5c3RlbVN0
b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYwogICAgIEdldEhhbmRsZShXZWJDb3JlOjpGaWxlU3lz
dGVtSGFuZGxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBTdHJpbmcgbmFtZSkgLT4gKEV4cGVjdGVk
PHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgYm9vbD4sIFdl
YktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYyBXYW50c0Nvbm5lY3Rp
b24KKworICAgIENvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoV2ViS2l0OjpTdG9yYWdlTmFtZXNw
YWNlSWRlbnRpZmllciBzdG9yYWdlTmFtZXNwYWNlSUQsIHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGEgc2VjdXJpdHlPcmlnaW5EYXRhKSAtPiAoV2ViS2l0OjpTdG9yYWdlQXJlYUlk
ZW50aWZpZXIgaWRlbnRpZmllcikgU3luY2hyb25vdXMgV2FudHNDb25uZWN0aW9uCisgICAgQ29u
bmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJ
ZGVudGlmaWVyIHN0b3JhZ2VOYW1lc3BhY2VJRCwgc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YSB0b3BMZXZlbFNlY3VyaXR5T3JpZ2luRGF0YSwgc3RydWN0IFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YSBzZWN1cml0eU9yaWdpbkRhdGEpIC0+IChXZWJLaXQ6OlN0b3JhZ2VBcmVh
SWRlbnRpZmllciBpZGVudGlmaWVyKSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KKyAgICBD
b25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSWRlbnRp
ZmllciBzdG9yYWdlTmFtZXNwYWNlSUQsIHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGEgc2VjdXJpdHlPcmlnaW5EYXRhKSAtPiAoV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXIg
aWRlbnRpZmllcikgU3luY2hyb25vdXMgV2FudHNDb25uZWN0aW9uCisgICAgRGlzY29ubmVjdEZy
b21TdG9yYWdlQXJlYShXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKSBX
YW50c0Nvbm5lY3Rpb24KKyAgICBDbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKFdlYktpdDo6
U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgZnJvbVN0b3JhZ2VOYW1lc3BhY2VJRCwgV2ViS2l0
OjpTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciB0b1N0b3JhZ2VOYW1lc3BhY2VJRCkgV2FudHND
b25uZWN0aW9uCisgICAgR2V0VmFsdWVzKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlk
ZW50aWZpZXIpIC0+IChIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YWx1ZXMpIFN5bmNocm9ub3Vz
CisgICAgU2V0SXRlbShXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBX
ZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90
IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUsIFN0cmluZyB1cmxTdHJp
bmcpIFdhbnRzQ29ubmVjdGlvbgorICAgIFJlbW92ZUl0ZW0oV2ViS2l0OjpTdG9yYWdlQXJlYUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIGlt
cGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgU3RyaW5nIGtleSwgU3RyaW5n
IHVybFN0cmluZykgV2FudHNDb25uZWN0aW9uCisgICAgQ2xlYXIoV2ViS2l0OjpTdG9yYWdlQXJl
YUlkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVy
IGltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgU3RyaW5nIHVybFN0cmlu
ZykgV2FudHNDb25uZWN0aW9uCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcAppbmRleCAyNTRk
ZmUzYmZmNGE1NmQyZTk1OTIyNmJmY2ZiZmVkNTVhMjE1NjZjLi5mNmIzNjE5YTVkZTNkZDJhOTRh
ZjVkZGJkNTAzZjU3NjA0Yzk4ZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5jcHAKQEAgLTI4
LDE5ICsyOCwyNSBAQAogCiAjaW5jbHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIkxv
Y2FsU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCIK
KyNpbmNsdWRlICJTdG9yYWdlQXJlYVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFU
eXBlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVGaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8
d3RmL0ZpbGVTeXN0ZW0uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0YXRpYyBjb25zdGV4
cHIgYXV0byBvcmlnaW5GaWxlTmFtZSA9ICJvcmlnaW4iX3M7CiBlbnVtIGNsYXNzIE9yaWdpblN0
b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0TW9kZSA6IGJvb2wgeyBCZXN0RWZmb3J0LCBQZXJz
aXN0ZW50IH07CiAKIGNsYXNzIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBTdG9yYWdlQnVja2V0
KGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKKyAgICBT
dG9yYWdlQnVja2V0KGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRoKQogICAgICAgICA6IG1fcm9vdFBh
dGgocm9vdFBhdGgpCiAgICAgICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgICAg
ICwgbV9sb2NhbFN0b3JhZ2VQYXRoKGxvY2FsU3RvcmFnZVBhdGgpCiAgICAgewogICAgIH0KIApA
QCAtNTUsMTMgKzYxLDMxIEBAIHB1YmxpYzoKIAogICAgIGVudW0gY2xhc3MgU3RvcmFnZVR5cGUg
OiB1aW50OF90IHsKICAgICAgICAgRmlsZVN5c3RlbSwKKyAgICAgICAgTG9jYWxTdG9yYWdlLAor
ICAgICAgICBTZXNzaW9uU3RvcmFnZSwKICAgICB9OwogCisgICAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8V2Vic2l0ZURhdGFUeXBlPiB0b1dlYnNpdGVEYXRhVHlwZShjb25zdCBTdHJpbmcmIHN0b3Jh
Z2VJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgaWYgKHN0b3JhZ2VJZGVudGlmaWVyID09ICJG
aWxlU3lzdGVtIl9zKQorICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5
c3RlbTsKKyAgICAgICAgaWYgKHN0b3JhZ2VJZGVudGlmaWVyID09ICJMb2NhbFN0b3JhZ2UiX3Mp
CisgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2U7CisgICAg
ICAgIGlmIChzdG9yYWdlSWRlbnRpZmllciA9PSAiU2Vzc2lvblN0b3JhZ2UiX3MpCisgICAgICAg
ICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZTsKKworICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwogICAgIHN0YXRpYyBTdHJpbmcgdG9TdG9yYWdl
SWRlbnRpZmllcihTdG9yYWdlVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgICAgIGNhc2UgU3RvcmFnZVR5cGU6OkZpbGVTeXN0ZW06CiAgICAgICAgICAgICBy
ZXR1cm4gIkZpbGVTeXN0ZW0iX3M7CisgICAgICAgIGNhc2UgU3RvcmFnZVR5cGU6OkxvY2FsU3Rv
cmFnZToKKyAgICAgICAgICAgIHJldHVybiAiTG9jYWxTdG9yYWdlIl9zOworICAgICAgICBjYXNl
IFN0b3JhZ2VUeXBlOjpTZXNzaW9uU3RvcmFnZToKKyAgICAgICAgICAgIHJldHVybiAiU2Vzc2lv
blN0b3JhZ2UiX3M7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpAQCAtODYsMTggKzExMCwxMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fZmls
ZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOwogICAgIH0KIAotICAgIGJvb2wgaXNBY3RpdmUoKQorICAg
IExvY2FsU3RvcmFnZU1hbmFnZXImIGxvY2FsU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdp
c3RyeSYgcmVnaXN0cnkpCisgICAgeworICAgICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTWFuYWdl
cikKKyAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlciA9IG1ha2VVbmlxdWU8TG9jYWxT
dG9yYWdlTWFuYWdlcj4obV9sb2NhbFN0b3JhZ2VQYXRoLCByZWdpc3RyeSk7CisKKyAgICAgICAg
cmV0dXJuICptX2xvY2FsU3RvcmFnZU1hbmFnZXI7CisgICAgfQorCisgICAgTG9jYWxTdG9yYWdl
TWFuYWdlciogZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2xvY2FsU3RvcmFnZU1hbmFnZXIuZ2V0KCk7CisgICAgfQorCisgICAgU2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyJiBzZXNzaW9uU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYg
cmVnaXN0cnkpCiAgICAgewotICAgICAgICByZXR1cm4gISFtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFu
YWdlcjsKKyAgICAgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlTWFuYWdlcikKKyAgICAgICAgICAg
IG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyID0gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZU1hbmFn
ZXI+KHJlZ2lzdHJ5KTsKKworICAgICAgICByZXR1cm4gKm1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
OworICAgIH0KKworICAgIFNlc3Npb25TdG9yYWdlTWFuYWdlciogZXhpc3RpbmdTZXNzaW9uU3Rv
cmFnZU1hbmFnZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyLmdldCgpOworICAgIH0KKworICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyIHx8IG1fbG9jYWxTdG9yYWdl
TWFuYWdlciB8fCBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlcjsKKyAgICB9CisKKyAgICBib29sIGlz
RW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBmaWxlcyA9IEZpbGVTeXN0ZW06Omxp
c3REaXJlY3RvcnkobV9yb290UGF0aCk7CisgICAgICAgIGF1dG8gaGFzVmFsaWRGaWxlID0gV1RG
OjphbnlPZihmaWxlcywgWyZdKGF1dG8gZmlsZSkgeworICAgICAgICAgICAgYm9vbCBpc0ludmFs
aWRGaWxlID0gKGZpbGUgPT0gb3JpZ2luRmlsZU5hbWUpOworI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgICAgICAgICAgaXNJbnZhbGlkRmlsZSB8PSAoZmlsZSA9PSAiLkRTX1N0b3JlIik7CisjZW5k
aWYKKyAgICAgICAgICAgIHJldHVybiAhaXNJbnZhbGlkRmlsZTsKKyAgICAgICAgfSk7CisgICAg
ICAgIGlmIChoYXNWYWxpZEZpbGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgcmV0dXJuICFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1fbG9jYWxTdG9yYWdlUGF0aCk7Cisg
ICAgfQorCisgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZmV0Y2hEYXRhVHlwZXNJbkxp
c3QoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCisgICAgeworICAgICAgICBhdXRv
IHJlc3VsdCA9IGZldGNoRGF0YVR5cGVzSW5MaXN0RnJvbU1lbW9yeSh0eXBlcyk7CisgICAgICAg
IHJlc3VsdC5hZGQoZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9tRGlzayh0eXBlcykpOworCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgdm9pZCBkZWxldGVEYXRhKE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzLCBXYWxsVGltZSBtb2RpZmllZFNpbmNlVGltZSkKICAg
ICB7CiAgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0
ZW0pKQogICAgICAgICAgICAgZGVsZXRlRmlsZVN5c3RlbVN0b3JhZ2VEYXRhKG1vZGlmaWVkU2lu
Y2VUaW1lKTsKKworICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpM
b2NhbFN0b3JhZ2UpKQorICAgICAgICAgICAgZGVsZXRlTG9jYWxTdG9yYWdlRGF0YShtb2RpZmll
ZFNpbmNlVGltZSk7CisKKyAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6U2Vzc2lvblN0b3JhZ2UpICYmIG1vZGlmaWVkU2luY2VUaW1lID09IC1XYWxsVGltZTo6aW5m
aW5pdHkoKSkKKyAgICAgICAgICAgIGRlbGV0ZVNlc3Npb25TdG9yYWdlRGF0YSgpOworICAgIH0K
KworICAgIHZvaWQgbW92ZURhdGEoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGxv
Y2FsU3RvcmFnZVBhdGgpCisgICAgeworICAgICAgICBtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdl
ciA9IG51bGxwdHI7CisgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZU1hbmFnZXIpCisgICAgICAg
ICAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmNsb3NlKCk7CisKKyAgICAgICAgRmlsZVN5c3Rl
bTo6bW92ZUZpbGUobV9yb290UGF0aCwgcGF0aCk7CisKKyAgICAgICAgaWYgKCFtX2xvY2FsU3Rv
cmFnZVBhdGguaXNFbXB0eSgpICYmICFsb2NhbFN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06Om1vdmVEYXRhYmFzZUZpbGUobV9sb2Nh
bFN0b3JhZ2VQYXRoLCBsb2NhbFN0b3JhZ2VQYXRoKTsKICAgICB9CiAKIHByaXZhdGU6CisgICAg
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9tTWVtb3J5
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzKQorICAgIHsKKyAgICAgICAgT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gcmVzdWx0OworICAgICAgICBpZiAodHlwZXMuY29udGFpbnMo
V2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpKSB7CisgICAgICAgICAgICBpZiAobV9sb2Nh
bFN0b3JhZ2VNYW5hZ2VyICYmIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+aGFzRGF0YUluTWVtb3J5
KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3Rv
cmFnZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURh
dGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkpIHsKKyAgICAgICAgICAgIGlmIChtX3Nlc3Npb25TdG9y
YWdlTWFuYWdlciAmJiBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlci0+aGFzRGF0YUluTWVtb3J5KCkp
CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9y
YWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9tRGlzayhP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcykKKyAgICB7CisgICAgICAgIE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IHJlc3VsdDsKKyAgICAgICAgZm9yIChhdXRvJiBzdG9yYWdlVHlw
ZSA6IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkobV9yb290UGF0aCkpIHsKKyAgICAgICAgICAg
IGlmIChhdXRvIHR5cGUgPSB0b1dlYnNpdGVEYXRhVHlwZShzdG9yYWdlVHlwZSk7IHR5cGUgJiYg
dHlwZXMuY29udGFpbnMoKnR5cGUpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoKnR5cGUp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6TG9jYWxTdG9yYWdlKSAmJiAhcmVzdWx0LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9j
YWxTdG9yYWdlKSkgeworICAgICAgICAgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobV9s
b2NhbFN0b3JhZ2VQYXRoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRh
VHlwZTo6TG9jYWxTdG9yYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCiAgICAgdm9pZCBkZWxldGVGaWxlU3lzdGVtU3RvcmFnZURhdGEoV2FsbFRpbWUg
bW9kaWZpZWRTaW5jZVRpbWUpCiAgICAgewogICAgICAgICBtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFu
YWdlciA9IG51bGxwdHI7CkBAIC0xMDYsMTQgKzIzMCw0NCBAQCBwcml2YXRlOgogICAgICAgICBG
aWxlU3lzdGVtOjpkZWxldGVBbGxGaWxlc01vZGlmaWVkU2luY2UoZmlsZVN5c3RlbVN0b3JhZ2VQ
YXRoLCBtb2RpZmllZFNpbmNlVGltZSk7CiAgICAgfQogCisgICAgdm9pZCBkZWxldGVMb2NhbFN0
b3JhZ2VEYXRhKFdhbGxUaW1lIHRpbWUpCisgICAgeworICAgICAgICBpZiAoYXV0byBtb2RpZmlj
YXRpb25UaW1lID0gRmlsZVN5c3RlbTo6ZmlsZU1vZGlmaWNhdGlvblRpbWUobV9sb2NhbFN0b3Jh
Z2VQYXRoKTsgKm1vZGlmaWNhdGlvblRpbWUgPj0gdGltZSkgeworICAgICAgICAgICAgaWYgKG1f
bG9jYWxTdG9yYWdlTWFuYWdlcikKKyAgICAgICAgICAgICAgICBtX2xvY2FsU3RvcmFnZU1hbmFn
ZXItPmNsZWFyRGF0YU9uRGlzaygpOworICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5
c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKG1fbG9jYWxTdG9yYWdlUGF0aCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTWFuYWdlcikKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmNsZWFyRGF0YUluTWVtb3J5KCk7
CisgICAgICAgIGlmICghbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgpKQorICAgICAg
ICAgICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lk
IGRlbGV0ZVNlc3Npb25TdG9yYWdlRGF0YSgpCisgICAgeworICAgICAgICBpZiAoIW1fc2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyLT5jbGVhckRhdGEoKTsKKyAgICAgICAgaWYgKCFtX3Nlc3Npb25TdG9y
YWdlTWFuYWdlci0+aXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyID0gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgU3RyaW5nIG1fcm9vdFBhdGg7CiAgICAg
U3RyaW5nIG1faWRlbnRpZmllcjsKICAgICBTdG9yYWdlQnVja2V0TW9kZSBtX21vZGUgeyBTdG9y
YWdlQnVja2V0TW9kZTo6QmVzdEVmZm9ydCB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWxlU3lz
dGVtU3RvcmFnZU1hbmFnZXI+IG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxMb2NhbFN0b3JhZ2VNYW5hZ2VyPiBtX2xvY2FsU3RvcmFnZU1hbmFnZXI7Cisg
ICAgU3RyaW5nIG1fbG9jYWxTdG9yYWdlUGF0aDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyPiBtX3Nlc3Npb25TdG9yYWdlTWFuYWdlcjsKIH07CiAKLU9yaWdpblN0
b3JhZ2VNYW5hZ2VyOjpPcmlnaW5TdG9yYWdlTWFuYWdlcihTdHJpbmcmJiBwYXRoKQorT3JpZ2lu
U3RvcmFnZU1hbmFnZXI6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyKFN0cmluZyYmIHBhdGgsIFN0cmlu
ZyYmIGxvY2FsU3RvcmFnZVBhdGgpCiAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKKyAgICAs
IG1fbG9jYWxTdG9yYWdlUGF0aChXVEZNb3ZlKGxvY2FsU3RvcmFnZVBhdGgpKQogewogICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogfQpAQCAtMTI5LDcgKzI4Myw3IEBAIHZvaWQgT3Jp
Z2luU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCBjb25uZWN0aW9uCiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldCYgT3Jp
Z2luU3RvcmFnZU1hbmFnZXI6OmRlZmF1bHRCdWNrZXQoKQogewogICAgIGlmICghbV9kZWZhdWx0
QnVja2V0KQotICAgICAgICBtX2RlZmF1bHRCdWNrZXQgPSBtYWtlVW5pcXVlPFN0b3JhZ2VCdWNr
ZXQ+KG1fcGF0aCwgImRlZmF1bHQiX3MpOworICAgICAgICBtX2RlZmF1bHRCdWNrZXQgPSBtYWtl
VW5pcXVlPFN0b3JhZ2VCdWNrZXQ+KG1fcGF0aCwgImRlZmF1bHQiX3MsIG1fbG9jYWxTdG9yYWdl
UGF0aCk7CiAKICAgICByZXR1cm4gKm1fZGVmYXVsdEJ1Y2tldDsKIH0KQEAgLTEzOSwxNSArMjkz
LDM0IEBAIEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlciYgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmZp
bGVTeXN0ZW1TdG9yYWdlTWFuYWdlcihGaWxlU3lzCiAgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQo
KS5maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIocmVnaXN0cnkpOwogfQogCitMb2NhbFN0b3JhZ2VN
YW5hZ2VyJiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6bG9jYWxTdG9yYWdlTWFuYWdlcihTdG9yYWdl
QXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKK3sKKyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmxv
Y2FsU3RvcmFnZU1hbmFnZXIocmVnaXN0cnkpOworfQorCitMb2NhbFN0b3JhZ2VNYW5hZ2VyKiBP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkKK3sKKyAg
ICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcigpOwor
fQorCitTZXNzaW9uU3RvcmFnZU1hbmFnZXImIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpzZXNzaW9u
U3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYgcmVnaXN0cnkpCit7CisgICAgcmV0
dXJuIGRlZmF1bHRCdWNrZXQoKS5zZXNzaW9uU3RvcmFnZU1hbmFnZXIocmVnaXN0cnkpOworfQor
CitTZXNzaW9uU3RvcmFnZU1hbmFnZXIqIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ1Nl
c3Npb25TdG9yYWdlTWFuYWdlcigpCit7CisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5leGlz
dGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigpOworfQorCiBib29sIE9yaWdpblN0b3JhZ2VNYW5h
Z2VyOjppc0FjdGl2ZSgpCiB7CiAgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5pc0FjdGl2ZSgp
OwogfQogCi12b2lkIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhKE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IHR5cGVzLCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKQorYm9vbCBPcmln
aW5TdG9yYWdlTWFuYWdlcjo6aXNFbXB0eSgpCiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgZGVmYXVsdEJ1Y2tldCgpLmRlbGV0ZURhdGEodHlwZXMsIG1vZGlmaWVkU2lu
Y2UpOworICAgIHJldHVybiBkZWZhdWx0QnVja2V0KCkuaXNFbXB0eSgpOwogfQogCiB2b2lkIE9y
aWdpblN0b3JhZ2VNYW5hZ2VyOjpzZXRQZXJzaXN0ZWQoYm9vbCB2YWx1ZSkKQEAgLTE1OCw1ICsz
MzEsMjYgQEAgdm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6c2V0UGVyc2lzdGVkKGJvb2wgdmFs
dWUpCiAgICAgZGVmYXVsdEJ1Y2tldCgpLnNldE1vZGUodmFsdWUgPyBTdG9yYWdlQnVja2V0TW9k
ZTo6UGVyc2lzdGVudCA6IFN0b3JhZ2VCdWNrZXRNb2RlOjpCZXN0RWZmb3J0KTsKIH0KIAorT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YVR5
cGVzSW5MaXN0KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5mZXRj
aERhdGFUeXBlc0luTGlzdCh0eXBlcyk7Cit9CisKK3ZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6
OmRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1v
ZGlmaWVkU2luY2UpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBk
ZWZhdWx0QnVja2V0KCkuZGVsZXRlRGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZSk7Cit9CisKK3Zv
aWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6Om1vdmVEYXRhKGNvbnN0IFN0cmluZyYgbmV3UGF0aCwg
Y29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgZGVmYXVsdEJ1Y2tldCgpLm1vdmVEYXRhKG5ld1BhdGgsIGxvY2Fs
U3RvcmFnZVBhdGgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2Vy
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1h
bmFnZXIuaAppbmRleCA3YWRmYTViMDNiNmJhNmUzZjg2OTgwYjEyZDJmOGE0NGQ5ZTRlNjRiLi41
ZTc2Njk5ODZlNDY2ODVmMzg5YjdhNTI3MWU2NmQwZTYzYzJkMTllIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1h
bmFnZXIuaApAQCAtMzYsMjAgKzM2LDMwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBG
aWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5OwogY2xhc3MgRmlsZVN5c3RlbVN0b3JhZ2VN
YW5hZ2VyOworY2xhc3MgTG9jYWxTdG9yYWdlTWFuYWdlcjsKK2NsYXNzIFNlc3Npb25TdG9yYWdl
TWFuYWdlcjsKK2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnk7CiBlbnVtIGNsYXNzIFdlYnNpdGVE
YXRhVHlwZSA6IHVpbnQzMl90OwogCiBjbGFzcyBPcmlnaW5TdG9yYWdlTWFuYWdlciB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgT3JpZ2luU3Rv
cmFnZU1hbmFnZXIoU3RyaW5nJiYgcGF0aCk7CisgICAgT3JpZ2luU3RvcmFnZU1hbmFnZXIoU3Ry
aW5nJiYgcGF0aCwgU3RyaW5nJiYgbG9jYWxTdG9yYWdlUGF0aCk7CiAgICAgfk9yaWdpblN0b3Jh
Z2VNYW5hZ2VyKCk7CiAKICAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9u
OjpVbmlxdWVJRCk7CiAgICAgYm9vbCBwZXJzaXN0ZWQoKSBjb25zdCB7IHJldHVybiBtX3BlcnNp
c3RlZDsgfQogICAgIHZvaWQgc2V0UGVyc2lzdGVkKGJvb2wgdmFsdWUpOwogICAgIEZpbGVTeXN0
ZW1TdG9yYWdlTWFuYWdlciYgZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyKEZpbGVTeXN0ZW1TdG9y
YWdlSGFuZGxlUmVnaXN0cnkmKTsKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2VyJiBsb2NhbFN0b3Jh
Z2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmKTsKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2Vy
KiBleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKTsKKyAgICBTZXNzaW9uU3RvcmFnZU1hbmFn
ZXImIHNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5Jik7CisgICAgU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigpOwogICAg
IGJvb2wgaXNBY3RpdmUoKTsKKyAgICBib29sIGlzRW1wdHkoKTsKKyAgICBPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBmZXRjaERhdGFUeXBlc0luTGlzdChPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPik7CiAgICAgdm9pZCBkZWxldGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBX
YWxsVGltZSk7CisgICAgdm9pZCBtb3ZlRGF0YShjb25zdCBTdHJpbmcmIG5ld1BhdGgsIGNvbnN0
IFN0cmluZyYgbG9jYWxTdG9yYWdlUGF0aCk7CiAKIHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBT
dG9yYWdlQnVja2V0TW9kZSA6IGJvb2w7CkBAIC02Miw2ICs3Miw3IEBAIHByaXZhdGU6CiAgICAg
c3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2VCdWNrZXQ+IG1fZGVmYXVsdEJ1Y2tldDsKICAgICBTdHJp
bmcgbV9wYXRoOwogICAgIGJvb2wgbV9wZXJzaXN0ZWQgeyBmYWxzZSB9OworICAgIFN0cmluZyBt
X2xvY2FsU3RvcmFnZVBhdGg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJl
YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFn
ZUFyZWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiYmY2NjM2MjJjMmY3ZGQ2NDI5NGU4M2Q3ZTYyNGZiY2Rl
Y2QyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCkBAIC0wLDAgKzEsMzk5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FMaXRlU3RvcmFnZUFyZWEu
aCIKKworI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2Fj
dGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU1hcC5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY29uc3RleHByIFNlY29uZHMgdHJhbnNhY3Rpb25EdXJhdGlvbiB7IDUwMF9tcyB9
OworY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1TaXplRm9yVmFsdWVzS2VwdEluTWVtb3J5IHsg
MSAqIEtCIH07Citjb25zdGV4cHIgYXV0byBjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnRBbHRlcm5h
dGl2ZSA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBJdGVtVGFibGUgKGtleSBURVhUIFVO
SVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLCB2YWx1ZSBCTE9CIE5PVCBOVUxMIE9OIENPTkZMSUNU
IEZBSUwpIl9zOworY29uc3RleHByIGF1dG8gY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50ID0gIkNS
RUFURSBUQUJMRSBJdGVtVGFibGUgKGtleSBURVhUIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNF
LCB2YWx1ZSBCTE9CIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIl9zOworCitBU0NJSUxpdGVy
YWwgU1FMaXRlU3RvcmFnZUFyZWE6OnN0YXRlbWVudFN0cmluZyhTdGF0ZW1lbnRUeXBlIHR5cGUp
IGNvbnN0Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpD
b3VudEl0ZW1zOgorICAgICAgICByZXR1cm4gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJs
ZSJfczsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OkRlbGV0ZUl0ZW06CisgICAgICAgIHJldHVy
biAiREVMRVRFIEZST00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Il9zOworICAgIGNhc2UgU3RhdGVt
ZW50VHlwZTo6RGVsZXRlQWxsSXRlbXM6CisgICAgICAgIHJldHVybiAiREVMRVRFIEZST00gSXRl
bVRhYmxlIl9zOworICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6R2V0SXRlbToKKyAgICAgICAgcmV0
dXJuICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iX3M7CisgICAgY2Fz
ZSBTdGF0ZW1lbnRUeXBlOjpHZXRBbGxJdGVtczoKKyAgICAgICAgcmV0dXJuICJTRUxFQ1Qga2V5
LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSJfczsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OlNldEl0
ZW06CisgICAgICAgIHJldHVybiAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPyki
X3M7CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkOgorICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIiJfczsKK30KKwor
U1FMaXRlU3RvcmFnZUFyZWE6OlNRTGl0ZVN0b3JhZ2VBcmVhKHVuc2lnbmVkIHF1b3RhLCBjb25z
dCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoLCBSZWY8
V29ya1F1ZXVlPiYmIHdvcmtRdWV1ZSkKKyAgICA6IFN0b3JhZ2VBcmVhQmFzZShxdW90YSwgb3Jp
Z2luKQorICAgICwgbV9wYXRoKHBhdGgpCisgICAgLCBtX3F1ZXVlKFdURk1vdmUod29ya1F1ZXVl
KSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHN0YXRpY19jYXN0PHNpemVfdD4oU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7ICsr
aSkKKyAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzLmFwcGVuZChudWxscHRyKTsKK30KKwordm9p
ZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y2xvc2UoKQoreworICAgIEFTU0VSVCghaXNNYWluUnVuTG9v
cCgpKTsKKworICAgIG1fY2FjaGUgPSBzdGQ6Om51bGxvcHQ7CisgICAgY29tbWl0VHJhbnNhY3Rp
b25JZk5lY2Vzc2FyeSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKTsgKytpKQorICAgICAgICBtX2NhY2hlZFN0
YXRlbWVudHNbaV0gPSBudWxscHRyOworICAgIG1fZGF0YWJhc2UgPSBudWxscHRyOworfQorCitT
UUxpdGVTdG9yYWdlQXJlYTo6flNRTGl0ZVN0b3JhZ2VBcmVhKCkKK3sKKyAgICBBU1NFUlQoIWlz
TWFpblJ1bkxvb3AoKSk7CisKKyAgICBib29sIGRhdGFiYXNlSXNFbXB0eSA9IGlzRW1wdHkoKTsK
KyAgICBjbG9zZSgpOworICAgIGlmIChkYXRhYmFzZUlzRW1wdHkpCisgICAgICAgIFdlYkNvcmU6
OlNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShtX3BhdGgpOworfQorCitib29s
IFNRTGl0ZVN0b3JhZ2VBcmVhOjppc0VtcHR5KCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblJ1bkxv
b3AoKSk7CisKKyAgICBpZiAobV9jYWNoZSkKKyAgICAgICAgcmV0dXJuIG1fY2FjaGUtPmlzRW1w
dHkoKTsKKworICAgIGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZTo6
Q291bnRJdGVtcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRl
U3RvcmFnZUFyZWE6OmlzRW1wdHkgZmFpbGVkIG9uIGV4ZWN1dGluZyBzdGF0ZW1lbnQgKCVkKSAt
ICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuICFzdGF0ZW1lbnQt
PmNvbHVtbkludCgwKTsKK30KKwordm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y2xlYXIoKQorewor
ICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKKworICAgIGNsb3NlKCk7CisgICAgV2ViQ29y
ZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKG1fcGF0aCk7CisgICAgbm90
aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcigpOworfQorCitib29sIFNRTGl0ZVN0b3JhZ2VBcmVhOjpj
cmVhdGVUYWJsZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAoIW1fZGF0YWJhc2UpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT50YWJs
ZVNRTCgiSXRlbVRhYmxlIl9zKTsKKyAgICBpZiAoc3RhdGVtZW50ID09IGNyZWF0ZUl0ZW1UYWJs
ZVN0YXRlbWVudCB8fCBzdGF0ZW1lbnQgPT0gY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50QWx0ZXJu
YXRpdmUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gVGFibGUgZXhpc3RzIGJ1dCBz
dGF0ZW1lbnQgaXMgd3Jvbmc7IGRyb3AgaXQuCisgICAgaWYgKCFzdGF0ZW1lbnQuaXNFbXB0eSgp
KSB7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS0+ZXhlY3V0ZUNvbW1hbmQoIkRST1AgVEFCTEUg
SXRlbVRhYmxlIl9zKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwg
IlNRTGl0ZVN0b3JhZ2VBcmVhOjpjcmVhdGVUYWJsZUlmTmVjZXNzYXJ5IGZhaWxlZCB0byBkcm9w
IGV4aXN0aW5nIGl0ZW0gdGFibGUgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCks
IG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRhYmxlIGRvZXMgbm90IGV4aXN0LgorICAgIGlm
ICghbV9kYXRhYmFzZS0+ZXhlY3V0ZUNvbW1hbmQoY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50KSkg
eworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6
OmNyZWF0ZVRhYmxlSWZOZWNlc3NhcnkgZmFpbGVkIHRvIGNyZWF0ZSBpdGVtIHRhYmxlICglZCkg
LSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBTUUxpdGVTdG9yYWdlQXJlYTo6cHJlcGFyZURhdGFiYXNlKCkKK3sKKyAgICBpZiAo
bV9kYXRhYmFzZSAmJiBtX2RhdGFiYXNlLT5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBtX2RhdGFiYXNlID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZT4o
KTsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm9wZW4obV9wYXRoKSkgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OnByZXBhcmVEYXRhYmFzZSBm
YWlsZWQgdG8gb3BlbiBkYXRhYmFzZSBhdCAnJXMnIiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICBtX2RhdGFiYXNlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAgICAgCisgICAgLy8gU2luY2UgYSBXb3JrUXVldWUgaXNuJ3QgYm91bmQgdG8gYSBz
cGVjaWZpYyB0aHJlYWQsIHdlIG5lZWQgdG8gZGlzYWJsZSB0aHJlYWRpbmcgY2hlY2suCisgICAg
Ly8gV2Ugd2lsbCBuZXZlciBhY2Nlc3MgdGhlIGRhdGFiYXNlIGZyb20gZGlmZmVyZW50IHRocmVh
ZHMgc2ltdWx0YW5lb3VzbHkuCisgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZVRocmVhZGluZ0NoZWNr
cygpOworCisgICAgaWYgKCFjcmVhdGVUYWJsZUlmTmVjZXNzYXJ5KCkpIHsKKyAgICAgICAgbV9k
YXRhYmFzZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAocXVvdGEoKSAhPSBXZWJDb3JlOjpTdG9yYWdlTWFwOjpub1F1b3RhKQorICAgICAgICBtX2Rh
dGFiYXNlLT5zZXRNYXhpbXVtU2l6ZShxdW90YSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFNRTGl0ZVN0b3JhZ2VBcmVhOjpzdGFydFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKQor
eworICAgIGlmICghbV90cmFuc2FjdGlvbikKKyAgICAgICAgbV90cmFuc2FjdGlvbiA9IG1ha2VV
bmlxdWU8V2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24+KCptX2RhdGFiYXNlKTsKKworICAgIGlm
IChtX3RyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
dHJhbnNhY3Rpb24tPmJlZ2luKCk7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2hBZnRlcih0cmFuc2Fj
dGlvbkR1cmF0aW9uLCBbd2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfV0geworICAgICAgICBp
ZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+bV90cmFuc2FjdGlvbikKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICAgICAgYXV0byB0cmFuc2FjdGlvbiA9IHN0ZDo6ZXhjaGFuZ2Uod2Vh
a1RoaXMtPm1fdHJhbnNhY3Rpb24sIG51bGxwdHIpOworICAgICAgICB0cmFuc2FjdGlvbi0+Y29t
bWl0KCk7CisgICAgfSk7Cit9CisKK1dlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlIFNRTGl0ZVN0b3JhZ2VBcmVhOjpjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZSB0eXBl
KQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlKTsKKyAgICBBU1NFUlQodHlwZSA8IFN0YXRlbWVu
dFR5cGU6OkludmFsaWQpOworCisgICAgYXV0byBpbmRleCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHR5cGUpOworICAgIGlmICghbV9jYWNoZWRTdGF0ZW1lbnRzW2luZGV4XSkgeworICAgICAgICBp
ZiAoYXV0byByZXN1bHQgPSBtX2RhdGFiYXNlLT5wcmVwYXJlSGVhcFN0YXRlbWVudChzdGF0ZW1l
bnRTdHJpbmcodHlwZSkpKQorICAgICAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzW2luZGV4XSA9
IHJlc3VsdC52YWx1ZSgpLm1vdmVUb1VuaXF1ZVB0cigpOworICAgIH0KKworICAgIHJldHVybiBX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSB7IG1fY2FjaGVkU3RhdGVtZW50
c1tpbmRleF0uZ2V0KCkgfTsKK30KKworRXhwZWN0ZWQ8U3RyaW5nLCBTdG9yYWdlRXJyb3I+IFNR
TGl0ZVN0b3JhZ2VBcmVhOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGlmICht
X2NhY2hlKSB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NhY2hlLT5maW5kKGtleSk7Cisg
ICAgICAgIGlmIChpdGVyYXRvciA9PSBtX2NhY2hlLT5lbmQoKSkKKyAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKworICAgICAgICBpZiAoIWl0ZXJhdG9yLT52YWx1ZS5pc051bGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIGdl
dEl0ZW1Gcm9tRGF0YWJhc2Uoa2V5KTsKK30KKworRXhwZWN0ZWQ8U3RyaW5nLCBTdG9yYWdlRXJy
b3I+IFNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRJdGVtRnJvbURhdGFiYXNlKGNvbnN0IFN0cmluZyYg
a2V5KQoreworICAgIGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKworICAgIGF1dG8gc3RhdGVtZW50
ID0gY2FjaGVkU3RhdGVtZW50KFN0YXRlbWVudFR5cGU6OkdldEl0ZW0pOworICAgIGlmICghc3Rh
dGVtZW50IHx8IHN0YXRlbWVudC0+YmluZFRleHQoMSwga2V5KSkgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJh
c2UgZmFpbGVkIG9uIGNyZWF0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5s
YXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgaW50
IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykKKyAgICAgICAgcmV0dXJuIHN0YXRlbWVudC0+Y29sdW1uQmxvYkFzU3RyaW5nKDApOworICAg
IGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
U3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRJdGVtRnJvbURhdGFiYXNlIGZhaWxlZCBv
biBzdGVwcGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCks
IG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworICAgIH0KKworICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChTdG9yYWdlRXJyb3I6Okl0ZW1Ob3RGb3VuZCk7Cit9CisKK0hhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IFNRTGl0ZVN0b3JhZ2VBcmVhOjphbGxJdGVtcygpCit7CisgICAgQVNTRVJUKCFp
c01haW5SdW5Mb29wKCkpOworCisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAg
cmV0dXJuIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsgfTsKKworICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IGl0ZW1zOworICAgIGlmIChtX2NhY2hlKSB7CisgICAgICAgIGl0ZW1zLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9jYWNoZS0+c2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBb
a2V5LCB2YWx1ZV0gOiAqbV9jYWNoZSkgeworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwo
KSkgeworICAgICAgICAgICAgICAgIGl0ZW1zLmFkZChrZXksIHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGF1dG8gcmVz
dWx0ID0gZ2V0SXRlbUZyb21EYXRhYmFzZShrZXkpKQorICAgICAgICAgICAgICAgIGl0ZW1zLmFk
ZChrZXksIHJlc3VsdC52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaXRlbXM7
CisgICAgfQorCisgICAgLy8gSW1wb3J0IGZyb20gZGF0YWJhc2UuCisgICAgYXV0byBzdGF0ZW1l
bnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZTo6R2V0QWxsSXRlbXMpOworICAgIGlm
ICghc3RhdGVtZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxp
dGVTdG9yYWdlQXJlYTo6Z2V0QWxsSXRlbXMgZmFpbGVkIG9uIGNyZWF0aW5nIHN0YXRlbWVudCAo
JWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9y
TXNnKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIG1fY2FjaGUgPSBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiB7IH07CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3Rl
cCgpOworICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBTdHJpbmcg
a2V5ID0gc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgdmFsdWUgPSBz
dGF0ZW1lbnQtPmNvbHVtbkJsb2JBc1N0cmluZygxKTsKKyAgICAgICAgaWYgKCFrZXkuaXNOdWxs
KCkgJiYgIXZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBtX2NhY2hlLT5hZGQoa2V5LCB2
YWx1ZS5zaXplSW5CeXRlcygpID4gbWF4aW11bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1vcnkgPyBT
dHJpbmcoKSA6IHZhbHVlKTsKKyAgICAgICAgICAgIGl0ZW1zLmFkZChXVEZNb3ZlKGtleSksIFdU
Rk1vdmUodmFsdWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+
c3RlcCgpOworICAgIH0KKworICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0QWxsSXRl
bXMgZmFpbGVkIG9uIGV4ZWN1dGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+
bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKworICAgIHJldHVybiBp
dGVtczsKK30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBTUUxpdGVTdG9yYWdlQXJl
YTo6c2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VB
cmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIFN0cmluZyYmIGtleSwgU3RyaW5n
JiYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIEFTU0VSVCghaXNNYWlu
UnVuTG9vcCgpKTsKKworICAgIGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKworICAgIHN0YXJ0VHJh
bnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIGlmIChh
dXRvIHZhbHVlT3JFcnJvciA9IGdldEl0ZW0oa2V5KSkKKyAgICAgICAgb2xkVmFsdWUgPSB2YWx1
ZU9yRXJyb3IudmFsdWUoKTsKKworICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50
KFN0YXRlbWVudFR5cGU6OlNldEl0ZW0pOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVu
dC0+YmluZFRleHQoMSwga2V5KSB8fCBzdGF0ZW1lbnQtPmJpbmRCbG9iKDIsIHZhbHVlKSkgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OnNl
dEl0ZW0gZmFpbGVkIG9uIGNyZWF0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNl
LT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FMSVRF
X0ZVTEwpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OlF1b3Rh
RXhjZWVkZWQpOworICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtIGZhaWxl
ZCBvbiBzdGVwcGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9y
KCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworICAgIH0KKworICAgIGRpc3BhdGNoRXZl
bnRzKGNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBrZXksIG9sZFZhbHVlLCB2YWx1ZSwg
dXJsU3RyaW5nKTsKKworICAgIGlmIChtX2NhY2hlKQorICAgICAgICBtX2NhY2hlLT5zZXQoV1RG
TW92ZShrZXkpLCB2YWx1ZS5zaXplSW5CeXRlcygpID4gbWF4aW11bVNpemVGb3JWYWx1ZXNLZXB0
SW5NZW1vcnkgPyBTdHJpbmcoKSA6IFdURk1vdmUodmFsdWUpKTsKKworICAgIHJldHVybiB7IH07
Cit9CisKK0V4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gU1FMaXRlU3RvcmFnZUFyZWE6OnJl
bW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJl
YUltcGxJZGVudGlmaWVyIHN0b3JhZ2VBcmVhSW1wbElELCBjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOwor
CisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworCisgICAgc3RhcnRUcmFuc2FjdGlvbklmTmVj
ZXNzYXJ5KCk7CisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIGlmIChhdXRvIHZhbHVlT3JFcnJv
ciA9IGdldEl0ZW0oa2V5KSkKKyAgICAgICAgb2xkVmFsdWUgPSB2YWx1ZU9yRXJyb3IudmFsdWUo
KTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6
Okl0ZW1Ob3RGb3VuZCk7CisKKyAgICBhdXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChT
dGF0ZW1lbnRUeXBlOjpEZWxldGVJdGVtKTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCBzdGF0ZW1l
bnQtPmJpbmRUZXh0KDEsIGtleSkgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVh
OjpyZW1vdmVJdGVtIGZhaWxlZCBvbiBleGVjdXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1f
ZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9
CisKKyAgICBkaXNwYXRjaEV2ZW50cyhjb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJRCwga2V5
LCBvbGRWYWx1ZSwgU3RyaW5nKCksIHVybFN0cmluZyk7CisKKyAgICBpZiAobV9jYWNoZSkKKyAg
ICAgICAgbV9jYWNoZS0+cmVtb3ZlKGtleSk7CisKKyAgICByZXR1cm4geyB9OworfQorCitFeHBl
Y3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IFNRTGl0ZVN0b3JhZ2VBcmVhOjpjbGVhcihJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIg
c3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIEFTU0VS
VCghaXNNYWluUnVuTG9vcCgpKTsKKworICAgIGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKworICAg
IGlmIChtX2NhY2hlICYmIG1fY2FjaGUtPmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6SXRlbU5vdEZvdW5kKTsKKworICAgIGlmIChtX2NhY2hl
KQorICAgICAgICBtX2NhY2hlLT5jbGVhcigpOworCisgICAgc3RhcnRUcmFuc2FjdGlvbklmTmVj
ZXNzYXJ5KCk7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50
VHlwZTo6RGVsZXRlQWxsSXRlbXMpOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3Jh
Z2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Y2xlYXIgZmFpbGVkIG9uIGV4ZWN1dGluZyBzdGF0ZW1l
bnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6
RGF0YWJhc2UpOworICAgIH0KKworICAgIGlmIChtX2RhdGFiYXNlLT5sYXN0Q2hhbmdlcygpIDw9
IDApCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6Okl0ZW1Ob3RG
b3VuZCk7CisKKyAgICBkaXNwYXRjaEV2ZW50cyhjb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJ
RCwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsKKworICAgIHJldHVy
biB7IH07Cit9CisKK3ZvaWQgU1FMaXRlU3RvcmFnZUFyZWE6OmNvbW1pdFRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKQoreworICAgIGlmIChhdXRvIHRyYW5zYWN0aW9uID0gc3RkOjpleGNoYW5nZSht
X3RyYW5zYWN0aW9uLCBudWxscHRyKSkKKyAgICAgICAgdHJhbnNhY3Rpb24tPmNvbW1pdCgpOwor
fQorCit2b2lkIFNRTGl0ZVN0b3JhZ2VBcmVhOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCkKK3sK
KyAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CisKKyAgICBpZiAobV9kYXRhYmFzZSAmJiBt
X2RhdGFiYXNlLT5pc09wZW4oKSkKKyAgICAgICAgbV9kYXRhYmFzZS0+cmVsZWFzZU1lbW9yeSgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmggYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lOTA1NmExMzVhYmMwMzMxYjAzZDQ4OTlkYTc3MjFjZTZmYjYzNDk2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VB
cmVhLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJTdG9yYWdlQXJlYUJhc2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURh
dGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29w
ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU1FMaXRlU3RvcmFnZUFyZWEgZmlu
YWwgOiBwdWJsaWMgU3RvcmFnZUFyZWFCYXNlIHsKK3B1YmxpYzoKKyAgICBTUUxpdGVTdG9yYWdl
QXJlYSh1bnNpZ25lZCBxdW90YSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgY29uc3Qg
U3RyaW5nJiBwYXRoLCBSZWY8V29ya1F1ZXVlPiYmKTsKKyAgICB+U1FMaXRlU3RvcmFnZUFyZWEo
KTsKKworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2b2lkIGhhbmRsZUxvd01lbW9yeVdhcm5pbmco
KTsKKyAgICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworcHJpdmF0ZToK
KyAgICAvLyBTdG9yYWdlQXJlYUJhc2UKKyAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBTdG9yYWdlQXJlYUJhc2U6OlR5cGU6OlNRTGl0ZTsgfTsKKyAgICBTdG9yYWdlVHlwZSBz
dG9yYWdlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFn
ZVR5cGU6OkxvY2FsOyB9OworICAgIGJvb2wgaXNFbXB0eSgpIGZpbmFsOworICAgIHZvaWQgY2xl
YXIoKSBmaW5hbDsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBhbGxJdGVtcygpIGZpbmFs
OworICAgIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gc2V0SXRlbShJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBTdHJpbmcmJiBrZXksIFN0
cmluZyYmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgZmluYWw7CisgICAgRXhwZWN0
ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVl
SUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIHVybFN0cmluZykgZmluYWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9y
PiBjbGVhcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgZmluYWw7CisKKyAgICBib29sIGNyZWF0ZVRh
YmxlSWZOZWNlc3NhcnkoKTsKKyAgICBib29sIHByZXBhcmVEYXRhYmFzZSgpOworICAgIHZvaWQg
c3RhcnRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBlbnVtIGNsYXNzIFN0YXRlbWVu
dFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAgQ291bnRJdGVtcywKKyAgICAgICAgRGVsZXRlSXRl
bSwKKyAgICAgICAgRGVsZXRlQWxsSXRlbXMsCisgICAgICAgIEdldEl0ZW0sCisgICAgICAgIEdl
dEFsbEl0ZW1zLAorICAgICAgICBTZXRJdGVtLAorICAgICAgICBJbnZhbGlkCisgICAgfTsKKyAg
ICBBU0NJSUxpdGVyYWwgc3RhdGVtZW50U3RyaW5nKFN0YXRlbWVudFR5cGUpIGNvbnN0OworICAg
IFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIGNhY2hlZFN0YXRlbWVudChT
dGF0ZW1lbnRUeXBlKTsKKyAgICBFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJvcj4gZ2V0SXRl
bShjb25zdCBTdHJpbmcmIGtleSk7CisgICAgRXhwZWN0ZWQ8U3RyaW5nLCBTdG9yYWdlRXJyb3I+
IGdldEl0ZW1Gcm9tRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBrZXkpOworCisgICAgU3RyaW5nIG1f
cGF0aDsKKyAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpTUUxpdGVEYXRhYmFzZT4gbV9kYXRhYmFzZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CisgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+PiBtX2NhY2hlZFN0YXRlbWVu
dHM7CisgICAgc3RkOjpvcHRpb25hbDxIYXNoTWFwPFN0cmluZywgU3RyaW5nPj4gbV9jYWNoZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWEpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlJiBhcmVhKSB7IHJldHVybiBhcmVhLnR5cGUoKSA9
PSBXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6U1FMaXRlOyB9CitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQw
ZmQ3OTYwYWM1ZGI2NzY1OWUyZDczOTE3ZGYyNmI0YzA3M2ZkMzEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyLmNwcApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCIKKworI2luY2x1ZGUgIk1lbW9y
eVN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFSZWdpc3RyeS5oIgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpTZXNzaW9uU3RvcmFnZU1h
bmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYgcmVnaXN0cnkpCisgICAgOiBtX3JlZ2lzdHJ5KHJl
Z2lzdHJ5KQoreworfQorCitib29sIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6aXNBY3RpdmUoKSBj
b25zdAoreworICAgIHJldHVybiBXVEY6OmFueU9mKG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpLCBb
Jl0gKGF1dG8mIHN0b3JhZ2VBcmVhKSB7CisgICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS0+aGFz
TGlzdGVuZXJzKCk7CisgICAgfSk7Cit9CisKK2Jvb2wgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpo
YXNEYXRhSW5NZW1vcnkoKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OmFueU9mKG1fc3RvcmFn
ZUFyZWFzLnZhbHVlcygpLCBbJl0gKGF1dG8mIHN0b3JhZ2VBcmVhKSB7CisgICAgICAgIHJldHVy
biAhc3RvcmFnZUFyZWEtPmlzRW1wdHkoKTsKKyAgICB9KTsKK30KKwordm9pZCBTZXNzaW9uU3Rv
cmFnZU1hbmFnZXI6OmNsZWFyRGF0YSgpCit7CisgICAgZm9yIChhdXRvJiBzdG9yYWdlQXJlYSA6
IG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpKQorICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoKTsK
K30KKwordm9pZCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3Rpb25DbG9zZWQoSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uKQoreworICAgIGZvciAoYXV0byYgc3RvcmFn
ZUFyZWEgOiBtX3N0b3JhZ2VBcmVhcy52YWx1ZXMoKSkKKyAgICAgICAgc3RvcmFnZUFyZWEtPnJl
bW92ZUxpc3RlbmVyKGNvbm5lY3Rpb24pOworfQorCitTdG9yYWdlQXJlYUlkZW50aWZpZXIgU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyOjphZGRTdG9yYWdlQXJlYShzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5
U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhLCBJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5l
Y3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIG5hbWVzcGFjZUlkZW50aWZpZXIpCit7
CisgICAgYXV0byBpZGVudGlmaWVyID0gc3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKTsKKyAgICBt
X3JlZ2lzdHJ5LnJlZ2lzdGVyU3RvcmFnZUFyZWEoaWRlbnRpZmllciwgKnN0b3JhZ2VBcmVhKTsK
KyAgICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVjdGlvbik7CisgICAgbV9zdG9yYWdl
QXJlYXNCeU5hbWVzcGFjZS5hZGQobmFtZXNwYWNlSWRlbnRpZmllciwgaWRlbnRpZmllcik7Cisg
ICAgbV9zdG9yYWdlQXJlYXMuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUoc3RvcmFnZUFyZWEpKTsK
KworICAgIHJldHVybiBpZGVudGlmaWVyOworfQorCitTdG9yYWdlQXJlYUlkZW50aWZpZXIgU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoSVBDOjpDb25u
ZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4m
IG9yaWdpbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgbmFtZXNwYWNlSWRlbnRpZmllcikK
K3sKKyAgICBhdXRvIGlkZW50aWZpZXIgPSBtX3N0b3JhZ2VBcmVhc0J5TmFtZXNwYWNlLmdldChu
YW1lc3BhY2VJZGVudGlmaWVyKTsKKyAgICBpZiAoaWRlbnRpZmllci5pc1ZhbGlkKCkpIHsKKyAg
ICAgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKKyAgICAg
ICAgcmV0dXJuIGlkZW50aWZpZXI7CisgICAgfQorCisgICAgYXV0byBuZXdTdG9yYWdlQXJlYSA9
IG1ha2VVbmlxdWU8TWVtb3J5U3RvcmFnZUFyZWE+KG9yaWdpbik7CisgICAgcmV0dXJuIGFkZFN0
b3JhZ2VBcmVhKFdURk1vdmUobmV3U3RvcmFnZUFyZWEpLCBjb25uZWN0aW9uLCBuYW1lc3BhY2VJ
ZGVudGlmaWVyKTsKK30KKwordm9pZCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RG
cm9tU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9y
YWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogc3RvcmFnZUFy
ZWEgPSBtX3N0b3JhZ2VBcmVhcy5nZXQoaWRlbnRpZmllcikpCisgICAgICAgIHN0b3JhZ2VBcmVh
LT5yZW1vdmVMaXN0ZW5lcihjb25uZWN0aW9uKTsKK30KKwordm9pZCBTZXNzaW9uU3RvcmFnZU1h
bmFnZXI6OmNsb25lU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0
aW9uLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBzb3VyY2VOYW1lc3BhY2VJZGVudGlmaWVy
LCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciB0YXJnZXROYW1lc3BhY2VJZGVudGlmaWVyKQor
eworICAgIGF1dG8gaWRlbnRpZmllciA9IG1fc3RvcmFnZUFyZWFzQnlOYW1lc3BhY2UuZ2V0KHNv
dXJjZU5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIGlmICghaWRlbnRpZmllci5pc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlQXJl
YXMuZmluZChpZGVudGlmaWVyKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlQXJlYXMuZW5kKCkpIHsK
KyAgICAgICAgYXV0byBuZXdTdG9yYWdlQXJlYSA9IGl0ZXJhdG9yLT52YWx1ZS0+Y2xvbmUoKTsK
KyAgICAgICAgYWRkU3RvcmFnZUFyZWEoV1RGTW92ZShuZXdTdG9yYWdlQXJlYSksIGNvbm5lY3Rp
b24sIHRhcmdldE5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzM3Y2JkODk3YTE1
MGVlZTIyZWI3MjgwZWU1MmQwMjRkZGM1NTVmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuaApAQCAt
MCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdG9y
YWdlQXJlYUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmll
ci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTWVtb3J5U3RvcmFnZUFyZWE7Citj
bGFzcyBTdG9yYWdlQXJlYVJlZ2lzdHJ5OworCitjbGFzcyBTZXNzaW9uU3RvcmFnZU1hbmFnZXIg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IFNl
c3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5Jik7CisgICAgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0OworICAgIGJvb2wgaGFzRGF0YUluTWVtb3J5KCkgY29uc3Q7CisgICAgdm9p
ZCBjbGVhckRhdGEoKTsKKyAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9u
OjpVbmlxdWVJRCk7CisKKyAgICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgY29ubmVjdFRvU2Vzc2lv
blN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIGNvbnN0IFdlYkNvcmU6OkNs
aWVudE9yaWdpbiYsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRpc2Nv
bm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFy
ZWFJZGVudGlmaWVyKTsKKyAgICB2b2lkIGNsb25lU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9u
OjpVbmlxdWVJRCwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFN0b3JhZ2VOYW1lc3BhY2VJ
ZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgYWRkU3Rv
cmFnZUFyZWEoc3RkOjp1bmlxdWVfcHRyPE1lbW9yeVN0b3JhZ2VBcmVhPiwgSVBDOjpDb25uZWN0
aW9uOjpVbmlxdWVJRCwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIpOworCisgICAgU3RvcmFn
ZUFyZWFSZWdpc3RyeSYgbV9yZWdpc3RyeTsKKyAgICBIYXNoTWFwPFN0b3JhZ2VBcmVhSWRlbnRp
Zmllciwgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeVN0b3JhZ2VBcmVhPj4gbV9zdG9yYWdlQXJlYXM7
CisgICAgSGFzaE1hcDxTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgU3RvcmFnZUFyZWFJZGVu
dGlmaWVyPiBtX3N0b3JhZ2VBcmVhc0J5TmFtZXNwYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
U3RvcmFnZUFyZWFCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9TdG9yYWdlQXJlYUJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0NGJhMDEzNWE2NDNjMDFhNWI5MDBj
NzYzMWJhMTQ5OThmOGYzYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmNwcApAQCAtMCwwICsxLDc3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFy
ZWFCYXNlLmgiCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VBcmVhQmFzZSh1bnNpZ25l
ZCBxdW90YSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pCisgICAgOiBtX2lk
ZW50aWZpZXIoU3RvcmFnZUFyZWFJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQorICAgICwgbV9xdW90
YShxdW90YSkKKyAgICAsIG1fb3JpZ2luKG9yaWdpbikKK3sKK30KKworU3RvcmFnZUFyZWFCYXNl
Ojp+U3RvcmFnZUFyZWFCYXNlKCkgPSBkZWZhdWx0OworCit2b2lkIFN0b3JhZ2VBcmVhQmFzZTo6
YWRkTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uKQoreworICAg
IEFTU0VSVCghbV9saXN0ZW5lcnMuY29udGFpbnMoY29ubmVjdGlvbikpOworCisgICAgbV9saXN0
ZW5lcnMuYWRkKGNvbm5lY3Rpb24pOworfQorCit2b2lkIFN0b3JhZ2VBcmVhQmFzZTo6cmVtb3Zl
TGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uKQoreworICAgIG1f
bGlzdGVuZXJzLnJlbW92ZShjb25uZWN0aW9uKTsKK30KKworYm9vbCBTdG9yYWdlQXJlYUJhc2U6
Omhhc0xpc3RlbmVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2xpc3RlbmVycy5pc0VtcHR5
KCk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFCYXNlOjpub3RpZnlMaXN0ZW5lcnNBYm91dENsZWFy
KCkKK3sKKyAgICBmb3IgKGF1dG8mIGNvbm5lY3Rpb24gOiBtX2xpc3RlbmVycykKKyAgICAgICAg
SVBDOjpDb25uZWN0aW9uOjpzZW5kKGNvbm5lY3Rpb24sIE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1h
cDo6Q2xlYXJDYWNoZSgpLCBtX2lkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK3ZvaWQgU3Rv
cmFnZUFyZWFCYXNlOjpkaXNwYXRjaEV2ZW50cyhJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNv
dXJjZUNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc291cmNlSW1wbElkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBT
dHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3QKK3sKKyAgICBB
U1NFUlQoc291cmNlSW1wbElkZW50aWZpZXIpOworCisgICAgZm9yIChhdXRvJiBjb25uZWN0aW9u
IDogbV9saXN0ZW5lcnMpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxTdG9yYWdlQXJlYUltcGxJ
ZGVudGlmaWVyPiBpbXBsSWRlbnRpZmllcjsKKyAgICAgICAgaWYgKGNvbm5lY3Rpb24gPT0gc291
cmNlQ29ubmVjdGlvbikKKyAgICAgICAgICAgIGltcGxJZGVudGlmaWVyID0gc291cmNlSW1wbElk
ZW50aWZpZXI7CisgICAgICAgIElQQzo6Q29ubmVjdGlvbjo6c2VuZChjb25uZWN0aW9uLCBNZXNz
YWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpc3BhdGNoU3RvcmFnZUV2ZW50KGltcGxJZGVudGlmaWVy
LCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgdXJsU3RyaW5nKSwgbV9pZGVudGlmaWVyLnRvVUlu
dDY0KCkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZWQzZWQxNDIwNmUxNzVkY2FjYzhjMWY5OTQ5MDc1MDU0NWUzNGU5OAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdl
QXJlYUJhc2UuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50
aWZpZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgQ2xpZW50T3JpZ2luOworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworZW51bSBjbGFzcyBTdG9yYWdlRXJyb3IgOiB1aW50OF90IHsKKyAgICBEYXRh
YmFzZSwKKyAgICBJdGVtTm90Rm91bmQsCisgICAgUXVvdGFFeGNlZWRlZCwKK307CisKK2NsYXNz
IFN0b3JhZ2VBcmVhQmFzZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTdG9yYWdlQXJlYUJhc2U+
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdG9yYWdlQXJlYUJhc2UpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZpcnR1YWwgflN0b3JhZ2VBcmVhQmFz
ZSgpOworCisgICAgZW51bSBjbGFzcyBUeXBlIDogYm9vbCB7IFNRTGl0ZSwgTWVtb3J5IH07Cisg
ICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7CisgICAgZW51bSBjbGFzcyBTdG9yYWdl
VHlwZSA6IGJvb2wgeyBTZXNzaW9uLCBMb2NhbCB9OworICAgIHZpcnR1YWwgU3RvcmFnZVR5cGUg
c3RvcmFnZVR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOworCisgICAgU3RvcmFnZUFyZWFJZGVudGlm
aWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyAgICBXZWJD
b3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAg
ICB1bnNpZ25lZCBxdW90YSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVvdGE7IH0KKyAgICB2b2lkIGFk
ZExpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQpOworICAgIHZvaWQgcmVtb3ZlTGlz
dGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7CisgICAgYm9vbCBoYXNMaXN0ZW5lcnMo
KSBjb25zdDsKKyAgICB2b2lkIG5vdGlmeUxpc3RlbmVyc0Fib3V0Q2xlYXIoKTsKKworICAgIHZp
cnR1YWwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gYWxsSXRlbXMoKSA9IDA7CisgICAgdmlydHVh
bCBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IHNldEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpV
bmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgU3RyaW5nJiYga2V5LCBTdHJpbmcm
JiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpID0gMDsKKyAgICB2aXJ0dWFsIEV4cGVj
dGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1
ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiB1cmxTdHJpbmcpID0gMDsKKyAgICB2aXJ0dWFsIEV4cGVjdGVkPHZvaWQsIFN0b3Jh
Z2VFcnJvcj4gY2xlYXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBs
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpID0gMDsKKworcHJvdGVjdGVkOgor
ICAgIFN0b3JhZ2VBcmVhQmFzZSh1bnNpZ25lZCBxdW90YSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50
T3JpZ2luJik7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50cyhJUEM6OkNvbm5lY3Rpb246OlVuaXF1
ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBt
X2lkZW50aWZpZXI7CisgICAgdW5zaWduZWQgbV9xdW90YTsKKyAgICBXZWJDb3JlOjpDbGllbnRP
cmlnaW4gbV9vcmlnaW47CisgICAgSGFzaFNldDxJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEPiBt
X2xpc3RlbmVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuY3Bw
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0
cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjFkZDE0YzZmNTBjOTQ2YTRjZTRkODUwMDM5NjFkM2ZmYzZiOWNi
NDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVJlZ2lzdHJ5LmgiCisK
KyNpbmNsdWRlICJTdG9yYWdlQXJlYUJhc2UuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1N0
b3JhZ2VBcmVhUmVnaXN0cnk6OlN0b3JhZ2VBcmVhUmVnaXN0cnkoKSA9IGRlZmF1bHQ7CisKK3Zv
aWQgU3RvcmFnZUFyZWFSZWdpc3RyeTo6cmVnaXN0ZXJTdG9yYWdlQXJlYShTdG9yYWdlQXJlYUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgU3RvcmFnZUFyZWFCYXNlJiBzdG9yYWdlQXJlYSkKK3sKKyAg
ICBBU1NFUlQoIW1fc3RvcmFnZUFyZWFzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKKworICAgIG1f
c3RvcmFnZUFyZWFzLmFkZChpZGVudGlmaWVyLCBzdG9yYWdlQXJlYSk7Cit9CisKK3ZvaWQgU3Rv
cmFnZUFyZWFSZWdpc3RyeTo6dW5yZWdpc3RlclN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhSWRlbnRp
ZmllciBpZGVudGlmaWVyKQoreworICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhcy5jb250YWlucyhp
ZGVudGlmaWVyKSk7CisKKyAgICBtX3N0b3JhZ2VBcmVhcy5yZW1vdmUoaWRlbnRpZmllcik7Cit9
CisKK1N0b3JhZ2VBcmVhQmFzZSogU3RvcmFnZUFyZWFSZWdpc3RyeTo6Z2V0U3RvcmFnZUFyZWEo
U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIG1fc3RvcmFn
ZUFyZWFzLmdldChpZGVudGlmaWVyKS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFn
ZUFyZWFSZWdpc3RyeS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0
b3JhZ2VBcmVhUmVnaXN0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MGNjNzQyMzc2NTJmNWMxNjdjNjhiZTFm
NmEyYjZjYzRlZWU0M2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuaApAQCAtMCwwICsxLDQ3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50aWZp
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgU3RvcmFnZUFyZWFCYXNlOworCitjbGFzcyBTdG9yYWdlQXJlYVJlZ2lzdHJ5IHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTdG9yYWdlQXJlYVJlZ2lz
dHJ5KCk7CisgICAgdm9pZCByZWdpc3RlclN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhSWRlbnRpZmll
ciwgU3RvcmFnZUFyZWFCYXNlJik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU3RvcmFnZUFyZWEoU3Rv
cmFnZUFyZWFJZGVudGlmaWVyKTsKKyAgICBTdG9yYWdlQXJlYUJhc2UqIGdldFN0b3JhZ2VBcmVh
KFN0b3JhZ2VBcmVhSWRlbnRpZmllcik7CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxTdG9yYWdl
QXJlYUlkZW50aWZpZXIsIFdlYWtQdHI8U3RvcmFnZUFyZWFCYXNlPj4gbV9zdG9yYWdlQXJlYXM7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2NyaXB0cy9nZW5lcmF0ZS11bmlmaWVkLXNvdXJjZXMuc2ggYi9Tb3VyY2UvV2ViS2l0L1Njcmlw
dHMvZ2VuZXJhdGUtdW5pZmllZC1zb3VyY2VzLnNoCmluZGV4IGI2ZDQwYWQ5ZTk1NDdiZDQwZGU4
NWM5Yzg1YTM1YzFlMjVjZGYxOTEuLjRmMWFjODNjYjNhMjI2ZWNjZDA3ODM5ODM3OTIzY2JjNDRi
YWI5MjMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy9nZW5lcmF0ZS11bmlmaWVk
LXNvdXJjZXMuc2gKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQt
c291cmNlcy5zaApAQCAtMTQsNyArMTQsNyBAQCBpZiBbIC16ICIke0JVSUxEX1NDUklQVFNfRElS
fSIgXTsgdGhlbgogICAgIGZpCiBmaQogCi1VbmlmaWVkU291cmNlQ3BwRmlsZUNvdW50PTExMQor
VW5pZmllZFNvdXJjZUNwcEZpbGVDb3VudD0xMTIKIFVuaWZpZWRTb3VyY2VNbUZpbGVDb3VudD04
MAogCiBpZiBbICQjIC1lcSAwIF07IHRoZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291
cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDA1YTg1YjAxOTYwNDIw
MTZhYjY4NWYyMGQ0YmVmNzNjNDYyNjU2MDcuLjQyZmI2MWIxNzc1MWUxMTk3MzJmYWFiMjZlMTU4
YTUyNjM1NTM1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMTQzLDggKzE0MywxNCBAQCBOZXR3b3JrUHJv
Y2Vzcy9TZXJ2aWNlV29ya2VyL1dlYlNXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlvbi5jcHAgQG5v
LXVuaWZ5CiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5j
cHAKIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGUuY3BwCiBO
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0ZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkuY3Bw
CitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwCitOZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNwcAogTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09y
aWdpblN0b3JhZ2VNYW5hZ2VyLmNwcAorTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9y
YWdlQXJlYS5jcHAKK05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
LmNwcAorTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuY3BwCitOZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwCiAKIE5ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCiBOZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4
IGY0MDAwYTZiNzE5MTM1YzM0M2I0Y2QwOWMwMjNhNjhmMmM1ZTc4NWUuLmIxMWYyZDUzY2ZmYTg1
Zjk2ZjI3NDExZDlkMmRiMDdkOTZhMDdjMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMTU3MiwxNiAr
MTU3Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlU3ltTGlua0ZvckZpbGVV
cGdyYWRlKGNvbnN0IFN0cmluZyYgaW5kZXhlZERhdGFiCiAgICAgICAgIEZpbGVTeXN0ZW06OmNy
ZWF0ZVN5bWJvbGljTGluayhpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIG9sZFZlcnNpb25EaXJl
Y3RvcnkpOwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExvY2FsU3RvcmFnZURl
dGFpbHMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICghY2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6R2V0TG9jYWxTdG9y
YWdlT3JpZ2luRGV0YWlscyhzZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgV2ViUGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdlUHJveHlJRCwgV2Vi
Q29yZTo6UGFnZUlkZW50aWZpZXIgd2ViUGFnZUlELCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiB1c2VyQWdlbnQsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5LCBzdGQ6Om9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWlu
PiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBMYXN0TmF2aWdhdGlvbldhc0FwcEluaXRp
YXRlZCBsYXN0TmF2aWdhdGlvbldhc0FwcEluaXRpYXRlZCkKIHsKICAgICBpZiAoIXVybC5pc1Zh
bGlkKCkgfHwgIXVybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmlu
ZGV4IDkwOTc5M2UzNzU2OGMwNDJiMTAwMmEyNmFhMDI3NDc4NGE5MWU0Y2EuLjcyMmQ5NzMxYTAx
MmRlMzRmYjZjMzMyYjkxMTQ1ZGQwMzAyZjU2M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0xOTY5
LDE4ICsxOTY5LDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNv
b2tpZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxM
b2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQotewotICAgIGlmICghaXNQZXJzaXN0ZW50KCkpIHsKLSAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG5ldHdvcmtQ
cm9jZXNzKCkuZ2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7Ci0g
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOwotICAgIH0pOwotfQot
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5oCmluZGV4IDFkZTI1YTY2MDU3ZjJkNjZjNjI5OWU1ZWJiYjgxNDZiZWU5Yjgx
ZTMuLjM0YWU1YWY2MDczYzI1OTE0MjBmMjA5Y2UwZjc1MzJiYWJkYzgzZTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmgKQEAgLTE2Nyw3ICsxNjcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVEYXRhKE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBGdW5jdGlvbjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiYsIEZ1
bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICB2b2lkIGdldExvY2Fs
U3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJik7CiAgICAgdm9pZCBzZXRDYWNoZU1vZGVsU3lu
Y2hyb25vdXNseUZvclRlc3RpbmcoQ2FjaGVNb2RlbCk7CiAgICAgdm9pZCBzZXRTZXJ2aWNlV29y
a2VyVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyk7CiAgICAgdm9pZCByZXNldFNlcnZpY2VXb3Jr
ZXJUaW1lb3V0Rm9yVGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VbmlmaWVk
U291cmNlcy1vdXRwdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvVW5pZmllZFNvdXJjZXMt
b3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggNTA4OThlNDYzMDE3MzE5NGFlNGVmN2NjZTQzYWU4ZWI0
NjczYTg2Yi4uMmFkNzk2NDVkNmVmNjgzZGFkNGViMDc2ZjVkZDcyNDcyYmY4NjBiOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VuaWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0xNyw2
ICsxNyw3IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5p
ZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMS1tbS5tCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTEuY3Bw
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291
cmNlcy9VbmlmaWVkU291cmNlMTEwLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTExMS5jcHAKKyQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1Vu
aWZpZWRTb3VyY2UxMTIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTItbW0ubW0KICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRT
b3VyY2UxMi5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQv
dW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMy1tbS5tbQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTQ1ZDRkMzY5MzE3ODQ0NzA0
ZDQ3MTgwZmM0ZGFkNmYxYjk2NjIzNi4uZGQ5ODY5OTk4NWI0NmZiZmQwMjUyMzc4YjU4MmU0MjQ0
NDU1NGU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0xNTE0LDYgKzE1MTQsMTMgQEAKIAkJOTNFNzk5ODUyNzU2RkE1NTAwNzQwMDhB
IC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTk4MjI3NTZG
QTU0MDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLzsgfTsKIAkJOTNFNzk5ODcyNzU2RkFCNDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0
ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzUmVwbGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5ODMyNzU2RkE1NDAwNzQwMDhBIC8qIFdl
YkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzUmVwbGllcy5oICovOyB9OwogCQk5
M0U3OTk4ODI3NTZGQUMyMDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9u
TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzRTc5OTgxMjc1NkZBNTMwMDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rp
b25NZXNzYWdlcy5oICovOyB9OworCQk5M0U3OTlDNzI3NjAyNzQ2MDA3NDAwOEEgLyogU3RvcmFn
ZUFyZWFSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNFNzk5QzYyNzYwMjczNzAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuaCAq
LzsgfTsKKwkJOTNFNzk5Q0UyNzYwNDk3QjAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5
Q0EyNzYwNDk3QTAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5oICovOyB9OworCQk5
M0U3OTlDRjI3NjA0OTdCMDA3NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFuYWdlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5Q0IyNzYwNDk3QTAw
NzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFnZXIuaCAqLzsgfTsKKwkJOTNFNzk5RDIyNzYwQUE1
QjAwNzQwMDhBIC8qIFVuaWZpZWRTb3VyY2UxMTIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5RDEyNzYwQUE1QTAwNzQwMDhBIC8qIFVuaWZp
ZWRTb3VyY2UxMTIuY3BwICovOyB9OworCQk5M0U3OTlEQTI3NjEyMTA4MDA3NDAwOEEgLyogU1FM
aXRlU3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzRTc5OUQ0Mjc2MTIxMDcwMDc0MDA4QSAvKiBTUUxpdGVTdG9yYWdlQXJlYS5oICov
OyB9OworCQk5M0U3OTlEQjI3NjEyMTA4MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUQ1Mjc2
MTIxMDcwMDc0MDA4QSAvKiBNZW1vcnlTdG9yYWdlQXJlYS5oICovOyB9OworCQk5M0U3OTlEQzI3
NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTlENjI3NjEyMTA4MDA3NDAwOEEgLyogU3Rv
cmFnZUFyZWFCYXNlLmggKi87IH07CiAJCTkzRjU0OUI0MUUzMTc0QjcwMDBFNzIzOSAvKiBXS1Nu
YXBzaG90Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNGNTQ5QjMxRTMxNzRCNzAwMEU3MjM5IC8qIFdLU25hcHNob3RDb25maWd1
cmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9Owog
CQk5NTBGMjg4MDI1MjQxNEVBMDBCNzRGMUMgLyogV0tNb3VzZURldmljZU9ic2VydmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NTBGMjg3RTI1MjQx
NEU5MDBCNzRGMUMgLyogV0tNb3VzZURldmljZU9ic2VydmVyLmggKi87IH07CiAJCTk1NjUwODM5
MjZEODdBMkIwMEUxNUNCNyAvKiBBcHBsZU1lZGlhU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1NjUwODM3MjZEODdBMkIwMEUxNUNC
NyAvKiBBcHBsZU1lZGlhU2VydmljZXNTUEkuaCAqLzsgfTsKQEAgLTUzNTMsNiArNTM2MCwxOSBA
QAogCQk5M0U3OTk4MTI3NTZGQTUzMDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25u
ZWN0aW9uTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRmls
ZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNFNzk5ODIyNzU2RkE1NDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdl
Q29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0U3OTk4MzI3NTZGQTU0MDA3NDAw
OEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXNSZXBsaWVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVj
dGlvbk1lc3NhZ2VzUmVwbGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3
OTlDNTI3NjAyNzM2MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5QzYyNzYwMjczNzAwNzQwMDhBIC8qIFN0
b3JhZ2VBcmVhUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rv
cmFnZUFyZWFSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlD
OTI3NjA0OTdBMDA3NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5Q0EyNzYwNDk3QTAwNzQwMDhBIC8qIFNlc3Np
b25TdG9yYWdlTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXNz
aW9uU3RvcmFnZU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5
Q0IyNzYwNDk3QTAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTG9jYWxTdG9yYWdlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5M0U3OTlDQzI3NjA0OTdCMDA3NDAwOEEgLyogU2Vzc2lvblN0b3Jh
Z2VNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlc3Np
b25TdG9yYWdlTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5
OUQxMjc2MEFBNUEwMDc0MDA4QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuaWZpZWRTb3VyY2UxMTIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlEMzI3NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRlU3Rv
cmFnZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMaXRl
U3RvcmFnZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlENDI3
NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU1FMaXRlU3RvcmFnZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTNFNzk5RDUyNzYxMjEwNzAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeVN0b3JhZ2VBcmVhLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQ2Mjc2MTIxMDgwMDc0MDA4QSAvKiBT
dG9yYWdlQXJlYUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFn
ZUFyZWFCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQ3Mjc2MTIx
MDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU3RvcmFnZUFyZWFCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTNFNzk5RDgyNzYxMjEwODAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lbW9yeVN0b3JhZ2VBcmVh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGNTQ5QjMxRTMxNzRCNzAwMEU3
MjM5IC8qIFdLU25hcHNob3RDb25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLU25hcHNob3RDb25maWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzRjU0OUI1MUUzMTc0REEwMDBFNzIzOSAvKiBXS1NuYXBzaG90Q29uZmlndXJh
dGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLU25hcHNo
b3RDb25maWd1cmF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NTBGMjg3
RTI1MjQxNEU5MDBCNzRGMUMgLyogV0tNb3VzZURldmljZU9ic2VydmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLTW91c2VEZXZpY2VPYnNlcnZlci5oOyBwYXRoID0gaW9z
L1dLTW91c2VEZXZpY2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
ODIzNCw2ICs4MjU0LDcgQEAKIAkJCQkxQ0FFQ0I1RDI3NDY1QUUzMDBBQjc4RDAgLyogVW5pZmll
ZFNvdXJjZTEwOS5jcHAgKi8sCiAJCQkJMUNBRUNCNjAyNzQ2NUFFMzAwQUI3OEQwIC8qIFVuaWZp
ZWRTb3VyY2UxMTAuY3BwICovLAogCQkJCTFDQUVDQjVFMjc0NjVBRTMwMEFCNzhEMCAvKiBVbmlm
aWVkU291cmNlMTExLmNwcCAqLywKKwkJCQk5M0U3OTlEMTI3NjBBQTVBMDA3NDAwOEEgLyogVW5p
ZmllZFNvdXJjZTExMi5jcHAgKi8sCiAJCQkpOwogCQkJbmFtZSA9ICJ1bmlmaWVkLXNvdXJjZXMi
OwogCQkJcGF0aCA9ICJEZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzIjsKQEAg
LTEwMzE0LDExICsxMDMzNSwyMyBAQAogCQkJCTkzNUI1Nzk4MjZGNTEyNzAwMDhCNDhBQyAvKiBG
aWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5LmggKi8sCiAJCQkJOTMxQTA3NTEyNkYwNjMx
MDAwNDQ3NENEIC8qIEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5jcHAgKi8sCiAJCQkJOTMxQTA3
NTAyNkYwNjMxMDAwNDQ3NENEIC8qIEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5oICovLAorCQkJ
CTkzRTc5OUM5Mjc2MDQ5N0EwMDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcCAqLywK
KwkJCQk5M0U3OTlDQjI3NjA0OTdBMDA3NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFuYWdlci5oICov
LAorCQkJCTkzRTc5OUQ4Mjc2MTIxMDgwMDc0MDA4QSAvKiBNZW1vcnlTdG9yYWdlQXJlYS5jcHAg
Ki8sCisJCQkJOTNFNzk5RDUyNzYxMjEwNzAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmgg
Ki8sCiAJCQkJOTMwODVEQzMyNkUxQkJCRDAwMEVDNkE3IC8qIE5ldHdvcmtTdG9yYWdlTWFuYWdl
ci5jcHAgKi8sCiAJCQkJOTMwODVEQzQyNkUxQkJCRDAwMEVDNkE3IC8qIE5ldHdvcmtTdG9yYWdl
TWFuYWdlci5oICovLAogCQkJCTkzMDg1REM3MjZFMUM2RUUwMDBFQzZBNyAvKiBOZXR3b3JrU3Rv
cmFnZU1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCiAJCQkJOTMwODVEQzUyNkUxQzZDRjAwMEVDNkE3
IC8qIE9yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcCAqLywKIAkJCQk5MzA4NURDNjI2RTFDNkNGMDAw
RUM2QTcgLyogT3JpZ2luU3RvcmFnZU1hbmFnZXIuaCAqLywKKwkJCQk5M0U3OTlDQzI3NjA0OTdC
MDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcCAqLywKKwkJCQk5M0U3OTlDQTI3
NjA0OTdBMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmggKi8sCisJCQkJOTNFNzk5
RDMyNzYxMjEwNzAwNzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmNwcCAqLywKKwkJCQk5M0U3
OTlENDI3NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuaCAqLywKKwkJCQk5M0U3
OTlENzI3NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmNwcCAqLywKKwkJCQk5M0U3
OTlENjI3NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmggKi8sCisJCQkJOTNFNzk5
QzUyNzYwMjczNjAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwICovLAorCQkJCTkz
RTc5OUM2Mjc2MDI3MzcwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmggKi8sCiAJCQkp
OwogCQkJcGF0aCA9IHN0b3JhZ2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTI5
NzMsNiArMTMwMDYsNyBAQAogCQkJCTU3RENFREFFMjE0QzYwMzMwMDE2Qjg0NyAvKiBMb2NhbFNl
cnZpY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQjI2MTRFMjI3RDE0QjEwMEI5N0E3NiAvKiBM
b2NhbFN0b3JhZ2VEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNCMjYxNEYyMjdEMTRC
MTAwQjk3QTc2IC8qIExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJOTNFNzk5Q0YyNzYwNDk3QjAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFnZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTQ2QkVCNkRCMjJGQjlENDgwMDI2OTg2NyAvKiBMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTdGMkYzMTI1QkY4MjAwMDhBRUIx
RCAvKiBMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRDRDdGNzFENDdFOTJBMDA5RjA4
QkMgLyogTG9nSW5pdGlhbGl6YXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMTI5OTEsNiArMTMw
MjUsNyBAQAogCQkJCUExNTc5OUJEMjU4NDQzMzIwMDUyODIzNiAvKiBNZWRpYVNhbXBsZUN1cnNv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc1QTlDRjMyNjE2OUJBQjAwNkRGQTNBIC8qIE1lZGlh
U2Vzc2lvbkNvb3JkaW5hdG9yUHJveHlQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU3
OTlCNzI1ODQ0MzMyMDA1MjgyMzYgLyogTWVkaWFUcmFja1JlYWRlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJOTNFNzk5REIyNzYxMjEwODAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTkzM0RFRjE5NjVFQjMxMDA4QUMzRUEgLyogTWVudVV0aWxpdGll
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUI0NzkwOEQyNTMxNEQ4MzAwRUMxMUFCIC8qIE1lc3Nh
Z2VBcmd1bWVudERlc2NyaXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDNEM4MjkxNkI4
NzZBOTAwNjlEQ0NEIC8qIE1lc3NhZ2VGbGFncy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzAzOSw3
ICsxMzA3NCw2IEBACiAJCQkJNTMyMTU5NTYxREJBRTcyRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRh
VGFza0NvY29hLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Mzk5MDIwMzFCRTlBMDJCMDAwRjM2NTMg
LyogTmV0d29ya0xvYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzRDQ1NEQ3MUJFOUQzQzQwMDZD
OTNCRCAvKiBOZXR3b3JrTG9hZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE3QjVGOTcy
NzVFQzVFNTAwMkRDMjJEIC8qIFdlYlB1c2hNZXNzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
MzkxNDk2NTFCRUE4Mzg1MDBEMkQ5NTMgLyogTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNDdGQzhBMDI1QjgzMzFDMDA1NDk1RkMgLyogTmV0d29ya0xvYWRTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNDUyNkVEMjcxRTE2NDcwMDA0NjdCNiAvKiBO
ZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzEyNyw2ICsx
MzE2MSw3IEBACiAJCQkJMkQyNzlFMTkyNjk1NTc2ODAwNEIzRUVCIC8qIFByb3RvdHlwZVRvb2xz
U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUY4MTI3NUU5N0I2MDAyREMyMkQgLyogUHVz
aEFwcEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGN0QyNzVFOTdCNjAwMkRDMjJE
IC8qIFB1c2hDbGllbnRDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTdCNUY5NTI3
NUVCQTYzMDAyREMyMkQgLyogUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMUU2ODg3MDFGNkUyQkFCMDA3MDA2QTYgLyogUXVhcmFudGluZVNQSS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUEwQzIyN0UyNDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFp
bGluZ1NvZnRMaW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUVFNTcyNTI0MDlGMTQyMDAyMDA1
RDYgLyogUXVpY2tMb29rVGh1bWJuYWlsTG9hZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTEzMjEx
LDYgKzEzMjQ2LDcgQEAKIAkJCQk1MTREOUY1NzE5MTE5RDM1MDAwMDYzQTcgLyogU2VydmljZXND
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZERTY1QTE5NTRBNDJCMDBDNDhGRkEg
LyogU2Vzc2lvblN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTAwMkQ0OTE5NkIzNDVEMDBC
OUFENDQgLyogU2Vzc2lvblN0YXRlQ29kaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3OTlD
RTI3NjA0OTdCMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0NkJFQjZERjIyRkJCMTZCMDAyNjk4NjcgLyogU2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNjQyMEU1MTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFy
ZWFibGVCaXRtYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0M0E5Q0UwMjVENzJGMUMwMDk5MEUy
NiAvKiBTaGFyZWFibGVCaXRtYXBVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTMyMzks
MTEgKzEzMjc1LDE0IEBACiAJCQkJOTNENkI3NzIyNTRCQjUxOTAwNThERDNBIC8qIFNwZWVjaFJl
Y29nbml0aW9uU2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Q2Qjc4NDI1NENDRDBFMDA1
OEREM0EgLyogU3BlZWNoUmVjb2duaXRpb25TZXJ2ZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNENkI3ODUyNTRDQ0Q0MzAwNThERDNBIC8qIFNwZWVjaFJlY29nbml0aW9uU2VydmVy
TWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3OTlEQTI3NjEyMTA4MDA3
NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBM0ZFQ0Ey
MjFGN0MwOTcwMEYyNjdDRCAvKiBTdG9yYWdlQWNjZXNzU3RhdHVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0NkJFQjZENzIyRkI5QkQ3MDAyNjk4NjcgLyogU3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTkzRTc5OURDMjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBRDMzMDZGMTZCMUQ5OTEwMDRGNjBFNyAvKiBTdG9yYWdlQXJl
YUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQ0VDRDI1MTcxNjJEQjEwMDFGQzlFRiAvKiBT
dG9yYWdlQXJlYU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzMzRERUUxNkRFOEY4ODAwNkE4
RTM4IC8qIFN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTc5
OUM3Mjc2MDI3NDYwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5M0IyNjE0RDIyN0QxNDlFMDBCOTdBNzYgLyogU3RvcmFnZU1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzNkIwNTk4MjMwMzkwOTcwMDJGQzA2QiAvKiBTdG9yYWdlTWFuYWdl
clNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM2OEVFREYyMzAzQTlFRDAwQkRCMTFBIC8qIFN0
b3JhZ2VNYW5hZ2VyU2V0TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTM1MTMsNiArMTM1
NTIsNyBAQAogCQkJCTUxN0I1RjJFMjc1NzM4MkEwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29u
bmVjdGlvbkNvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkNENjlBMjcyMUYw
QTkwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTdCNUY3MzI3NUU5NjA5MDAyREMyMkQgLyogV2ViUHVzaERhZW1vbk1haW4uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUxN0I1Rjk3Mjc1RUM1RTUwMDJEQzIyRCAvKiBXZWJQdXNoTWVzc2FnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDYxQ0NDQTYyMzE0ODVBQTAwQjY1OUI5IC8qIFdlYlJlbW90
ZU9iamVjdFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTg2MEU3MTIzMEY2N0ZDMDA0
NjFBQUUgLyogV2ViUmVzb3VyY2VJbnRlcmNlcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MTBBRkZCQTE2NTQyMDQ4MDAxQkEwNUUgLyogV2ViUmVzb3VyY2VMb2FkZXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTM1NDcsNyArMTM1ODcsNiBAQAogCQkJCTkzNTZGMkRDMjE1MkI2QjUw
MEU2RDVERiAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
N0E1MzEwMUY0N0E4NjIwMERDREMwQSAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDY2QkMwM0MxRkEyNjZEQTAwMkZBOUMxIC8qIFdlYlNXQ29u
dGV4dE1hbmFnZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTdCNUY5NTI3NUVC
QTYzMDAyREMyMkQgLyogUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0NjBGNDg5MDFGOTk2RjcxMDBDRjRCODcgLyogV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rp
b25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzExQTlFQ0MyMTQwMzVGODAwQ0ZCMjBB
IC8qIFdlYlN3aXRjaGluZ0dQVUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1NkYyREUy
MTUyQjcxMDAwRTZENURGIC8qIFdlYlNXT3JpZ2luU3RvcmUuaCBpbiBIZWFkZXJzICovLApAQCAt
MTUxMTYsOSArMTUxNTUsOSBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJ
CWZpbGVzID0gKAogCQkJCTUxN0I1RjlBMjc1RjNBODYwMDJEQzIyRCAvKiBBcmd1bWVudENvZGVy
cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTdCNUY2ODI3NUE5QTc4MDAyREMyMkQgLyogV2Vi
UHVzaFRvb2xDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3QjVGOUIyNzVGM0E5
ODAwMkRDMjJEIC8qIERhZW1vblV0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxN0I1
RjlDMjc1RjNDMzcwMDJEQzIyRCAvKiBEYWVtb25FbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTUxN0I1RjlCMjc1RjNBOTgwMDJEQzIyRCAvKiBEYWVtb25VdGlsaXRpZXMubW0gaW4gU291
cmNlcyAqLywKKwkJCQk1MTdCNUY2ODI3NUE5QTc4MDAyREMyMkQgLyogV2ViUHVzaFRvb2xDb25u
ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QjVGNjUyNzVBOEQ3RjAwMkRDMjJEIC8q
IFdlYlB1c2hUb29sTWFpbi5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMTUyMTQsNyArMTUyNTMsNiBAQAogCQkJ
CUNEQTkzREIxMjJGOEJDRjQwMDQ5MEE2OSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWNQ
YXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMxQTE1MkQ3MjRFNUEyOUEwMDk3OEM4
QiAvKiBIYW5kbGVYUENFbmRwb2ludE1lc3NhZ2VzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjc0
OUY2NDQyMTQ2NTYxQjAwODM4MEJGIC8qIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQk1MTdCNUY5OTI3NUVDNjAxMDAyREMyMkQgLyogV2ViUHVzaE1lc3Nh
Z2VDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI3NDlGNjQ1MjE0NjU2MUUwMDgzODBCRiAv
KiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlCRjVF
QzY0MjU0MTE0NTYwMDk4NEU3NyAvKiBKU0lQQ0JpbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzE0RDM3RkUyNEFDRTA4NjAwN0ZGMDE0IC8qIExhdW5jaFNlcnZpY2VzRGF0YWJhc2VNYW5h
Z2VyLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0xNTUwMyw2ICsxNTU0MSw3IEBACiAJCQkJMUNBRUNC
NjUyNzQ2NUFFNDAwQUI3OEQwIC8qIFVuaWZpZWRTb3VyY2UxMDkuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUNBRUNCNjgyNzQ2NUFFNDAwQUI3OEQwIC8qIFVuaWZpZWRTb3VyY2UxMTAuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUNBRUNCNjYyNzQ2NUFFNDAwQUI3OEQwIC8qIFVuaWZpZWRTb3Vy
Y2UxMTEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTNFNzk5RDIyNzYwQUE1QjAwNzQwMDhBIC8q
IFVuaWZpZWRTb3VyY2UxMTIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM4QTFGQzAyM0E1NTFC
RjAwRDIzNzRGIC8qIFVzZXJJbnRlcmZhY2VJZGlvbS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNE
NDkxQjBEMUU3MzJFNEQwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDQ5MUIxNzFFNzM1MjU1MDAwMDkwNjYg
LyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTE1NTc0LDYgKzE1NjEzLDcgQEAKIAkJCQlCQ0VFN0FEMDEyODE3OTg4MDA5
ODI3REEgLyogV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxN0I1RjdBMjc1RTk3QTQwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTE3QjVGNzkyNzVFOTdBMTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25N
YWluLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE3QjVGOTkyNzVFQzYwMTAwMkRDMjJEIC8qIFdl
YlB1c2hNZXNzYWdlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUYwNjBFMTE2NTQzMTg1
MDBGMzI4MUIgLyogV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODFGIC8qIFdlYlJUQ01vbml0b3JNZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMy
ODJDIC8qIFdlYlJUQ1Jlc29sdmVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFy
ZWFNYXAuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFy
ZWFNYXAuY3BwCmluZGV4IDBmYTZhYzE4ZmQ5NDcwNTkwY2YxMDdkNmE0NDA2NmQ5MmQ5YTQzNmQu
LjJjZjdhNmQ0YjYwMDVjMWQ3ZWMyNTZiZDYzODg3NjI5NGU5ZTRjZjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZU1hbmFnZXJN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogI2luY2x1ZGUgIlN0b3Jh
Z2VBcmVhTWFwTWVzc2FnZXMuaCIKICNpbmNsdWRlICJTdG9yYWdlTWFuYWdlclNldE1lc3NhZ2Vz
LmgiCkBAIC05NSw3ICs5Niw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OnNldEl0ZW0oRnJhbWUq
IHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUFyZWEsIGNvCiAgICAgbV9wZW5k
aW5nVmFsdWVDaGFuZ2VzLmFkZChrZXkpOwogCiAgICAgaWYgKG1fbWFwSUQpCi0gICAgICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNv
bm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6U2V0SXRlbSgqbV9t
YXBJRCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHZhbHVl
LCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKKyAgICAgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCku
Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6U2V0SXRl
bSgqbV9tYXBJRCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBrZXks
IHZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKICAg
ICBlbHNlCiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTdG9yYWdlQXJlYU1h
cDo6c2V0SXRlbSBmYWlsZWQgYmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CiB9
CkBAIC0xMTQsNyArMTE1LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbShXZWJD
b3JlOjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc28KICAgICBtX3BlbmRp
bmdWYWx1ZUNoYW5nZXMuYWRkKGtleSk7CiAKICAgICBpZiAobV9tYXBJRCkKLSAgICAgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29u
bmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpSZW1vdmVJdGVtKCpt
X21hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIGtleSwgc291
cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgMCk7CisgICAgICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OlJlbW92ZUl0ZW0o
Km1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwga2V5LCBz
b3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKICAgICBlbHNlCiAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTdG9yYWdlQXJlYU1hcDo6cmVtb3Zl
SXRlbSBmYWlsZWQgYmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CiB9CkBAIC0x
MjksNyArMTMwLDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6Y2xlYXIoV2ViQ29yZTo6RnJhbWUq
IHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUEKICAgICBtX21hcCA9IG1ha2VV
bmlxdWU8U3RvcmFnZU1hcD4obV9xdW90YUluQnl0ZXMpOwogCiAgICAgaWYgKG1fbWFwSUQpCi0g
ICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q2xl
YXIoKm1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwgc291
cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgMCk7CisgICAgICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNsZWFyKCptX21h
cElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIHNvdXJjZUZyYW1l
LT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOwogICAgIGVsc2UKICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVhTWFwOjpjbGVhciBmYWlsZWQgYmVj
YXVzZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CiB9CkBAIC0xNjAsNyArMTYxLDcgQEAg
U3RvcmFnZU1hcCYgU3RvcmFnZUFyZWFNYXA6OmVuc3VyZU1hcCgpCiAgICAgICAgICAgICAvLyBm
cm9tIG91ciBTdG9yYWdlTWFuYWdlclNldDo6R2V0VmFsdWVzKCkgSVBDLiBUaGlzIElQQyBtYXkg
YmUgdmVyeSBzbG93IGJlY2F1c2UgaXQgbWF5IG5lZWQgdG8gZmV0Y2ggdGhlIHZhbHVlcyBmcm9t
IGRpc2sgYW5kIHRoZXJlIG1heSBiZSBhIGxvdCBvZiBkYXRhLgogICAgICAgICAgICAgSVBDOjpV
bmJvdW5kZWRTeW5jaHJvbm91c0lQQ1Njb3BlIHVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGU7
CiAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YWx1ZXM7Ci0gICAgICAgICAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
KS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpHZXRW
YWx1ZXMoKm1fbWFwSUQpLCBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkdldFZhbHVlczo6
UmVwbHkodmFsdWVzKSwgMCk7CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5l
bnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVz
c2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6R2V0VmFsdWVzKCptX21hcElEKSwgTWVzc2Fn
ZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpHZXRWYWx1ZXM6OlJlcGx5KHZhbHVlcyksIDApOwogICAg
ICAgICAgICAgbV9tYXAtPmltcG9ydEl0ZW1zKFdURk1vdmUodmFsdWVzKSk7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVh
TWFwOjplbnN1cmVNYXAgZmFpbGVkIHRvIGxvYWQgZnJvbSBuZXR3b3JrIHByb2Nlc3MgYmVjYXVz
ZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CkBAIC0zNDgsMjAgKzM0OSwyMyBAQCB2b2lk
IFN0b3JhZ2VBcmVhTWFwOjpjb25uZWN0KCkKICAgICBpZiAobV9tYXBJRCkKICAgICAgICAgcmV0
dXJuOwogCisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVyIG1hcElEOwogICAgIHN3aXRjaCAobV90
eXBlKSB7CiAgICAgY2FzZSBTdG9yYWdlVHlwZTo6TG9jYWw6CiAgICAgY2FzZSBTdG9yYWdlVHlw
ZTo6VHJhbnNpZW50TG9jYWw6CiAgICAgICAgIGlmIChTZWN1cml0eU9yaWdpbiogdG9wTGV2ZWxP
cmlnaW4gPSBtX25hbWVzcGFjZS50b3BMZXZlbE9yaWdpbigpKQotICAgICAgICAgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVj
dGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRvVHJh
bnNpZW50TG9jYWxTdG9yYWdlQXJlYShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9uSUQo
KSwgbV9uYW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCksIHRvcExldmVsT3JpZ2luLT5kYXRh
KCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNl
dDo6Q29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYTo6UmVwbHkobV9tYXBJRCksIDAp
OworICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OkNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEobV9uYW1lc3Bh
Y2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCksIHRvcExldmVsT3JpZ2luLT5kYXRhKCksIG1fc2VjdXJp
dHlPcmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5l
Y3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWE6OlJlcGx5KG1hcElEKSwgMCk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFn
ZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuc2Vzc2lvbklEKCksIG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3Nl
Y3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5l
Y3RUb0xvY2FsU3RvcmFnZUFyZWE6OlJlcGx5KG1fbWFwSUQpLCAwKTsKKyAgICAgICAgICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNv
bm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25u
ZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBt
X3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
OjpDb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhOjpSZXBseShtYXBJRCksIDApOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpTZXNzaW9uOgotICAgICAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCkuc2VuZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9TZXNzaW9u
U3RvcmFnZUFyZWEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2Vzc2lvbklEKCksIG1fbmFtZXNw
YWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNz
YWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYTo6UmVw
bHkobV9tYXBJRCksIDApOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6
Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKG1fbmFt
ZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBN
ZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFy
ZWE6OlJlcGx5KG1hcElEKSwgMCk7CiAgICAgfQogCi0gICAgaWYgKG1fbWFwSUQpCisgICAgaWYg
KG1hcElELmlzVmFsaWQoKSkgeworICAgICAgICBtX21hcElEID0gbWFwSUQ7CiAgICAgICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlZ2lzdGVyU3RvcmFnZUFyZWFNYXAoKnRoaXMpOworICAg
IH0KIH0KIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlzY29ubmVjdCgpCkBAIC0zNzMsNyArMzc3
LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlzY29ubmVjdCgpCiAgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkudW5yZWdpc3RlclN0b3JhZ2VBcmVhTWFwKCp0aGlzKTsKIAogICAgIGlmIChh
dXRvKiBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5l
eGlzdGluZ05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpKQotICAgICAgICBuZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNl
dDo6RGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYSgqbV9tYXBJRCksIDApOworICAgICAgICBuZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OkRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoKm1fbWFwSUQpLCAwKTsK
IAogICAgIG1fbWFwSUQgPSB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKaW5kZXggZjg0
ZDAyZmM2ZjdlM2JiMWUzMTQzM2M1ZjAwZTYxZTBmZGViZjkzMi4uZGViNmEzNDMzY2FiYWZhZjdk
Y2FhNTYwY2RjM2ExNWUzYWNhN2U3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcApAQCAtMjcs
OSArMjcsOSBAQAogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgiCiAKICNpbmNsdWRl
ICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZU1h
bmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogI2luY2x1ZGUg
IlN0b3JhZ2VBcmVhTWFwLmgiCi0jaW5jbHVkZSAiU3RvcmFnZU1hbmFnZXJTZXRNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXBQcm94eS5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKQEAgLTExNCw3ICsxMTQsNyBAQCBSZWY8U3RvcmFnZU5h
bWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkoUGFnZSYgbmV3UGFnZSkKICAgICBB
U1NFUlQobV9zdG9yYWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6U2Vzc2lvbik7CiAKICAgICBpZiAo
YXV0byBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5l
eGlzdGluZ05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpKQotICAgICAgICBuZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNl
dDo6Q2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShzZXNzaW9uSUQoKSwgbV9zdG9yYWdlTmFt
ZXNwYWNlSUQsIFdlYlBhZ2U6OmZyb21Db3JlUGFnZShuZXdQYWdlKS5zZXNzaW9uU3RvcmFnZU5h
bWVzcGFjZUlkZW50aWZpZXIoKSksIDApOworICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNs
b25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UobV9zdG9yYWdlTmFtZXNwYWNlSUQsIFdlYlBhZ2U6
OmZyb21Db3JlUGFnZShuZXdQYWdlKS5zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIo
KSksIDApOwogCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFnZU5hbWVzcGFjZUltcGwo
bV9zdG9yYWdlVHlwZSwgV2ViUGFnZTo6ZnJvbUNvcmVQYWdlKG5ld1BhZ2UpLnNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlSWRlbnRpZmllcigpLCBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UobmV3UGFnZSku
aWRlbnRpZmllcigpLCBtX3RvcExldmVsT3JpZ2luLmdldCgpLCBtX3F1b3RhSW5CeXRlcykpOwog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446937</attachid>
            <date>2021-12-12 11:33:34 -0800</date>
            <delta_ts>2021-12-12 16:18:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234087-20211212113332.patch</filename>
            <type>text/plain</type>
            <size>166652</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2OTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGY2OWY2MzMyMDEzYWZk
MzcyMmZjYTk1OGJmNjc5NWNiNDNlMzkxMy4uNTgxNmFlMTNkNTUyOGQxNDE1ZDNhOGVjNGZjNDg2
MmM1MTZhY2NiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTEyLTEyICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIFN0b3JhZ2VNYW5h
Z2VyIHdpdGggTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIHRvIG1hbmFnZSBXZWJTdG9yYWdlIGJ5IG9y
aWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
RmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FM
aXRlRmlsZVN5c3RlbS5oOgorCiAyMDIxLTEyLTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6Om1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCBzaG91bGQgYmUgcHJpdmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA4ZWZkNDBkYWE5YzM1
M2MyYzU0OTA3Zjk4N2ZhYzI3YTdjMmE5ZWJlLi43ZjlmY2NlZjhkZDA1NmY5NGVhMjZkOTViMjJh
NDUyOGNiMjEwOGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNCBAQAorMjAyMS0xMi0xMiAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBNZXJnZSBTdG9yYWdlTWFu
YWdlciB3aXRoIE5ldHdvcmtTdG9yYWdlTWFuYWdlciB0byBtYW5hZ2UgV2ViU3RvcmFnZSBieSBv
cmlnaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
NDA4NworCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgIEluIG5l
dHdvcmsgcHJvY2VzcywgV2ViU3RvcmFnZSBkYXRhIGlzIG1hbmFnZWQgYnkgV2ViS2l0OjpTdG9y
YWdlTWFuYWdlciBjbGFzcy4gRWFjaCBTdG9yYWdlTWFuYWdlciBvd25zIG9uZSBvcgorICAgICAg
ICBtYW55IFN0b3JhZ2VOYW1lU3BhY2VzLCBhbmQgZWFjaCBTdG9yYWdlTmFtZXNwYWNlIG93bnMg
b25lIG9yIG1vcmUgU3RvcmFnZUFyZWFzLiBFYWNoIFN0b3JhZ2VBcmVhIGNvcnJlcG9uZHMKKyAg
ICAgICAgdG8gb25lIHN0b3JhZ2UgbWFwIChvbmUgbG9jYWxTdG9yYWdlIG9yIHNlc3Npb25TdG9y
YWdlIG9iamVjdCksIHVzaW5nIGVpdGhlciBhIFNRTGl0ZSBkYXRhYmFzZSBvciBhIGluLW1lbW9y
eQorICAgICAgICBtYXAgYXMgYmFja2VuZC4gTm93IHRoYXQgd2UgaGF2ZSBOZXR3b3JrU3RvcmFn
ZU1hbmFnZXIsIHdoaWNoIG1hbmFnZXMgc3RvcmFnZSBieSBvcmlnaW4uIFdlIGNhbiBtZXJnZQor
ICAgICAgICBTdG9yYWdlTWFuYWdlciB3aXRoIE5ldHdvcmtTdG9yYWdlTWFuYWdlciwgc2luY2Ug
bG9jYWxTdG9yYWdlIGFuZCBzZXNzaW9uU3RvcmFnZSBhcmUgbm90IHNoYXJlZCBiZXR3ZWVuIAor
ICAgICAgICBkaWZmZXJlbnQgb3JpZ2lucy4KKworICAgICAgICBUaGUgbmV3IHN0cnVjdHVyZSBp
czoKKyAgICAgICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIChtYW5hZ2Ugc3RvcmFnZSBmb3IgYSBz
ZXNzaW9uLCBvd25zIG9uZSBvciBtb3JlIE9yaWdpblN0b3JhZ2VNYW5hZ2VycykKKyAgICAgICAg
T3JpZ2luU3RvcmFnZU1hbmFnZXIgKG1hbmFnZSBzdG9yYWdlIGZvciBhbiBvcmlnaW4sIG93bnMg
b25lIExvY2FsU3RvcmFnZU1hbmFnZXIgYW5kIG9uZSBTZXNzaW9uU3RvcmFnZU1hbmFnZXIpCisg
ICAgICAgIExvY2FsU3RvcmFnZU1hbmFnZXIgLyBTZXNzaW9uU3RvcmFnZU1hbmFnZXIgKG1hbmFn
ZSBMb2NhbFN0b3JhZ2UgYW5kIFNlc3Npb25TdG9yYWdlLCBvd25zIG9uZSBvciBtb3JlIAorICAg
ICAgICBTdG9yYWdlQXJlYUJhc2VzKQorICAgICAgICBNZW1vcnlTdG9yYWdlQXJlYSAvIFNRTGl0
ZVN0b3JhZ2VBcmVhIChpbmhlcml0cyBTdG9yYWdlQXJlYUJhc2VzOyBtYW5hZ2Ugb25lIGxvY2Fs
IG9yIHNlc3Npb24gc3RvcmFnZSwgbGlrZSAKKyAgICAgICAgV2Via2l0OjpTdG9yYWdlQXJlYSkK
KworICAgICAgICBTdG9yYWdlTmFtZXNwYWNlIGxheWVyIGlzIHJlbW92ZWQuIEZvciBTZXNzaW9u
U3RvcmFnZSwgZGlmZmVyZW50IFN0b3JhZ2VOYW1lc3BhY2VzIG1lYW5zIGRpZmZlcmVudCB3ZWIg
cGFnZXMsIAorICAgICAgICBhbmQgc2FtZSBvcmlnaW4gY2FuIGhhdmUgZGlmZmVyZW50IHNlc3Np
b25TdG9yYWdlcyBvbiBkaWZmZXJlbnQgcGFnZXMsIHNvIHdlIGtlZXAgYSBTdG9yYWdlTmFtZXNw
YWNlIDw9PgorICAgICAgICBTdG9yYWdlQXJlYSBtYXAgaW4gU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
LiBGb3IgTG9jYWxTdG9yYWdlLCBkaWZmZXJudCBTdG9yYWdlTmFtZXNwYWNlcyBtZWFucyBkaWZm
ZXJlbnQgcGFnZSAKKyAgICAgICAgZ3JvdXBzLiBPdXIgb3JpZ2luYWwgcGxhbiB3YXMgdGhlIHNh
bWUgb3JpZ2luIGNhbiBoYXZlIGRpZmZlcmVudCBsb2NhbFN0b3JhZ2VzIGluIGRpZmZlcmVudCBw
YWdlIGdyb3VwcywgYnV0IG91cgorICAgICAgICBvbGQgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkg
bWFkZSBhbGwgcGFnZSBncm91cHMgcG9pbnQgdG8gdGhlIHNhbWUgZGF0YWJhc2UgZmlsZS4gVG8g
a2VlcCBleGlzdGluZyBiZWhhdmlvciAKKyAgICAgICAgdGhhdCBhbGwgcGFnZSBncm91cHMgd2l0
aCBzYW1lIG9yaWdpbiBzaGFyZSB0aGUgc3RvcmFnZSwgd2Ugbm93IGtlZXAgb25lIGxvY2FsIFN0
b3JhZ2VBcmVhIGFuZCBvbmUgdHJhbnNpZW50CisgICAgICAgIFN0b3JhZ2VBcmVhIHBlciBMb2Nh
bFN0b3JhZ2VNYW5hZ2VyLgorCisgICAgICAgIE1vc3RseSByZWZhY3RvcmluZyBhbmQgY292ZXJl
ZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6Omxvd01lbW9yeUhhbmRsZXIp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWRkV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRTdG9y
YWdlTWFuYWdlckZvclNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
ZGVzdHJveVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aGFzTG9j
YWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURh
dGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFG
b3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFuZFJl
c3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cHJlcGFyZVRvU3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpyZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZW5h
bWVPcmlnaW5JbldlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyk6IERlbGV0ZWQuCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6ZmlsZU5hbWVUb09yaWdpbik6CisgICAgICAgIChXZWJLaXQ6Om9yaWdpblRvRmlsZU5hbWUp
OgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpvcmlnaW5zT2ZMb2NhbFN0
b3JhZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6bG9jYWxT
dG9yYWdlRmlsZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpM
b2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdl
cjo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2Vy
OjpoYXNEYXRhSW5NZW1vcnkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VN
YW5hZ2VyOjpjbGVhckRhdGFJbk1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNsZWFyRGF0YU9uRGlzayk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6
aGFuZGxlTG93TWVtb3J5V2FybmluZyk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1h
bmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VN
YW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdl
TWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZEZvckxvY2FsU3RvcmFnZUFyZWEpOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkRm9yVHJhbnNpZW50
U3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25u
ZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFu
YWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpNZW1vcnlTdG9y
YWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKFdl
YktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmFsbEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6TWVt
b3J5U3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpNZW1vcnlTdG9yYWdl
QXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpj
bG9uZSBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9y
YWdlQXJlYS5oOiBBZGRlZC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpyZWFkT3JpZ2luRnJvbUZpbGUpOgorICAgICAgICAoV2ViS2l0Ojp3cml0ZU9yaWdpblRvRmls
ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6Ok5ldHdvcmtT
dG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Y2FuSGFuZGxlVHlwZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6b3JpZ2luRGlyZWN0b3J5UGF0aCk6CisgICAgICAg
IChXZWJLaXQ6Om9yaWdpbkZpbGVQYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2li
bGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZU9yaWdp
bkRpcmVjdG9yeUlmUG9zc2libGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1h
bmFnZXI6OmNsZWFyU3RvcmFnZUZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmZvckVhY2hPcmlnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmdldEFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YUZyb21EaXNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjptb3ZlRGF0YSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9UcmFuc2llbnRM
b2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
Ojpjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2Up
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c2V0SXRlbSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0Ojp0
b1dlYnNpdGVEYXRhVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OlN0b3JhZ2VCdWNrZXQp
OgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6
dG9XZWJzaXRlRGF0YVR5cGUpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6U3RvcmFnZUJ1Y2tldDo6dG9TdG9yYWdlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6
Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojpsb2NhbFN0b3JhZ2VNYW5hZ2Vy
KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6
OmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0
b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpzZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAg
ICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZXhpc3Rp
bmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6aXNFbXB0eSBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpmZXRj
aERhdGFUeXBlc0luTGlzdCk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpTdG9yYWdlQnVja2V0OjpkZWxldGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6Om1vdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6
T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmZldGNoRGF0YVR5cGVzSW5MaXN0
RnJvbU1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9y
YWdlQnVja2V0OjpmZXRjaERhdGFUeXBlc0luTGlzdEZyb21EaXNrKToKKyAgICAgICAgKFdlYktp
dDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0ZUxvY2FsU3RvcmFn
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1
Y2tldDo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2lu
U3RvcmFnZU1hbmFnZXI6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmRlZmF1bHRCdWNrZXQpOgorICAgICAgICAoV2ViS2l0OjpP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6bG9jYWxTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJL
aXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIpOgor
ICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6c2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmV4aXN0aW5nU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFn
ZXI6OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZmV0
Y2hEYXRhVHlwZXNJbkxpc3QpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6ZGVsZXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpt
b3ZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0Ojppc0FjdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U1FM
aXRlU3RvcmFnZUFyZWE6OnN0YXRlbWVudFN0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlNRTGl0ZVN0b3JhZ2VBcmVhOjpTUUxpdGVTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6
OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3Jh
Z2VBcmVhOjp+U1FMaXRlU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9y
YWdlQXJlYTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpj
bGVhcik6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjcmVhdGVUYWJsZUlm
TmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnByZXBhcmVE
YXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpzdGFydFRyYW5z
YWN0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6
Y2FjaGVkU3RhdGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6Omdl
dEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0SXRlbUZyb21E
YXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjphbGxJdGVtcyk6
CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtKToKKyAgICAgICAg
KFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpTUUxpdGVTdG9yYWdlQXJlYTo6Y29tbWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSk6CisgICAg
ICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmg6IEFk
ZGVkLgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L1Nlc3Npb25TdG9yYWdlTWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTZXNz
aW9uU3RvcmFnZU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJL
aXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y2xlYXJEYXRhKToKKyAgICAgICAg
KFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKToKKyAgICAg
ICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjphZGRTdG9yYWdlQXJlYSk6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvU2Vzc2lvblN0b3Jh
Z2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpkaXNjb25u
ZWN0RnJvbVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyOjpjbG9uZVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L1Nlc3Npb25TdG9yYWdlTWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHA6IEFkZGVkLiBTb21lIGNvZGUgaXMgbW92ZWQg
ZnJvbSBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yZWFnZS9TdG9yYWdlQXJlYS5jcHAuCisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZUFyZWFCYXNlKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZUFyZWFCYXNlOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhQmFzZTo6cmVtb3ZlTGlzdGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
QXJlYUJhc2U6Omhhc0xpc3RlbmVycyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VB
cmVhQmFzZTo6bm90aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhQmFzZTo6ZGlzcGF0Y2hFdmVudHMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmg6IEFkZGVkLiBTb21lIGNvZGUgaXMgbW92
ZWQgZnJvbSBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yZWFnZS9TdG9yYWdlQXJlYS5oLgorICAgICAg
ICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6Om9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VBcmVhQmFzZTo6cXVvdGEgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpyZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZUFyZWFSZWdpc3RyeTo6dW5yZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZUFyZWFSZWdpc3RyeTo6Z2V0U3RvcmFnZUFyZWEpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oOiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaDoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TG9j
YWxTdG9yYWdlRGV0YWlscyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAqIFVuaWZpZWRTb3Vy
Y2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1h
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVtKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYU1hcDo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1h
cDo6ZW5zdXJlTWFwKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmNvbm5lY3Qp
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6ZGlzY29ubmVjdCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUltcGw6OmNvcHkpOgorCiAyMDIxLTEyLTExICBU
aW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIE1vbWVudHVt
IEV2ZW50IERpc3BhdGNoZXI6IFRhaWwgZnJhbWVzIGFyZSB0aGUgd3JvbmcgdmVsb2NpdHkgaWYg
bW9tZW50dW0gZXZlbnQgZGlzcGF0Y2ggcmF0ZSBkb2Vzbid0IG1hdGNoIHNjcmVlbiByZWZyZXNo
IHJhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxl
U3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVt
LmNwcAppbmRleCA3NmU0NWFmMzRlZDA5M2ZkOWYyNzZkZDVkNGI5MjJhNDE2MzRkOWFlLi5lN2Nk
Y2JmNWFiZDIwNjk2ODVlMWZhZDFkNzQ0MTljYTEwODFhOWJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCkBAIC00Myw2ICs0Myw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PGNv
bnN0IGNoYXIgKiwgMz4gZGF0YWJhc2VGaWxlU3VmZml4ZXMgeyAiIiwgIi1zaG0iLCAiLXdhbCIg
fTsKKwogU1FMaXRlRmlsZVN5c3RlbTo6U1FMaXRlRmlsZVN5c3RlbSgpCiB7CiB9CkBAIC03Nywx
OCArNzksMjIgQEAgYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1cm4gRmlsZVN5c3RlbTo6ZGVsZXRl
RW1wdHlEaXJlY3RvcnkocGF0aCk7CiB9CiAKLWJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRl
RGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCitib29sIFNRTGl0ZUZpbGVTeXN0
ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQogewotICAgIGF1
dG8gd2FsRmlsZU5hbWUgPSBtYWtlU3RyaW5nKGZpbGVOYW1lLCAiLXdhbCJfcyk7Ci0gICAgYXV0
byBzaG1GaWxlTmFtZSA9IG1ha2VTdHJpbmcoZmlsZU5hbWUsICItc2htIl9zKTsKKyAgICBib29s
IGZpbGVFeGlzdHMgPSBmYWxzZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8qIHN1ZmZpeCA6IGRhdGFi
YXNlRmlsZVN1ZmZpeGVzKSB7CisgICAgICAgIFN0cmluZyBwYXRoID0gZmlsZVBhdGggKyBzdWZm
aXg7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUocGF0aCk7CisgICAgICAgIGZpbGVF
eGlzdHMgfD0gRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhwYXRoKTsKKyAgICB9CiAKLSAgICAvLyBU
cnkgdG8gZGVsZXRlIGFsbCB0aHJlZSBmaWxlcyB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSB0aGVy
ZS4KLSAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZpbGVOYW1lKTsKLSAgICBGaWxlU3lzdGVt
OjpkZWxldGVGaWxlKHdhbEZpbGVOYW1lKTsKLSAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKHNo
bUZpbGVOYW1lKTsKKyAgICByZXR1cm4gIWZpbGVFeGlzdHM7Cit9CiAKLSAgICAvLyBJZiBhbnkg
b2YgdGhlIHdhbCBvciBzaG0gZmlsZXMgcmVtYWluIGFmdGVyIHRoZSBkZWxldGUgYXR0ZW1wdCwg
dGhlIG92ZXJhbGwgZGVsZXRlIG9wZXJhdGlvbiBmYWlsZWQuCi0gICAgcmV0dXJuICFGaWxlU3lz
dGVtOjpmaWxlRXhpc3RzKGZpbGVOYW1lKSAmJiAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyh3YWxG
aWxlTmFtZSkgJiYgIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoc2htRmlsZU5hbWUpOwordm9pZCBT
UUxpdGVGaWxlU3lzdGVtOjptb3ZlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgb2xkRmlsZVBh
dGgsIGNvbnN0IFN0cmluZyYgbmV3RmlsZVBhdGgpCit7CisgICAgZm9yIChjb25zdCBhdXRvKiBz
dWZmaXggOiBkYXRhYmFzZUZpbGVTdWZmaXhlcykKKyAgICAgICAgRmlsZVN5c3RlbTo6bW92ZUZp
bGUobWFrZVN0cmluZyhvbGRGaWxlUGF0aCwgc3VmZml4KSwgbWFrZVN0cmluZyhuZXdGaWxlUGF0
aCwgc3VmZml4KSk7CiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtOTgsMTggKzEw
NCwxMyBAQCBib29sIFNRTGl0ZUZpbGVTeXN0ZW06OnRydW5jYXRlRGF0YWJhc2VGaWxlKHNxbGl0
ZTMqIGRhdGFiYXNlKQogfQogI2VuZGlmCiAgICAgCi11aW50NjRfdCBTUUxpdGVGaWxlU3lzdGVt
OjpkYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCi17ICAgICAgICAKK3Vp
bnQ2NF90IFNRTGl0ZUZpbGVTeXN0ZW06OmRhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBm
aWxlUGF0aCkKK3sKICAgICB1aW50NjRfdCB0b3RhbFNpemUgPSAwOwotCi0gICAgaWYgKGF1dG8g
ZmlsZVNpemUgPSBGaWxlU3lzdGVtOjpmaWxlU2l6ZShmaWxlTmFtZSkpCi0gICAgICAgIHRvdGFs
U2l6ZSArPSAqZmlsZVNpemU7Ci0KLSAgICBpZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06
OmZpbGVTaXplKG1ha2VTdHJpbmcoZmlsZU5hbWUsICItd2FsIl9zKSkpCi0gICAgICAgIHRvdGFs
U2l6ZSArPSAqZmlsZVNpemU7Ci0KLSAgICBpZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06
OmZpbGVTaXplKG1ha2VTdHJpbmcoZmlsZU5hbWUsICItc2htIl9zKSkpCi0gICAgICAgIHRvdGFs
U2l6ZSArPSAqZmlsZVNpemU7CisgICAgZm9yIChjb25zdCBhdXRvKiBzdWZmaXggOiBkYXRhYmFz
ZUZpbGVTdWZmaXhlcykgeworICAgICAgICBpZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06
OmZpbGVTaXplKGZpbGVQYXRoICsgc3VmZml4KSkKKyAgICAgICAgICAgIHRvdGFsU2l6ZSArPSAq
ZmlsZVNpemU7CisgICAgfQogCiAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5oCmluZGV4IGM2OGQ5YzdlN2Fm
OTg5NzZhMWVkM2RjYjZmMmFjZmU0YjZjZjVjMmYuLjk4ZTdlYTBkMDdhMjU0MTFmYTRmNjJhYTcy
MTY1OTNmNjNlMzljNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVGaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0
ZUZpbGVTeXN0ZW0uaApAQCAtNzgsOSArNzgsMTEgQEAgcHVibGljOgogICAgIC8vIERlbGV0ZXMg
YSBkYXRhYmFzZSBmaWxlLgogICAgIC8vCiAgICAgLy8gZmlsZU5hbWUgLSBUaGUgZmlsZSBuYW1l
LgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGRlbGV0ZURhdGFiYXNlRmlsZShjb25z
dCBTdHJpbmcmIGZpbGVOYW1lKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWxl
dGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCk7CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVIYXNoRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSk7CisgICAgLy8gTW92ZXMgYSBkYXRhYmFzZSBmaWxlIHRvIGEgbmV3IHBsYWNlLgor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIG1vdmVEYXRhYmFzZUZpbGUoY29uc3QgU3Ry
aW5nJiBvbGRGaWxlUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdGaWxlUGF0aCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFN0cmluZyBjb21wdXRlSGFzaEZvckZpbGVOYW1lKGNvbnN0IFN0cmlu
ZyYgZmlsZVBhdGgpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBUcnVuY2F0
ZXMgYSBkYXRhYmFzZSBmaWxlLiBVc2VkIHdoZW4gTW9iaWxlU2FmYXJpU2V0dGluZ3MgZGVsZXRl
cyBhIGRhdGFiYXNlIGZpbGUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuY3BwCmluZGV4IDFlZjMzYTZlNjI3MzcxMDQ0Nzc1MWE1NzNjMjc0ODk3ZWQy
OTQwYTYuLjI3YWY5MWU0ZjU5ZjMzNDEzNzhiNmFiYWZlYjg3YTVkNzc3ZjhkMDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0xNTgs
NyArMTU4LDYgQEAgc3RhdGljIGlubGluZSBNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeSBjcmVh
dGVNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeShOZXR3b3IKIAogTmV0d29ya1Byb2Nlc3M6Ok5l
dHdvcmtQcm9jZXNzKEF1eGlsaWFyeVByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmJiBw
YXJhbWV0ZXJzKQogICAgIDogbV9kb3dubG9hZE1hbmFnZXIoKnRoaXMpCi0gICAgLCBtX3N0b3Jh
Z2VNYW5hZ2VyU2V0KFN0b3JhZ2VNYW5hZ2VyU2V0OjpjcmVhdGUoKSkKICNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQogICAgICwgbV9uZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlcigq
dGhpcykKICNlbmRpZgpAQCAtMzE0LDEyICszMTMsMTMgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
bG93TWVtb3J5SGFuZGxlcihDcml0aWNhbCBjcml0aWNhbCkKICAgICAgICAgbmV0d29ya1Nlc3Np
b24uY2xlYXJQcmVmZXRjaENhY2hlKCk7CiAgICAgfSk7CiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2Vy
U2V0LT5oYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7Ci0KICNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCiAgICAgZm9yIChhdXRvJiBzd1NlcnZlciA6IG1fc3dTZXJ2ZXJzLnZhbHVlcygpKQogICAg
ICAgICBzd1NlcnZlci0+aGFuZGxlTG93TWVtb3J5V2FybmluZygpOwogI2VuZGlmCisKKyAgICBm
b3IgKGF1dG8mIG1hbmFnZXIgOiBtX3N0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAg
bWFuYWdlci0+aGFuZGxlTG93TWVtb3J5V2FybmluZygpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMmJiBwYXJhbWV0ZXJzKQpAQCAtNDAyLDcgKzQwMiw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmNyZWF0ZU5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKFByb2Nlc3NJZGVudGlmaWVy
IGlkZW50CiAKICAgICBjb25uZWN0aW9uLnNldE9uTGluZVN0YXRlKE5ldHdvcmtTdGF0ZU5vdGlm
aWVyOjpzaW5nbGV0b24oKS5vbkxpbmUoKSk7CiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5h
ZGRDb25uZWN0aW9uKGNvbm5lY3Rpb24uY29ubmVjdGlvbigpKTsKICAgICB3ZWJJREJTZXJ2ZXIo
c2Vzc2lvbklEKS5hZGRDb25uZWN0aW9uKGNvbm5lY3Rpb24uY29ubmVjdGlvbigpLCBpZGVudGlm
aWVyKTsKICAgICBpZiAoYXV0byBtYW5hZ2VyID0gbV9zdG9yYWdlTWFuYWdlcnMuZ2V0KHNlc3Np
b25JRCkpCiAgICAgICAgIG1hbmFnZXItPnN0YXJ0UmVjZWl2aW5nTWVzc2FnZUZyb21Db25uZWN0
aW9uKGNvbm5lY3Rpb24uY29ubmVjdGlvbigpKTsKQEAgLTQyMSw3ICs0MjAsNyBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzJiYgcGFyYW1ldGVycwogewogICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwogCi0gICAgYWRkU3RvcmFnZU1hbmFnZXJG
b3JTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZSk7CisgICAgYWRkU3RvcmFn
ZU1hbmFnZXJGb3JTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURp
cmVjdG9yeSwgcGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZSwgcGFyYW1l
dGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihz
ZXNzaW9uSUQsIHBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAKICAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKQEAgLTQzMCw4ICs0MjksNiBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiYgcGFy
YW1ldGVycwogICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBh
cmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMu
c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5k
aWYKIAotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMu
bG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vi
c2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycykpOwogfQogCkBA
IC00NTQsMTEgKzQ1MSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgbV9zZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcnMucmVtb3ZlKHNlc3Npb25JRCk7CiB9CiAKLXZvaWQgTmV0d29y
a1Byb2Nlc3M6OmFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IFN0cmluZyYgZ2VuZXJhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUmIGdlbmVyYWxTdG9yYWdlUGF0aEhhbmRsZSkKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6
OmFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgZ2VuZXJhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
IGdlbmVyYWxTdG9yYWdlUGF0aEhhbmRsZSwgY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRo
LCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGxvY2FsU3RvcmFnZVBhdGhIYW5kbGUpCiB7CiAg
ICAgbV9zdG9yYWdlTWFuYWdlcnMuZW5zdXJlKHNlc3Npb25JRCwgWyZdIHsKICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGdlbmVyYWxTdG9yYWdlUGF0aEhhbmRs
ZSk7Ci0gICAgICAgIHJldHVybiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShzZXNzaW9u
SUQsIGdlbmVyYWxTdG9yYWdlUGF0aCk7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1
bWVQZXJtYW5lbnRseShsb2NhbFN0b3JhZ2VQYXRoSGFuZGxlKTsKKyAgICAgICAgcmV0dXJuIE5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlKHNlc3Npb25JRCwgZ2VuZXJhbFN0b3JhZ2VQYXRo
LCBsb2NhbFN0b3JhZ2VQYXRoKTsKICAgICB9KTsKIH0KIApAQCAtNTc1LDcgKzU3Myw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCkKICAgICBtX3NlcnZpY2VXb3JrZXJJbmZvLnJlbW92ZShzZXNzaW9uSUQpOwogI2VuZGlmCiAK
LSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZW1vdmUoc2Vzc2lvbklEKTsKICAgICBpZiAoYXV0
byBzZXJ2ZXIgPSBtX3dlYklEQlNlcnZlcnMudGFrZShzZXNzaW9uSUQpKQogICAgICAgICBzZXJ2
ZXItPmNsb3NlKCk7CiAgICAgcmVtb3ZlU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKHNlc3Npb25J
RCk7CkBAIC0xMDY1LDE1ICsxMDYyLDE2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyVXNl
ckludGVyYWN0aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6Omhhc0xvY2FsU3RvcmFnZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNl
dC0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQsIFtkb21haW4sIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBvcmlnaW5zKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6YW55T2Yob3JpZ2lucywg
WyZkb21haW5dKGF1dG8mIG9yaWdpbikgewotICAgICAgICAgICAgICAgIHJldHVybiBkb21haW4u
bWF0Y2hlcyhvcmlnaW4pOwotICAgICAgICAgICAgfSkpOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgYXV0byBp
dGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsKKyAgICBpZiAoaXRl
cmF0b3IgPT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCisgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBhdXRvIHR5cGVzID0gT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4geyBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSB9OworICAgIGl0ZXJhdG9y
LT52YWx1ZS0+ZmV0Y2hEYXRhKHR5cGVzLCBbZG9tYWluLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvIGVudHJpZXMpIG11dGFibGUgeworICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEY6OmFueU9mKGVudHJpZXMsIFsmZG9tYWluXShhdXRvJiBl
bnRyeSkgeworICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5tYXRjaGVzKGVudHJ5Lm9yaWdpbik7
CisgICAgICAgIH0pKTsKKyAgICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0Q2Fj
aGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBTZWNvbmRzIHNlY29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTE0OTEsMjAgKzE0ODksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRj
aFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdAog
ICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5j
b250YWlucyhzZXNzaW9uSUQpKSB7Ci0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmdldFNl
c3Npb25TdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8m
JiBvcmlnaW5zKSB7Ci0gICAgICAgICAgICB3aGlsZSAoIW9yaWdpbnMuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFw
cGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW5zLnRha2VBbnkoKSwgV2Vic2l0ZURhdGFU
eXBlOjpTZXNzaW9uU3RvcmFnZSwgMCB9KTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgaWYg
KHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2Up
ICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAg
bV9zdG9yYWdlTWFuYWdlclNldC0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2lucyhzZXNzaW9uSUQsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mJiBvcmlnaW5zKSB7Ci0gICAgICAgICAgICB3aGlsZSAo
IW9yaWdpbnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW5z
LnRha2VBbnkoKSwgV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UsIDAgfSk7Ci0gICAgICAg
IH0pOwotICAgIH0KLQogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoU09VUCkKICAgICBpZiAo
d2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkhTVFNDYWNoZSkpCiAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5ob3N0TmFtZXNXaXRoSFNU
U0NhY2hlID0gaG9zdE5hbWVzV2l0aEhTVFNDYWNoZShzZXNzaW9uSUQpOwpAQCAtMTU1NywxMCAr
MTU0MSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdAogICAgIH0KICNlbmRpZgogCi0gICAg
aWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0
ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKSB7Ci0gICAgICAgIGl0ZXJhdG9yLT52
YWx1ZS0+ZmV0Y2hEYXRhKHdlYnNpdGVEYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1
dG8gZW50cmllcykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1f
d2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmRWZWN0b3IoV1RGTW92ZShlbnRyaWVzKSk7Ci0gICAg
ICAgIH0pOworICAgIGlmIChOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5cGVzKHdl
YnNpdGVEYXRhVHlwZXMpKSB7CisgICAgICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdl
TWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5l
bmQoKSkgeworICAgICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5mZXRjaERhdGEod2Vic2l0ZURh
dGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5h
cHBlbmRWZWN0b3IoV1RGTW92ZShlbnRyaWVzKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQogICAgIH0KIH0KIApAQCAtMTU4NywxMiArMTU3Myw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdl
YnNpCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpE
T01DYWNoZSkpCiAgICAgICAgIENhY2hlU3RvcmFnZTo6RW5naW5lOjpjbGVhckFsbENhY2hlcygq
dGhpcywgc2Vzc2lvbklELCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAKLSAgICBpZiAod2Vi
c2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSAm
JiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAgICBtX3N0
b3JhZ2VNYW5hZ2VyU2V0LT5kZWxldGVTZXNzaW9uU3RvcmFnZShzZXNzaW9uSUQsIFtjbGVhclRh
c2tzSGFuZGxlcl0geyB9KTsKLQotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250
YWlucyhzZXNzaW9uSUQpKQotICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5kZWxldGVMb2Nh
bFN0b3JhZ2VNb2RpZmllZFNpbmNlKHNlc3Npb25JRCwgbW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFz
a3NIYW5kbGVyXSB7IH0pOwotCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vi
c2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSkKICAgICAgICAgd2ViSURCU2VydmVyKHNlc3Npb25JRCkuY2xvc2VBbmREZWxldGVEYXRh
YmFzZXNNb2RpZmllZFNpbmNlKG1vZGlmaWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9
KTsKIApAQCAtMTYzNyw4ICsxNjE3LDEwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdl
YnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpCiAgICAg
fQogI2VuZGlmCiAKLSAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZp
bmQoc2Vzc2lvbklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCi0gICAg
ICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YU1vZGlmaWVkU2luY2Uod2Vic2l0ZURhdGFU
eXBlcywgbW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOworICAgIGlmIChO
ZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5cGVzKHdlYnNpdGVEYXRhVHlwZXMpKSB7
CisgICAgICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNz
aW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKKyAgICAgICAgICAg
IGl0ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YU1vZGlmaWVkU2luY2Uod2Vic2l0ZURhdGFUeXBl
cywgbW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOworICAgIH0KIH0KIAog
c3RhdGljIHZvaWQgY2xlYXJEaXNrQ2FjaGVFbnRyaWVzKE5ldHdvcmtDYWNoZTo6Q2FjaGUqIGNh
Y2hlLCBjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lucywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTcwMywxMiArMTY4NSw2
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvCiAgICAgICAgICAgICBDYWNoZVN0b3JhZ2U6OkVu
Z2luZTo6Y2xlYXJDYWNoZXNGb3JPcmlnaW4oKnRoaXMsIHNlc3Npb25JRCwgU2VjdXJpdHlPcmln
aW5EYXRhIHsgb3JpZ2luRGF0YSB9LCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAgICAgfQog
Ci0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNz
aW9uU3RvcmFnZSkgJiYgbV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkK
LSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2VGb3JPcmln
aW5zKHNlc3Npb25JRCwgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKLQot
ICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxT
dG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAg
ICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5kZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW5zKHNl
c3Npb25JRCwgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKLQogICAgIGlm
ICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0
YWJhc2VzKSAmJiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHdlYklEQlNlcnZl
cihzZXNzaW9uSUQpLmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhvcmlnaW5EYXRh
cywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwogCkBAIC0xNzQ2LDggKzE3MjIsMTAgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgT3B0aW8KICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChhdXRvIGl0ZXJh
dG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0
b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKLSAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRh
KHdlYnNpdGVEYXRhVHlwZXMsIG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7
CisgICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMod2Vic2l0ZURh
dGFUeXBlcykpIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vy
cy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKQor
ICAgICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhKHdlYnNpdGVEYXRhVHlwZXMs
IG9yaWdpbkRhdGFzLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CisgICAgfQogCiAgICAgaWYg
KGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkg
ewogICAgICAgICBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBkb21haW5zVG9E
ZWxldGVOZXR3b3JrRGF0YUZvcjsKQEAgLTE5MDQsMjggKzE4ODIsNiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpkZWxldGVBbmRSZXN0cmljdFdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5z
KFBBTDo6U2VzcwogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAobV9zdG9yYWdlTWFuYWdl
clNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewotICAgICAgICBpZiAod2Vic2l0ZURhdGFUeXBl
cy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSkgewotICAgICAgICAg
ICAgbV9zdG9yYWdlTWFuYWdlclNldC0+Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKHNlc3Npb25J
RCwgW3Byb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCB0aGlzLCBzZXNzaW9uSUQsIGNhbGxi
YWNrQWdncmVnYXRvciwgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3Jd
KGF1dG8mJiBvcmlnaW5zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3N0b3JhZ2VNYW5hZ2Vy
U2V0LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgICAgICAgICBhdXRvIG9yaWdpbnNUb0RlbGV0ZSA9IGZpbHRlckZvclJlZ2lzdHJh
YmxlRG9tYWlucyhvcmlnaW5zLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0
YUZvciwgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX2RvbWFpbnMpOwotICAgICAgICAgICAgICAgIG1f
c3RvcmFnZU1hbmFnZXJTZXQtPmRlbGV0ZVNlc3Npb25TdG9yYWdlRm9yT3JpZ2lucyhzZXNzaW9u
SUQsIG9yaWdpbnNUb0RlbGV0ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpKSB7Ci0gICAgICAgICAgICBtX3N0b3Jh
Z2VNYW5hZ2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW3Byb3RlY3Rl
ZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCB0aGlzLCBzZXNzaW9uSUQsIGNhbGxiYWNrQWdncmVnYXRv
ciwgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3JdKGF1dG8mJiBvcmln
aW5zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlu
cyhzZXNzaW9uSUQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAg
ICAgICBhdXRvIG9yaWdpbnNUb0RlbGV0ZSA9IGZpbHRlckZvclJlZ2lzdHJhYmxlRG9tYWlucyhv
cmlnaW5zLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvciwgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5tX2RvbWFpbnMpOwotICAgICAgICAgICAgICAgIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9yaWdpbnMoc2Vzc2lvbklELCBvcmlnaW5zVG9E
ZWxldGUsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgfQotICAgIH0KLQogICAgIGF1dG8gcGF0aCA9IG1faWRiRGF0YWJhc2VQYXRocy5nZXQoc2Vz
c2lvbklEKTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpICYmIHdlYnNpdGVEYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpKSB7CiAgICAgICAgIHdl
YklEQlNlcnZlcihzZXNzaW9uSUQpLmdldE9yaWdpbnMoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBS
ZWYgeyAqdGhpcyB9LCBzZXNzaW9uSUQsIGNhbGxiYWNrQWdncmVnYXRvciwgZG9tYWluc1RvRGVs
ZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3JdKGF1dG8mJiBvcmlnaW5zKSB7CkBAIC0xOTcy
LDExICsxOTI4LDEzIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFuZFJlc3RyaWN0V2Vi
c2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMoUEFMOjpTZXNzCiAgICAgICAgIH0pOwogICAg
IH0KIAotICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNz
aW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkgewotICAgICAgICBp
dGVyYXRvci0+dmFsdWUtPmRlbGV0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMod2Vic2l0ZURh
dGFUeXBlcywgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdKGF1dG8gZGVsZXRlZERvbWFpbnMpIG11dGFibGUgewotICAgICAgICAg
ICAgZm9yIChhdXRvIGRvbWFpbiA6IGRlbGV0ZWREb21haW5zKQotICAgICAgICAgICAgICAgIGNh
bGxiYWNrQWdncmVnYXRvci0+bV9kb21haW5zLmFkZChXVEZNb3ZlKGRvbWFpbikpOwotICAgICAg
ICB9KTsKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJz
aXRlRGF0YVR5cGVzKSkgeworICAgICAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1h
bmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5k
KCkpIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YUZvclJlZ2lzdHJh
YmxlRG9tYWlucyh3ZWJzaXRlRGF0YVR5cGVzLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVX
ZWJzaXRlRGF0YUZvciwgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIGRlbGV0ZWREb21haW5z
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8gZG9tYWluIDogZGVsZXRlZERv
bWFpbnMpCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV9kb21haW5z
LmFkZChXVEZNb3ZlKGRvbWFpbikpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9
CiAKICAgICBhdXRvIGRhdGFUeXBlc0ZvclVJUHJvY2VzcyA9IFdlYnNpdGVEYXRhOjpmaWx0ZXIo
d2Vic2l0ZURhdGFUeXBlcywgV2Vic2l0ZURhdGFQcm9jZXNzVHlwZTo6VUkpOwpAQCAtMjMwNyw3
ICsyMjY1LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cHJlcGFyZVRvU3VzcGVuZChib29sIGlz
U3VzcGVuc2lvbkltbWluZW50LCBDb21wbGV0aW9uSGFuZGwKICAgICB9CiAjZW5kaWYKIAotICAg
IG1fc3RvcmFnZU1hbmFnZXJTZXQtPnN1c3BlbmQoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsK
KyAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX3N0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAg
ICAgICAgbWFuYWdlci0+c3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogfQogCiB2
b2lkIE5ldHdvcmtQcm9jZXNzOjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3VuZCgpCkBAIC0y
MzQ2LDcgKzIzMDUsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXN1bWUoKQogICAgIG1fc2hv
dWxkU3VzcGVuZElEQlNlcnZlcnMgPSBmYWxzZTsKICNlbmRpZgogCi0gICAgbV9zdG9yYWdlTWFu
YWdlclNldC0+cmVzdW1lKCk7CisgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zdG9yYWdlTWFu
YWdlcnMudmFsdWVzKCkpCisgICAgICAgIG1hbmFnZXItPnJlc3VtZSgpOwogfQogCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQpAQCAtMjQ0
Miw4ICsyNDAyLDkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0U2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXJJREJSb290UGF0aChQQUw6OlNlc3Npb25JRCBzZXMKIAogdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6c3luY0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+d2FpdFVudGlsU3luY2lu
Z0xvY2FsU3RvcmFnZUZpbmlzaGVkKCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICBh
dXRvIGFnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CisgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zdG9yYWdlTWFuYWdl
cnMudmFsdWVzKCkpCisgICAgICAgIG1hbmFnZXItPnN5bmNMb2NhbFN0b3JhZ2UoW2FnZ3JlZ2F0
b3JdIHsgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlc2V0UXVvdGEoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCkBAIC0yNDczLDEwICsyNDM0LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVuYW1l
T3JpZ2luSW5XZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFUKICAg
ICBpZiAob2xkT3JpZ2luLmlzRW1wdHkoKSB8fCBuZXdPcmlnaW4uaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6
TG9jYWxTdG9yYWdlKSkgewotICAgICAgICBpZiAobV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFp
bnMoc2Vzc2lvbklEKSkKLSAgICAgICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPnJlbmFtZU9y
aWdpbihzZXNzaW9uSUQsIG9sZE5hbWUsIG5ld05hbWUsIFthZ2dyZWdhdG9yXSB7IH0pOwotICAg
IH0KKyAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lv
bklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpCisgICAgICAgIGl0ZXJh
dG9yLT52YWx1ZS0+bW92ZURhdGEob2xkT3JpZ2luLCBuZXdPcmlnaW4sIFthZ2dyZWdhdG9yXSB7
IH0pOwogCiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4
ZWREQkRhdGFiYXNlcykpIHsKICAgICAgICAgYXV0byBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhz
LmdldChzZXNzaW9uSUQpOwpAQCAtMjc3MSwyMSArMjczMCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnJlbW92ZUtlcHRBbGl2ZUxvYWQoTmV0d29ya1Jlc291cmNlTG9hZGVyJiBsb2FkZXIpCiAg
ICAgICAgIHNlc3Npb24tPnJlbW92ZUtlcHRBbGl2ZUxvYWQobG9hZGVyKTsKIH0KIAotdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17
Ci0gICAgaWYgKCFtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiQ2Fubm90IGdldCBsb2NhbCBzdG9yYWdlIGluZm9ybWF0aW9uIGZv
ciBhbiB1bmtub3duIHNlc3Npb24iKTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmdldExv
Y2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoc2Vzc2lvbklELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci19Ci0KIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3ND
bG9zZWQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCiB7Ci0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+cmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0
aW9uKTsKLQogICAgIGlmIChhdXRvKiBzZXJ2ZXIgPSBtX3dlYklEQlNlcnZlcnMuZ2V0KHNlc3Np
b25JRCkpCiAgICAgICAgIHNlcnZlci0+cmVtb3ZlQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IDg4
MDE3YzQ0YTEwNWYxYzBmZGU1NWIyNGMyZmUwOTliNzY2ZmFmODEuLjVhMjBhN2NmOTcwMTcwZTk0
ZGQ3YWE4ZTM4ZmJhZGI5NTQ2YTA1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTEwNyw3ICsxMDcsNiBAQCBjbGFzcyBOZXR3b3JrUHJv
eGltaXR5TWFuYWdlcjsKIGNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIE5ldHdv
cmtTdG9yYWdlTWFuYWdlcjsKIGNsYXNzIFByb2Nlc3NBc3NlcnRpb247Ci1jbGFzcyBTdG9yYWdl
TWFuYWdlclNldDsKIGNsYXNzIFdlYlBhZ2VOZXR3b3JrUGFyYW1ldGVyczsKIGNsYXNzIFdlYlNX
U2VydmVyQ29ubmVjdGlvbjsKIGNsYXNzIFdlYlNXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlvbjsK
QEAgLTI5Niw3ICsyOTUsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXNzaW9uSXNDb250cm9sbGVk
QnlBdXRvbWF0aW9uKFBBTDo6U2Vzc2lvbklEKSBjb25zdDsKIAogICAgIHZvaWQgY29ubmVjdGlv
blRvV2ViUHJvY2Vzc0Nsb3NlZChJUEM6OkNvbm5lY3Rpb24mLCBQQUw6OlNlc3Npb25JRCk7Ci0g
ICAgdm9pZCBnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKFBBTDo6U2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9y
aWdpbkRldGFpbHM+JiYpPiYmKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAg
ICAgTmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXImIG5ldHdvcmtDb250ZW50UnVsZUxpc3RN
YW5hZ2VyKCkgeyByZXR1cm4gbV9uZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlcjsgfQpAQCAt
NTU0LDcgKzU1Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGRTZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlcihQQUw6OlNlc3Npb25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBk
ZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgsIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQpOwogCi0gICAgdm9pZCBhZGRTdG9yYWdlTWFuYWdlckZv
clNlc3Npb24oUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCwgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlJik7CisgICAgdm9pZCBhZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JiwgY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUmKTsKICAgICB2b2lkIHJlbW92ZVN0b3JhZ2VNYW5hZ2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Np
b25JRCk7CiAKICAgICAvLyBDb25uZWN0aW9ucyB0byBXZWJQcm9jZXNzZXMuCkBAIC01NzcsOCAr
NTc1LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya1Nlc3Npb24+PiBtX25ldHdvcmtTZXNzaW9uczsKICAgICBIYXNoTWFwPFBB
TDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPj4gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zOwogCi0gICAgUmVmPFN0b3JhZ2VNYW5hZ2Vy
U2V0PiBtX3N0b3JhZ2VNYW5hZ2VyU2V0OwotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9p
ZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IGYzYzIzZDFjMTg0
NmQ1NDM1ZDBiMTMzMTMxODQ0ZjQ5NWQyMDUzOTAuLjJlYTY0NWI3ODFhZTczZmRmMjIwM2YxZTk0
ZDQwNWUzNjFmZDk2YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMTczLDcgKzE3Myw2IEBAIG1lc3Nh
Z2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKICAgICBNYXJrUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpIC0+ICgpIEFzeW5jCiAgICAgU2V0UENNRnJhdWRQcmV2ZW50aW9uVmFsdWVzRm9yVGVzdGlu
ZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyBzZWNyZXRUb2tlbiwgU3RyaW5nIHVu
bGlua2FibGVUb2tlbiwgU3RyaW5nIHNpZ25hdHVyZSwgU3RyaW5nIGtleUlEKSAtPiAoKSBBc3lu
YwogICAgIFNldFByaXZhdGVDbGlja01lYXN1cmVtZW50QXBwQnVuZGxlSURGb3JUZXN0aW5nKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nIGFwcEJ1bmRsZUlERm9yVGVzdGluZykgLT4g
KCkgQXN5bmMKLSAgICBHZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkgLT4gKFZlY3RvcjxXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tl
cjo6T3JpZ2luRGV0YWlscz4gZGV0YWlscykgQXN5bmMKIAogICAgIFNldFNlcnZpY2VXb3JrZXJG
ZXRjaFRpbWVvdXRGb3JUZXN0aW5nKFNlY29uZHMgc2Vjb25kcykgLT4gKCkgU3luY2hyb25vdXMK
ICAgICBSZXNldFNlcnZpY2VXb3JrZXJGZXRjaFRpbWVvdXRGb3JUZXN0aW5nKCkgLT4gKCkgU3lu
Y2hyb25vdXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c3RvcmFnZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYmRkZDJlMzA0OGQy
ODcwYWUwN2EwYWFkZjRlZDk3YjMxMDQzNmM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0w
LDAgKzEsMjA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkxvY2FsU3RvcmFnZU1hbmFnZXIuaCIKKworI2luY2x1ZGUgIk1lbW9yeVN0b3JhZ2VBcmVhLmgi
CisjaW5jbHVkZSAiU1FMaXRlU3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVJl
Z2lzdHJ5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKKy8vIFN1Z2dlc3RlZCBieSBodHRwczovL3d3dy53My5vcmcvVFIv
d2Vic3RvcmFnZS8jZGlzay1zcGFjZQorY29uc3RleHByIHVuc2lnbmVkIGxvY2FsU3RvcmFnZVF1
b3RhSW5CeXRlcyA9IDUgKiBNQjsKK2NvbnN0ZXhwciBhdXRvIGZpbGVTdWZmaXggPSAiLmxvY2Fs
c3RvcmFnZSJfczsKKworLy8gVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBleGlzdGlu
ZyBmaWxlcy4KKy8vIFdlIHNob3VsZCBub3QgaW5jbHVkZSBvcmlnaW4gaW4gZmlsZSBuYW1lLgor
c3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBmaWxlTmFt
ZVRvT3JpZ2luKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCit7CisgICAgaWYgKCFmaWxlTmFtZS5l
bmRzV2l0aChmaWxlU3VmZml4KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IGF1dG8gc3VmZml4TGVuZ3RoID0gc3RybGVuKGZpbGVTdWZmaXgpOworICAgIGF1dG8gZmlsZU5h
bWVMZW5ndGggPSBmaWxlTmFtZS5sZW5ndGgoKTsKKyAgICBpZiAoZmlsZU5hbWVMZW5ndGggPD0g
c3VmZml4TGVuZ3RoKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byBv
cmlnaW5JZGVudGlmaWVyID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lTGVuZ3RoIC0g
c3VmZml4TGVuZ3RoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhOjpm
cm9tRGF0YWJhc2VJZGVudGlmaWVyKG9yaWdpbklkZW50aWZpZXIpOworfQorCitzdGF0aWMgU3Ry
aW5nIG9yaWdpblRvRmlsZU5hbWUoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4p
Cit7CisgICAgcmV0dXJuIG9yaWdpbi5jbGllbnRPcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkg
KyAiLmxvY2Fsc3RvcmFnZSI7Cit9CisKK1ZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+IExvY2FsU3RvcmFnZU1hbmFnZXI6Om9yaWdpbnNPZkxvY2FsU3RvcmFnZURhdGEoY29uc3Qg
U3RyaW5nJiBwYXRoKQoreworICAgIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
IG9yaWdpbnM7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gb3JpZ2lu
czsKKworICAgIGZvciAoYXV0byYgZmlsZU5hbWUgOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5
KHBhdGgpKSB7CisgICAgICAgIGlmIChhdXRvIG9yaWdpbiA9IGZpbGVOYW1lVG9PcmlnaW4oZmls
ZU5hbWUpKQorICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoKm9yaWdpbik7CisgICAgfQorCisg
ICAgcmV0dXJuIG9yaWdpbnM7Cit9CisKK1N0cmluZyBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpsb2Nh
bFN0b3JhZ2VGaWxlUGF0aChjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJiBvcmlnaW4pCit7CisgICAgaWYgKGRpcmVjdG9yeS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcgeyB9OworCisgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChkaXJlY3RvcnksIG9yaWdpblRvRmlsZU5hbWUob3JpZ2luKSk7
Cit9CisKK0xvY2FsU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU1hbmFnZXIoY29uc3QgU3Ry
aW5nJiBwYXRoLCBTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKKyAgICA6IG1fcGF0aChw
YXRoKQorICAgICwgbV9yZWdpc3RyeShyZWdpc3RyeSkKK3sKK30KKworYm9vbCBMb2NhbFN0b3Jh
Z2VNYW5hZ2VyOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX2xvY2FsU3RvcmFn
ZUFyZWEgJiYgbV9sb2NhbFN0b3JhZ2VBcmVhLT5oYXNMaXN0ZW5lcnMoKSkgfHwgKG1fdHJhbnNp
ZW50U3RvcmFnZUFyZWEgJiYgbV90cmFuc2llbnRTdG9yYWdlQXJlYS0+aGFzTGlzdGVuZXJzKCkp
OworfQorCitib29sIExvY2FsU3RvcmFnZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSgpIGNvbnN0
Cit7CisgICAgYm9vbCBoYXNEYXRhSW5Mb2NhbFN0b3JhZ2VBcmVhID0gbV9sb2NhbFN0b3JhZ2VB
cmVhICYmIGlzPE1lbW9yeVN0b3JhZ2VBcmVhPigqbV9sb2NhbFN0b3JhZ2VBcmVhKSAmJiAhbV9s
b2NhbFN0b3JhZ2VBcmVhLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuIGhhc0RhdGFJbkxvY2FsU3Rv
cmFnZUFyZWEgfHwgKG1fdHJhbnNpZW50U3RvcmFnZUFyZWEgJiYgIW1fdHJhbnNpZW50U3RvcmFn
ZUFyZWEtPmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlTWFuYWdlcjo6Y2xlYXJE
YXRhSW5NZW1vcnkoKQoreworICAgIGlmIChtX2xvY2FsU3RvcmFnZUFyZWEgJiYgaXM8TWVtb3J5
U3RvcmFnZUFyZWE+KCptX2xvY2FsU3RvcmFnZUFyZWEpKQorICAgICAgICBtX2xvY2FsU3RvcmFn
ZUFyZWEtPmNsZWFyKCk7CisKKyAgICBpZiAobV90cmFuc2llbnRTdG9yYWdlQXJlYSkKKyAgICAg
ICAgbV90cmFuc2llbnRTdG9yYWdlQXJlYS0+Y2xlYXIoKTsKK30KKwordm9pZCBMb2NhbFN0b3Jh
Z2VNYW5hZ2VyOjpjbGVhckRhdGFPbkRpc2soKQoreworICAgIGlmIChtX2xvY2FsU3RvcmFnZUFy
ZWEgJiYgaXM8U1FMaXRlU3RvcmFnZUFyZWE+KCptX2xvY2FsU3RvcmFnZUFyZWEpKQorICAgICAg
ICBtX2xvY2FsU3RvcmFnZUFyZWEtPmNsZWFyKCk7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlTWFu
YWdlcjo6Y2xvc2UoKQoreworICAgIGlmIChtX2xvY2FsU3RvcmFnZUFyZWEgJiYgaXM8U1FMaXRl
U3RvcmFnZUFyZWE+KCptX2xvY2FsU3RvcmFnZUFyZWEpKQorICAgICAgICBkb3duY2FzdDxTUUxp
dGVTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkuY2xvc2UoKTsKK30KKwordm9pZCBM
b2NhbFN0b3JhZ2VNYW5hZ2VyOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCkKK3sKKyAgICBpZiAo
bV9sb2NhbFN0b3JhZ2VBcmVhICYmIGlzPFNRTGl0ZVN0b3JhZ2VBcmVhPigqbV9sb2NhbFN0b3Jh
Z2VBcmVhKSkKKyAgICAgICAgZG93bmNhc3Q8U1FMaXRlU3RvcmFnZUFyZWE+KCptX2xvY2FsU3Rv
cmFnZUFyZWEpLmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKK30KKwordm9pZCBMb2NhbFN0b3Jh
Z2VNYW5hZ2VyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sKKyAgICBpZiAobV9sb2NhbFN0b3JhZ2VB
cmVhICYmIGlzPFNRTGl0ZVN0b3JhZ2VBcmVhPigqbV9sb2NhbFN0b3JhZ2VBcmVhKSkKKyAgICAg
ICAgZG93bmNhc3Q8U1FMaXRlU3RvcmFnZUFyZWE+KCptX2xvY2FsU3RvcmFnZUFyZWEpLmNvbW1p
dFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2Vy
Ojpjb25uZWN0aW9uQ2xvc2VkKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbikK
K3sKKyAgICBjb25uZWN0aW9uQ2xvc2VkRm9yTG9jYWxTdG9yYWdlQXJlYShjb25uZWN0aW9uKTsK
KyAgICBjb25uZWN0aW9uQ2xvc2VkRm9yVHJhbnNpZW50U3RvcmFnZUFyZWEoY29ubmVjdGlvbik7
Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZEZvckxvY2Fs
U3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uKQoreworICAg
IGlmICghbV9sb2NhbFN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xvY2Fs
U3RvcmFnZUFyZWEtPnJlbW92ZUxpc3RlbmVyKGNvbm5lY3Rpb24pOworICAgIGlmIChtX2xvY2Fs
U3RvcmFnZUFyZWEtPmhhc0xpc3RlbmVycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
aXM8TWVtb3J5U3RvcmFnZUFyZWE+KCptX2xvY2FsU3RvcmFnZUFyZWEpICYmICFtX2xvY2FsU3Rv
cmFnZUFyZWEtPmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZWdpc3RyeS51
bnJlZ2lzdGVyU3RvcmFnZUFyZWEobV9sb2NhbFN0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCkpOwor
ICAgIG1fbG9jYWxTdG9yYWdlQXJlYSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdl
TWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZEZvclRyYW5zaWVudFN0b3JhZ2VBcmVhKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbikKK3sKKyAgICBpZiAoIW1fdHJhbnNpZW50U3Rv
cmFnZUFyZWEpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdHJhbnNpZW50U3RvcmFnZUFyZWEt
PnJlbW92ZUxpc3RlbmVyKGNvbm5lY3Rpb24pOworICAgIGlmIChtX3RyYW5zaWVudFN0b3JhZ2VB
cmVhLT5oYXNMaXN0ZW5lcnMoKSB8fCAhbV90cmFuc2llbnRTdG9yYWdlQXJlYS0+aXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlZ2lzdHJ5LnVucmVnaXN0ZXJTdG9yYWdlQXJl
YShtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCkpOworICAgIG1fdHJhbnNpZW50
U3RvcmFnZUFyZWEgPSBudWxscHRyOworfQorCitTdG9yYWdlQXJlYUlkZW50aWZpZXIgTG9jYWxT
dG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2lu
LCBSZWY8V29ya1F1ZXVlPiYmIHdvcmtRdWV1ZSkKK3sKKyAgICBpZiAoIW1fbG9jYWxTdG9yYWdl
QXJlYSkgeworICAgICAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2xv
Y2FsU3RvcmFnZUFyZWEgPSBtYWtlVW5pcXVlPFNRTGl0ZVN0b3JhZ2VBcmVhPihsb2NhbFN0b3Jh
Z2VRdW90YUluQnl0ZXMsIG9yaWdpbiwgbV9wYXRoLCBXVEZNb3ZlKHdvcmtRdWV1ZSkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2xvY2FsU3RvcmFnZUFyZWEgPSBtYWtlVW5pcXVlPE1l
bW9yeVN0b3JhZ2VBcmVhPihvcmlnaW4sIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGU6Okxv
Y2FsKTsKKworICAgICAgICBtX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RvcmFnZUFyZWEobV9sb2NhbFN0
b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCksICptX2xvY2FsU3RvcmFnZUFyZWEpOworICAgIH0KKwor
ICAgIEFTU0VSVChtX3BhdGguaXNFbXB0eSgpIHx8IG1fbG9jYWxTdG9yYWdlQXJlYS0+dHlwZSgp
ID09IFN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6U1FMaXRlKTsKKyAgICBtX2xvY2FsU3RvcmFnZUFy
ZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb24pOworICAgIHJldHVybiBtX2xvY2FsU3RvcmFnZUFy
ZWEtPmlkZW50aWZpZXIoKTsKK30KKworU3RvcmFnZUFyZWFJZGVudGlmaWVyIExvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0
aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9y
aWdpbikKK3sKKyAgICBpZiAoIW1fdHJhbnNpZW50U3RvcmFnZUFyZWEpIHsKKyAgICAgICAgbV90
cmFuc2llbnRTdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8TWVtb3J5U3RvcmFnZUFyZWE+KG9yaWdp
biwgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZTo6TG9jYWwpOworICAgICAgICBtX3JlZ2lz
dHJ5LnJlZ2lzdGVyU3RvcmFnZUFyZWEobV90cmFuc2llbnRTdG9yYWdlQXJlYS0+aWRlbnRpZmll
cigpLCAqbV90cmFuc2llbnRTdG9yYWdlQXJlYSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fdHJh
bnNpZW50U3RvcmFnZUFyZWEtPnR5cGUoKSA9PSBTdG9yYWdlQXJlYUJhc2U6OlR5cGU6Ok1lbW9y
eSk7CisgICAgbV90cmFuc2llbnRTdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVjdGlvbik7
CisgICAgcmV0dXJuIG1fdHJhbnNpZW50U3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKTsKK30KKwor
dm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpkaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKElQQzo6
Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlk
ZW50aWZpZXIpCit7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlQXJlYSAmJiBtX2xvY2FsU3RvcmFn
ZUFyZWEtPmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyKSB7CisgICAgICAgIGNvbm5lY3Rpb25D
bG9zZWRGb3JMb2NhbFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKG1fdHJhbnNpZW50U3RvcmFnZUFyZWEgJiYgbV90cmFuc2llbnRTdG9y
YWdlQXJlYS0+aWRlbnRpZmllcigpID09IGlkZW50aWZpZXIpCisgICAgICAgIGNvbm5lY3Rpb25D
bG9zZWRGb3JUcmFuc2llbnRTdG9yYWdlQXJlYShjb25uZWN0aW9uKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjZlNmQ1ZTJiZTEy
OGNhOTc4YjdlMjVlYzdhYjUwOTYzYjhlMWZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuaApAQCAtMCww
ICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdG9yYWdl
QXJlYUlkZW50aWZpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworc3RydWN0IENsaWVudE9y
aWdpbjsKK3N0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBNZW1vcnlTdG9yYWdlQXJlYTsKK2NsYXNzIFN0b3JhZ2VBcmVhQmFzZTsKK2Ns
YXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnk7CisKK2NsYXNzIExvY2FsU3RvcmFnZU1hbmFnZXIgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBWZWN0b3I8
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zT2ZMb2NhbFN0b3JhZ2VEYXRhKGNv
bnN0IFN0cmluZyYgcGF0aCk7CisgICAgc3RhdGljIFN0cmluZyBsb2NhbFN0b3JhZ2VGaWxlUGF0
aChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworCisg
ICAgTG9jYWxTdG9yYWdlTWFuYWdlcihjb25zdCBTdHJpbmcmIHBhdGgsIFN0b3JhZ2VBcmVhUmVn
aXN0cnkmKTsKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgYm9vbCBoYXNEYXRhSW5N
ZW1vcnkoKSBjb25zdDsKKyAgICB2b2lkIGNsZWFyRGF0YUluTWVtb3J5KCk7CisgICAgdm9pZCBj
bGVhckRhdGFPbkRpc2soKTsKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBoYW5kbGVMb3dN
ZW1vcnlXYXJuaW5nKCk7CisgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKCk7CisgICAgdm9pZCBj
b25uZWN0aW9uQ2xvc2VkKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQpOworCisgICAgU3RvcmFn
ZUFyZWFJZGVudGlmaWVyIGNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9u
OjpVbmlxdWVJRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgUmVmPFdvcmtRdWV1ZT4m
Jik7CisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3Rv
cmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50
T3JpZ2luJik7CisgICAgdm9pZCBkaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKElQQzo6Q29ubmVj
dGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSWRlbnRpZmllcik7CisKK3ByaXZhdGU6CisgICAg
dm9pZCBjb25uZWN0aW9uQ2xvc2VkRm9yTG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlEKTsKKyAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWRGb3JUcmFuc2llbnRTdG9yYWdl
QXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKKworICAgIFN0cmluZyBtX3BhdGg7Cisg
ICAgU3RvcmFnZUFyZWFSZWdpc3RyeSYgbV9yZWdpc3RyeTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWVtb3J5U3RvcmFnZUFyZWE+IG1fdHJhbnNpZW50U3RvcmFnZUFyZWE7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFN0b3JhZ2VBcmVhQmFzZT4gbV9sb2NhbFN0b3JhZ2VBcmVhOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmM1YzA2
NWRiMTc0ZGM0MzFmODdmMjA1NmYwYjBjN2QyNzJlOWRmMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5jcHAK
QEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIk1lbW9yeVN0b3JhZ2VBcmVhLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitN
ZW1vcnlTdG9yYWdlQXJlYTo6TWVtb3J5U3RvcmFnZUFyZWEoY29uc3QgV2ViQ29yZTo6Q2xpZW50
T3JpZ2luJiBvcmlnaW4sIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGUgdHlwZSkKKyAgICA6
IFN0b3JhZ2VBcmVhQmFzZShXZWJDb3JlOjpTdG9yYWdlTWFwOjpub1F1b3RhLCBvcmlnaW4pCisg
ICAgLCBtX21hcChXZWJDb3JlOjpTdG9yYWdlTWFwKFdlYkNvcmU6OlN0b3JhZ2VNYXA6Om5vUXVv
dGEpKQorICAgICwgbV9zdG9yYWdlVHlwZSh0eXBlKQoreworfQorCitib29sIE1lbW9yeVN0b3Jh
Z2VBcmVhOjppc0VtcHR5KCkKK3sKKyAgICByZXR1cm4gIW1fbWFwLmxlbmd0aCgpOworfQorCit2
b2lkIE1lbW9yeVN0b3JhZ2VBcmVhOjpjbGVhcigpCit7CisgICAgbV9tYXAuY2xlYXIoKTsKKyAg
ICBub3RpZnlMaXN0ZW5lcnNBYm91dENsZWFyKCk7Cit9CisKK0hhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IE1lbW9yeVN0b3JhZ2VBcmVhOjphbGxJdGVtcygpCit7CisgICAgcmV0dXJuIG1fbWFwLml0
ZW1zKCk7Cit9CisKK0V4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gTWVtb3J5U3RvcmFnZUFy
ZWE6OnNldEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdl
QXJlYUltcGxJZGVudGlmaWVyIHN0b3JhZ2VBcmVhSW1wbElELCBTdHJpbmcmJiBrZXksIFN0cmlu
ZyYmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBTdHJpbmcgb2xkVmFs
dWU7CisgICAgYm9vbCBoYXNRdW90YUVycm9yID0gZmFsc2U7CisgICAgbV9tYXAuc2V0SXRlbShr
ZXksIHZhbHVlLCBvbGRWYWx1ZSwgaGFzUXVvdGFFcnJvcik7CisgICAgaWYgKGhhc1F1b3RhRXJy
b3IpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OlF1b3RhRXhj
ZWVkZWQpOworCisgICAgZGlzcGF0Y2hFdmVudHMoY29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBs
SUQsIGtleSwgb2xkVmFsdWUsIHZhbHVlLCB1cmxTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsK
K30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBNZW1vcnlTdG9yYWdlQXJlYTo6cmVt
b3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVh
SW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgbV9tYXAu
cmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKTsKKyAgICBkaXNwYXRjaEV2ZW50cyhjb25uZWN0aW9u
LCBzdG9yYWdlQXJlYUltcGxJRCwga2V5LCBvbGRWYWx1ZSwgU3RyaW5nKCksIHVybFN0cmluZyk7
CisKKyAgICByZXR1cm4geyB9OworfQorCitFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IE1l
bW9yeVN0b3JhZ2VBcmVhOjpjbGVhcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rp
b24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nKQoreworICAgIGlmICghbV9tYXAubGVuZ3RoKCkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBtX21hcC5jbGVhcigpOworICAgIGRpc3BhdGNoRXZlbnRzKGNvbm5lY3Rp
b24sIGltcGxJZGVudGlmaWVyLCBTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCB1cmxTdHJp
bmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworc3RkOjp1bmlxdWVfcHRyPE1lbW9yeVN0b3Jh
Z2VBcmVhPiBNZW1vcnlTdG9yYWdlQXJlYTo6Y2xvbmUoKSBjb25zdAoreworICAgIGF1dG8gc3Rv
cmFnZUFyZWEgPSBtYWtlVW5pcXVlPE1lbW9yeVN0b3JhZ2VBcmVhPihvcmlnaW4oKSwgbV9zdG9y
YWdlVHlwZSk7CisgICAgc3RvcmFnZUFyZWEtPm1fbWFwID0gbV9tYXA7CisKKyAgICByZXR1cm4g
c3RvcmFnZUFyZWE7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yMzc2ODk5ZDI4OTEzM2I1ZTk3ZjQzMDVjYjJlNTFjNzQyZTFkOWNhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9y
eVN0b3JhZ2VBcmVhLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUJhc2UuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L1N0b3JhZ2VNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU3RvcmFnZU1hcDsK
K30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE1lbW9yeVN0b3JhZ2VBcmVhIGZpbmFs
IDogcHVibGljIFN0b3JhZ2VBcmVhQmFzZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgTWVtb3J5
U3RvcmFnZUFyZWEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgU3RvcmFnZUFyZWFCYXNl
OjpTdG9yYWdlVHlwZSA9IFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGU6OlNlc3Npb24pOwor
CisgICAgU3RvcmFnZUFyZWFCYXNlOjpUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBT
dG9yYWdlQXJlYUJhc2U6OlR5cGU6Ok1lbW9yeTsgfTsKKyAgICBib29sIGlzRW1wdHkoKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyKCkgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeVN0
b3JhZ2VBcmVhPiBjbG9uZSgpIGNvbnN0OworICAgIAorCitwcml2YXRlOgorICAgIC8vIFN0b3Jh
Z2VBcmVhQmFzZQorICAgIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3N0b3JhZ2VUeXBlOyB9CisgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gYWxsSXRlbXMoKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2b2lkLCBTdG9yYWdl
RXJyb3I+IHNldEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBs
SWRlbnRpZmllciwgU3RyaW5nJiYga2V5LCBTdHJpbmcmJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcpIGZpbmFsOworICAgIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gcmVtb3Zl
SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGZpbmFsOworICAg
IEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gY2xlYXIoSVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
IGZpbmFsOworCisgICAgbXV0YWJsZSBXZWJDb3JlOjpTdG9yYWdlTWFwIG1fbWFwOworICAgIFN0
b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYktpdDo6TWVt
b3J5U3RvcmFnZUFyZWEpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYktpdDo6U3Rv
cmFnZUFyZWFCYXNlJiBhcmVhKSB7IHJldHVybiBhcmVhLnR5cGUoKSA9PSBXZWJLaXQ6OlN0b3Jh
Z2VBcmVhQmFzZTo6VHlwZTo6TWVtb3J5OyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29y
a1N0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IGMxMGFjYmRkNjRmZTA0ZWZmMTZhMWM4
Yjc0ZDJiZmMxOTUzZGJkNzMuLjU2NDE4NWNhOTA3NWNhZDA4Zjc4NDczZTE1MjA3NWQxNzI1NzAy
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3
b3JrU3RvcmFnZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0yOCwxMiArMjgsMTkgQEAKIAog
I2luY2x1ZGUgIkZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJG
aWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VNYW5hZ2Vy
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlTWFuYWdl
ck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiT3JpZ2luU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRl
ICJTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUJhc2UuaCIK
KyNpbmNsdWRlICJTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFy
ZWFSZWdpc3RyeS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhVHlwZS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CiAjaW5jbHVkZSA8cGFsL2NyeXB0by9DcnlwdG9E
aWdlc3QuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvU3VzcGVuZGFi
bGVXb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVy
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCkBAIC00Myw3ICs1MCw3IEBAIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gcmVhZE9yaWdpbkZyb21G
aWxlKGNvbnN0IFN0cmluZyYgZmlsCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CiAKLSAgICBpZiAoIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZVBhdGgpKQorICAgIGlmIChm
aWxlUGF0aC5pc0VtcHR5KCkgfHwgIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZVBhdGgpKQog
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgYXV0byBvcmlnaW5GaWxlSGFuZGxl
ID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUoZmlsZVBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9k
ZTo6UmVhZCk7CkBAIC02Niw3ICs3Myw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6
OkNsaWVudE9yaWdpbj4gcmVhZE9yaWdpbkZyb21GaWxlKGNvbnN0IFN0cmluZyYgZmlsCiAKIHN0
YXRpYyB2b2lkIHdyaXRlT3JpZ2luVG9GaWxlSWZOZWNlc3NhcnkoY29uc3QgU3RyaW5nJiBmaWxl
UGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAgaWYgKEZp
bGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZVBhdGgpKQorICAgIGlmIChmaWxlUGF0aC5pc0VtcHR5
KCkgfHwgRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxlUGF0aCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQ
YXRoKGZpbGVQYXRoKSk7CkBAIC03Niw3ICs4Myw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlT3JpZ2lu
VG9GaWxlSWZOZWNlc3NhcnkoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgY29uc3QgV2ViQ29yZTo6
CiAgICAgfSk7CiAKICAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQob3JpZ2luRmls
ZUhhbmRsZSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJ3cml0ZU9yaWdpblRvRmlsZUlmTmVjZXNz
YXJ5OiBGYWlsZWQgdG8gb3BlbiBvcmlnaW4gZmlsZSIpOworICAgICAgICBMT0dfRVJST1IoIndy
aXRlT3JpZ2luVG9GaWxlSWZOZWNlc3Nhcnk6IEZhaWxlZCB0byBvcGVuIG9yaWdpbiBmaWxlICcl
cyciLCBmaWxlUGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtOTMsMjAgKzEwMCwyMiBAQCBzdGF0aWMgdm9pZCBkZWxldGVPcmlnaW5GaWxlSWZOZWNlc3Nh
cnkoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmls
ZShmaWxlUGF0aCk7CiB9CiAKLVJlZjxOZXR3b3JrU3RvcmFnZU1hbmFnZXI+IE5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5n
JiBwYXRoKQorUmVmPE5ldHdvcmtTdG9yYWdlTWFuYWdlcj4gTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
OjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0IFN0cmluZyYgY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBOZXR3b3JrU3RvcmFnZU1hbmFnZXIoc2Vzc2lvbklELCBwYXRoKSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyKHNlc3Npb25JRCwgcGF0aCwg
Y3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkpOwogfQogCi1OZXR3b3JrU3RvcmFnZU1hbmFnZXI6Ok5l
dHdvcmtTdG9yYWdlTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK05ldHdvcmtTdG9yYWdlTWFuYWdlcjo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcm
IGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgpCiAgICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCi0g
ICAgLCBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LlN0b3JhZ2Ui
KSkKKyAgICAsIG1fcXVldWUoU3VzcGVuZGFibGVXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxl
LldlYktpdC5TdG9yYWdlIikpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAot
ICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMg
fSwgcGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7CisgICAgbV9xdWV1ZS0+
ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBwYXRoID0gcGF0
aC5pc29sYXRlZENvcHkoKSwgY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCA9IGNyb3NzVGhyZWFkQ29w
eShjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKV0oKSBtdXRhYmxlIHsKICAgICAgICAgbV9maWxlU3lz
dGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5ID0gbWFrZVVuaXF1ZTxGaWxlU3lzdGVtU3RvcmFnZUhh
bmRsZVJlZ2lzdHJ5PigpOworICAgICAgICBtX3N0b3JhZ2VBcmVhUmVnaXN0cnkgPSBtYWtlVW5p
cXVlPFN0b3JhZ2VBcmVhUmVnaXN0cnk+KCk7CiAgICAgICAgIG1fcGF0aCA9IHBhdGg7CisgICAg
ICAgIG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCA9IGN1c3RvbUxvY2FsU3RvcmFnZVBhdGg7CiAg
ICAgICAgIGlmICghbV9wYXRoLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgYXV0byBzYWx0UGF0
aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX3BhdGgsICJzYWx0Iik7
CiAgICAgICAgICAgICBtX3NhbHQgPSBGaWxlU3lzdGVtOjpyZWFkT3JNYWtlU2FsdChzYWx0UGF0
aCkudmFsdWVfb3IoRmlsZVN5c3RlbTo6U2FsdCgpKTsKQEAgLTEyMCw2ICsxMjksMTEgQEAgTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjp+TmV0d29ya1N0b3JhZ2VNYW5hZ2VyKCkKICAgICBBU1NFUlQo
bV9jbG9zZWQpOwogfQogCitib29sIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlw
ZXMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCit7CisgICAgcmV0dXJuIHR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSB8fCB0eXBlcy5jb250YWlu
cyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKSB8fCB0eXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW0pOworfQorCiB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6Y2xvc2UoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC0xMzMsNyAr
MTQ3LDYgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsb3NlKCkKIAogICAgIG1fcXVl
dWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfV0oKSBtdXRh
YmxlIHsKICAgICAgICAgbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5jbGVhcigpOwotICAg
ICAgICBtX3Nlc3Npb25PcmlnaW5TdG9yYWdlTWFuYWdlcnMuY2xlYXIoKTsKICAgICAgICAgbV9m
aWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5ID0gbnVsbHB0cjsKIAogICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRo
aXMpXSB7IH0pOwpAQCAtMTc3LDcgKzE5MCw3IEBAIHN0YXRpYyBTdHJpbmcgZW5jb2RlKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBGaWxlU3lzdGVtOjpTYWx0IHNhbHQpCiBzdGF0aWMgU3RyaW5nIG9y
aWdpbkRpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJiByb290UGF0aCwgY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJiBvcmlnaW4sIEZpbGVTeXN0ZW06OlNhbHQgc2FsdCkKIHsKICAgICBpZiAo
cm9vdFBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcm9vdFBhdGg7CisgICAgICAgIHJl
dHVybiBTdHJpbmcgeyB9OwogCiAgICAgYXV0byBlbmNvZGVkVG9wT3JpZ2luID0gZW5jb2RlKG9y
aWdpbi50b3BPcmlnaW4udG9TdHJpbmcoKSwgc2FsdCk7CiAgICAgYXV0byBlbmNvZGVkT3Blbmlu
Z09yaWdpbiA9IGVuY29kZShvcmlnaW4uY2xpZW50T3JpZ2luLnRvU3RyaW5nKCksIHNhbHQpOwpA
QCAtMTg2LDYgKzE5OSw4IEBAIHN0YXRpYyBTdHJpbmcgb3JpZ2luRGlyZWN0b3J5UGF0aChjb25z
dCBTdHJpbmcmIHJvb3RQYXRoLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPCiAKIHN0YXRpYyBTdHJp
bmcgb3JpZ2luRmlsZVBhdGgoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpCiB7CisgICAgaWYgKGRp
cmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcgeyB9OwogICAgIHJldHVy
biBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGlyZWN0b3J5LCAib3JpZ2lu
Il9zKTsKIH0KIApAQCAtMTk2LDE2ICsyMTEsMzQgQEAgT3JpZ2luU3RvcmFnZU1hbmFnZXImIE5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6bG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihjb25zdCBXZWIK
ICAgICByZXR1cm4gKm1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMuZW5zdXJlKG9yaWdpbiwg
WyZdIHsKICAgICAgICAgYXV0byBvcmlnaW5EaXJlY3RvcnkgPSBvcmlnaW5EaXJlY3RvcnlQYXRo
KG1fcGF0aCwgb3JpZ2luLCBtX3NhbHQpOwogICAgICAgICB3cml0ZU9yaWdpblRvRmlsZUlmTmVj
ZXNzYXJ5KG9yaWdpbkZpbGVQYXRoKG9yaWdpbkRpcmVjdG9yeSksIG9yaWdpbik7Ci0gICAgICAg
IHJldHVybiBtYWtlVW5pcXVlPE9yaWdpblN0b3JhZ2VNYW5hZ2VyPihXVEZNb3ZlKG9yaWdpbkRp
cmVjdG9yeSkpOworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxPcmlnaW5TdG9yYWdlTWFuYWdl
cj4oV1RGTW92ZShvcmlnaW5EaXJlY3RvcnkpLCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpsb2NhbFN0
b3JhZ2VGaWxlUGF0aChtX2N1c3RvbUxvY2FsU3RvcmFnZVBhdGgsIG9yaWdpbikpOwogICAgIH0p
Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnJlbW92
ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mIG9yaWdpbikKK2Jvb2wgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVPcmlnaW5TdG9y
YWdlTWFuYWdlcklmUG9zc2libGUoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4p
CiB7Ci0gICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJz
LmZpbmQob3JpZ2luKTsgaXRlcmF0b3IgIT0gbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5l
bmQoKSkgewotICAgICAgICBpZiAoIWl0ZXJhdG9yLT52YWx1ZS0+aXNBY3RpdmUoKSkKLSAgICAg
ICAgICAgIG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMucmVtb3ZlKGl0ZXJhdG9yKTsKLSAg
ICB9CisgICAgYXV0byBpdGVyYXRvciA9IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMuZmlu
ZChvcmlnaW4pOworICAgIGlmIChpdGVyYXRvciA9PSBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFn
ZXJzLmVuZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpdGVyYXRvci0+dmFs
dWUtPmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fbG9jYWxPcmln
aW5TdG9yYWdlTWFuYWdlcnMucmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZU9yaWdpbkRpcmVjdG9yeUlmUG9z
c2libGUoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pCit7CisgICAgYm9vbCBp
c0VtcHR5ID0gbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihvcmlnaW4pLmlzRW1wdHkoKTsKKyAg
ICBib29sIHJlbW92ZWQgPSByZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUob3Jp
Z2luKTsKKyAgICBpZiAoIXJlbW92ZWQgfHwgIWlzRW1wdHkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGF1dG8gb3JpZ2luRGlyZWN0b3J5ID0gb3JpZ2luRGlyZWN0b3J5UGF0aChtX3BhdGgsIG9y
aWdpbiwgbV9zYWx0KTsKKyAgICBhdXRvIGZpbGVQYXRoID0gb3JpZ2luRmlsZVBhdGgob3JpZ2lu
RGlyZWN0b3J5KTsKKyAgICBkZWxldGVPcmlnaW5GaWxlSWZOZWNlc3NhcnkoZmlsZVBhdGgpOwor
ICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KG9yaWdpbkRpcmVjdG9yeSk7CiB9
CiAKIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpwZXJzaXN0ZWQoY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJiBvcmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0yMzIsOSArMjY1LDYgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZU1h
bmFnZXI6OmNsZWFyU3RvcmFnZUZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGMKICAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5h
Z2Vycy52YWx1ZXMoKSkKICAgICAgICAgICAgIG1hbmFnZXItPnNldFBlcnNpc3RlZChmYWxzZSk7
CiAKLSAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9zZXNzaW9uT3JpZ2luU3RvcmFnZU1h
bmFnZXJzLnZhbHVlcygpKQotICAgICAgICAgICAgbWFuYWdlci0+c2V0UGVyc2lzdGVkKGZhbHNl
KTsKLQogICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBX
VEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKICAgICAgICAgfSk7CkBAIC0zODIsMTQgKzQxMiw2IEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VN
YW5hZ2VyOjpnZXRIYW5kbGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJDb3JlOjpG
aWxlCiAgICAgY29tcGxldGlvbkhhbmRsZXIoaGFuZGxlLT5nZXRIYW5kbGUoY29ubmVjdGlvbi51
bmlxdWVJRCgpLCBXVEZNb3ZlKG5hbWUpKSk7CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdl
YnNpdGVEYXRhVHlwZT4gdG9XZWJzaXRlRGF0YVR5cGUoY29uc3QgU3RyaW5nJiBzdG9yYWdlVHlw
ZSkKLXsKLSAgICBpZiAoc3RvcmFnZVR5cGUgPT0gIkZpbGVTeXN0ZW0iKQotICAgICAgICByZXR1
cm4gV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtOwotCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLX0KLQogdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZvckVhY2hPcmlnaW5EaXJlY3Rv
cnkoY29uc3QgRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mIGFwcGx5KQogewogICAgIGZv
ciAoYXV0byYgdG9wT3JpZ2luIDogRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShtX3BhdGgpKSB7
CkBAIC00MDEsMzAgKzQyMyw0MyBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Zm9yRWFj
aE9yaWdpbkRpcmVjdG9yeShjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cgogICAgICAgICB9
CiAKICAgICAgICAgZm9yIChhdXRvJiBvcGVuaW5nT3JpZ2luIDogb3BlbmluZ09yaWdpbnMpIHsK
KyAgICAgICAgICAgIGlmIChvcGVuaW5nT3JpZ2luLnN0YXJ0c1dpdGgoJy4nKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKwogICAgICAgICAgICAgYXV0byBvcGVuaW5nT3JpZ2luRGlyZWN0
b3J5ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHRvcE9yaWdpbkRpcmVj
dG9yeSwgb3BlbmluZ09yaWdpbik7CiAgICAgICAgICAgICBhcHBseShvcGVuaW5nT3JpZ2luRGly
ZWN0b3J5KTsKICAgICAgICAgfQogICAgIH0KIH0KIAorSGFzaFNldDxXZWJDb3JlOjpDbGllbnRP
cmlnaW4+IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Z2V0QWxsT3JpZ2lucygpCit7CisgICAgSGFz
aFNldDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IGFsbE9yaWdpbnM7CisgICAgZm9yIChhdXRvJiBv
cmlnaW4gOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmtleXMoKSkKKyAgICAgICAgYWxs
T3JpZ2lucy5hZGQob3JpZ2luKTsKKworICAgIGZvckVhY2hPcmlnaW5EaXJlY3RvcnkoWyZdKGF1
dG8gZGlyZWN0b3J5KSB7CisgICAgICAgIGlmIChhdXRvIG9yaWdpbiA9IHJlYWRPcmlnaW5Gcm9t
RmlsZShvcmlnaW5GaWxlUGF0aChkaXJlY3RvcnkpKSkKKyAgICAgICAgICAgIGFsbE9yaWdpbnMu
YWRkKCpvcmlnaW4pOworICAgIH0pOworCisgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBMb2NhbFN0
b3JhZ2VNYW5hZ2VyOjpvcmlnaW5zT2ZMb2NhbFN0b3JhZ2VEYXRhKG1fY3VzdG9tTG9jYWxTdG9y
YWdlUGF0aCkpCisgICAgICAgIGFsbE9yaWdpbnMuYWRkKFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7
IG9yaWdpbiwgb3JpZ2luIH0pOworCisgICAgcmV0dXJuIGFsbE9yaWdpbnM7Cit9CisKIFZlY3Rv
cjxXZWJzaXRlRGF0YTo6RW50cnk+IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZmV0Y2hEYXRhRnJv
bURpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdGFyZ2V0VHlwZXMpCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBIYXNoTWFwPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4+IG9yaWdpblR5cGVzOwotICAg
IGZvckVhY2hPcmlnaW5EaXJlY3RvcnkoWyZdKGF1dG8gZGlyZWN0b3J5KSBtdXRhYmxlIHsKLSAg
ICAgICAgYXV0byBvcmlnaW4gPSByZWFkT3JpZ2luRnJvbUZpbGUob3JpZ2luRmlsZVBhdGgoZGly
ZWN0b3J5KSk7Ci0gICAgICAgIGlmICghb3JpZ2luKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGZvciAoYXV0byYgc3RvcmFnZVR5cGUgOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5
KGRpcmVjdG9yeSkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHR5cGUgPSB0b1dlYnNpdGVEYXRh
VHlwZShzdG9yYWdlVHlwZSk7IHR5cGUgJiYgdGFyZ2V0VHlwZXMuY29udGFpbnMoKnR5cGUpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gUmV0dXJuIGJvdGggdG9wIG9yaWdpbiBhbmQgb3BlbmluZyBv
cmlnaW4gZm9yIHRoaXMgZGF0YS4KLSAgICAgICAgICAgICAgICBvcmlnaW5UeXBlcy5hZGQob3Jp
Z2luLT5jbGllbnRPcmlnaW4sIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHsgfSkuaXRlcmF0
b3ItPnZhbHVlLmFkZCgqdHlwZSk7Ci0gICAgICAgICAgICAgICAgb3JpZ2luVHlwZXMuYWRkKG9y
aWdpbi0+dG9wT3JpZ2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB7IH0pLml0ZXJhdG9y
LT52YWx1ZS5hZGQoKnR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7Cisg
ICAgZm9yIChhdXRvJiBvcmlnaW4gOiBnZXRBbGxPcmlnaW5zKCkpIHsKKyAgICAgICAgYXV0byB0
eXBlcyA9IGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5mZXRjaERhdGFUeXBlc0lu
TGlzdCh0YXJnZXRUeXBlcyk7CisgICAgICAgIG9yaWdpblR5cGVzLmFkZChvcmlnaW4uY2xpZW50
T3JpZ2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5h
ZGQodHlwZXMpOworICAgICAgICBvcmlnaW5UeXBlcy5hZGQob3JpZ2luLnRvcE9yaWdpbiwgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4geyB9KS5pdGVyYXRvci0+dmFsdWUuYWRkKHR5cGVzKTsK
KyAgICAgICAgcmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxlKG9yaWdpbik7Cisg
ICAgfQogCiAgICAgVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4gZW50cmllczsKICAgICBmb3Ig
KGF1dG8gW29yaWdpbiwgdHlwZXNdIDogb3JpZ2luVHlwZXMpIHsKQEAgLTQ0OCwzNSArNDgzLDIy
IEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpmZXRjaERhdGEoT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4gdHlwZXMsIENvbXBsZXRpCiAgICAgfSk7CiB9CiAKLVZlY3RvcjxXZWJDb3Jl
OjpDbGllbnRPcmlnaW4+IE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YU9uRGlzayhP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZVRp
bWUsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik+JiBm
aWx0ZXIpCitIYXNoU2V0PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gTmV0d29ya1N0b3JhZ2VNYW5h
Z2VyOjpkZWxldGVEYXRhT25EaXNrKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzLCBX
YWxsVGltZSBtb2RpZmllZFNpbmNlVGltZSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBXZWJD
b3JlOjpDbGllbnRPcmlnaW4mKT4mIGZpbHRlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IGRlbGV0ZWRPcmln
aW5zOwotICAgIGZvckVhY2hPcmlnaW5EaXJlY3RvcnkoWyZdKGF1dG8gZGlyZWN0b3J5KSBtdXRh
YmxlIHsKLSAgICAgICAgYXV0byBmaWxlUGF0aCA9IG9yaWdpbkZpbGVQYXRoKGRpcmVjdG9yeSk7
Ci0gICAgICAgIGF1dG8gb3JpZ2luID0gcmVhZE9yaWdpbkZyb21GaWxlKGZpbGVQYXRoKTsKLSAg
ICAgICAgaWYgKCFvcmlnaW4pIHsKLSAgICAgICAgICAgIC8vIElmIG9yaWdpbiBjYW5ub3QgYmUg
cmV0cmlldmVkLCBidXQgd2UgYXJlIGFza2VkIHRvIHJlbW92ZSBkYXRhIGZvciBhbGwgb3JpZ2lu
cywgcmVtb3ZlIGl0LgotICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIk5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YU9uRGlzayBmYWlsZWQgdG8gcmVhZCBvcmln
aW4gZnJvbSAnJXMnIiwgZmlsZVBhdGgudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBpZiAo
ZmlsdGVyKFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IH0pKSB7Ci0gICAgICAgICAgICAgICAgYXV0
byB0ZW1wT3JpZ2luU3RvcmFnZU1hbmFnZXIgPSBtYWtlVW5pcXVlPE9yaWdpblN0b3JhZ2VNYW5h
Z2VyPihTdHJpbmcgeyBkaXJlY3RvcnkgfSk7Ci0gICAgICAgICAgICAgICAgdGVtcE9yaWdpblN0
b3JhZ2VNYW5hZ2VyLT5kZWxldGVEYXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlVGltZSk7Ci0gICAg
ICAgICAgICAgICAgZGVsZXRlT3JpZ2luRmlsZUlmTmVjZXNzYXJ5KGZpbGVQYXRoKTsKLSAgICAg
ICAgICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURpcmVjdG9yeShkaXJlY3RvcnkpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFmaWx0ZXIoKm9yaWdpbikpCi0gICAgICAgICAgICByZXR1cm47CisgICAgSGFzaFNldDxX
ZWJDb3JlOjpDbGllbnRPcmlnaW4+IGRlbGV0ZWRPcmlnaW5zOworICAgIGZvciAoYXV0byYgb3Jp
Z2luIDogZ2V0QWxsT3JpZ2lucygpKSB7CisgICAgICAgIGlmICghZmlsdGVyKG9yaWdpbikpCisg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBkZWxldGVkT3JpZ2lucy5hcHBlbmQoKm9y
aWdpbik7Ci0gICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIoKm9yaWdpbikuZGVsZXRl
RGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZVRpbWUpOwotICAgICAgICByZW1vdmVPcmlnaW5TdG9y
YWdlTWFuYWdlcklmUG9zc2libGUoKm9yaWdpbik7Ci0gICAgICAgIGRlbGV0ZU9yaWdpbkZpbGVJ
Zk5lY2Vzc2FyeShmaWxlUGF0aCk7Ci0gICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGly
ZWN0b3J5KGRpcmVjdG9yeSk7Ci0gICAgfSk7CisgICAgICAgIGF1dG8gZXhpc3RpbmdEYXRhVHlw
ZXMgPSBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbikuZmV0Y2hEYXRhVHlwZXNJbkxp
c3QodHlwZXMpOworICAgICAgICBpZiAoIWV4aXN0aW5nRGF0YVR5cGVzLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgZGVsZXRlZE9yaWdpbnMuYWRkKG9yaWdpbik7CisgICAgICAgICAgICBsb2Nh
bE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbikuZGVsZXRlRGF0YSh0eXBlcywgbW9kaWZpZWRT
aW5jZVRpbWUpOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZU9yaWdpbkRpcmVjdG9yeUlmUG9z
c2libGUob3JpZ2luKTsKKyAgICB9CiAKICAgICByZXR1cm4gZGVsZXRlZE9yaWdpbnM7CiB9CkBA
IC01NDEsNSArNTYzLDE2MCBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0
YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdAogICAgIH0pOwogfQog
Cit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6bW92ZURhdGEoY29uc3QgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhJiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYgdGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoIW1fY2xvc2Vk
KTsKKworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsg
KnRoaXMgfSwgc291cmNlID0gY3Jvc3NUaHJlYWRDb3B5KHNvdXJjZSksIHRhcmdldCA9IGNyb3Nz
VGhyZWFkQ29weSh0YXJnZXQpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBhdXRvIHNvdXJjZU9yaWdpbiA9IFdlYkNv
cmU6OkNsaWVudE9yaWdpbiB7IHNvdXJjZSwgc291cmNlIH07CisgICAgICAgIGF1dG8gdGFyZ2V0
T3JpZ2luID0gV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgdGFyZ2V0LCB0YXJnZXQgfTsKKyAgICAg
ICAgCisgICAgICAgIC8vIENsZWFyIGV4aXN0aW5nIGRhdGEgb2YgdGFyZ2V0IG9yaWdpbi4KKyAg
ICAgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMgPSB7IFdlYnNpdGVEYXRhVHlw
ZTo6RmlsZVN5c3RlbSwgV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UsIFdlYnNpdGVEYXRh
VHlwZTo6U2Vzc2lvblN0b3JhZ2UgIH07CisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFn
ZXIodGFyZ2V0T3JpZ2luKS5kZWxldGVEYXRhKHR5cGVzLCAtV2FsbFRpbWU6OmluZmluaXR5KCkp
OworICAgICAgICByZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUodGFyZ2V0T3Jp
Z2luKTsKKworICAgICAgICAvLyBNb3ZlIGRhdGEgZnJvbSBzb3VyY2Ugb3JpZ2luIHRvIHRhcmdl
dCBvcmlnaW4uCisgICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIoc291cmNlT3JpZ2lu
KS5tb3ZlRGF0YShvcmlnaW5EaXJlY3RvcnlQYXRoKG1fcGF0aCwgdGFyZ2V0T3JpZ2luLCBtX3Nh
bHQpLCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VGaWxlUGF0aChtX2N1c3RvbUxv
Y2FsU3RvcmFnZVBhdGgsIHRhcmdldE9yaWdpbikpOworICAgICAgICByZW1vdmVPcmlnaW5TdG9y
YWdlTWFuYWdlcklmUG9zc2libGUoc291cmNlT3JpZ2luKTsKKworICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOworfQor
Cit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c3VzcGVuZChDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIG1fcXVldWUtPnN1c3BlbmQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYg
eyAqdGhpcyB9XSB7CisgICAgICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1fbG9jYWxPcmlnaW5T
dG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGxvY2FsU3Rv
cmFnZU1hbmFnZXIgPSBtYW5hZ2VyLT5leGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKSkKKyAg
ICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2VNYW5hZ2VyLT5zeW5jTG9jYWxTdG9yYWdlKCk7Cisg
ICAgICAgIH0KKyAgICB9LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQg
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZXN1bWUoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBtX3F1ZXVlLT5yZXN1bWUoKTsKK30KKwordm9pZCBOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKQoreworICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IFJlZiB7ICp0aGlzIH1dIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9s
b2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKGF1
dG8gbG9jYWxTdG9yYWdlTWFuYWdlciA9IG1hbmFnZXItPmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFu
YWdlcigpKQorICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZU1hbmFnZXItPmhhbmRsZUxvd01l
bW9yeVdhcm5pbmcoKTsKKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6c3luY0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMg
fSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9sb2NhbE9yaWdpblN0b3JhZ2VN
YW5hZ2Vycy52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gbG9jYWxTdG9yYWdlTWFu
YWdlciA9IG1hbmFnZXItPmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcigpKQorICAgICAgICAg
ICAgICAgIGxvY2FsU3RvcmFnZU1hbmFnZXItPnN5bmNMb2NhbFN0b3JhZ2UoKTsKKyAgICAgICAg
fQorCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25u
ZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFn
ZU5hbWVzcGFjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmIHRvcE9y
aWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQXJlYUlkZW50aWZpZXIpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgV2ViQ29yZTo6Q2xpZW50T3JpZ2luIG9yaWdpbiA9IHsgdG9wT3JpZ2luLCB0b3BPcmlnaW4g
fTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdp
bikubG9jYWxTdG9yYWdlTWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5KS5jb25uZWN0VG9M
b2NhbFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgb3JpZ2luLCBtX3F1ZXVlLmNv
cHlSZWYoKSkpOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvVHJh
bnNpZW50TG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFN0b3Jh
Z2VOYW1lc3BhY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiB0b3BP
cmlnaW4sIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmIG9wZW5pbmdPcmlnaW4sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFyZWFJZGVudGlmaWVyKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luID0geyB0b3BPcmlnaW4s
IG9wZW5pbmdPcmlnaW4gfTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihsb2NhbE9yaWdpblN0b3Jh
Z2VNYW5hZ2VyKG9yaWdpbikubG9jYWxTdG9yYWdlTWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lz
dHJ5KS5jb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVl
SUQoKSwgb3JpZ2luKSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0
VG9TZXNzaW9uU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBTdG9yYWdl
TmFtZXNwYWNlSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGEmJiB0b3BPcmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFyZWFJZGVudGlm
aWVyKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4g
b3JpZ2luID0geyB0b3BPcmlnaW4sIHRvcE9yaWdpbiB9OworICAgIGNvbXBsZXRpb25IYW5kbGVy
KGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5zZXNzaW9uU3RvcmFnZU1hbmFnZXIo
Km1fc3RvcmFnZUFyZWFSZWdpc3RyeSkuY29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKGNvbm5l
Y3Rpb24udW5pcXVlSUQoKSwgb3JpZ2luLCBpZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQgTmV0d29y
a1N0b3JhZ2VNYW5hZ2VyOjpkaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbV9z
dG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9yYWdlQXJlYShpZGVudGlmaWVyKTsKKyAgICBpZiAo
IXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc3RvcmFnZUFyZWEtPnN0
b3JhZ2VUeXBlKCkgPT0gU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZTo6TG9jYWwpCisgICAg
ICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIoc3RvcmFnZUFyZWEtPm9yaWdpbigpKS5sb2Nh
bFN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VBcmVhUmVnaXN0cnkpLmRpc2Nvbm5lY3RGcm9tU3Rv
cmFnZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBpZGVudGlmaWVyKTsKKyAgICBlbHNlCisg
ICAgICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIoc3RvcmFnZUFyZWEtPm9yaWdpbigpKS5z
ZXNzaW9uU3RvcmFnZU1hbmFnZXIoKm1fc3RvcmFnZUFyZWFSZWdpc3RyeSkuZGlzY29ubmVjdEZy
b21TdG9yYWdlQXJlYShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIGlkZW50aWZpZXIpOworfQorCit2
b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIGZy
b21JZGVudGlmaWVyLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciB0b0lkZW50aWZpZXIpCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBmb3IgKGF1dG8mIG1hbmFn
ZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgIGlm
IChhdXRvKiBzZXNzaW9uU3RvcmFnZU1hbmFnZXIgPSBtYW5hZ2VyLT5leGlzdGluZ1Nlc3Npb25T
dG9yYWdlTWFuYWdlcigpKQorICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5jbG9u
ZVN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgZnJvbUlkZW50aWZpZXIsIHRvSWRl
bnRpZmllcik7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Z2V0VmFs
dWVzKFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoYXV0byBzdG9y
YWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFSZWdpc3RyeS0+Z2V0U3RvcmFnZUFyZWEoaWRlbnRpZmll
cikpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihzdG9yYWdlQXJlYS0+YWxsSXRl
bXMoKSk7CisgICAgCisgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Cit9CisKK3Zv
aWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzZXRJdGVtKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElk
ZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcm
JiBrZXksIFN0cmluZyYmIHZhbHVlLCBTdHJpbmcmJiB1cmxTdHJpbmcpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBib29sIGhhc1F1b3RhRXJyb3IgPSBmYWxzZTsK
KyAgICBpZiAoYXV0byBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFSZWdpc3RyeS0+Z2V0U3Rv
cmFnZUFyZWEoaWRlbnRpZmllcikpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzdG9yYWdlQXJl
YS0+c2V0SXRlbShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIGltcGxJZGVudGlmaWVyLCBTdHJpbmcg
eyBrZXkgfSwgV1RGTW92ZSh2YWx1ZSksIFdURk1vdmUodXJsU3RyaW5nKSk7CisgICAgICAgIGlm
ICghcmVzdWx0KQorICAgICAgICAgICAgaGFzUXVvdGFFcnJvciA9IChyZXN1bHQuZXJyb3IoKSA9
PSBTdG9yYWdlRXJyb3I6OlF1b3RhRXhjZWVkZWQpOworICAgIH0KKworICAgIGNvbm5lY3Rpb24u
c2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFNldEl0ZW0oc3RvcmFnZU1hcFNlZWQs
IGtleSwgaGFzUXVvdGFFcnJvciksIGlkZW50aWZpZXIpOworfQorCit2b2lkIE5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFN0b3Jh
Z2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIGlt
cGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgU3RyaW5nJiYga2V5LCBTdHJp
bmcmJiB1cmxTdHJpbmcpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBpZiAoYXV0byBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFSZWdpc3RyeS0+Z2V0U3RvcmFn
ZUFyZWEoaWRlbnRpZmllcikpCisgICAgICAgIHN0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGNvbm5l
Y3Rpb24udW5pcXVlSUQoKSwgaW1wbElkZW50aWZpZXIsIGtleSwgV1RGTW92ZSh1cmxTdHJpbmcp
KTsKKworICAgIGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFJl
bW92ZUl0ZW0oc3RvcmFnZU1hcFNlZWQsIFdURk1vdmUoa2V5KSksIGlkZW50aWZpZXIpOworfQor
Cit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xlYXIoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgU3RvcmFnZUFyZWFJbXBs
SWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIFN0cmlu
ZyYmIHVybFN0cmluZykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGlmIChhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9yYWdl
QXJlYShpZGVudGlmaWVyKSkKKyAgICAgICAgc3RvcmFnZUFyZWEtPmNsZWFyKGNvbm5lY3Rpb24u
dW5pcXVlSUQoKSwgaW1wbElkZW50aWZpZXIsIFdURk1vdmUodXJsU3RyaW5nKSk7CisKKyAgICBj
b25uZWN0aW9uLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRDbGVhcihzdG9yYWdl
TWFwU2VlZCksIGlkZW50aWZpZXIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9y
YWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdv
cmtTdG9yYWdlTWFuYWdlci5oCmluZGV4IDJhZGRmMmI1ZTIwYWQzNmQyOGU0NDU5N2VhNDEzZmZl
ODk2MWE0MGYuLmI4MDk3MjU4ZmRiOTJkMTBjNTcwMDM0MDVjZjgzY2QxMDllMDBmZTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFn
ZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyLmgKQEAgLTI4LDYgKzI4LDkgQEAKICNpbmNsdWRlICJDb25uZWN0
aW9uLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VFcnJvci5oIgogI2luY2x1ZGUgIk9y
aWdpblN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJZGVudGlmaWVyLmgi
CisjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlN0b3Jh
Z2VOYW1lc3BhY2VJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGEuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3Rl
bUhhbmRsZUlkZW50aWZpZXIuaD4KQEAgLTQ2LDEwICs0OSwxMiBAQCBzdHJ1Y3QgQ2xpZW50T3Jp
Z2luOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxl
UmVnaXN0cnk7CitjbGFzcyBTdG9yYWdlQXJlYVJlZ2lzdHJ5OwogCiBjbGFzcyBOZXR3b3JrU3Rv
cmFnZU1hbmFnZXIgZmluYWwgOiBwdWJsaWMgSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNz
YWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29ya1N0b3JhZ2VNYW5h
Z2VyPiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgc3Rh
dGljIFJlZjxOZXR3b3JrU3RvcmFnZU1hbmFnZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgpOwor
ICAgIHN0YXRpYyBib29sIGNhbkhhbmRsZVR5cGVzKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
KTsKIAogICAgIHZvaWQgc3RhcnRSZWNlaXZpbmdNZXNzYWdlRnJvbUNvbm5lY3Rpb24oSVBDOjpD
b25uZWN0aW9uJik7CiAgICAgdm9pZCBzdG9wUmVjZWl2aW5nTWVzc2FnZUZyb21Db25uZWN0aW9u
KElQQzo6Q29ubmVjdGlvbiYpOwpAQCAtNjEsMjIgKzY2LDMwIEBAIHB1YmxpYzoKICAgICB2b2lk
IGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
ICAgICB2b2lkIGRlbGV0ZURhdGFNb2RpZmllZFNpbmNlKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+LCBXYWxsVGltZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGRl
bGV0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4s
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYpPiYmKTsKKyAg
ICB2b2lkIG1vdmVEYXRhKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgc291cmNl
LCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIHRhcmdldCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHN1c3BlbmQoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKKyAgICB2b2lkIHJlc3VtZSgpOworICAgIHZvaWQgaGFuZGxlTG93TWVtb3J5V2Fy
bmluZygpOworICAgIHZvaWQgc3luY0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwogCiBwcml2YXRlOgotICAgIE5ldHdvcmtTdG9yYWdlTWFuYWdlcihQQUw6OlNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBOZXR3b3JrU3RvcmFnZU1hbmFnZXIoUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjdXN0b21Mb2Nh
bFN0b3JhZ2VQYXRoKTsKICAgICB+TmV0d29ya1N0b3JhZ2VNYW5hZ2VyKCk7CiAgICAgT3JpZ2lu
U3RvcmFnZU1hbmFnZXImIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIoY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJik7Ci0gICAgdm9pZCByZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9z
c2libGUoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgYm9vbCByZW1vdmVPcmln
aW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7
CisgICAgdm9pZCBkZWxldGVPcmlnaW5EaXJlY3RvcnlJZlBvc3NpYmxlKGNvbnN0IFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYpOwogICAgIEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkmIGZp
bGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkoKTsKIAogICAgIHZvaWQgZm9yRWFjaE9yaWdp
bkRpcmVjdG9yeShjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYpOworICAgIEhh
c2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBnZXRBbGxPcmlnaW5zKCk7CiAgICAgVmVjdG9y
PFdlYnNpdGVEYXRhOjpFbnRyeT4gZmV0Y2hEYXRhRnJvbURpc2soT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4pOwotICAgIFZlY3RvcjxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IGRlbGV0ZURhdGFP
bkRpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lLCBjb25zdCBGdW5jdGlv
bjxib29sKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpPiYpOworICAgIEhhc2hTZXQ8V2Vi
Q29yZTo6Q2xpZW50T3JpZ2luPiBkZWxldGVEYXRhT25EaXNrKE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+LCBXYWxsVGltZSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBXZWJDb3JlOjpDbGll
bnRPcmlnaW4mKT4mKTsKIAogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyIChpbXBsZW1lbnRl
ZCBieSBnZW5lcmF0ZWQgY29kZSkKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlkUmVjZWl2ZVN5bmNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIFVuaXF1ZVJlZjxJUEM6OkVuY29kZXI+
JiByZXBseUVuY29kZXIpOwogCi0gICAgLy8gTWVzc2FnZSBoYW5kbGVycworICAgIC8vIE1lc3Nh
Z2UgaGFuZGxlcnMgZm9yIEZpbGVTeXN0ZW0uCiAgICAgdm9pZCBwZXJzaXN0ZWQoY29uc3QgV2Vi
Q29yZTo6Q2xpZW50T3JpZ2luJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAg
ICAgdm9pZCBwZXJzaXN0KGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgZmlsZVN5c3RlbUdldERpcmVjdG9yeShJ
UEM6OkNvbm5lY3Rpb24mLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKEV4cGVjdGVkPFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVy
LCBGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOwpAQCAtODgsMjIgKzEwMSwzMyBAQCBwcml2
YXRlOgogICAgIHZvaWQgcmVtb3ZlRW50cnkoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBkZWxldGVSZWN1cnNpdmVseSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4m
Jik7CiAgICAgdm9pZCByZXNvbHZlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVy
LCBXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChFeHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgRmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYm
KTsKICAgICB2b2lkIGdldEZpbGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwZWN0ZWQ8U3RyaW5nLCBGaWxlU3lzdGVtU3RvcmFn
ZUVycm9yPik+JiYpOwotCiAgICAgdXNpbmcgQWNjZXNzSGFuZGxlSW5mbyA9IHN0ZDo6cGFpcjxX
ZWJDb3JlOjpGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50aWZpZXIsIElQQzo6U2hhcmVk
RmlsZUhhbmRsZT47CiAgICAgdm9pZCBjcmVhdGVTeW5jQWNjZXNzSGFuZGxlKFdlYkNvcmU6OkZp
bGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cGVjdGVk
PEFjY2Vzc0hhbmRsZUluZm8sIEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9p
ZCBjbG9zZUFjY2Vzc0hhbmRsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwg
V2ViQ29yZTo6RmlsZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsK
ICAgICB2b2lkIGdldEhhbmRsZU5hbWVzKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlm
aWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBGaWxl
U3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOwogICAgIHZvaWQgZ2V0SGFuZGxlKElQQzo6Q29ubmVj
dGlvbiYsIFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBTdHJpbmcmJiBuYW1l
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cGVjdGVkPHN0ZDo6cGFpcjxXZWJDb3JlOjpGaWxl
U3lzdGVtSGFuZGxlSWRlbnRpZmllciwgYm9vbD4sIEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4m
Jik7CisgICAgCisgICAgLy8gTWVzc2FnZSBoYW5kbGVycyBmb3IgV2ViU3RvcmFnZS4KKyAgICB2
b2lkIGNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZU5h
bWVzcGFjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBcmVhSWRlbnRpZmllcik+JiYpOworICAgIHZvaWQgY29u
bmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdl
TmFtZXNwYWNlSWRlbnRpZmllciwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYsIFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VB
cmVhSWRlbnRpZmllcik+JiYpOworICAgIHZvaWQgY29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVh
KElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGEmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQXJlYUlk
ZW50aWZpZXIpPiYmKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBDOjpD
b25uZWN0aW9uJiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyKTsKKyAgICB2b2lkIGNsb25lU2Vzc2lv
blN0b3JhZ2VOYW1lc3BhY2UoSVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50
aWZpZXIsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIGdldFZhbHVlcyhT
dG9yYWdlQXJlYUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4mKT4mJik7CisgICAgdm9pZCBzZXRJdGVtKElQQzo6Q29ubmVjdGlv
biYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgdWlu
dDY0X3Qgc2VlZCwgU3RyaW5nJiYga2V5LCBTdHJpbmcmJiB2YWx1ZSwgU3RyaW5nJiYgdXJsU3Ry
aW5nKTsKKyAgICB2b2lkIHJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZUFyZWFJ
ZGVudGlmaWVyLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBzZWVkLCBTdHJp
bmcmJiBrZXksIFN0cmluZyYmIHVybFN0cmluZyk7CisgICAgdm9pZCBjbGVhcihJUEM6OkNvbm5l
Y3Rpb24mLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIs
IHVpbnQ2NF90IHNlZWQsIFN0cmluZyYmIHVybFN0cmluZyk7CiAKICAgICBQQUw6OlNlc3Npb25J
RCBtX3Nlc3Npb25JRDsKLSAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVlOworICAgIFJlZjxTdXNw
ZW5kYWJsZVdvcmtRdWV1ZT4gbV9xdWV1ZTsKICAgICBTdHJpbmcgbV9wYXRoOwogICAgIEZpbGVT
eXN0ZW06OlNhbHQgbV9zYWx0OwogICAgIGJvb2wgbV9jbG9zZWQgeyBmYWxzZSB9OwogICAgIEhh
c2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8T3JpZ2luU3RvcmFn
ZU1hbmFnZXI+PiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzOwotICAgIEhhc2hNYXA8V2Vi
Q29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8T3JpZ2luU3RvcmFnZU1hbmFnZXI+
PiBtX3Nlc3Npb25PcmlnaW5TdG9yYWdlTWFuYWdlcnM7CiAgICAgV2Vha0hhc2hTZXQ8SVBDOjpD
b25uZWN0aW9uPiBtX2Nvbm5lY3Rpb25zOyAvLyBNYWluIHRocmVhZCBvbmx5LgogICAgIHN0ZDo6
dW5pcXVlX3B0cjxGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5PiBtX2ZpbGVTeXN0ZW1T
dG9yYWdlSGFuZGxlUmVnaXN0cnk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2VBcmVhUmVn
aXN0cnk+IG1fc3RvcmFnZUFyZWFSZWdpc3RyeTsKKyAgICBTdHJpbmcgbV9jdXN0b21Mb2NhbFN0
b3JhZ2VQYXRoOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtT
dG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbgppbmRleCA0ZTQwNWM2ZWVhZDMyNmUyNWI0MzE2NDIw
NzA4MDk1ZmE2MGRjODM4Li4wNDIyYjYzNDc1MWQwMzg1Zjg0ZTAxZjY0YWM2MWRhZjMxYzE1ZTg4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29y
a1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTM1LDkg
KzM1LDE4IEBACiAgICAgUmVzb2x2ZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmll
ciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciB0YXJnZXRJ
ZGVudGlmaWVyKSAtPiAoRXhwZWN0ZWQ8VmVjdG9yPFN0cmluZz4sIFdlYktpdDo6RmlsZVN5c3Rl
bVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYwogICAgIE1vdmUoV2ViQ29yZTo6RmlsZVN5c3Rl
bUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlk
ZW50aWZpZXIgZGVzdGluYXRpb25JZGVudGlmaWVyLCBTdHJpbmcgbmV3TmFtZSkgLT4gKHN0ZDo6
b3B0aW9uYWw8V2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5jCiAg
ICAgR2V0RmlsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBpZGVudGlmaWVy
KSAtPiAoRXhwZWN0ZWQ8U3RyaW5nLCBXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJl
c3VsdCkgQXN5bmMKLQogICAgIENyZWF0ZVN5bmNBY2Nlc3NIYW5kbGUoV2ViQ29yZTo6RmlsZVN5
c3RlbUhhbmRsZUlkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKEV4cGVjdGVkPHN0ZDo6cGFpcjxX
ZWJDb3JlOjpGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50aWZpZXIsIElQQzo6U2hhcmVk
RmlsZUhhbmRsZT4sIFdlYktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3lu
YwogICAgIENsb3NlQWNjZXNzSGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlm
aWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZpbGVTeXN0ZW1TeW5jQWNjZXNzSGFuZGxlSWRlbnRp
ZmllciBhY2Nlc3NIYW5kbGVJZGVudGlmaWVyKSAtPiAoc3RkOjpvcHRpb25hbDxXZWJLaXQ6OkZp
bGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkgQXN5bmMKICAgICBHZXRIYW5kbGVOYW1lcyhX
ZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAoRXhwZWN0
ZWQ8VmVjdG9yPFN0cmluZz4sIFdlYktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0
KSBBc3luYwogICAgIEdldEhhbmRsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmll
ciBpZGVudGlmaWVyLCBTdHJpbmcgbmFtZSkgLT4gKEV4cGVjdGVkPHN0ZDo6cGFpcjxXZWJDb3Jl
OjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwgYm9vbD4sIFdlYktpdDo6RmlsZVN5c3RlbVN0
b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYyBXYW50c0Nvbm5lY3Rpb24KKworICAgIENvbm5lY3RU
b0xvY2FsU3RvcmFnZUFyZWEoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBzdG9y
YWdlTmFtZXNwYWNlSUQsIHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgc2VjdXJp
dHlPcmlnaW5EYXRhKSAtPiAoV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmll
cikgU3luY2hyb25vdXMgV2FudHNDb25uZWN0aW9uCisgICAgQ29ubmVjdFRvVHJhbnNpZW50TG9j
YWxTdG9yYWdlQXJlYShXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHN0b3JhZ2VO
YW1lc3BhY2VJRCwgc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSB0b3BMZXZlbFNl
Y3VyaXR5T3JpZ2luRGF0YSwgc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBzZWN1
cml0eU9yaWdpbkRhdGEpIC0+IChXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlm
aWVyKSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KKyAgICBDb25uZWN0VG9TZXNzaW9uU3Rv
cmFnZUFyZWEoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBzdG9yYWdlTmFtZXNw
YWNlSUQsIHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgc2VjdXJpdHlPcmlnaW5E
YXRhKSAtPiAoV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikgU3luY2hy
b25vdXMgV2FudHNDb25uZWN0aW9uCisgICAgRGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShXZWJL
aXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKSBXYW50c0Nvbm5lY3Rpb24KKyAg
ICBDbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlk
ZW50aWZpZXIgZnJvbVN0b3JhZ2VOYW1lc3BhY2VJRCwgV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNl
SWRlbnRpZmllciB0b1N0b3JhZ2VOYW1lc3BhY2VJRCkgV2FudHNDb25uZWN0aW9uCisgICAgR2V0
VmFsdWVzKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiB2YWx1ZXMpIFN5bmNocm9ub3VzCisgICAgU2V0SXRlbShXZWJL
aXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJLaXQ6OlN0b3JhZ2VBcmVh
SW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBT
dHJpbmcga2V5LCBTdHJpbmcgdmFsdWUsIFN0cmluZyB1cmxTdHJpbmcpIFdhbnRzQ29ubmVjdGlv
bgorICAgIFJlbW92ZUl0ZW0oV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgV2ViS2l0OjpTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIGltcGxJZGVudGlmaWVyLCB1aW50
NjRfdCBzdG9yYWdlTWFwU2VlZCwgU3RyaW5nIGtleSwgU3RyaW5nIHVybFN0cmluZykgV2FudHND
b25uZWN0aW9uCisgICAgQ2xlYXIoV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRp
ZmllciwgV2ViS2l0OjpTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIGltcGxJZGVudGlmaWVyLCB1
aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgU3RyaW5nIHVybFN0cmluZykgV2FudHNDb25uZWN0aW9u
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3Jp
Z2luU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcAppbmRleCAyNTRkZmUzYmZmNGE1NmQyZTk1OTIy
NmJmY2ZiZmVkNTVhMjE1NjZjLi5mNmIzNjE5YTVkZTNkZDJhOTRhZjVkZGJkNTAzZjU3NjA0Yzk4
ZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3Jp
Z2luU3RvcmFnZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5jcHAKQEAgLTI4LDE5ICsyOCwyNSBAQAogCiAj
aW5jbHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkZp
bGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZU1hbmFnZXIu
aCIKKyNpbmNsdWRlICJTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdl
QXJlYVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9TUUxpdGVGaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4K
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0YXRpYyBjb25zdGV4cHIgYXV0byBvcmlnaW5GaWxl
TmFtZSA9ICJvcmlnaW4iX3M7CiBlbnVtIGNsYXNzIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9y
YWdlQnVja2V0TW9kZSA6IGJvb2wgeyBCZXN0RWZmb3J0LCBQZXJzaXN0ZW50IH07CiAKIGNsYXNz
IE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBTdG9yYWdlQnVja2V0KGNvbnN0IFN0cmluZyYgcm9v
dFBhdGgsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKKyAgICBTdG9yYWdlQnVja2V0KGNvbnN0
IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBsb2NhbFN0b3JhZ2VQYXRoKQogICAgICAgICA6IG1fcm9vdFBhdGgocm9vdFBhdGgpCiAgICAg
ICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgICAgICwgbV9sb2NhbFN0b3JhZ2VQ
YXRoKGxvY2FsU3RvcmFnZVBhdGgpCiAgICAgewogICAgIH0KIApAQCAtNTUsMTMgKzYxLDMxIEBA
IHB1YmxpYzoKIAogICAgIGVudW0gY2xhc3MgU3RvcmFnZVR5cGUgOiB1aW50OF90IHsKICAgICAg
ICAgRmlsZVN5c3RlbSwKKyAgICAgICAgTG9jYWxTdG9yYWdlLAorICAgICAgICBTZXNzaW9uU3Rv
cmFnZSwKICAgICB9OwogCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2Vic2l0ZURhdGFUeXBl
PiB0b1dlYnNpdGVEYXRhVHlwZShjb25zdCBTdHJpbmcmIHN0b3JhZ2VJZGVudGlmaWVyKQorICAg
IHsKKyAgICAgICAgaWYgKHN0b3JhZ2VJZGVudGlmaWVyID09ICJGaWxlU3lzdGVtIl9zKQorICAg
ICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbTsKKyAgICAgICAgaWYg
KHN0b3JhZ2VJZGVudGlmaWVyID09ICJMb2NhbFN0b3JhZ2UiX3MpCisgICAgICAgICAgICByZXR1
cm4gV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2U7CisgICAgICAgIGlmIChzdG9yYWdlSWRl
bnRpZmllciA9PSAiU2Vzc2lvblN0b3JhZ2UiX3MpCisgICAgICAgICAgICByZXR1cm4gV2Vic2l0
ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZTsKKworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIH0KKwogICAgIHN0YXRpYyBTdHJpbmcgdG9TdG9yYWdlSWRlbnRpZmllcihTdG9yYWdl
VHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2Ug
U3RvcmFnZVR5cGU6OkZpbGVTeXN0ZW06CiAgICAgICAgICAgICByZXR1cm4gIkZpbGVTeXN0ZW0i
X3M7CisgICAgICAgIGNhc2UgU3RvcmFnZVR5cGU6OkxvY2FsU3RvcmFnZToKKyAgICAgICAgICAg
IHJldHVybiAiTG9jYWxTdG9yYWdlIl9zOworICAgICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpTZXNz
aW9uU3RvcmFnZToKKyAgICAgICAgICAgIHJldHVybiAiU2Vzc2lvblN0b3JhZ2UiX3M7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtODYsMTggKzEx
MCwxMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5h
Z2VyOwogICAgIH0KIAotICAgIGJvb2wgaXNBY3RpdmUoKQorICAgIExvY2FsU3RvcmFnZU1hbmFn
ZXImIGxvY2FsU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYgcmVnaXN0cnkpCisg
ICAgeworICAgICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlTWFuYWdlcikKKyAgICAgICAgICAgIG1f
bG9jYWxTdG9yYWdlTWFuYWdlciA9IG1ha2VVbmlxdWU8TG9jYWxTdG9yYWdlTWFuYWdlcj4obV9s
b2NhbFN0b3JhZ2VQYXRoLCByZWdpc3RyeSk7CisKKyAgICAgICAgcmV0dXJuICptX2xvY2FsU3Rv
cmFnZU1hbmFnZXI7CisgICAgfQorCisgICAgTG9jYWxTdG9yYWdlTWFuYWdlciogZXhpc3RpbmdM
b2NhbFN0b3JhZ2VNYW5hZ2VyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xvY2FsU3RvcmFn
ZU1hbmFnZXIuZ2V0KCk7CisgICAgfQorCisgICAgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyJiBzZXNz
aW9uU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFSZWdpc3RyeSYgcmVnaXN0cnkpCiAgICAgewot
ICAgICAgICByZXR1cm4gISFtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcjsKKyAgICAgICAgaWYg
KCFtX3Nlc3Npb25TdG9yYWdlTWFuYWdlcikKKyAgICAgICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VN
YW5hZ2VyID0gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZU1hbmFnZXI+KHJlZ2lzdHJ5KTsKKwor
ICAgICAgICByZXR1cm4gKm1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOworICAgIH0KKworICAgIFNl
c3Npb25TdG9yYWdlTWFuYWdlciogZXhpc3RpbmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmdldCgpOworICAgIH0K
KworICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmls
ZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyIHx8IG1fbG9jYWxTdG9yYWdlTWFuYWdlciB8fCBtX3Nlc3Np
b25TdG9yYWdlTWFuYWdlcjsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAg
IHsKKyAgICAgICAgYXV0byBmaWxlcyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkobV9yb290
UGF0aCk7CisgICAgICAgIGF1dG8gaGFzVmFsaWRGaWxlID0gV1RGOjphbnlPZihmaWxlcywgWyZd
KGF1dG8gZmlsZSkgeworICAgICAgICAgICAgYm9vbCBpc0ludmFsaWRGaWxlID0gKGZpbGUgPT0g
b3JpZ2luRmlsZU5hbWUpOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICAgICAgaXNJbnZh
bGlkRmlsZSB8PSAoZmlsZSA9PSAiLkRTX1N0b3JlIik7CisjZW5kaWYKKyAgICAgICAgICAgIHJl
dHVybiAhaXNJbnZhbGlkRmlsZTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmIChoYXNWYWxpZEZp
bGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuICFGaWxlU3lz
dGVtOjpmaWxlRXhpc3RzKG1fbG9jYWxTdG9yYWdlUGF0aCk7CisgICAgfQorCisgICAgT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gZmV0Y2hEYXRhVHlwZXNJbkxpc3QoT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4gdHlwZXMpCisgICAgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGZldGNoRGF0
YVR5cGVzSW5MaXN0RnJvbU1lbW9yeSh0eXBlcyk7CisgICAgICAgIHJlc3VsdC5hZGQoZmV0Y2hE
YXRhVHlwZXNJbkxpc3RGcm9tRGlzayh0eXBlcykpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCiAgICAgdm9pZCBkZWxldGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IHR5cGVzLCBXYWxsVGltZSBtb2RpZmllZFNpbmNlVGltZSkKICAgICB7CiAgICAgICAgIGlmICh0
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW0pKQogICAgICAgICAgICAg
ZGVsZXRlRmlsZVN5c3RlbVN0b3JhZ2VEYXRhKG1vZGlmaWVkU2luY2VUaW1lKTsKKworICAgICAg
ICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpKQorICAg
ICAgICAgICAgZGVsZXRlTG9jYWxTdG9yYWdlRGF0YShtb2RpZmllZFNpbmNlVGltZSk7CisKKyAg
ICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2Up
ICYmIG1vZGlmaWVkU2luY2VUaW1lID09IC1XYWxsVGltZTo6aW5maW5pdHkoKSkKKyAgICAgICAg
ICAgIGRlbGV0ZVNlc3Npb25TdG9yYWdlRGF0YSgpOworICAgIH0KKworICAgIHZvaWQgbW92ZURh
dGEoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZVBhdGgpCisg
ICAgeworICAgICAgICBtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlciA9IG51bGxwdHI7CisgICAg
ICAgIGlmIChtX2xvY2FsU3RvcmFnZU1hbmFnZXIpCisgICAgICAgICAgICBtX2xvY2FsU3RvcmFn
ZU1hbmFnZXItPmNsb3NlKCk7CisKKyAgICAgICAgRmlsZVN5c3RlbTo6bW92ZUZpbGUobV9yb290
UGF0aCwgcGF0aCk7CisKKyAgICAgICAgaWYgKCFtX2xvY2FsU3RvcmFnZVBhdGguaXNFbXB0eSgp
ICYmICFsb2NhbFN0b3JhZ2VQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIFdlYkNvcmU6OlNR
TGl0ZUZpbGVTeXN0ZW06Om1vdmVEYXRhYmFzZUZpbGUobV9sb2NhbFN0b3JhZ2VQYXRoLCBsb2Nh
bFN0b3JhZ2VQYXRoKTsKICAgICB9CiAKIHByaXZhdGU6CisgICAgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9tTWVtb3J5KE9wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+IHR5cGVzKQorICAgIHsKKyAgICAgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4gcmVzdWx0OworICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpM
b2NhbFN0b3JhZ2UpKSB7CisgICAgICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VNYW5hZ2VyICYm
IG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+aGFzRGF0YUluTWVtb3J5KCkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFkZChXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3Rv
cmFnZSkpIHsKKyAgICAgICAgICAgIGlmIChtX3Nlc3Npb25TdG9yYWdlTWFuYWdlciAmJiBtX3Nl
c3Npb25TdG9yYWdlTWFuYWdlci0+aGFzRGF0YUluTWVtb3J5KCkpCisgICAgICAgICAgICAgICAg
cmVzdWx0LmFkZChXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9tRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiB0eXBlcykKKyAgICB7CisgICAgICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IHJlc3VsdDsKKyAgICAgICAgZm9yIChhdXRvJiBzdG9yYWdlVHlwZSA6IEZpbGVTeXN0ZW06Omxp
c3REaXJlY3RvcnkobV9yb290UGF0aCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHR5cGUgPSB0
b1dlYnNpdGVEYXRhVHlwZShzdG9yYWdlVHlwZSk7IHR5cGUgJiYgdHlwZXMuY29udGFpbnMoKnR5
cGUpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoKnR5cGUpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSAm
JiAhcmVzdWx0LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKSkgeworICAg
ICAgICAgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobV9sb2NhbFN0b3JhZ2VQYXRoKSkK
KyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdl
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgdm9p
ZCBkZWxldGVGaWxlU3lzdGVtU3RvcmFnZURhdGEoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZVRpbWUp
CiAgICAgewogICAgICAgICBtX2ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlciA9IG51bGxwdHI7CkBA
IC0xMDYsMTQgKzIzMCw0NCBAQCBwcml2YXRlOgogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVB
bGxGaWxlc01vZGlmaWVkU2luY2UoZmlsZVN5c3RlbVN0b3JhZ2VQYXRoLCBtb2RpZmllZFNpbmNl
VGltZSk7CiAgICAgfQogCisgICAgdm9pZCBkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKFdhbGxUaW1l
IHRpbWUpCisgICAgeworICAgICAgICBpZiAoYXV0byBtb2RpZmljYXRpb25UaW1lID0gRmlsZVN5
c3RlbTo6ZmlsZU1vZGlmaWNhdGlvblRpbWUobV9sb2NhbFN0b3JhZ2VQYXRoKTsgKm1vZGlmaWNh
dGlvblRpbWUgPj0gdGltZSkgeworICAgICAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdl
cikKKyAgICAgICAgICAgICAgICBtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmNsZWFyRGF0YU9uRGlz
aygpOworICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJh
c2VGaWxlKG1fbG9jYWxTdG9yYWdlUGF0aCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1f
bG9jYWxTdG9yYWdlTWFuYWdlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2xv
Y2FsU3RvcmFnZU1hbmFnZXItPmNsZWFyRGF0YUluTWVtb3J5KCk7CisgICAgICAgIGlmICghbV9s
b2NhbFN0b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgbV9sb2NhbFN0b3Jh
Z2VNYW5hZ2VyID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGRlbGV0ZVNlc3Npb25TdG9y
YWdlRGF0YSgpCisgICAgeworICAgICAgICBpZiAoIW1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5j
bGVhckRhdGEoKTsKKyAgICAgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlTWFuYWdlci0+aXNBY3Rp
dmUoKSkKKyAgICAgICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0cjsKKyAg
ICB9CisgICAgCiAgICAgU3RyaW5nIG1fcm9vdFBhdGg7CiAgICAgU3RyaW5nIG1faWRlbnRpZmll
cjsKICAgICBTdG9yYWdlQnVja2V0TW9kZSBtX21vZGUgeyBTdG9yYWdlQnVja2V0TW9kZTo6QmVz
dEVmZm9ydCB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI+
IG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxMb2NhbFN0
b3JhZ2VNYW5hZ2VyPiBtX2xvY2FsU3RvcmFnZU1hbmFnZXI7CisgICAgU3RyaW5nIG1fbG9jYWxT
dG9yYWdlUGF0aDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyPiBt
X3Nlc3Npb25TdG9yYWdlTWFuYWdlcjsKIH07CiAKLU9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpPcmln
aW5TdG9yYWdlTWFuYWdlcihTdHJpbmcmJiBwYXRoKQorT3JpZ2luU3RvcmFnZU1hbmFnZXI6Ok9y
aWdpblN0b3JhZ2VNYW5hZ2VyKFN0cmluZyYmIHBhdGgsIFN0cmluZyYmIGxvY2FsU3RvcmFnZVBh
dGgpCiAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKKyAgICAsIG1fbG9jYWxTdG9yYWdlUGF0
aChXVEZNb3ZlKGxvY2FsU3RvcmFnZVBhdGgpKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwogfQpAQCAtMTI5LDcgKzI4Myw3IEBAIHZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6
OmNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uCiBP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldCYgT3JpZ2luU3RvcmFnZU1hbmFnZXI6
OmRlZmF1bHRCdWNrZXQoKQogewogICAgIGlmICghbV9kZWZhdWx0QnVja2V0KQotICAgICAgICBt
X2RlZmF1bHRCdWNrZXQgPSBtYWtlVW5pcXVlPFN0b3JhZ2VCdWNrZXQ+KG1fcGF0aCwgImRlZmF1
bHQiX3MpOworICAgICAgICBtX2RlZmF1bHRCdWNrZXQgPSBtYWtlVW5pcXVlPFN0b3JhZ2VCdWNr
ZXQ+KG1fcGF0aCwgImRlZmF1bHQiX3MsIG1fbG9jYWxTdG9yYWdlUGF0aCk7CiAKICAgICByZXR1
cm4gKm1fZGVmYXVsdEJ1Y2tldDsKIH0KQEAgLTEzOSwxNSArMjkzLDM0IEBAIEZpbGVTeXN0ZW1T
dG9yYWdlTWFuYWdlciYgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmZpbGVTeXN0ZW1TdG9yYWdlTWFu
YWdlcihGaWxlU3lzCiAgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5maWxlU3lzdGVtU3RvcmFn
ZU1hbmFnZXIocmVnaXN0cnkpOwogfQogCitMb2NhbFN0b3JhZ2VNYW5hZ2VyJiBPcmlnaW5TdG9y
YWdlTWFuYWdlcjo6bG9jYWxTdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdp
c3RyeSkKK3sKKyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmxvY2FsU3RvcmFnZU1hbmFnZXIo
cmVnaXN0cnkpOworfQorCitMb2NhbFN0b3JhZ2VNYW5hZ2VyKiBPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkKK3sKKyAgICByZXR1cm4gZGVmYXVsdEJ1
Y2tldCgpLmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcigpOworfQorCitTZXNzaW9uU3RvcmFn
ZU1hbmFnZXImIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpzZXNzaW9uU3RvcmFnZU1hbmFnZXIoU3Rv
cmFnZUFyZWFSZWdpc3RyeSYgcmVnaXN0cnkpCit7CisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQo
KS5zZXNzaW9uU3RvcmFnZU1hbmFnZXIocmVnaXN0cnkpOworfQorCitTZXNzaW9uU3RvcmFnZU1h
bmFnZXIqIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdl
cigpCit7CisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5leGlzdGluZ1Nlc3Npb25TdG9yYWdl
TWFuYWdlcigpOworfQorCiBib29sIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSgpCiB7
CiAgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5pc0FjdGl2ZSgpOwogfQogCi12b2lkIE9yaWdp
blN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5
cGVzLCBXYWxsVGltZSBtb2RpZmllZFNpbmNlKQorYm9vbCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6
aXNFbXB0eSgpCiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgZGVmYXVs
dEJ1Y2tldCgpLmRlbGV0ZURhdGEodHlwZXMsIG1vZGlmaWVkU2luY2UpOworICAgIHJldHVybiBk
ZWZhdWx0QnVja2V0KCkuaXNFbXB0eSgpOwogfQogCiB2b2lkIE9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpzZXRQZXJzaXN0ZWQoYm9vbCB2YWx1ZSkKQEAgLTE1OCw1ICszMzEsMjYgQEAgdm9pZCBPcmln
aW5TdG9yYWdlTWFuYWdlcjo6c2V0UGVyc2lzdGVkKGJvb2wgdmFsdWUpCiAgICAgZGVmYXVsdEJ1
Y2tldCgpLnNldE1vZGUodmFsdWUgPyBTdG9yYWdlQnVja2V0TW9kZTo6UGVyc2lzdGVudCA6IFN0
b3JhZ2VCdWNrZXRNb2RlOjpCZXN0RWZmb3J0KTsKIH0KIAorT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YVR5cGVzSW5MaXN0KE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgcmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5mZXRjaERhdGFUeXBlc0luTGlzdCh0
eXBlcyk7Cit9CisKK3ZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZURhdGEoT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBkZWZhdWx0QnVja2V0KCkuZGVs
ZXRlRGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZSk7Cit9CisKK3ZvaWQgT3JpZ2luU3RvcmFnZU1h
bmFnZXI6Om1vdmVEYXRhKGNvbnN0IFN0cmluZyYgbmV3UGF0aCwgY29uc3QgU3RyaW5nJiBsb2Nh
bFN0b3JhZ2VQYXRoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
ZGVmYXVsdEJ1Y2tldCgpLm1vdmVEYXRhKG5ld1BhdGgsIGxvY2FsU3RvcmFnZVBhdGgpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuaAppbmRleCA3YWRm
YTViMDNiNmJhNmUzZjg2OTgwYjEyZDJmOGE0NGQ5ZTRlNjRiLi41ZTc2Njk5ODZlNDY2ODVmMzg5
YjdhNTI3MWU2NmQwZTYzYzJkMTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuaApAQCAtMzYsMjAg
KzM2LDMwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBGaWxlU3lzdGVtU3RvcmFnZUhh
bmRsZVJlZ2lzdHJ5OwogY2xhc3MgRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOworY2xhc3MgTG9j
YWxTdG9yYWdlTWFuYWdlcjsKK2NsYXNzIFNlc3Npb25TdG9yYWdlTWFuYWdlcjsKK2NsYXNzIFN0
b3JhZ2VBcmVhUmVnaXN0cnk7CiBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhVHlwZSA6IHVpbnQzMl90
OwogCiBjbGFzcyBPcmlnaW5TdG9yYWdlTWFuYWdlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgT3JpZ2luU3RvcmFnZU1hbmFnZXIoU3RyaW5n
JiYgcGF0aCk7CisgICAgT3JpZ2luU3RvcmFnZU1hbmFnZXIoU3RyaW5nJiYgcGF0aCwgU3RyaW5n
JiYgbG9jYWxTdG9yYWdlUGF0aCk7CiAgICAgfk9yaWdpblN0b3JhZ2VNYW5hZ2VyKCk7CiAKICAg
ICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7CiAgICAg
Ym9vbCBwZXJzaXN0ZWQoKSBjb25zdCB7IHJldHVybiBtX3BlcnNpc3RlZDsgfQogICAgIHZvaWQg
c2V0UGVyc2lzdGVkKGJvb2wgdmFsdWUpOwogICAgIEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlciYg
ZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyKEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkm
KTsKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2VyJiBsb2NhbFN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VB
cmVhUmVnaXN0cnkmKTsKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ0xvY2FsU3Rv
cmFnZU1hbmFnZXIoKTsKKyAgICBTZXNzaW9uU3RvcmFnZU1hbmFnZXImIHNlc3Npb25TdG9yYWdl
TWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5Jik7CisgICAgU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
KiBleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigpOwogICAgIGJvb2wgaXNBY3RpdmUoKTsK
KyAgICBib29sIGlzRW1wdHkoKTsKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBmZXRj
aERhdGFUeXBlc0luTGlzdChPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPik7CiAgICAgdm9pZCBk
ZWxldGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSk7CisgICAgdm9p
ZCBtb3ZlRGF0YShjb25zdCBTdHJpbmcmIG5ld1BhdGgsIGNvbnN0IFN0cmluZyYgbG9jYWxTdG9y
YWdlUGF0aCk7CiAKIHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBTdG9yYWdlQnVja2V0TW9kZSA6
IGJvb2w7CkBAIC02Miw2ICs3Miw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN0
b3JhZ2VCdWNrZXQ+IG1fZGVmYXVsdEJ1Y2tldDsKICAgICBTdHJpbmcgbV9wYXRoOwogICAgIGJv
b2wgbV9wZXJzaXN0ZWQgeyBmYWxzZSB9OworICAgIFN0cmluZyBtX2xvY2FsU3RvcmFnZVBhdGg7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFiYmY2NjM2MjJjMmY3ZGQ2NDI5NGU4M2Q3ZTYyNGZiY2RlY2QyMzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFn
ZUFyZWEuY3BwCkBAIC0wLDAgKzEsMzk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU1FMaXRlU3RvcmFnZUFyZWEuaCIKKworI2luY2x1ZGUgPFdl
YkNvcmUvU1FMaXRlRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVt
ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2FjdGlvbi5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvU3RvcmFnZU1hcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY29uc3RleHBy
IFNlY29uZHMgdHJhbnNhY3Rpb25EdXJhdGlvbiB7IDUwMF9tcyB9OworY29uc3RleHByIHVuc2ln
bmVkIG1heGltdW1TaXplRm9yVmFsdWVzS2VwdEluTWVtb3J5IHsgMSAqIEtCIH07Citjb25zdGV4
cHIgYXV0byBjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnRBbHRlcm5hdGl2ZSA9ICJDUkVBVEUgVEFC
TEUgSUYgTk9UIEVYSVNUUyBJdGVtVGFibGUgKGtleSBURVhUIFVOSVFVRSBPTiBDT05GTElDVCBS
RVBMQUNFLCB2YWx1ZSBCTE9CIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIl9zOworY29uc3Rl
eHByIGF1dG8gY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50ID0gIkNSRUFURSBUQUJMRSBJdGVtVGFi
bGUgKGtleSBURVhUIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLCB2YWx1ZSBCTE9CIE5PVCBO
VUxMIE9OIENPTkZMSUNUIEZBSUwpIl9zOworCitBU0NJSUxpdGVyYWwgU1FMaXRlU3RvcmFnZUFy
ZWE6OnN0YXRlbWVudFN0cmluZyhTdGF0ZW1lbnRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpDb3VudEl0ZW1zOgorICAgICAg
ICByZXR1cm4gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIEl0ZW1UYWJsZSJfczsKKyAgICBjYXNlIFN0
YXRlbWVudFR5cGU6OkRlbGV0ZUl0ZW06CisgICAgICAgIHJldHVybiAiREVMRVRFIEZST00gSXRl
bVRhYmxlIFdIRVJFIGtleT0/Il9zOworICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6RGVsZXRlQWxs
SXRlbXM6CisgICAgICAgIHJldHVybiAiREVMRVRFIEZST00gSXRlbVRhYmxlIl9zOworICAgIGNh
c2UgU3RhdGVtZW50VHlwZTo6R2V0SXRlbToKKyAgICAgICAgcmV0dXJuICJTRUxFQ1QgdmFsdWUg
RlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iX3M7CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpH
ZXRBbGxJdGVtczoKKyAgICAgICAgcmV0dXJuICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1U
YWJsZSJfczsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OlNldEl0ZW06CisgICAgICAgIHJldHVy
biAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPykiX3M7CisgICAgY2FzZSBTdGF0
ZW1lbnRUeXBlOjpJbnZhbGlkOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIiJfczsKK30KKworU1FMaXRlU3RvcmFnZUFyZWE6
OlNRTGl0ZVN0b3JhZ2VBcmVhKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGllbnRP
cmlnaW4mIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoLCBSZWY8V29ya1F1ZXVlPiYmIHdvcmtR
dWV1ZSkKKyAgICA6IFN0b3JhZ2VBcmVhQmFzZShxdW90YSwgb3JpZ2luKQorICAgICwgbV9wYXRo
KHBhdGgpCisgICAgLCBtX3F1ZXVlKFdURk1vdmUod29ya1F1ZXVlKSkKK3sKKyAgICBBU1NFUlQo
IWlzTWFpblJ1bkxvb3AoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRpY19j
YXN0PHNpemVfdD4oU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7ICsraSkKKyAgICAgICAgbV9jYWNo
ZWRTdGF0ZW1lbnRzLmFwcGVuZChudWxscHRyKTsKK30KKwordm9pZCBTUUxpdGVTdG9yYWdlQXJl
YTo6Y2xvc2UoKQoreworICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKKworICAgIG1fY2Fj
aGUgPSBzdGQ6Om51bGxvcHQ7CisgICAgY29tbWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZW1lbnRU
eXBlOjpJbnZhbGlkKTsgKytpKQorICAgICAgICBtX2NhY2hlZFN0YXRlbWVudHNbaV0gPSBudWxs
cHRyOworICAgIG1fZGF0YWJhc2UgPSBudWxscHRyOworfQorCitTUUxpdGVTdG9yYWdlQXJlYTo6
flNRTGl0ZVN0b3JhZ2VBcmVhKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CisK
KyAgICBib29sIGRhdGFiYXNlSXNFbXB0eSA9IGlzRW1wdHkoKTsKKyAgICBjbG9zZSgpOworICAg
IGlmIChkYXRhYmFzZUlzRW1wdHkpCisgICAgICAgIFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06
OmRlbGV0ZURhdGFiYXNlRmlsZShtX3BhdGgpOworfQorCitib29sIFNRTGl0ZVN0b3JhZ2VBcmVh
Ojppc0VtcHR5KCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CisKKyAgICBpZiAo
bV9jYWNoZSkKKyAgICAgICAgcmV0dXJuIG1fY2FjaGUtPmlzRW1wdHkoKTsKKworICAgIGlmICgh
cHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byBzdGF0
ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZTo6Q291bnRJdGVtcyk7CisgICAg
aWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmlzRW1w
dHkgZmFpbGVkIG9uIGV4ZWN1dGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+
bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuICFzdGF0ZW1lbnQtPmNvbHVtbkludCgwKTsKK30K
Kwordm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y2xlYXIoKQoreworICAgIEFTU0VSVCghaXNNYWlu
UnVuTG9vcCgpKTsKKworICAgIGNsb3NlKCk7CisgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3Rl
bTo6ZGVsZXRlRGF0YWJhc2VGaWxlKG1fcGF0aCk7CisgICAgbm90aWZ5TGlzdGVuZXJzQWJvdXRD
bGVhcigpOworfQorCitib29sIFNRTGl0ZVN0b3JhZ2VBcmVhOjpjcmVhdGVUYWJsZUlmTmVjZXNz
YXJ5KCkKK3sKKyAgICBpZiAoIW1fZGF0YWJhc2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFN0cmluZyBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT50YWJsZVNRTCgiSXRlbVRhYmxlIl9z
KTsKKyAgICBpZiAoc3RhdGVtZW50ID09IGNyZWF0ZUl0ZW1UYWJsZVN0YXRlbWVudCB8fCBzdGF0
ZW1lbnQgPT0gY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50QWx0ZXJuYXRpdmUpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgLy8gVGFibGUgZXhpc3RzIGJ1dCBzdGF0ZW1lbnQgaXMgd3Jvbmc7
IGRyb3AgaXQuCisgICAgaWYgKCFzdGF0ZW1lbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICgh
bV9kYXRhYmFzZS0+ZXhlY3V0ZUNvbW1hbmQoIkRST1AgVEFCTEUgSXRlbVRhYmxlIl9zKSkgewor
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVh
OjpjcmVhdGVUYWJsZUlmTmVjZXNzYXJ5IGZhaWxlZCB0byBkcm9wIGV4aXN0aW5nIGl0ZW0gdGFi
bGUgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFRhYmxlIGRvZXMgbm90IGV4aXN0LgorICAgIGlmICghbV9kYXRhYmFzZS0+ZXhl
Y3V0ZUNvbW1hbmQoY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50KSkgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmNyZWF0ZVRhYmxlSWZOZWNl
c3NhcnkgZmFpbGVkIHRvIGNyZWF0ZSBpdGVtIHRhYmxlICglZCkgLSAlcyIsIG1fZGF0YWJhc2Ut
Pmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTUUxpdGVTdG9y
YWdlQXJlYTo6cHJlcGFyZURhdGFiYXNlKCkKK3sKKyAgICBpZiAobV9kYXRhYmFzZSAmJiBtX2Rh
dGFiYXNlLT5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX2RhdGFiYXNl
ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZT4oKTsKKyAgICBpZiAoIW1fZGF0
YWJhc2UtPm9wZW4obV9wYXRoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdl
LCAiU1FMaXRlU3RvcmFnZUFyZWE6OnByZXBhcmVEYXRhYmFzZSBmYWlsZWQgdG8gb3BlbiBkYXRh
YmFzZSBhdCAnJXMnIiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtX2RhdGFiYXNl
ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisgICAg
Ly8gU2luY2UgYSBXb3JrUXVldWUgaXNuJ3QgYm91bmQgdG8gYSBzcGVjaWZpYyB0aHJlYWQsIHdl
IG5lZWQgdG8gZGlzYWJsZSB0aHJlYWRpbmcgY2hlY2suCisgICAgLy8gV2Ugd2lsbCBuZXZlciBh
Y2Nlc3MgdGhlIGRhdGFiYXNlIGZyb20gZGlmZmVyZW50IHRocmVhZHMgc2ltdWx0YW5lb3VzbHku
CisgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZVRocmVhZGluZ0NoZWNrcygpOworCisgICAgaWYgKCFj
cmVhdGVUYWJsZUlmTmVjZXNzYXJ5KCkpIHsKKyAgICAgICAgbV9kYXRhYmFzZSA9IG51bGxwdHI7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocXVvdGEoKSAhPSBXZWJD
b3JlOjpTdG9yYWdlTWFwOjpub1F1b3RhKQorICAgICAgICBtX2RhdGFiYXNlLT5zZXRNYXhpbXVt
U2l6ZShxdW90YSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNRTGl0ZVN0b3Jh
Z2VBcmVhOjpzdGFydFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKQoreworICAgIGlmICghbV90cmFu
c2FjdGlvbikKKyAgICAgICAgbV90cmFuc2FjdGlvbiA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6U1FM
aXRlVHJhbnNhY3Rpb24+KCptX2RhdGFiYXNlKTsKKworICAgIGlmIChtX3RyYW5zYWN0aW9uLT5p
blByb2dyZXNzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdHJhbnNhY3Rpb24tPmJlZ2lu
KCk7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2hBZnRlcih0cmFuc2FjdGlvbkR1cmF0aW9uLCBbd2Vh
a1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfV0geworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3
ZWFrVGhpcy0+bV90cmFuc2FjdGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAg
ICAgYXV0byB0cmFuc2FjdGlvbiA9IHN0ZDo6ZXhjaGFuZ2Uod2Vha1RoaXMtPm1fdHJhbnNhY3Rp
b24sIG51bGxwdHIpOworICAgICAgICB0cmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgfSk7Cit9
CisKK1dlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIFNRTGl0ZVN0b3JhZ2VB
cmVhOjpjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZSB0eXBlKQoreworICAgIEFTU0VSVCht
X2RhdGFiYXNlKTsKKyAgICBBU1NFUlQodHlwZSA8IFN0YXRlbWVudFR5cGU6OkludmFsaWQpOwor
CisgICAgYXV0byBpbmRleCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHR5cGUpOworICAgIGlmICgh
bV9jYWNoZWRTdGF0ZW1lbnRzW2luZGV4XSkgeworICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBt
X2RhdGFiYXNlLT5wcmVwYXJlSGVhcFN0YXRlbWVudChzdGF0ZW1lbnRTdHJpbmcodHlwZSkpKQor
ICAgICAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzW2luZGV4XSA9IHJlc3VsdC52YWx1ZSgpLm1v
dmVUb1VuaXF1ZVB0cigpOworICAgIH0KKworICAgIHJldHVybiBXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnRBdXRvUmVzZXRTY29wZSB7IG1fY2FjaGVkU3RhdGVtZW50c1tpbmRleF0uZ2V0KCkgfTsK
K30KKworRXhwZWN0ZWQ8U3RyaW5nLCBTdG9yYWdlRXJyb3I+IFNRTGl0ZVN0b3JhZ2VBcmVhOjpn
ZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGlmIChtX2NhY2hlKSB7CisgICAgICAg
IGF1dG8gaXRlcmF0b3IgPSBtX2NhY2hlLT5maW5kKGtleSk7CisgICAgICAgIGlmIChpdGVyYXRv
ciA9PSBtX2NhY2hlLT5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAg
ICAgICBpZiAoIWl0ZXJhdG9yLT52YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBp
dGVyYXRvci0+dmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIGdldEl0ZW1Gcm9tRGF0YWJhc2Uo
a2V5KTsKK30KKworRXhwZWN0ZWQ8U3RyaW5nLCBTdG9yYWdlRXJyb3I+IFNRTGl0ZVN0b3JhZ2VB
cmVhOjpnZXRJdGVtRnJvbURhdGFiYXNlKGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGlmICgh
cHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdl
RXJyb3I6OkRhdGFiYXNlKTsKKworICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50
KFN0YXRlbWVudFR5cGU6OkdldEl0ZW0pOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVu
dC0+YmluZFRleHQoMSwga2V5KSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdl
LCAiU1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2UgZmFpbGVkIG9uIGNyZWF0
aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRh
YmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3Rv
cmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVu
dC0+c3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJu
IHN0YXRlbWVudC0+Y29sdW1uQmxvYkFzU3RyaW5nKDApOworICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0
b3JhZ2VBcmVhOjpnZXRJdGVtRnJvbURhdGFiYXNlIGZhaWxlZCBvbiBzdGVwcGluZyBzdGF0ZW1l
bnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6
RGF0YWJhc2UpOworICAgIH0KKworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJy
b3I6Okl0ZW1Ob3RGb3VuZCk7Cit9CisKK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFNRTGl0ZVN0
b3JhZ2VBcmVhOjphbGxJdGVtcygpCit7CisgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOwor
CisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IHsgfTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGl0ZW1zOwor
ICAgIGlmIChtX2NhY2hlKSB7CisgICAgICAgIGl0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV9jYWNoZS0+c2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBba2V5LCB2YWx1ZV0gOiAqbV9j
YWNoZSkgeworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkgeworICAgICAgICAgICAg
ICAgIGl0ZW1zLmFkZChrZXksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gZ2V0SXRlbUZyb21E
YXRhYmFzZShrZXkpKQorICAgICAgICAgICAgICAgIGl0ZW1zLmFkZChrZXksIHJlc3VsdC52YWx1
ZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaXRlbXM7CisgICAgfQorCisgICAgLy8g
SW1wb3J0IGZyb20gZGF0YWJhc2UuCisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1l
bnQoU3RhdGVtZW50VHlwZTo6R2V0QWxsSXRlbXMpOworICAgIGlmICghc3RhdGVtZW50KSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0
QWxsSXRlbXMgZmFpbGVkIG9uIGNyZWF0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFi
YXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKworICAgIG1fY2FjaGUgPSBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiB7IH07CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgIHdoaWxlIChy
ZXN1bHQgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBTdHJpbmcga2V5ID0gc3RhdGVtZW50LT5j
b2x1bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgdmFsdWUgPSBzdGF0ZW1lbnQtPmNvbHVtbkJs
b2JBc1N0cmluZygxKTsKKyAgICAgICAgaWYgKCFrZXkuaXNOdWxsKCkgJiYgIXZhbHVlLmlzTnVs
bCgpKSB7CisgICAgICAgICAgICBtX2NhY2hlLT5hZGQoa2V5LCB2YWx1ZS5zaXplSW5CeXRlcygp
ID4gbWF4aW11bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1vcnkgPyBTdHJpbmcoKSA6IHZhbHVlKTsK
KyAgICAgICAgICAgIGl0ZW1zLmFkZChXVEZNb3ZlKGtleSksIFdURk1vdmUodmFsdWUpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC0+c3RlcCgpOworICAgIH0KKwor
ICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0QWxsSXRlbXMgZmFpbGVkIG9uIGV4ZWN1
dGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0
YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKworICAgIHJldHVybiBpdGVtczsKK30KKworRXhwZWN0
ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBTUUxpdGVTdG9yYWdlQXJlYTo6c2V0SXRlbShJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIg
c3RvcmFnZUFyZWFJbXBsSUQsIFN0cmluZyYmIGtleSwgU3RyaW5nJiYgdmFsdWUsIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKQoreworICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKKworICAg
IGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChT
dG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKworICAgIHN0YXJ0VHJhbnNhY3Rpb25JZk5lY2Vzc2Fy
eSgpOworCisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIGlmIChhdXRvIHZhbHVlT3JFcnJvciA9
IGdldEl0ZW0oa2V5KSkKKyAgICAgICAgb2xkVmFsdWUgPSB2YWx1ZU9yRXJyb3IudmFsdWUoKTsK
KworICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFN0YXRlbWVudFR5cGU6OlNl
dEl0ZW0pOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+YmluZFRleHQoMSwga2V5
KSB8fCBzdGF0ZW1lbnQtPmJpbmRCbG9iKDIsIHZhbHVlKSkgeworICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OnNldEl0ZW0gZmFpbGVkIG9uIGNy
ZWF0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9k
YXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
U3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgaW50IHJlc3VsdCA9IHN0YXRl
bWVudC0+c3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX0ZVTEwpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OlF1b3RhRXhjZWVkZWQpOworICAgIGlm
IChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3Rv
cmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtIGZhaWxlZCBvbiBzdGVwcGluZyBzdGF0
ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxh
c3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJv
cjo6RGF0YWJhc2UpOworICAgIH0KKworICAgIGRpc3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24sIHN0
b3JhZ2VBcmVhSW1wbElELCBrZXksIG9sZFZhbHVlLCB2YWx1ZSwgdXJsU3RyaW5nKTsKKworICAg
IGlmIChtX2NhY2hlKQorICAgICAgICBtX2NhY2hlLT5zZXQoV1RGTW92ZShrZXkpLCB2YWx1ZS5z
aXplSW5CeXRlcygpID4gbWF4aW11bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1vcnkgPyBTdHJpbmco
KSA6IFdURk1vdmUodmFsdWUpKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK0V4cGVjdGVkPHZv
aWQsIFN0b3JhZ2VFcnJvcj4gU1FMaXRlU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0oSVBDOjpDb25u
ZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyIHN0
b3JhZ2VBcmVhSW1wbElELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcpCit7CisgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOworCisgICAgaWYgKCFwcmVwYXJl
RGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6
RGF0YWJhc2UpOworCisgICAgc3RhcnRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisgICAgU3Ry
aW5nIG9sZFZhbHVlOworICAgIGlmIChhdXRvIHZhbHVlT3JFcnJvciA9IGdldEl0ZW0oa2V5KSkK
KyAgICAgICAgb2xkVmFsdWUgPSB2YWx1ZU9yRXJyb3IudmFsdWUoKTsKKyAgICBlbHNlCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6Okl0ZW1Ob3RGb3VuZCk7CisK
KyAgICBhdXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlOjpEZWxl
dGVJdGVtKTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGtl
eSkgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtIGZhaWxl
ZCBvbiBleGVjdXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJv
cigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9CisKKyAgICBkaXNwYXRjaEV2
ZW50cyhjb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJRCwga2V5LCBvbGRWYWx1ZSwgU3RyaW5n
KCksIHVybFN0cmluZyk7CisKKyAgICBpZiAobV9jYWNoZSkKKyAgICAgICAgbV9jYWNoZS0+cmVt
b3ZlKGtleSk7CisKKyAgICByZXR1cm4geyB9OworfQorCitFeHBlY3RlZDx2b2lkLCBTdG9yYWdl
RXJyb3I+IFNRTGl0ZVN0b3JhZ2VBcmVhOjpjbGVhcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlE
IGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQs
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgp
KTsKKworICAgIGlmICghcHJlcGFyZURhdGFiYXNlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKworICAgIGlmIChtX2NhY2hlICYmIG1f
Y2FjaGUtPmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VF
cnJvcjo6SXRlbU5vdEZvdW5kKTsKKworICAgIGlmIChtX2NhY2hlKQorICAgICAgICBtX2NhY2hl
LT5jbGVhcigpOworCisgICAgc3RhcnRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisgICAgYXV0
byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZTo6RGVsZXRlQWxsSXRl
bXMpOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdl
QXJlYTo6Y2xlYXIgZmFpbGVkIG9uIGV4ZWN1dGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9k
YXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworICAgIH0K
KworICAgIGlmIChtX2RhdGFiYXNlLT5sYXN0Q2hhbmdlcygpIDw9IDApCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6Okl0ZW1Ob3RGb3VuZCk7CisKKyAgICBkaXNw
YXRjaEV2ZW50cyhjb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJRCwgU3RyaW5nKCksIFN0cmlu
ZygpLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQg
U1FMaXRlU3RvcmFnZUFyZWE6OmNvbW1pdFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKQoreworICAg
IGlmIChhdXRvIHRyYW5zYWN0aW9uID0gc3RkOjpleGNoYW5nZShtX3RyYW5zYWN0aW9uLCBudWxs
cHRyKSkKKyAgICAgICAgdHJhbnNhY3Rpb24tPmNvbW1pdCgpOworfQorCit2b2lkIFNRTGl0ZVN0
b3JhZ2VBcmVhOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFp
blJ1bkxvb3AoKSk7CisKKyAgICBpZiAobV9kYXRhYmFzZSAmJiBtX2RhdGFiYXNlLT5pc09wZW4o
KSkKKyAgICAgICAgbV9kYXRhYmFzZS0+cmVsZWFzZU1lbW9yeSgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTA1NmExMzVhYmMwMzMx
YjAzZDQ4OTlkYTc3MjFjZTZmYjYzNDk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmgKQEAgLTAsMCArMSw4
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdG9yYWdl
QXJlYUJhc2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZS5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgU1FMaXRlU3RvcmFnZUFyZWEgZmluYWwgOiBwdWJsaWMgU3RvcmFn
ZUFyZWFCYXNlIHsKK3B1YmxpYzoKKyAgICBTUUxpdGVTdG9yYWdlQXJlYSh1bnNpZ25lZCBxdW90
YSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgY29uc3QgU3RyaW5nJiBwYXRoLCBSZWY8
V29ya1F1ZXVlPiYmKTsKKyAgICB+U1FMaXRlU3RvcmFnZUFyZWEoKTsKKworICAgIHZvaWQgY2xv
c2UoKTsKKyAgICB2b2lkIGhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKKyAgICB2b2lkIGNvbW1p
dFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworcHJpdmF0ZToKKyAgICAvLyBTdG9yYWdlQXJl
YUJhc2UKKyAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBTdG9yYWdlQXJlYUJh
c2U6OlR5cGU6OlNRTGl0ZTsgfTsKKyAgICBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIFN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZVR5cGU6OkxvY2FsOyB9Owor
ICAgIGJvb2wgaXNFbXB0eSgpIGZpbmFsOworICAgIHZvaWQgY2xlYXIoKSBmaW5hbDsKKyAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBhbGxJdGVtcygpIGZpbmFsOworICAgIEV4cGVjdGVkPHZv
aWQsIFN0b3JhZ2VFcnJvcj4gc2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9y
YWdlQXJlYUltcGxJZGVudGlmaWVyLCBTdHJpbmcmJiBrZXksIFN0cmluZyYmIHZhbHVlLCBjb25z
dCBTdHJpbmcmIHVybFN0cmluZykgZmluYWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVy
cm9yPiByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1w
bElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykg
ZmluYWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBjbGVhcihJUEM6OkNvbm5l
Y3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZykgZmluYWw7CisKKyAgICBib29sIGNyZWF0ZVRhYmxlSWZOZWNlc3NhcnkoKTsK
KyAgICBib29sIHByZXBhcmVEYXRhYmFzZSgpOworICAgIHZvaWQgc3RhcnRUcmFuc2FjdGlvbklm
TmVjZXNzYXJ5KCk7CisKKyAgICBlbnVtIGNsYXNzIFN0YXRlbWVudFR5cGUgOiB1aW50OF90IHsK
KyAgICAgICAgQ291bnRJdGVtcywKKyAgICAgICAgRGVsZXRlSXRlbSwKKyAgICAgICAgRGVsZXRl
QWxsSXRlbXMsCisgICAgICAgIEdldEl0ZW0sCisgICAgICAgIEdldEFsbEl0ZW1zLAorICAgICAg
ICBTZXRJdGVtLAorICAgICAgICBJbnZhbGlkCisgICAgfTsKKyAgICBBU0NJSUxpdGVyYWwgc3Rh
dGVtZW50U3RyaW5nKFN0YXRlbWVudFR5cGUpIGNvbnN0OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudEF1dG9SZXNldFNjb3BlIGNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlKTsKKyAg
ICBFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJvcj4gZ2V0SXRlbShjb25zdCBTdHJpbmcmIGtl
eSk7CisgICAgRXhwZWN0ZWQ8U3RyaW5nLCBTdG9yYWdlRXJyb3I+IGdldEl0ZW1Gcm9tRGF0YWJh
c2UoY29uc3QgU3RyaW5nJiBrZXkpOworCisgICAgU3RyaW5nIG1fcGF0aDsKKyAgICBSZWY8V29y
a1F1ZXVlPiBtX3F1ZXVlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVEYXRh
YmFzZT4gbV9kYXRhYmFzZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlVHJh
bnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+PiBtX2NhY2hlZFN0YXRlbWVudHM7CisgICAgc3RkOjpvcHRp
b25hbDxIYXNoTWFwPFN0cmluZywgU3RyaW5nPj4gbV9jYWNoZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYktpdDo6U1FMaXRl
U3RvcmFnZUFyZWEpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYktpdDo6U3RvcmFn
ZUFyZWFCYXNlJiBhcmVhKSB7IHJldHVybiBhcmVhLnR5cGUoKSA9PSBXZWJLaXQ6OlN0b3JhZ2VB
cmVhQmFzZTo6VHlwZTo6U1FMaXRlOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9T
ZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwZmQ3OTYwYWM1ZGI2NzY1OWUy
ZDczOTE3ZGYyNmI0YzA3M2ZkMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMCwwICsx
LDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZXNz
aW9uU3RvcmFnZU1hbmFnZXIuaCIKKworI2luY2x1ZGUgIk1lbW9yeVN0b3JhZ2VBcmVhLmgiCisj
aW5jbHVkZSAiU3RvcmFnZUFyZWFSZWdpc3RyeS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpTZXNzaW9uU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFyZWFS
ZWdpc3RyeSYgcmVnaXN0cnkpCisgICAgOiBtX3JlZ2lzdHJ5KHJlZ2lzdHJ5KQoreworfQorCiti
b29sIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVy
biBXVEY6OmFueU9mKG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpLCBbJl0gKGF1dG8mIHN0b3JhZ2VB
cmVhKSB7CisgICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS0+aGFzTGlzdGVuZXJzKCk7CisgICAg
fSk7Cit9CisKK2Jvb2wgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpoYXNEYXRhSW5NZW1vcnkoKSBj
b25zdAoreworICAgIHJldHVybiBXVEY6OmFueU9mKG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpLCBb
Jl0gKGF1dG8mIHN0b3JhZ2VBcmVhKSB7CisgICAgICAgIHJldHVybiAhc3RvcmFnZUFyZWEtPmlz
RW1wdHkoKTsKKyAgICB9KTsKK30KKwordm9pZCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNsZWFy
RGF0YSgpCit7CisgICAgZm9yIChhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFzLnZh
bHVlcygpKQorICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoKTsKK30KKwordm9pZCBTZXNzaW9u
U3RvcmFnZU1hbmFnZXI6OmNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJ
RCBjb25uZWN0aW9uKQoreworICAgIGZvciAoYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VB
cmVhcy52YWx1ZXMoKSkKKyAgICAgICAgc3RvcmFnZUFyZWEtPnJlbW92ZUxpc3RlbmVyKGNvbm5l
Y3Rpb24pOworfQorCitTdG9yYWdlQXJlYUlkZW50aWZpZXIgU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
OjphZGRTdG9yYWdlQXJlYShzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+IHN0b3Jh
Z2VBcmVhLCBJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VOYW1l
c3BhY2VJZGVudGlmaWVyIG5hbWVzcGFjZUlkZW50aWZpZXIpCit7CisgICAgYXV0byBpZGVudGlm
aWVyID0gc3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKTsKKyAgICBtX3JlZ2lzdHJ5LnJlZ2lzdGVy
U3RvcmFnZUFyZWEoaWRlbnRpZmllciwgKnN0b3JhZ2VBcmVhKTsKKyAgICBzdG9yYWdlQXJlYS0+
YWRkTGlzdGVuZXIoY29ubmVjdGlvbik7CisgICAgbV9zdG9yYWdlQXJlYXNCeU5hbWVzcGFjZS5h
ZGQobmFtZXNwYWNlSWRlbnRpZmllciwgaWRlbnRpZmllcik7CisgICAgbV9zdG9yYWdlQXJlYXMu
YWRkKGlkZW50aWZpZXIsIFdURk1vdmUoc3RvcmFnZUFyZWEpKTsKKworICAgIHJldHVybiBpZGVu
dGlmaWVyOworfQorCitTdG9yYWdlQXJlYUlkZW50aWZpZXIgU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
Ojpjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBj
b25uZWN0aW9uLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgU3RvcmFnZU5h
bWVzcGFjZUlkZW50aWZpZXIgbmFtZXNwYWNlSWRlbnRpZmllcikKK3sKKyAgICBhdXRvIGlkZW50
aWZpZXIgPSBtX3N0b3JhZ2VBcmVhc0J5TmFtZXNwYWNlLmdldChuYW1lc3BhY2VJZGVudGlmaWVy
KTsKKyAgICBpZiAoaWRlbnRpZmllci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fc3Rv
cmFnZUFyZWFzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKKyAgICAgICAgcmV0dXJuIGlkZW50aWZp
ZXI7CisgICAgfQorCisgICAgYXV0byBuZXdTdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8TWVtb3J5
U3RvcmFnZUFyZWE+KG9yaWdpbik7CisgICAgcmV0dXJuIGFkZFN0b3JhZ2VBcmVhKFdURk1vdmUo
bmV3U3RvcmFnZUFyZWEpLCBjb25uZWN0aW9uLCBuYW1lc3BhY2VJZGVudGlmaWVyKTsKK30KKwor
dm9pZCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIg
aWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVh
cy5nZXQoaWRlbnRpZmllcikpCisgICAgICAgIHN0b3JhZ2VBcmVhLT5yZW1vdmVMaXN0ZW5lcihj
b25uZWN0aW9uKTsKK30KKwordm9pZCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNsb25lU3RvcmFn
ZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlTmFtZXNw
YWNlSWRlbnRpZmllciBzb3VyY2VOYW1lc3BhY2VJZGVudGlmaWVyLCBTdG9yYWdlTmFtZXNwYWNl
SWRlbnRpZmllciB0YXJnZXROYW1lc3BhY2VJZGVudGlmaWVyKQoreworICAgIGF1dG8gaWRlbnRp
ZmllciA9IG1fc3RvcmFnZUFyZWFzQnlOYW1lc3BhY2UuZ2V0KHNvdXJjZU5hbWVzcGFjZUlkZW50
aWZpZXIpOworICAgIGlmICghaWRlbnRpZmllci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlQXJlYXMuZmluZChpZGVudGlmaWVy
KTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlQXJlYXMuZW5kKCkpIHsKKyAgICAgICAgYXV0byBuZXdT
dG9yYWdlQXJlYSA9IGl0ZXJhdG9yLT52YWx1ZS0+Y2xvbmUoKTsKKyAgICAgICAgYWRkU3RvcmFn
ZUFyZWEoV1RGTW92ZShuZXdTdG9yYWdlQXJlYSksIGNvbm5lY3Rpb24sIHRhcmdldE5hbWVzcGFj
ZUlkZW50aWZpZXIpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VN
YW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzM3Y2JkODk3YTE1MGVlZTIyZWI3MjgwZWU1MmQw
MjRkZGM1NTVmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50aWZpZXIu
aCIKKyNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllci5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgTWVtb3J5U3RvcmFnZUFyZWE7CitjbGFzcyBTdG9yYWdlQXJlYVJl
Z2lzdHJ5OworCitjbGFzcyBTZXNzaW9uU3RvcmFnZU1hbmFnZXIgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IFNlc3Npb25TdG9yYWdlTWFuYWdl
cihTdG9yYWdlQXJlYVJlZ2lzdHJ5Jik7CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworICAg
IGJvb2wgaGFzRGF0YUluTWVtb3J5KCkgY29uc3Q7CisgICAgdm9pZCBjbGVhckRhdGEoKTsKKyAg
ICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7CisKKyAg
ICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgY29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKElQQzo6
Q29ubmVjdGlvbjo6VW5pcXVlSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIFN0b3Jh
Z2VOYW1lc3BhY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFy
ZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJZGVudGlmaWVyKTsKKyAg
ICB2b2lkIGNsb25lU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFn
ZU5hbWVzcGFjZUlkZW50aWZpZXIsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyKTsKKworcHJp
dmF0ZToKKyAgICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgYWRkU3RvcmFnZUFyZWEoc3RkOjp1bmlx
dWVfcHRyPE1lbW9yeVN0b3JhZ2VBcmVhPiwgSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3Rv
cmFnZU5hbWVzcGFjZUlkZW50aWZpZXIpOworCisgICAgU3RvcmFnZUFyZWFSZWdpc3RyeSYgbV9y
ZWdpc3RyeTsKKyAgICBIYXNoTWFwPFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgc3RkOjp1bmlxdWVf
cHRyPE1lbW9yeVN0b3JhZ2VBcmVhPj4gbV9zdG9yYWdlQXJlYXM7CisgICAgSGFzaE1hcDxTdG9y
YWdlTmFtZXNwYWNlSWRlbnRpZmllciwgU3RvcmFnZUFyZWFJZGVudGlmaWVyPiBtX3N0b3JhZ2VB
cmVhc0J5TmFtZXNwYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmU0NGJhMDEzNWE2NDNjMDFhNWI5MDBjNzYzMWJhMTQ5OThmOGYzYzEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
U3RvcmFnZUFyZWFCYXNlLmNwcApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFCYXNlLmgiCisKKyNpbmNs
dWRlICJTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitT
dG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VBcmVhQmFzZSh1bnNpZ25lZCBxdW90YSwgY29uc3QgV2Vi
Q29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pCisgICAgOiBtX2lkZW50aWZpZXIoU3RvcmFnZUFy
ZWFJZGVudGlmaWVyOjpnZW5lcmF0ZSgpKQorICAgICwgbV9xdW90YShxdW90YSkKKyAgICAsIG1f
b3JpZ2luKG9yaWdpbikKK3sKK30KKworU3RvcmFnZUFyZWFCYXNlOjp+U3RvcmFnZUFyZWFCYXNl
KCkgPSBkZWZhdWx0OworCit2b2lkIFN0b3JhZ2VBcmVhQmFzZTo6YWRkTGlzdGVuZXIoSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uKQoreworICAgIEFTU0VSVCghbV9saXN0ZW5l
cnMuY29udGFpbnMoY29ubmVjdGlvbikpOworCisgICAgbV9saXN0ZW5lcnMuYWRkKGNvbm5lY3Rp
b24pOworfQorCit2b2lkIFN0b3JhZ2VBcmVhQmFzZTo6cmVtb3ZlTGlzdGVuZXIoSVBDOjpDb25u
ZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uKQoreworICAgIG1fbGlzdGVuZXJzLnJlbW92ZShj
b25uZWN0aW9uKTsKK30KKworYm9vbCBTdG9yYWdlQXJlYUJhc2U6Omhhc0xpc3RlbmVycygpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFtX2xpc3RlbmVycy5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgU3Rv
cmFnZUFyZWFCYXNlOjpub3RpZnlMaXN0ZW5lcnNBYm91dENsZWFyKCkKK3sKKyAgICBmb3IgKGF1
dG8mIGNvbm5lY3Rpb24gOiBtX2xpc3RlbmVycykKKyAgICAgICAgSVBDOjpDb25uZWN0aW9uOjpz
ZW5kKGNvbm5lY3Rpb24sIE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6Q2xlYXJDYWNoZSgpLCBt
X2lkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFCYXNlOjpkaXNw
YXRjaEV2ZW50cyhJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIFN0
b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc291cmNlSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBj
b25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3QKK3sKKyAgICBBU1NFUlQoc291cmNlSW1wbElk
ZW50aWZpZXIpOworCisgICAgZm9yIChhdXRvJiBjb25uZWN0aW9uIDogbV9saXN0ZW5lcnMpIHsK
KyAgICAgICAgc3RkOjpvcHRpb25hbDxTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyPiBpbXBsSWRl
bnRpZmllcjsKKyAgICAgICAgaWYgKGNvbm5lY3Rpb24gPT0gc291cmNlQ29ubmVjdGlvbikKKyAg
ICAgICAgICAgIGltcGxJZGVudGlmaWVyID0gc291cmNlSW1wbElkZW50aWZpZXI7CisgICAgICAg
IElQQzo6Q29ubmVjdGlvbjo6c2VuZChjb25uZWN0aW9uLCBNZXNzYWdlczo6U3RvcmFnZUFyZWFN
YXA6OkRpc3BhdGNoU3RvcmFnZUV2ZW50KGltcGxJZGVudGlmaWVyLCBrZXksIG9sZFZhbHVlLCBu
ZXdWYWx1ZSwgdXJsU3RyaW5nKSwgbV9pZGVudGlmaWVyLnRvVUludDY0KCkpOworICAgIH0KK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWQzZWQxNDIw
NmUxNzVkY2FjYzhjMWY5OTQ5MDc1MDU0NWUzNGU5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuaApAQCAtMCww
ICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNv
bm5lY3Rpb24uaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50aWZpZXIuaCIKKyNpbmNsdWRl
ICJTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRP
cmlnaW4uaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitzdHJ1Y3QgQ2xpZW50T3JpZ2luOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBj
bGFzcyBTdG9yYWdlRXJyb3IgOiB1aW50OF90IHsKKyAgICBEYXRhYmFzZSwKKyAgICBJdGVtTm90
Rm91bmQsCisgICAgUXVvdGFFeGNlZWRlZCwKK307CisKK2NsYXNzIFN0b3JhZ2VBcmVhQmFzZSA6
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTdG9yYWdlQXJlYUJhc2U+IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTdG9yYWdlQXJlYUJhc2UpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHZpcnR1YWwgflN0b3JhZ2VBcmVhQmFzZSgpOworCisgICAgZW51bSBj
bGFzcyBUeXBlIDogYm9vbCB7IFNRTGl0ZSwgTWVtb3J5IH07CisgICAgdmlydHVhbCBUeXBlIHR5
cGUoKSBjb25zdCA9IDA7CisgICAgZW51bSBjbGFzcyBTdG9yYWdlVHlwZSA6IGJvb2wgeyBTZXNz
aW9uLCBMb2NhbCB9OworICAgIHZpcnR1YWwgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGNsZWFyKCkgPSAwOworCisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4g
b3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICB1bnNpZ25lZCBxdW90YSgp
IGNvbnN0IHsgcmV0dXJuIG1fcXVvdGE7IH0KKyAgICB2b2lkIGFkZExpc3RlbmVyKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQpOworICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSVBDOjpDb25uZWN0
aW9uOjpVbmlxdWVJRCk7CisgICAgYm9vbCBoYXNMaXN0ZW5lcnMoKSBjb25zdDsKKyAgICB2b2lk
IG5vdGlmeUxpc3RlbmVyc0Fib3V0Q2xlYXIoKTsKKworICAgIHZpcnR1YWwgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gYWxsSXRlbXMoKSA9IDA7CisgICAgdmlydHVhbCBFeHBlY3RlZDx2b2lkLCBT
dG9yYWdlRXJyb3I+IHNldEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFy
ZWFJbXBsSWRlbnRpZmllciwgU3RyaW5nJiYga2V5LCBTdHJpbmcmJiB2YWx1ZSwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpID0gMDsKKyAgICB2aXJ0dWFsIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VF
cnJvcj4gcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUlt
cGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
ID0gMDsKKyAgICB2aXJ0dWFsIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gY2xlYXIoSVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiB1cmxTdHJpbmcpID0gMDsKKworcHJvdGVjdGVkOgorICAgIFN0b3JhZ2VBcmVhQmFz
ZSh1bnNpZ25lZCBxdW90YSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgdm9p
ZCBkaXNwYXRjaEV2ZW50cyhJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUlt
cGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwg
Y29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisgICAg
dW5zaWduZWQgbV9xdW90YTsKKyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gbV9vcmlnaW47Cisg
ICAgSGFzaFNldDxJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEPiBtX2xpc3RlbmVyczsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjFkZDE0YzZmNTBjOTQ2YTRjZTRkODUwMDM5NjFkM2ZmYzZiOWNiNDcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdp
c3RyeS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVJlZ2lzdHJ5LmgiCisKKyNpbmNsdWRlICJTdG9yYWdl
QXJlYUJhc2UuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1N0b3JhZ2VBcmVhUmVnaXN0cnk6
OlN0b3JhZ2VBcmVhUmVnaXN0cnkoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgU3RvcmFnZUFyZWFSZWdp
c3RyeTo6cmVnaXN0ZXJTdG9yYWdlQXJlYShTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgU3RvcmFnZUFyZWFCYXNlJiBzdG9yYWdlQXJlYSkKK3sKKyAgICBBU1NFUlQoIW1fc3RvcmFn
ZUFyZWFzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKKworICAgIG1fc3RvcmFnZUFyZWFzLmFkZChp
ZGVudGlmaWVyLCBzdG9yYWdlQXJlYSk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFSZWdpc3RyeTo6
dW5yZWdpc3RlclN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKQor
eworICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhcy5jb250YWlucyhpZGVudGlmaWVyKSk7CisKKyAg
ICBtX3N0b3JhZ2VBcmVhcy5yZW1vdmUoaWRlbnRpZmllcik7Cit9CisKK1N0b3JhZ2VBcmVhQmFz
ZSogU3RvcmFnZUFyZWFSZWdpc3RyeTo6Z2V0U3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlm
aWVyIGlkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWFzLmdldChpZGVudGlm
aWVyKS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhUmVnaXN0cnku
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40MGNjNzQyMzc2NTJmNWMxNjdjNjhiZTFmNmEyYjZjYzRlZWU0M2Y0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0
b3JhZ2VBcmVhUmVnaXN0cnkuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDx3
dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU3RvcmFnZUFyZWFC
YXNlOworCitjbGFzcyBTdG9yYWdlQXJlYVJlZ2lzdHJ5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTdG9yYWdlQXJlYVJlZ2lzdHJ5KCk7CisgICAgdm9pZCBy
ZWdpc3RlclN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgU3RvcmFnZUFyZWFCYXNl
Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVy
KTsKKyAgICBTdG9yYWdlQXJlYUJhc2UqIGdldFN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhSWRlbnRp
Zmllcik7CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxTdG9yYWdlQXJlYUlkZW50aWZpZXIsIFdl
YWtQdHI8U3RvcmFnZUFyZWFCYXNlPj4gbV9zdG9yYWdlQXJlYXM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy9nZW5lcmF0ZS11
bmlmaWVkLXNvdXJjZXMuc2ggYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtdW5pZmll
ZC1zb3VyY2VzLnNoCmluZGV4IGI2ZDQwYWQ5ZTk1NDdiZDQwZGU4NWM5Yzg1YTM1YzFlMjVjZGYx
OTEuLjRmMWFjODNjYjNhMjI2ZWNjZDA3ODM5ODM3OTIzY2JjNDRiYWI5MjMgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2NyaXB0cy9nZW5lcmF0ZS11bmlmaWVkLXNvdXJjZXMuc2gKKysrIGIv
U291cmNlL1dlYktpdC9TY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaApAQCAtMTQs
NyArMTQsNyBAQCBpZiBbIC16ICIke0JVSUxEX1NDUklQVFNfRElSfSIgXTsgdGhlbgogICAgIGZp
CiBmaQogCi1VbmlmaWVkU291cmNlQ3BwRmlsZUNvdW50PTExMQorVW5pZmllZFNvdXJjZUNwcEZp
bGVDb3VudD0xMTIKIFVuaWZpZWRTb3VyY2VNbUZpbGVDb3VudD04MAogCiBpZiBbICQjIC1lcSAw
IF07IHRoZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDA1YTg1YjAxOTYwNDIwMTZhYjY4NWYyMGQ0YmVmNzNj
NDYyNjU2MDcuLjQyZmI2MWIxNzc1MWUxMTk3MzJmYWFiMjZlMTU4YTUyNjM1NTM1MjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dApAQCAtMTQzLDggKzE0MywxNCBAQCBOZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2Vy
L1dlYlNXU2VydmVyVG9Db250ZXh0Q29ubmVjdGlvbi5jcHAgQG5vLXVuaWZ5CiBOZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL0ZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5jcHAKIE5ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGUuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL0ZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkuY3BwCitOZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01l
bW9yeVN0b3JhZ2VBcmVhLmNwcAogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFn
ZU1hbmFnZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2Vy
LmNwcAorTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKK05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcAorTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0
b3JhZ2VBcmVhUmVnaXN0cnkuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxT
dG9yYWdlRGF0YWJhc2UuY3BwCiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFn
ZURhdGFiYXNlVHJhY2tlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IGY0MDAwYTZiNzE5MTM1YzM0
M2I0Y2QwOWMwMjNhNjhmMmM1ZTc4NWUuLmIxMWYyZDUzY2ZmYTg1Zjk2ZjI3NDExZDlkMmRiMDdk
OTZhMDdjMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMTU3MiwxNiArMTU3Miw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKGNvbnN0IFN0cmlu
ZyYgaW5kZXhlZERhdGFiCiAgICAgICAgIEZpbGVTeXN0ZW06OmNyZWF0ZVN5bWJvbGljTGluayhp
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIG9sZFZlcnNpb25EaXJlY3RvcnkpOwogfQogCi12b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExvY2FsU3RvcmFnZURldGFpbHMoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQot
ewotICAgIGlmICghY2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cih7IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6R2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhz
ZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6cHJlY29ubmVjdFRvKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2Vi
UGFnZVByb3h5SWRlbnRpZmllciB3ZWJQYWdlUHJveHlJRCwgV2ViQ29yZTo6UGFnZUlkZW50aWZp
ZXIgd2ViUGFnZUlELCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIFdl
YkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzUG9saWN5IHN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBz
dGQ6Om9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc05hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluLCBMYXN0TmF2aWdhdGlvbldhc0FwcEluaXRpYXRlZCBsYXN0TmF2aWdhdGlv
bldhc0FwcEluaXRpYXRlZCkKIHsKICAgICBpZiAoIXVybC5pc1ZhbGlkKCkgfHwgIXVybC5wcm90
b2NvbElzSW5IVFRQRmFtaWx5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDkwOTc5M2UzNzU2OGMw
NDJiMTAwMmEyNmFhMDI3NDc4NGE5MWU0Y2EuLjcyMmQ5NzMxYTAxMmRlMzRmYjZjMzMyYjkxMTQ1
ZGQwMzAyZjU2M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0xOTY5LDE4ICsxOTY5LDYgQEAgQVBJ
OjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tpZVN0b3JlKCkKICAgICBy
ZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9j
YWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAg
IGlmICghaXNQZXJzaXN0ZW50KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TG9jYWxT
dG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7Ci0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUoZGV0YWlscykpOwotICAgIH0pOwotfQotCiB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4
IDFkZTI1YTY2MDU3ZjJkNjZjNjI5OWU1ZWJiYjgxNDZiZWU5YjgxZTMuLjM0YWU1YWY2MDczYzI1
OTE0MjBmMjA5Y2UwZjc1MzJiYWJkYzgzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTE2Nyw3ICsxNjcs
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpOwogICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiwgY29uc3QgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiYsIEZ1bmN0aW9uPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICB2b2lkIGdldExvY2FsU3RvcmFnZURldGFpbHMoRnVu
Y3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRh
aWxzPiYmKT4mJik7CiAgICAgdm9pZCBzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3Rp
bmcoQ2FjaGVNb2RlbCk7CiAgICAgdm9pZCBzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3Rp
bmcoU2Vjb25kcyk7CiAgICAgdm9pZCByZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGlu
ZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1vdXRwdXQueGNm
aWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvVW5pZmllZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QK
aW5kZXggNTA4OThlNDYzMDE3MzE5NGFlNGVmN2NjZTQzYWU4ZWI0NjczYTg2Yi4uMmFkNzk2NDVk
NmVmNjgzZGFkNGViMDc2ZjVkZDcyNDcyYmY4NjBiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VbmlmaWVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L1Vu
aWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0xNyw2ICsxNyw3IEBAICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZp
ZWRTb3VyY2UxMS1tbS5tCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTEuY3BwCiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNl
MTEwLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlm
aWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTExMS5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMTIuY3Bw
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291
cmNlcy9VbmlmaWVkU291cmNlMTItbW0ubW0KICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMi5jcHAKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1Vu
aWZpZWRTb3VyY2UxMy1tbS5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggYTQ1ZDRkMzY5MzE3ODQ0NzA0ZDQ3MTgwZmM0ZGFkNmYxYjk2
NjIzNi4uZGQ5ODY5OTk4NWI0NmZiZmQwMjUyMzc4YjU4MmU0MjQ0NDU1NGU5ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTE0LDYg
KzE1MTQsMTMgQEAKIAkJOTNFNzk5ODUyNzU2RkE1NTAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1T
dG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTk4MjI3NTZGQTU0MDA3NDAwOEEgLyogV2Vi
RmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJ
OTNFNzk5ODcyNzU2RkFCNDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlv
bk1lc3NhZ2VzUmVwbGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNFNzk5ODMyNzU2RkE1NDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdl
Q29ubmVjdGlvbk1lc3NhZ2VzUmVwbGllcy5oICovOyB9OwogCQk5M0U3OTk4ODI3NTZGQUMyMDA3
NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OTgxMjc1NkZBNTMw
MDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlcy5oICovOyB9
OworCQk5M0U3OTlDNzI3NjAyNzQ2MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3RyeS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5QzYyNzYw
MjczNzAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuaCAqLzsgfTsKKwkJOTNFNzk5Q0Uy
NzYwNDk3QjAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5Q0EyNzYwNDk3QTAwNzQwMDhB
IC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5oICovOyB9OworCQk5M0U3OTlDRjI3NjA0OTdCMDA3
NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5Q0IyNzYwNDk3QTAwNzQwMDhBIC8qIExvY2FsU3Rv
cmFnZU1hbmFnZXIuaCAqLzsgfTsKKwkJOTNFNzk5RDIyNzYwQUE1QjAwNzQwMDhBIC8qIFVuaWZp
ZWRTb3VyY2UxMTIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNFNzk5RDEyNzYwQUE1QTAwNzQwMDhBIC8qIFVuaWZpZWRTb3VyY2UxMTIuY3BwICov
OyB9OworCQk5M0U3OTlEQTI3NjEyMTA4MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUQ0Mjc2
MTIxMDcwMDc0MDA4QSAvKiBTUUxpdGVTdG9yYWdlQXJlYS5oICovOyB9OworCQk5M0U3OTlEQjI3
NjEyMTA4MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUQ1Mjc2MTIxMDcwMDc0MDA4QSAvKiBN
ZW1vcnlTdG9yYWdlQXJlYS5oICovOyB9OworCQk5M0U3OTlEQzI3NjEyMTA4MDA3NDAwOEEgLyog
U3RvcmFnZUFyZWFCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5M0U3OTlENjI3NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmggKi87
IH07CiAJCTkzRjU0OUI0MUUzMTc0QjcwMDBFNzIzOSAvKiBXS1NuYXBzaG90Q29uZmlndXJhdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGNTQ5
QjMxRTMxNzRCNzAwMEU3MjM5IC8qIFdLU25hcHNob3RDb25maWd1cmF0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk5NTBGMjg4MDI1MjQxNEVB
MDBCNzRGMUMgLyogV0tNb3VzZURldmljZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NTBGMjg3RTI1MjQxNEU5MDBCNzRGMUMgLyogV0tN
b3VzZURldmljZU9ic2VydmVyLmggKi87IH07CiAJCTk1NjUwODM5MjZEODdBMkIwMEUxNUNCNyAv
KiBBcHBsZU1lZGlhU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk1NjUwODM3MjZEODdBMkIwMEUxNUNCNyAvKiBBcHBsZU1lZGlhU2Vy
dmljZXNTUEkuaCAqLzsgfTsKQEAgLTUzNTMsNiArNTM2MCwxOSBAQAogCQk5M0U3OTk4MTI3NTZG
QTUzMDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25u
ZWN0aW9uTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFNzk5ODIy
NzU2RkE1NDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJGaWxl
U3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5M0U3OTk4MzI3NTZGQTU0MDA3NDAwOEEgLyogV2ViRmlsZVN5c3Rl
bVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXNSZXBsaWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzUmVwbGll
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlDNTI3NjAyNzM2MDA3NDAw
OEEgLyogU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTNFNzk5QzYyNzYwMjczNzAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUFyZWFSZWdpc3RyeS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlDOTI3NjA0OTdBMDA3NDAwOEEg
LyogTG9jYWxTdG9yYWdlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTNFNzk5Q0EyNzYwNDk3QTAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXNzaW9uU3RvcmFnZU1hbmFnZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5Q0IyNzYwNDk3QTAwNzQwMDhB
IC8qIExvY2FsU3RvcmFnZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTG9jYWxTdG9yYWdlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
M0U3OTlDQzI3NjA0OTdCMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlc3Npb25TdG9yYWdlTWFuYWdlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQxMjc2MEFBNUEwMDc0MDA4
QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVuaWZpZWRTb3VyY2UxMTIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5M0U3OTlEMzI3NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMaXRlU3RvcmFnZUFyZWEuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlENDI3NjEyMTA3MDA3NDAwOEEgLyog
U1FMaXRlU3RvcmFnZUFyZWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FM
aXRlU3RvcmFnZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDUy
NzYxMjEwNzAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1lbW9yeVN0b3JhZ2VBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTkzRTc5OUQ2Mjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUFyZWFCYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQ3Mjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9y
YWdlQXJlYUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Rv
cmFnZUFyZWFCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDgy
NzYxMjEwODAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lbW9yeVN0b3JhZ2VBcmVhLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTNGNTQ5QjMxRTMxNzRCNzAwMEU3MjM5IC8qIFdLU25hcHNob3RD
b25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLU25hcHNo
b3RDb25maWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjU0OUI1
MUUzMTc0REEwMDBFNzIzOSAvKiBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLU25hcHNob3RDb25maWd1cmF0aW9uLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NTBGMjg3RTI1MjQxNEU5MDBCNzRGMUMg
LyogV0tNb3VzZURldmljZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdLTW91c2VEZXZpY2VPYnNlcnZlci5oOyBwYXRoID0gaW9zL1dLTW91c2VEZXZpY2VPYnNl
cnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODIzNCw2ICs4MjU0LDcgQEAK
IAkJCQkxQ0FFQ0I1RDI3NDY1QUUzMDBBQjc4RDAgLyogVW5pZmllZFNvdXJjZTEwOS5jcHAgKi8s
CiAJCQkJMUNBRUNCNjAyNzQ2NUFFMzAwQUI3OEQwIC8qIFVuaWZpZWRTb3VyY2UxMTAuY3BwICov
LAogCQkJCTFDQUVDQjVFMjc0NjVBRTMwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTExLmNwcCAq
LywKKwkJCQk5M0U3OTlEMTI3NjBBQTVBMDA3NDAwOEEgLyogVW5pZmllZFNvdXJjZTExMi5jcHAg
Ki8sCiAJCQkpOwogCQkJbmFtZSA9ICJ1bmlmaWVkLXNvdXJjZXMiOwogCQkJcGF0aCA9ICJEZXJp
dmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzIjsKQEAgLTEwMzE0LDExICsxMDMzNSwy
MyBAQAogCQkJCTkzNUI1Nzk4MjZGNTEyNzAwMDhCNDhBQyAvKiBGaWxlU3lzdGVtU3RvcmFnZUhh
bmRsZVJlZ2lzdHJ5LmggKi8sCiAJCQkJOTMxQTA3NTEyNkYwNjMxMDAwNDQ3NENEIC8qIEZpbGVT
eXN0ZW1TdG9yYWdlTWFuYWdlci5jcHAgKi8sCiAJCQkJOTMxQTA3NTAyNkYwNjMxMDAwNDQ3NENE
IC8qIEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5oICovLAorCQkJCTkzRTc5OUM5Mjc2MDQ5N0Ew
MDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcCAqLywKKwkJCQk5M0U3OTlDQjI3NjA0
OTdBMDA3NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFuYWdlci5oICovLAorCQkJCTkzRTc5OUQ4Mjc2
MTIxMDgwMDc0MDA4QSAvKiBNZW1vcnlTdG9yYWdlQXJlYS5jcHAgKi8sCisJCQkJOTNFNzk5RDUy
NzYxMjEwNzAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmggKi8sCiAJCQkJOTMwODVEQzMy
NkUxQkJCRDAwMEVDNkE3IC8qIE5ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAgKi8sCiAJCQkJOTMw
ODVEQzQyNkUxQkJCRDAwMEVDNkE3IC8qIE5ldHdvcmtTdG9yYWdlTWFuYWdlci5oICovLAogCQkJ
CTkzMDg1REM3MjZFMUM2RUUwMDBFQzZBNyAvKiBOZXR3b3JrU3RvcmFnZU1hbmFnZXIubWVzc2Fn
ZXMuaW4gKi8sCiAJCQkJOTMwODVEQzUyNkUxQzZDRjAwMEVDNkE3IC8qIE9yaWdpblN0b3JhZ2VN
YW5hZ2VyLmNwcCAqLywKIAkJCQk5MzA4NURDNjI2RTFDNkNGMDAwRUM2QTcgLyogT3JpZ2luU3Rv
cmFnZU1hbmFnZXIuaCAqLywKKwkJCQk5M0U3OTlDQzI3NjA0OTdCMDA3NDAwOEEgLyogU2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyLmNwcCAqLywKKwkJCQk5M0U3OTlDQTI3NjA0OTdBMDA3NDAwOEEgLyog
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmggKi8sCisJCQkJOTNFNzk5RDMyNzYxMjEwNzAwNzQwMDhB
IC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmNwcCAqLywKKwkJCQk5M0U3OTlENDI3NjEyMTA3MDA3NDAw
OEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuaCAqLywKKwkJCQk5M0U3OTlENzI3NjEyMTA4MDA3NDAw
OEEgLyogU3RvcmFnZUFyZWFCYXNlLmNwcCAqLywKKwkJCQk5M0U3OTlENjI3NjEyMTA4MDA3NDAw
OEEgLyogU3RvcmFnZUFyZWFCYXNlLmggKi8sCisJCQkJOTNFNzk5QzUyNzYwMjczNjAwNzQwMDhB
IC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwICovLAorCQkJCTkzRTc5OUM2Mjc2MDI3MzcwMDc0
MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHN0b3Jh
Z2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTI5NzMsNiArMTMwMDYsNyBAQAog
CQkJCTU3RENFREFFMjE0QzYwMzMwMDE2Qjg0NyAvKiBMb2NhbFNlcnZpY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzQjI2MTRFMjI3RDE0QjEwMEI5N0E3NiAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNCMjYxNEYyMjdEMTRCMTAwQjk3QTc2IC8qIExvY2Fs
U3RvcmFnZURhdGFiYXNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNzk5Q0YyNzYw
NDk3QjAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ2QkVCNkRCMjJGQjlENDgwMDI2OTg2NyAvKiBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxQTdGMkYzMTI1QkY4MjAwMDhBRUIxRCAvKiBMb2dnaW5nLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkRDRDdGNzFENDdFOTJBMDA5RjA4QkMgLyogTG9nSW5pdGlhbGl6
YXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMTI5OTEsNiArMTMwMjUsNyBAQAogCQkJCUExNTc5
OUJEMjU4NDQzMzIwMDUyODIzNiAvKiBNZWRpYVNhbXBsZUN1cnNvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDc1QTlDRjMyNjE2OUJBQjAwNkRGQTNBIC8qIE1lZGlhU2Vzc2lvbkNvb3JkaW5hdG9y
UHJveHlQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU3OTlCNzI1ODQ0MzMyMDA1Mjgy
MzYgLyogTWVkaWFUcmFja1JlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNzk5REIyNzYx
MjEwODAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTkzM0RFRjE5NjVFQjMxMDA4QUMzRUEgLyogTWVudVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOUI0NzkwOEQyNTMxNEQ4MzAwRUMxMUFCIC8qIE1lc3NhZ2VBcmd1bWVudERlc2NyaXB0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDNEM4MjkxNkI4NzZBOTAwNjlEQ0NEIC8qIE1l
c3NhZ2VGbGFncy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzAzOSw3ICsxMzA3NCw2IEBACiAJCQkJ
NTMyMTU5NTYxREJBRTcyRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4Mzk5MDIwMzFCRTlBMDJCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuaCBp
biBIZWFkZXJzICovLAogCQkJCTgzRDQ1NEQ3MUJFOUQzQzQwMDZDOTNCRCAvKiBOZXR3b3JrTG9h
ZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE3QjVGOTcyNzVFQzVFNTAwMkRDMjJEIC8q
IFdlYlB1c2hNZXNzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzkxNDk2NTFCRUE4Mzg1MDBE
MkQ5NTMgLyogTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDdG
QzhBMDI1QjgzMzFDMDA1NDk1RkMgLyogTmV0d29ya0xvYWRTY2hlZHVsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxNDUyNkVEMjcxRTE2NDcwMDA0NjdCNiAvKiBOZXR3b3JrTm90aWZpY2F0aW9u
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzEyNyw2ICsxMzE2MSw3IEBACiAJCQkJMkQy
NzlFMTkyNjk1NTc2ODAwNEIzRUVCIC8qIFByb3RvdHlwZVRvb2xzU1BJLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTdCNUY4MTI3NUU5N0I2MDAyREMyMkQgLyogUHVzaEFwcEJ1bmRsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE3QjVGN0QyNzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hDbGllbnRDb25u
ZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTdCNUY5NTI3NUVCQTYzMDAyREMyMkQgLyog
UHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUU2ODg3MDFGNkUy
QkFCMDA3MDA2QTYgLyogUXVhcmFudGluZVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwQzIy
N0UyNDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQUVFNTcyNTI0MDlGMTQyMDAyMDA1RDYgLyogUXVpY2tMb29rVGh1
bWJuYWlsTG9hZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTEzMjExLDYgKzEzMjQ2LDcgQEAKIAkJ
CQk1MTREOUY1NzE5MTE5RDM1MDAwMDYzQTcgLyogU2VydmljZXNDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQUZERTY1QTE5NTRBNDJCMDBDNDhGRkEgLyogU2Vzc2lvblN0YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTAwMkQ0OTE5NkIzNDVEMDBCOUFENDQgLyogU2Vzc2lvblN0
YXRlQ29kaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3OTlDRTI3NjA0OTdCMDA3NDAwOEEg
LyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkJFQjZERjIy
RkJCMTZCMDAyNjk4NjcgLyogU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBNjQyMEU1MTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRtYXAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUY0M0E5Q0UwMjVENzJGMUMwMDk5MEUyNiAvKiBTaGFyZWFibGVCaXRt
YXBVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTMyMzksMTEgKzEzMjc1LDE0IEBACiAJ
CQkJOTNENkI3NzIyNTRCQjUxOTAwNThERDNBIC8qIFNwZWVjaFJlY29nbml0aW9uU2VydmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5M0Q2Qjc4NDI1NENDRDBFMDA1OEREM0EgLyogU3BlZWNoUmVj
b2duaXRpb25TZXJ2ZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNENkI3ODUyNTRD
Q0Q0MzAwNThERDNBIC8qIFNwZWVjaFJlY29nbml0aW9uU2VydmVyTWVzc2FnZXNSZXBsaWVzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk5M0U3OTlEQTI3NjEyMTA4MDA3NDAwOEEgLyogU1FMaXRlU3Rv
cmFnZUFyZWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBM0ZFQ0EyMjFGN0MwOTcwMEYyNjdDRCAv
KiBTdG9yYWdlQWNjZXNzU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkJFQjZENzIyRkI5
QkQ3MDAyNjk4NjcgLyogU3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTc5OURD
Mjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBRDMzMDZGMTZCMUQ5OTEwMDRGNjBFNyAvKiBTdG9yYWdlQXJlYUltcGwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBQ0VDRDI1MTcxNjJEQjEwMDFGQzlFRiAvKiBTdG9yYWdlQXJlYU1hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUEzMzRERUUxNkRFOEY4ODAwNkE4RTM4IC8qIFN0b3JhZ2VBcmVh
TWFwTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTc5OUM3Mjc2MDI3NDYwMDc0MDA4
QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0IyNjE0RDIy
N0QxNDlFMDBCOTdBNzYgLyogU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
NkIwNTk4MjMwMzkwOTcwMDJGQzA2QiAvKiBTdG9yYWdlTWFuYWdlclNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTM2OEVFREYyMzAzQTlFRDAwQkRCMTFBIC8qIFN0b3JhZ2VNYW5hZ2VyU2V0TWVz
c2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTM1MTMsNiArMTM1NTIsNyBAQAogCQkJCTUxN0I1
RjJFMjc1NzM4MkEwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkNENjlBMjcyMUYwQTkwMEY3RjhFQyAvKiBXZWJQ
dXNoRGFlbW9uQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUY3MzI3NUU5NjA5
MDAyREMyMkQgLyogV2ViUHVzaERhZW1vbk1haW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0I1
Rjk3Mjc1RUM1RTUwMDJEQzIyRCAvKiBXZWJQdXNoTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDYxQ0NDQTYyMzE0ODVBQTAwQjY1OUI5IC8qIFdlYlJlbW90ZU9iamVjdFJlZ2lzdHJ5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNTg2MEU3MTIzMEY2N0ZDMDA0NjFBQUUgLyogV2ViUmVzb3Vy
Y2VJbnRlcmNlcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTBBRkZCQTE2NTQy
MDQ4MDAxQkEwNUUgLyogV2ViUmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTM1
NDcsNyArMTM1ODcsNiBAQAogCQkJCTkzNTZGMkRDMjE1MkI2QjUwMEU2RDVERiAvKiBXZWJTV0Ns
aWVudENvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0E1MzEwMUY0N0E4NjIwMERD
REMwQSAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDY2QkMwM0MxRkEyNjZEQTAwMkZBOUMxIC8qIFdlYlNXQ29udGV4dE1hbmFnZXJDb25uZWN0
aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTdCNUY5NTI3NUVCQTYzMDAyREMyMkQgLyogUHVz
aE1lc3NhZ2VGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NjBGNDg5MDFGOTk2Rjcx
MDBDRjRCODcgLyogV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzExQTlFQ0MyMTQwMzVGODAwQ0ZCMjBBIC8qIFdlYlN3aXRjaGluZ0dQ
VUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1NkYyREUyMTUyQjcxMDAwRTZENURGIC8q
IFdlYlNXT3JpZ2luU3RvcmUuaCBpbiBIZWFkZXJzICovLApAQCAtMTUxMTYsOSArMTUxNTUsOSBA
QAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTUx
N0I1RjlBMjc1RjNBODYwMDJEQzIyRCAvKiBBcmd1bWVudENvZGVycy5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk1MTdCNUY2ODI3NUE5QTc4MDAyREMyMkQgLyogV2ViUHVzaFRvb2xDb25uZWN0aW9u
Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3QjVGOUIyNzVGM0E5ODAwMkRDMjJEIC8qIERhZW1v
blV0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxN0I1RjlDMjc1RjNDMzcwMDJEQzIy
RCAvKiBEYWVtb25FbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxN0I1RjlCMjc1RjNB
OTgwMDJEQzIyRCAvKiBEYWVtb25VdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTdC
NUY2ODI3NUE5QTc4MDAyREMyMkQgLyogV2ViUHVzaFRvb2xDb25uZWN0aW9uLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTE3QjVGNjUyNzVBOEQ3RjAwMkRDMjJEIC8qIFdlYlB1c2hUb29sTWFpbi5t
bSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwpAQCAtMTUyMTQsNyArMTUyNTMsNiBAQAogCQkJCUNEQTkzREIxMjJGOEJDRjQw
MDQ5MEE2OSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWNQYXJhbWV0ZXJzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUMxQTE1MkQ3MjRFNUEyOUEwMDk3OEM4QiAvKiBIYW5kbGVYUENFbmRw
b2ludE1lc3NhZ2VzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjc0OUY2NDQyMTQ2NTYxQjAwODM4
MEJGIC8qIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1
MTdCNUY5OTI3NUVDNjAxMDAyREMyMkQgLyogV2ViUHVzaE1lc3NhZ2VDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTI3NDlGNjQ1MjE0NjU2MUUwMDgzODBCRiAvKiBJbmplY3RlZEJ1bmRsZVJh
bmdlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlCRjVFQzY0MjU0MTE0NTYwMDk4NEU3
NyAvKiBKU0lQQ0JpbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzE0RDM3RkUyNEFDRTA4
NjAwN0ZGMDE0IC8qIExhdW5jaFNlcnZpY2VzRGF0YWJhc2VNYW5hZ2VyLm1tIGluIFNvdXJjZXMg
Ki8sCkBAIC0xNTUwMyw2ICsxNTU0MSw3IEBACiAJCQkJMUNBRUNCNjUyNzQ2NUFFNDAwQUI3OEQw
IC8qIFVuaWZpZWRTb3VyY2UxMDkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNBRUNCNjgyNzQ2
NUFFNDAwQUI3OEQwIC8qIFVuaWZpZWRTb3VyY2UxMTAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUNBRUNCNjYyNzQ2NUFFNDAwQUI3OEQwIC8qIFVuaWZpZWRTb3VyY2UxMTEuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJOTNFNzk5RDIyNzYwQUE1QjAwNzQwMDhBIC8qIFVuaWZpZWRTb3VyY2UxMTIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM4QTFGQzAyM0E1NTFCRjAwRDIzNzRGIC8qIFVzZXJJ
bnRlcmZhY2VJZGlvbS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNENDkxQjBEMUU3MzJFNEQwMDAw
OTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDRDQ5MUIxNzFFNzM1MjU1MDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE1NTc0
LDYgKzE1NjEzLDcgQEAKIAkJCQlCQ0VFN0FEMDEyODE3OTg4MDA5ODI3REEgLyogV2ViUHJvY2Vz
c1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxN0I1RjdBMjc1
RTk3QTQwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3
QjVGNzkyNzVFOTdBMTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25NYWluLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJNTE3QjVGOTkyNzVFQzYwMTAwMkRDMjJEIC8qIFdlYlB1c2hNZXNzYWdlQ29jb2Eu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUYwNjBFMTE2NTQzMTg1MDBGMzI4MUIgLyogV2ViUmVz
b3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMDYw
RTExNjU0MzE4NTAwRjMyODFGIC8qIFdlYlJUQ01vbml0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODJDIC8qIFdlYlJUQ1Jlc29s
dmVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCmluZGV4IDBm
YTZhYzE4ZmQ5NDcwNTkwY2YxMDdkNmE0NDA2NmQ5MmQ5YTQzNmQuLjJjZjdhNmQ0YjYwMDVjMWQ3
ZWMyNTZiZDYzODg3NjI5NGU5ZTRjZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24uaCIKKyNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1
ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJTdG9yYWdlTWFuYWdlclNldE1lc3NhZ2VzLmgiCkBAIC05NSw3ICs5Niw3
IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OnNldEl0ZW0oRnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9y
YWdlQXJlYUltcGwqIHNvdXJjZUFyZWEsIGNvCiAgICAgbV9wZW5kaW5nVmFsdWVDaGFuZ2VzLmFk
ZChrZXkpOwogCiAgICAgaWYgKG1fbWFwSUQpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1l
c3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6U2V0SXRlbSgqbV9tYXBJRCwgc291cmNlQXJlYS0+
aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9j
dW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6U2V0SXRlbSgqbV9tYXBJRCwgc291cmNl
QXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHZhbHVlLCBzb3VyY2VGcmFt
ZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKICAgICBlbHNlCiAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTdG9yYWdlQXJlYU1hcDo6c2V0SXRlbSBmYWlsZWQg
YmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CiB9CkBAIC0xMTQsNyArMTE1LDcg
QEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbShXZWJDb3JlOjpGcmFtZSogc291cmNl
RnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc28KICAgICBtX3BlbmRpbmdWYWx1ZUNoYW5nZXMuYWRk
KGtleSk7CiAKICAgICBpZiAobV9tYXBJRCkKLSAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVz
c2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpSZW1vdmVJdGVtKCptX21hcElELCBzb3VyY2VBcmVh
LT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIGtleSwgc291cmNlRnJhbWUtPmRvY3VtZW50
KCktPnVybCgpLnN0cmluZygpKSwgMCk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OlJlbW92ZUl0ZW0oKm1fbWFwSUQsIHNvdXJjZUFy
ZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwga2V5LCBzb3VyY2VGcmFtZS0+ZG9jdW1l
bnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKICAgICBlbHNlCiAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFN0b3JhZ2UsICJTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbSBmYWlsZWQgYmVjYXVz
ZSBzdG9yYWdlIG1hcCBJRCBpcyBpbnZhbGlkIik7CiB9CkBAIC0xMjksNyArMTMwLDcgQEAgdm9p
ZCBTdG9yYWdlQXJlYU1hcDo6Y2xlYXIoV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9y
YWdlQXJlYUltcGwqIHNvdXJjZUEKICAgICBtX21hcCA9IG1ha2VVbmlxdWU8U3RvcmFnZU1hcD4o
bV9xdW90YUluQnl0ZXMpOwogCiAgICAgaWYgKG1fbWFwSUQpCi0gICAgICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24o
KS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q2xlYXIoKm1fbWFwSUQsIHNvdXJj
ZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwgc291cmNlRnJhbWUtPmRvY3VtZW50
KCktPnVybCgpLnN0cmluZygpKSwgMCk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNsZWFyKCptX21hcElELCBzb3VyY2VBcmVhLT5p
ZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwo
KS5zdHJpbmcoKSksIDApOwogICAgIGVsc2UKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3Rv
cmFnZSwgIlN0b3JhZ2VBcmVhTWFwOjpjbGVhciBmYWlsZWQgYmVjYXVzZSBzdG9yYWdlIG1hcCBJ
RCBpcyBpbnZhbGlkIik7CiB9CkBAIC0xNjAsNyArMTYxLDcgQEAgU3RvcmFnZU1hcCYgU3RvcmFn
ZUFyZWFNYXA6OmVuc3VyZU1hcCgpCiAgICAgICAgICAgICAvLyBmcm9tIG91ciBTdG9yYWdlTWFu
YWdlclNldDo6R2V0VmFsdWVzKCkgSVBDLiBUaGlzIElQQyBtYXkgYmUgdmVyeSBzbG93IGJlY2F1
c2UgaXQgbWF5IG5lZWQgdG8gZmV0Y2ggdGhlIHZhbHVlcyBmcm9tIGRpc2sgYW5kIHRoZXJlIG1h
eSBiZSBhIGxvdCBvZiBkYXRhLgogICAgICAgICAgICAgSVBDOjpVbmJvdW5kZWRTeW5jaHJvbm91
c0lQQ1Njb3BlIHVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGU7CiAgICAgICAgICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiB2YWx1ZXM7Ci0gICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2Vu
ZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpHZXRWYWx1ZXMoKm1fbWFwSUQpLCBN
ZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkdldFZhbHVlczo6UmVwbHkodmFsdWVzKSwgMCk7
CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6R2V0VmFsdWVzKCptX21hcElEKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2Vy
U2V0OjpHZXRWYWx1ZXM6OlJlcGx5KHZhbHVlcyksIDApOwogICAgICAgICAgICAgbV9tYXAtPmlt
cG9ydEl0ZW1zKFdURk1vdmUodmFsdWVzKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVhTWFwOjplbnN1cmVNYXAgZmFp
bGVkIHRvIGxvYWQgZnJvbSBuZXR3b3JrIHByb2Nlc3MgYmVjYXVzZSBzdG9yYWdlIG1hcCBJRCBp
cyBpbnZhbGlkIik7CkBAIC0zNDgsMjAgKzM0OSwyMyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpj
b25uZWN0KCkKICAgICBpZiAobV9tYXBJRCkKICAgICAgICAgcmV0dXJuOwogCisgICAgU3RvcmFn
ZUFyZWFJZGVudGlmaWVyIG1hcElEOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBT
dG9yYWdlVHlwZTo6TG9jYWw6CiAgICAgY2FzZSBTdG9yYWdlVHlwZTo6VHJhbnNpZW50TG9jYWw6
CiAgICAgICAgIGlmIChTZWN1cml0eU9yaWdpbiogdG9wTGV2ZWxPcmlnaW4gPSBtX25hbWVzcGFj
ZS50b3BMZXZlbE9yaWdpbigpKQotICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
ZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1l
c3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdl
QXJlYShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9uSUQoKSwgbV9uYW1lc3BhY2Uuc3Rv
cmFnZU5hbWVzcGFjZUlEKCksIHRvcExldmVsT3JpZ2luLT5kYXRhKCksIG1fc2VjdXJpdHlPcmln
aW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRvVHJhbnNp
ZW50TG9jYWxTdG9yYWdlQXJlYTo6UmVwbHkobV9tYXBJRCksIDApOworICAgICAgICAgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29u
bmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5l
Y3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEobV9uYW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFj
ZUlEKCksIHRvcExldmVsT3JpZ2luLT5kYXRhKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSks
IE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5lY3RUb1RyYW5zaWVudExvY2Fs
U3RvcmFnZUFyZWE6OlJlcGx5KG1hcElEKSwgMCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigp
LmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5l
Y3RUb0xvY2FsU3RvcmFnZUFyZWEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2Vzc2lvbklEKCks
IG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRh
KCkpLCBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb0xvY2FsU3RvcmFnZUFy
ZWE6OlJlcGx5KG1fbWFwSUQpLCAwKTsKKyAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3lu
YyhNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9Mb2NhbFN0b3JhZ2VB
cmVhKG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5k
YXRhKCkpLCBNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9Mb2NhbFN0
b3JhZ2VBcmVhOjpSZXBseShtYXBJRCksIDApOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFN0
b3JhZ2VUeXBlOjpTZXNzaW9uOgotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1
cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2Fn
ZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuc2Vzc2lvbklEKCksIG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3Bh
Y2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6U3RvcmFnZU1hbmFn
ZXJTZXQ6OkNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYTo6UmVwbHkobV9tYXBJRCksIDApOwor
ICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFu
YWdlcjo6Q29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1l
c3BhY2VJRCgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWE6OlJlcGx5KG1hcElEKSwg
MCk7CiAgICAgfQogCi0gICAgaWYgKG1fbWFwSUQpCisgICAgaWYgKG1hcElELmlzVmFsaWQoKSkg
eworICAgICAgICBtX21hcElEID0gbWFwSUQ7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnJlZ2lzdGVyU3RvcmFnZUFyZWFNYXAoKnRoaXMpOworICAgIH0KIH0KIAogdm9pZCBTdG9y
YWdlQXJlYU1hcDo6ZGlzY29ubmVjdCgpCkBAIC0zNzMsNyArMzc3LDcgQEAgdm9pZCBTdG9yYWdl
QXJlYU1hcDo6ZGlzY29ubmVjdCgpCiAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudW5yZWdp
c3RlclN0b3JhZ2VBcmVhTWFwKCp0aGlzKTsKIAogICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5leGlzdGluZ05ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5l
Y3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6RGlzY29ubmVjdEZyb21T
dG9yYWdlQXJlYSgqbV9tYXBJRCksIDApOworICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkRp
c2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoKm1fbWFwSUQpLCAwKTsKIAogICAgIG1fbWFwSUQgPSB7
IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKaW5kZXggZjg0ZDAyZmM2ZjdlM2JiMWUzMTQz
M2M1ZjAwZTYxZTBmZGViZjkzMi4uZGViNmEzNDMzY2FiYWZhZjdkY2FhNTYwY2RjM2ExNWUzYWNh
N2U3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcApAQCAtMjcsOSArMjcsOSBAQAogI2luY2x1
ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJbXBsLmgiCiAKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24uaCIKKyNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZU1hbmFnZXJNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwLmgi
Ci0jaW5jbHVkZSAiU3RvcmFnZU1hbmFnZXJTZXRNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBh
Z2UuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXBQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nl
c3MuaCIKQEAgLTExNCw3ICsxMTQsNyBAQCBSZWY8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5h
bWVzcGFjZUltcGw6OmNvcHkoUGFnZSYgbmV3UGFnZSkKICAgICBBU1NFUlQobV9zdG9yYWdlVHlw
ZSA9PSBTdG9yYWdlVHlwZTo6U2Vzc2lvbik7CiAKICAgICBpZiAoYXV0byBuZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5leGlzdGluZ05ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigpKQotICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5l
Y3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q2xvbmVTZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZShzZXNzaW9uSUQoKSwgbV9zdG9yYWdlTmFtZXNwYWNlSUQsIFdlYlBhZ2U6
OmZyb21Db3JlUGFnZShuZXdQYWdlKS5zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIo
KSksIDApOworICAgICAgICBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNsb25lU2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2UobV9zdG9yYWdlTmFtZXNwYWNlSUQsIFdlYlBhZ2U6OmZyb21Db3JlUGFnZShuZXdQ
YWdlKS5zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIoKSksIDApOwogCiAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFnZU5hbWVzcGFjZUltcGwobV9zdG9yYWdlVHlwZSwgV2Vi
UGFnZTo6ZnJvbUNvcmVQYWdlKG5ld1BhZ2UpLnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlSWRlbnRp
ZmllcigpLCBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UobmV3UGFnZSkuaWRlbnRpZmllcigpLCBtX3Rv
cExldmVsT3JpZ2luLmdldCgpLCBtX3F1b3RhSW5CeXRlcykpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446949</attachid>
            <date>2021-12-12 16:18:23 -0800</date>
            <delta_ts>2021-12-12 20:50:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234087-20211212161822.patch</filename>
            <type>text/plain</type>
            <size>168826</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2OTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGY2OWY2MzMyMDEzYWZk
MzcyMmZjYTk1OGJmNjc5NWNiNDNlMzkxMy4uNTgxNmFlMTNkNTUyOGQxNDE1ZDNhOGVjNGZjNDg2
MmM1MTZhY2NiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTEyLTEyICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIFN0b3JhZ2VNYW5h
Z2VyIHdpdGggTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIHRvIG1hbmFnZSBXZWJTdG9yYWdlIGJ5IG9y
aWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
RmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FM
aXRlRmlsZVN5c3RlbS5oOgorCiAyMDIxLTEyLTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6Om1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCBzaG91bGQgYmUgcHJpdmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA4ZWZkNDBkYWE5YzM1
M2MyYzU0OTA3Zjk4N2ZhYzI3YTdjMmE5ZWJlLi44NzQ2NDYyYWJkYzc2OTE2YjVmYzAwOTcyOTQ5
MzE5ZDY5ZjQ4ZWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNyBAQAorMjAyMS0xMi0xMiAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBNZXJnZSBTdG9yYWdlTWFu
YWdlciB3aXRoIE5ldHdvcmtTdG9yYWdlTWFuYWdlciB0byBtYW5hZ2UgV2ViU3RvcmFnZSBieSBv
cmlnaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
NDA4NworCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgIEluIG5l
dHdvcmsgcHJvY2VzcywgV2ViU3RvcmFnZSBkYXRhIGlzIG1hbmFnZWQgYnkgV2ViS2l0OjpTdG9y
YWdlTWFuYWdlciBjbGFzcy4gRWFjaCBTdG9yYWdlTWFuYWdlciBvd25zIG9uZSBvcgorICAgICAg
ICBtYW55IFN0b3JhZ2VOYW1lU3BhY2VzLCBhbmQgZWFjaCBTdG9yYWdlTmFtZXNwYWNlIG93bnMg
b25lIG9yIG1vcmUgU3RvcmFnZUFyZWFzLiBFYWNoIFN0b3JhZ2VBcmVhIGNvcnJlcG9uZHMKKyAg
ICAgICAgdG8gb25lIHN0b3JhZ2UgbWFwIChvbmUgbG9jYWxTdG9yYWdlIG9yIHNlc3Npb25TdG9y
YWdlIG9iamVjdCksIHVzaW5nIGVpdGhlciBhIFNRTGl0ZSBkYXRhYmFzZSBvciBhIGluLW1lbW9y
eQorICAgICAgICBtYXAgYXMgYmFja2VuZC4gTm93IHRoYXQgd2UgaGF2ZSBOZXR3b3JrU3RvcmFn
ZU1hbmFnZXIsIHdoaWNoIG1hbmFnZXMgc3RvcmFnZSBieSBvcmlnaW4uIFdlIGNhbiBtZXJnZQor
ICAgICAgICBTdG9yYWdlTWFuYWdlciB3aXRoIE5ldHdvcmtTdG9yYWdlTWFuYWdlciwgc2luY2Ug
bG9jYWxTdG9yYWdlIGFuZCBzZXNzaW9uU3RvcmFnZSBhcmUgbm90IHNoYXJlZCBiZXR3ZWVuIAor
ICAgICAgICBkaWZmZXJlbnQgb3JpZ2lucy4KKworICAgICAgICBUaGUgbmV3IHN0cnVjdHVyZSBp
czoKKyAgICAgICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIChtYW5hZ2Ugc3RvcmFnZSBmb3IgYSBz
ZXNzaW9uLCBvd25zIG9uZSBvciBtb3JlIE9yaWdpblN0b3JhZ2VNYW5hZ2VycykKKyAgICAgICAg
T3JpZ2luU3RvcmFnZU1hbmFnZXIgKG1hbmFnZSBzdG9yYWdlIGZvciBhbiBvcmlnaW4sIG93bnMg
b25lIExvY2FsU3RvcmFnZU1hbmFnZXIgYW5kIG9uZSBTZXNzaW9uU3RvcmFnZU1hbmFnZXIpCisg
ICAgICAgIExvY2FsU3RvcmFnZU1hbmFnZXIgLyBTZXNzaW9uU3RvcmFnZU1hbmFnZXIgKG1hbmFn
ZSBMb2NhbFN0b3JhZ2UgYW5kIFNlc3Npb25TdG9yYWdlLCBvd25zIG9uZSBvciBtb3JlIAorICAg
ICAgICBTdG9yYWdlQXJlYUJhc2VzKQorICAgICAgICBNZW1vcnlTdG9yYWdlQXJlYSAvIFNRTGl0
ZVN0b3JhZ2VBcmVhIChpbmhlcml0cyBTdG9yYWdlQXJlYUJhc2VzOyBtYW5hZ2Ugb25lIGxvY2Fs
IG9yIHNlc3Npb24gc3RvcmFnZSwgbGlrZSAKKyAgICAgICAgV2Via2l0OjpTdG9yYWdlQXJlYSkK
KworICAgICAgICBTdG9yYWdlTmFtZXNwYWNlIGxheWVyIGlzIHJlbW92ZWQuIEZvciBTZXNzaW9u
U3RvcmFnZSwgZGlmZmVyZW50IFN0b3JhZ2VOYW1lc3BhY2VzIG1lYW5zIGRpZmZlcmVudCB3ZWIg
cGFnZXMsIAorICAgICAgICBhbmQgc2FtZSBvcmlnaW4gY2FuIGhhdmUgZGlmZmVyZW50IHNlc3Np
b25TdG9yYWdlcyBvbiBkaWZmZXJlbnQgcGFnZXMsIHNvIHdlIGtlZXAgYSBTdG9yYWdlTmFtZXNw
YWNlIDw9PgorICAgICAgICBTdG9yYWdlQXJlYSBtYXAgaW4gU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
LiBGb3IgTG9jYWxTdG9yYWdlLCBkaWZmZXJudCBTdG9yYWdlTmFtZXNwYWNlcyBtZWFucyBkaWZm
ZXJlbnQgcGFnZSAKKyAgICAgICAgZ3JvdXBzLiBPdXIgb3JpZ2luYWwgcGxhbiB3YXMgdGhlIHNh
bWUgb3JpZ2luIGNhbiBoYXZlIGRpZmZlcmVudCBsb2NhbFN0b3JhZ2VzIGluIGRpZmZlcmVudCBw
YWdlIGdyb3VwcywgYnV0IG91cgorICAgICAgICBvbGQgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkg
bWFkZSBhbGwgcGFnZSBncm91cHMgcG9pbnQgdG8gdGhlIHNhbWUgZGF0YWJhc2UgZmlsZS4gVG8g
a2VlcCBleGlzdGluZyBiZWhhdmlvciAKKyAgICAgICAgdGhhdCBhbGwgcGFnZSBncm91cHMgd2l0
aCBzYW1lIG9yaWdpbiBzaGFyZSB0aGUgc3RvcmFnZSwgd2Ugbm93IGtlZXAgb25lIGxvY2FsIFN0
b3JhZ2VBcmVhIGFuZCBvbmUgdHJhbnNpZW50CisgICAgICAgIFN0b3JhZ2VBcmVhIHBlciBMb2Nh
bFN0b3JhZ2VNYW5hZ2VyLgorCisgICAgICAgIE1vc3RseSByZWZhY3RvcmluZyBhbmQgY292ZXJl
ZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6Omxvd01lbW9yeUhhbmRsZXIp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWRkV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRTdG9y
YWdlTWFuYWdlckZvclNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
ZGVzdHJveVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aGFzTG9j
YWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURh
dGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFG
b3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFuZFJl
c3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cHJlcGFyZVRvU3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpyZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZW5h
bWVPcmlnaW5JbldlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyk6IERlbGV0ZWQuCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6ZmlsZU5hbWVUb09yaWdpbik6CisgICAgICAgIChXZWJLaXQ6Om9yaWdpblRvRmlsZU5hbWUp
OgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpvcmlnaW5zT2ZMb2NhbFN0
b3JhZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6bG9jYWxT
dG9yYWdlRmlsZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpM
b2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdl
cjo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2Vy
OjpoYXNEYXRhSW5NZW1vcnkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VN
YW5hZ2VyOjpjbGVhckRhdGFJbk1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNsZWFyRGF0YU9uRGlzayk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6
aGFuZGxlTG93TWVtb3J5V2FybmluZyk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1h
bmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VN
YW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdl
TWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZEZvckxvY2FsU3RvcmFnZUFyZWEpOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkRm9yVHJhbnNpZW50
U3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25u
ZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFu
YWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpNZW1vcnlTdG9y
YWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKFdl
YktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmFsbEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6TWVt
b3J5U3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpNZW1vcnlTdG9yYWdl
QXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpj
bG9uZSBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9y
YWdlQXJlYS5oOiBBZGRlZC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpyZWFkT3JpZ2luRnJvbUZpbGUpOgorICAgICAgICAoV2ViS2l0Ojp3cml0ZU9yaWdpblRvRmls
ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6Ok5ldHdvcmtT
dG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Y2FuSGFuZGxlVHlwZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6b3JpZ2luRGlyZWN0b3J5UGF0aCk6CisgICAgICAg
IChXZWJLaXQ6Om9yaWdpbkZpbGVQYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2li
bGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZU9yaWdp
bkRpcmVjdG9yeUlmUG9zc2libGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1h
bmFnZXI6OmNsZWFyU3RvcmFnZUZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmZvckVhY2hPcmlnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmdldEFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YUZyb21EaXNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjptb3ZlRGF0YSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9UcmFuc2llbnRM
b2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
Ojpjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2Up
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c2V0SXRlbSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0Ojp0
b1dlYnNpdGVEYXRhVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OlN0b3JhZ2VCdWNrZXQp
OgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6
dG9XZWJzaXRlRGF0YVR5cGUpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6U3RvcmFnZUJ1Y2tldDo6dG9TdG9yYWdlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6
Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojpsb2NhbFN0b3JhZ2VNYW5hZ2Vy
KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6
OmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0
b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpzZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAg
ICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZXhpc3Rp
bmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6aXNFbXB0eSBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpmZXRj
aERhdGFUeXBlc0luTGlzdCk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpTdG9yYWdlQnVja2V0OjpkZWxldGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6Om1vdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6
T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmZldGNoRGF0YVR5cGVzSW5MaXN0
RnJvbU1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9y
YWdlQnVja2V0OjpmZXRjaERhdGFUeXBlc0luTGlzdEZyb21EaXNrKToKKyAgICAgICAgKFdlYktp
dDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0ZUxvY2FsU3RvcmFn
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1
Y2tldDo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2lu
U3RvcmFnZU1hbmFnZXI6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmRlZmF1bHRCdWNrZXQpOgorICAgICAgICAoV2ViS2l0OjpP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6bG9jYWxTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJL
aXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIpOgor
ICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6c2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmV4aXN0aW5nU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFn
ZXI6OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZmV0
Y2hEYXRhVHlwZXNJbkxpc3QpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6ZGVsZXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpt
b3ZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0Ojppc0FjdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U1FM
aXRlU3RvcmFnZUFyZWE6OnN0YXRlbWVudFN0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlNRTGl0ZVN0b3JhZ2VBcmVhOjpTUUxpdGVTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6
OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3Jh
Z2VBcmVhOjp+U1FMaXRlU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9y
YWdlQXJlYTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpj
bGVhcik6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjcmVhdGVUYWJsZUlm
TmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnByZXBhcmVE
YXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpzdGFydFRyYW5z
YWN0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6
Y2FjaGVkU3RhdGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6Omdl
dEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0SXRlbUZyb21E
YXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjphbGxJdGVtcyk6
CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtKToKKyAgICAgICAg
KFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpTUUxpdGVTdG9yYWdlQXJlYTo6Y29tbWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSk6CisgICAg
ICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmg6IEFk
ZGVkLgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L1Nlc3Npb25TdG9yYWdlTWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTZXNz
aW9uU3RvcmFnZU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJL
aXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y2xlYXJEYXRhKToKKyAgICAgICAg
KFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKToKKyAgICAg
ICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjphZGRTdG9yYWdlQXJlYSk6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvU2Vzc2lvblN0b3Jh
Z2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpkaXNjb25u
ZWN0RnJvbVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyOjpjbG9uZVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L1Nlc3Npb25TdG9yYWdlTWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHA6IEFkZGVkLiBTb21lIGNvZGUgaXMgbW92ZWQg
ZnJvbSBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yZWFnZS9TdG9yYWdlQXJlYS5jcHAuCisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZUFyZWFCYXNlKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZUFyZWFCYXNlOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhQmFzZTo6cmVtb3ZlTGlzdGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
QXJlYUJhc2U6Omhhc0xpc3RlbmVycyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VB
cmVhQmFzZTo6bm90aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhQmFzZTo6ZGlzcGF0Y2hFdmVudHMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmg6IEFkZGVkLiBTb21lIGNvZGUgaXMgbW92
ZWQgZnJvbSBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yZWFnZS9TdG9yYWdlQXJlYS5oLgorICAgICAg
ICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6Om9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VBcmVhQmFzZTo6cXVvdGEgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpyZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZUFyZWFSZWdpc3RyeTo6dW5yZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZUFyZWFSZWdpc3RyeTo6Z2V0U3RvcmFnZUFyZWEpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oOiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaDoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TG9j
YWxTdG9yYWdlRGV0YWlscyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZXhjbHVkZURpcmVjdG9yeUZyb21CYWNrdXApOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICogVW5p
ZmllZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VBcmVhTWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OnNldEl0ZW0p
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbSk6CisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3Jh
Z2VBcmVhTWFwOjplbnN1cmVNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6
Y29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpkaXNjb25uZWN0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weSk6CisKIDIwMjEt
MTItMTEgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
TW9tZW50dW0gRXZlbnQgRGlzcGF0Y2hlcjogVGFpbCBmcmFtZXMgYXJlIHRoZSB3cm9uZyB2ZWxv
Y2l0eSBpZiBtb21lbnR1bSBldmVudCBkaXNwYXRjaCByYXRlIGRvZXNuJ3QgbWF0Y2ggc2NyZWVu
IHJlZnJlc2ggcmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZUZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZp
bGVTeXN0ZW0uY3BwCmluZGV4IDc2ZTQ1YWYzNGVkMDkzZmQ5ZjI3NmRkNWQ0YjkyMmE0MTYzNGQ5
YWUuLmU3Y2RjYmY1YWJkMjA2OTY4NWUxZmFkMWQ3NDQxOWNhMTA4MWE5YmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKQEAgLTQzLDYg
KzQzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgY29uc3RleHByIHN0ZDo6
YXJyYXk8Y29uc3QgY2hhciAqLCAzPiBkYXRhYmFzZUZpbGVTdWZmaXhlcyB7ICIiLCAiLXNobSIs
ICItd2FsIiB9OworCiBTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKCkKIHsKIH0K
QEAgLTc3LDE4ICs3OSwyMiBAQCBib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0
YWJhc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiBGaWxlU3lzdGVt
OjpkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKIH0KIAotYm9vbCBTUUxpdGVGaWxlU3lzdGVt
OjpkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK2Jvb2wgU1FMaXRl
RmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCiB7
Ci0gICAgYXV0byB3YWxGaWxlTmFtZSA9IG1ha2VTdHJpbmcoZmlsZU5hbWUsICItd2FsIl9zKTsK
LSAgICBhdXRvIHNobUZpbGVOYW1lID0gbWFrZVN0cmluZyhmaWxlTmFtZSwgIi1zaG0iX3MpOwor
ICAgIGJvb2wgZmlsZUV4aXN0cyA9IGZhbHNlOworICAgIGZvciAoY29uc3QgYXV0byogc3VmZml4
IDogZGF0YWJhc2VGaWxlU3VmZml4ZXMpIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBmaWxlUGF0
aCArIHN1ZmZpeDsKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShwYXRoKTsKKyAgICAg
ICAgZmlsZUV4aXN0cyB8PSBGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHBhdGgpOworICAgIH0KIAot
ICAgIC8vIFRyeSB0byBkZWxldGUgYWxsIHRocmVlIGZpbGVzIHdoZXRoZXIgb3Igbm90IHRoZXkg
YXJlIHRoZXJlLgotICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZmlsZU5hbWUpOwotICAgIEZp
bGVTeXN0ZW06OmRlbGV0ZUZpbGUod2FsRmlsZU5hbWUpOwotICAgIEZpbGVTeXN0ZW06OmRlbGV0
ZUZpbGUoc2htRmlsZU5hbWUpOworICAgIHJldHVybiAhZmlsZUV4aXN0czsKK30KIAotICAgIC8v
IElmIGFueSBvZiB0aGUgd2FsIG9yIHNobSBmaWxlcyByZW1haW4gYWZ0ZXIgdGhlIGRlbGV0ZSBh
dHRlbXB0LCB0aGUgb3ZlcmFsbCBkZWxldGUgb3BlcmF0aW9uIGZhaWxlZC4KLSAgICByZXR1cm4g
IUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZU5hbWUpICYmICFGaWxlU3lzdGVtOjpmaWxlRXhp
c3RzKHdhbEZpbGVOYW1lKSAmJiAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzaG1GaWxlTmFtZSk7
Cit2b2lkIFNRTGl0ZUZpbGVTeXN0ZW06Om1vdmVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBv
bGRGaWxlUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdGaWxlUGF0aCkKK3sKKyAgICBmb3IgKGNvbnN0
IGF1dG8qIHN1ZmZpeCA6IGRhdGFiYXNlRmlsZVN1ZmZpeGVzKQorICAgICAgICBGaWxlU3lzdGVt
Ojptb3ZlRmlsZShtYWtlU3RyaW5nKG9sZEZpbGVQYXRoLCBzdWZmaXgpLCBtYWtlU3RyaW5nKG5l
d0ZpbGVQYXRoLCBzdWZmaXgpKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC05
OCwxOCArMTA0LDEzIEBAIGJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6dHJ1bmNhdGVEYXRhYmFzZUZp
bGUoc3FsaXRlMyogZGF0YWJhc2UpCiB9CiAjZW5kaWYKICAgICAKLXVpbnQ2NF90IFNRTGl0ZUZp
bGVTeXN0ZW06OmRhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKLXsgICAg
ICAgIAordWludDY0X3QgU1FMaXRlRmlsZVN5c3RlbTo6ZGF0YWJhc2VGaWxlU2l6ZShjb25zdCBT
dHJpbmcmIGZpbGVQYXRoKQorewogICAgIHVpbnQ2NF90IHRvdGFsU2l6ZSA9IDA7Ci0KLSAgICBp
ZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06OmZpbGVTaXplKGZpbGVOYW1lKSkKLSAgICAg
ICAgdG90YWxTaXplICs9ICpmaWxlU2l6ZTsKLQotICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmls
ZVN5c3RlbTo6ZmlsZVNpemUobWFrZVN0cmluZyhmaWxlTmFtZSwgIi13YWwiX3MpKSkKLSAgICAg
ICAgdG90YWxTaXplICs9ICpmaWxlU2l6ZTsKLQotICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmls
ZVN5c3RlbTo6ZmlsZVNpemUobWFrZVN0cmluZyhmaWxlTmFtZSwgIi1zaG0iX3MpKSkKLSAgICAg
ICAgdG90YWxTaXplICs9ICpmaWxlU2l6ZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8qIHN1ZmZpeCA6
IGRhdGFiYXNlRmlsZVN1ZmZpeGVzKSB7CisgICAgICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmls
ZVN5c3RlbTo6ZmlsZVNpemUoZmlsZVBhdGggKyBzdWZmaXgpKQorICAgICAgICAgICAgdG90YWxT
aXplICs9ICpmaWxlU2l6ZTsKKyAgICB9CiAKICAgICByZXR1cm4gdG90YWxTaXplOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKaW5kZXggYzY4
ZDljN2U3YWY5ODk3NmExZWQzZGNiNmYyYWNmZTRiNmNmNWMyZi4uOThlN2VhMGQwN2EyNTQxMWZh
NGY2MmFhNzIxNjU5M2Y2M2UzOWM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRmlsZVN5c3RlbS5oCkBAIC03OCw5ICs3OCwxMSBAQCBwdWJsaWM6CiAgICAgLy8g
RGVsZXRlcyBhIGRhdGFiYXNlIGZpbGUuCiAgICAgLy8KICAgICAvLyBmaWxlTmFtZSAtIFRoZSBm
aWxlIG5hbWUuCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZGVsZXRlRGF0YWJhc2VG
aWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBi
b29sIGRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKTsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUhhc2hGb3JGaWxlTmFtZShjb25zdCBT
dHJpbmcmIGZpbGVOYW1lKTsKKyAgICAvLyBNb3ZlcyBhIGRhdGFiYXNlIGZpbGUgdG8gYSBuZXcg
cGxhY2UuCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbW92ZURhdGFiYXNlRmlsZShj
b25zdCBTdHJpbmcmIG9sZEZpbGVQYXRoLCBjb25zdCBTdHJpbmcmIG5ld0ZpbGVQYXRoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVIYXNoRm9yRmlsZU5hbWUoY29u
c3QgU3RyaW5nJiBmaWxlUGF0aCk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8v
IFRydW5jYXRlcyBhIGRhdGFiYXNlIGZpbGUuIFVzZWQgd2hlbiBNb2JpbGVTYWZhcmlTZXR0aW5n
cyBkZWxldGVzIGEgZGF0YWJhc2UgZmlsZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMWVmMzNhNmU2MjczNzEwNDQ3NzUxYTU3M2My
NzQ4OTdlZDI5NDBhNi4uMjdhZjkxZTRmNTlmMzM0MTM3OGI2YWJhZmViODdhNWQ3NzdmOGQwNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
QEAgLTE1OCw3ICsxNTgsNiBAQCBzdGF0aWMgaW5saW5lIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lz
dHJ5IGNyZWF0ZU1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5KE5ldHdvcgogCiBOZXR3b3JrUHJv
Y2Vzczo6TmV0d29ya1Byb2Nlc3MoQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1l
dGVycyYmIHBhcmFtZXRlcnMpCiAgICAgOiBtX2Rvd25sb2FkTWFuYWdlcigqdGhpcykKLSAgICAs
IG1fc3RvcmFnZU1hbmFnZXJTZXQoU3RvcmFnZU1hbmFnZXJTZXQ6OmNyZWF0ZSgpKQogI2lmIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgLCBtX25ldHdvcmtDb250ZW50UnVsZUxpc3RN
YW5hZ2VyKCp0aGlzKQogI2VuZGlmCkBAIC0zMTQsMTIgKzMxMywxMyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpsb3dNZW1vcnlIYW5kbGVyKENyaXRpY2FsIGNyaXRpY2FsKQogICAgICAgICBuZXR3
b3JrU2Vzc2lvbi5jbGVhclByZWZldGNoQ2FjaGUoKTsKICAgICB9KTsKIAotICAgIG1fc3RvcmFn
ZU1hbmFnZXJTZXQtPmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKLQogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKICAgICBmb3IgKGF1dG8mIHN3U2VydmVyIDogbV9zd1NlcnZlcnMudmFsdWVz
KCkpCiAgICAgICAgIHN3U2VydmVyLT5oYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7CiAjZW5kaWYK
KworICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1fc3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKQor
ICAgICAgICBtYW5hZ2VyLT5oYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7CiB9CiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCkBAIC00MDIsNyArNDAyLDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6Y3JlYXRlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoUHJvY2Vzc0lk
ZW50aWZpZXIgaWRlbnQKIAogICAgIGNvbm5lY3Rpb24uc2V0T25MaW5lU3RhdGUoTmV0d29ya1N0
YXRlTm90aWZpZXI6OnNpbmdsZXRvbigpLm9uTGluZSgpKTsKIAotICAgIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPmFkZENvbm5lY3Rpb24oY29ubmVjdGlvbi5jb25uZWN0aW9uKCkpOwogICAgIHdlYklE
QlNlcnZlcihzZXNzaW9uSUQpLmFkZENvbm5lY3Rpb24oY29ubmVjdGlvbi5jb25uZWN0aW9uKCks
IGlkZW50aWZpZXIpOwogICAgIGlmIChhdXRvIG1hbmFnZXIgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5n
ZXQoc2Vzc2lvbklEKSkKICAgICAgICAgbWFuYWdlci0+c3RhcnRSZWNlaXZpbmdNZXNzYWdlRnJv
bUNvbm5lY3Rpb24oY29ubmVjdGlvbi5jb25uZWN0aW9uKCkpOwpAQCAtNDIxLDcgKzQyMCw3IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzCiB7CiAgICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CiAKLSAgICBhZGRTdG9yYWdl
TWFuYWdlckZvclNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxlKTsKKyAgICBh
ZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmdlbmVyYWxT
dG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxl
LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2VyKHNlc3Npb25JRCwgcGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFt
ZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKIAogICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBwYXJh
bWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwpAQCAtNDMwLDggKzQyOSw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMmJiBwYXJhbWV0ZXJzCiAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBw
YXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdU
Rk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKICNlbmRpZgogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgcGFy
YW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQogICAgIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0Ojpl
bnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbigqdGhpcywgV1RGTW92ZShwYXJhbWV0ZXJzKSk7
CiB9CiAKQEAgLTQ1NCwxMSArNDUxLDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbW92ZVNl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICBt
X3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5yZW1vdmUoc2Vzc2lvbklEKTsKIH0KIAotdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6YWRkU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBnZW5lcmFsU3RvcmFnZVBhdGgsIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSYgZ2VuZXJhbFN0b3JhZ2VQYXRoSGFuZGxlKQordm9pZCBOZXR3b3Jr
UHJvY2Vzczo6YWRkU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBnZW5lcmFsU3RvcmFnZVBhdGgsIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSYgZ2VuZXJhbFN0b3JhZ2VQYXRoSGFuZGxlLCBjb25zdCBTdHJpbmcmIGxvY2FsU3Rv
cmFnZVBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgbG9jYWxTdG9yYWdlUGF0aEhhbmRs
ZSkKIHsKICAgICBtX3N0b3JhZ2VNYW5hZ2Vycy5lbnN1cmUoc2Vzc2lvbklELCBbJl0gewogICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoZ2VuZXJhbFN0b3JhZ2VQ
YXRoSGFuZGxlKTsKLSAgICAgICAgcmV0dXJuIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y3JlYXRl
KHNlc3Npb25JRCwgZ2VuZXJhbFN0b3JhZ2VQYXRoKTsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y29uc3VtZVBlcm1hbmVudGx5KGxvY2FsU3RvcmFnZVBhdGhIYW5kbGUpOworICAgICAgICBy
ZXR1cm4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUoc2Vzc2lvbklELCBnZW5lcmFsU3Rv
cmFnZVBhdGgsIGxvY2FsU3RvcmFnZVBhdGgpOwogICAgIH0pOwogfQogCkBAIC01NzUsNyArNTcz
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQogICAgIG1fc2VydmljZVdvcmtlckluZm8ucmVtb3ZlKHNlc3Npb25JRCk7CiAj
ZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPnJlbW92ZShzZXNzaW9uSUQpOwogICAg
IGlmIChhdXRvIHNlcnZlciA9IG1fd2ViSURCU2VydmVycy50YWtlKHNlc3Npb25JRCkpCiAgICAg
ICAgIHNlcnZlci0+Y2xvc2UoKTsKICAgICByZW1vdmVTdG9yYWdlTWFuYWdlckZvclNlc3Npb24o
c2Vzc2lvbklEKTsKQEAgLTEwNjUsMTUgKzEwNjIsMTYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdp
c3QKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aGFzTG9jYWxTdG9yYWdlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAobV9zdG9y
YWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewotICAgICAgICBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW2RvbWFpbiwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIG9yaWdp
bnMpIG11dGFibGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjphbnlPZihv
cmlnaW5zLCBbJmRvbWFpbl0oYXV0byYgb3JpZ2luKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGRvbWFpbi5tYXRjaGVzKG9yaWdpbik7Ci0gICAgICAgICAgICB9KSk7Ci0gICAgICAgIH0pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOworICAg
IGlmIChpdGVyYXRvciA9PSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKworICAgIGF1dG8gdHlwZXMgPSBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiB7IFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlIH07CisgICAg
aXRlcmF0b3ItPnZhbHVlLT5mZXRjaERhdGEodHlwZXMsIFtkb21haW4sIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8gZW50cmllcykgbXV0YWJsZSB7
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6YW55T2YoZW50cmllcywgWyZkb21haW5d
KGF1dG8mIGVudHJ5KSB7CisgICAgICAgICAgICByZXR1cm4gZG9tYWluLm1hdGNoZXMoZW50cnku
b3JpZ2luKTsKKyAgICAgICAgfSkpOworICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ5MSwyMCArMTQ4OSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8
V2Vic2l0CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNv
bnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNl
dC0+Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0oYXV0byYmIG9yaWdpbnMpIHsKLSAgICAgICAgICAgIHdoaWxlICghb3JpZ2lucy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVu
dHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbnMudGFrZUFueSgpLCBXZWJz
aXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlLCAwIH0pOwotICAgICAgICB9KTsKLSAgICB9Ci0K
LSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2Fs
U3RvcmFnZSkgJiYgbV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewot
ICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKHNlc3Np
b25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIG9yaWdpbnMpIHsKLSAgICAgICAgICAg
IHdoaWxlICghb3JpZ2lucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7
IG9yaWdpbnMudGFrZUFueSgpLCBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSwgMCB9KTsK
LSAgICAgICAgfSk7Ci0gICAgfQotCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShTT1VQKQog
ICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SFNUU0Nh
Y2hlKSkKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmhvc3ROYW1l
c1dpdGhIU1RTQ2FjaGUgPSBob3N0TmFtZXNXaXRoSFNUU0NhY2hlKHNlc3Npb25JRCk7CkBAIC0x
NTU3LDEwICsxNTQxLDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0CiAgICAgfQogI2VuZGlm
CiAKLSAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lv
bklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpIHsKLSAgICAgICAgaXRl
cmF0b3ItPnZhbHVlLT5mZXRjaERhdGEod2Vic2l0ZURhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVn
YXRvcl0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNhbGxiYWNrQWdncmVn
YXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGVudHJpZXMp
KTsKLSAgICAgICAgfSk7CisgICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxl
VHlwZXMod2Vic2l0ZURhdGFUeXBlcykpIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBt
X3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1h
bmFnZXJzLmVuZCgpKSB7CisgICAgICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmZldGNoRGF0YSh3
ZWJzaXRlRGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvIGVudHJpZXMpIG11dGFi
bGUgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5l
bnRyaWVzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGVudHJpZXMpKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CiAgICAgfQogfQogCkBAIC0xNTg3LDEyICsxNTczLDYgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRp
b25TZXQ8V2Vic2kKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkRPTUNhY2hlKSkKICAgICAgICAgQ2FjaGVTdG9yYWdlOjpFbmdpbmU6OmNsZWFyQWxs
Q2FjaGVzKCp0aGlzLCBzZXNzaW9uSUQsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKIAotICAg
IGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0
b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAg
ICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRlbGV0ZVNlc3Npb25TdG9yYWdlKHNlc3Npb25JRCwg
W2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwotCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJT
ZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRl
bGV0ZUxvY2FsU3RvcmFnZU1vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBb
Y2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7Ci0KICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250
YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykgJiYgIXNlc3Npb25JRC5p
c0VwaGVtZXJhbCgpKQogICAgICAgICB3ZWJJREJTZXJ2ZXIoc2Vzc2lvbklEKS5jbG9zZUFuZERl
bGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2UobW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5k
bGVyXSB7IH0pOwogCkBAIC0xNjM3LDggKzE2MTcsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
ZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vi
c2kKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFu
YWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQo
KSkKLSAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhTW9kaWZpZWRTaW5jZSh3ZWJz
aXRlRGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7Cisg
ICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMod2Vic2l0ZURhdGFU
eXBlcykpIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5m
aW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKQorICAg
ICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhTW9kaWZpZWRTaW5jZSh3ZWJzaXRl
RGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CisgICAg
fQogfQogCiBzdGF0aWMgdm9pZCBjbGVhckRpc2tDYWNoZUVudHJpZXMoTmV0d29ya0NhY2hlOjpD
YWNoZSogY2FjaGUsIGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5zLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzAzLDEy
ICsxNjg1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmln
aW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICAgICAgICAgICAgIENhY2hlU3Rv
cmFnZTo6RW5naW5lOjpjbGVhckNhY2hlc0Zvck9yaWdpbigqdGhpcywgc2Vzc2lvbklELCBTZWN1
cml0eU9yaWdpbkRhdGEgeyBvcmlnaW5EYXRhIH0sIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsK
ICAgICB9CiAKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OlNlc3Npb25TdG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNz
aW9uSUQpKQotICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5kZWxldGVTZXNzaW9uU3RvcmFn
ZUZvck9yaWdpbnMoc2Vzc2lvbklELCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7
IH0pOwotCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpMb2NhbFN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25J
RCkpCi0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9y
aWdpbnMoc2Vzc2lvbklELCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwot
CiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRl
eGVkREJEYXRhYmFzZXMpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgd2Vi
SURCU2VydmVyKHNlc3Npb25JRCkuY2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKG9y
aWdpbkRhdGFzLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAKQEAgLTE3NDYsOCArMTcyMiwx
MCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpbwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGF1
dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9y
ICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKQotICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRl
bGV0ZURhdGEod2Vic2l0ZURhdGFUeXBlcywgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxl
cl0geyB9KTsKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3
ZWJzaXRlRGF0YVR5cGVzKSkgeworICAgICAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFn
ZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMu
ZW5kKCkpCisgICAgICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRlbGV0ZURhdGEod2Vic2l0ZURh
dGFUeXBlcywgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKKyAgICB9CiAK
ICAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0aGlzLT5uZXR3b3JrU2Vzc2lvbihzZXNz
aW9uSUQpKSB7CiAgICAgICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGRv
bWFpbnNUb0RlbGV0ZU5ldHdvcmtEYXRhRm9yOwpAQCAtMTkwNCwyOCArMTg4Miw2IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFuZFJlc3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJs
ZURvbWFpbnMoUEFMOjpTZXNzCiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIGlmIChtX3N0b3Jh
Z2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKSB7Ci0gICAgICAgIGlmICh3ZWJzaXRl
RGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpKSB7Ci0g
ICAgICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5nZXRTZXNzaW9uU3RvcmFnZU9yaWdpbnMo
c2Vzc2lvbklELCBbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRoaXMsIHNlc3Npb25J
RCwgY2FsbGJhY2tBZ2dyZWdhdG9yLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRl
RGF0YUZvcl0oYXV0byYmIG9yaWdpbnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3RvcmFn
ZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAgICAgICAgIGF1dG8gb3JpZ2luc1RvRGVsZXRlID0gZmlsdGVyRm9y
UmVnaXN0cmFibGVEb21haW5zKG9yaWdpbnMsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdl
YnNpdGVEYXRhRm9yLCBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fZG9tYWlucyk7Ci0gICAgICAgICAg
ICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2VGb3JPcmlnaW5z
KHNlc3Npb25JRCwgb3JpZ2luc1RvRGVsZXRlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2Vic2l0ZURhdGFUeXBl
cy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKLSAgICAgICAgICAg
IG1fc3RvcmFnZU1hbmFnZXJTZXQtPmdldExvY2FsU3RvcmFnZU9yaWdpbnMoc2Vzc2lvbklELCBb
cHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRoaXMsIHNlc3Npb25JRCwgY2FsbGJhY2tB
Z2dyZWdhdG9yLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvcl0oYXV0
byYmIG9yaWdpbnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3RvcmFnZU1hbmFnZXJTZXQt
PmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAgICAgICAgIGF1dG8gb3JpZ2luc1RvRGVsZXRlID0gZmlsdGVyRm9yUmVnaXN0cmFibGVE
b21haW5zKG9yaWdpbnMsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9y
LCBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fZG9tYWlucyk7Ci0gICAgICAgICAgICAgICAgbV9zdG9y
YWdlTWFuYWdlclNldC0+ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2lucyhzZXNzaW9uSUQsIG9y
aWdpbnNUb0RlbGV0ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9Ci0gICAgfQotCiAgICAgYXV0byBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhz
LmdldChzZXNzaW9uSUQpOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkgJiYgd2Vic2l0ZURhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykpIHsKICAg
ICAgICAgd2ViSURCU2VydmVyKHNlc3Npb25JRCkuZ2V0T3JpZ2lucyhbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IFJlZiB7ICp0aGlzIH0sIHNlc3Npb25JRCwgY2FsbGJhY2tBZ2dyZWdhdG9yLCBkb21h
aW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvcl0oYXV0byYmIG9yaWdpbnMpIHsK
QEAgLTE5NzIsMTEgKzE5MjgsMTMgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlQW5kUmVz
dHJpY3RXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6OlNlc3MKICAgICAgICAg
fSk7CiAgICAgfQogCi0gICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5m
aW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKSB7Ci0g
ICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyh3
ZWJzaXRlRGF0YVR5cGVzLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZv
ciwgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byBkZWxldGVkRG9tYWlucykgbXV0YWJsZSB7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8gZG9tYWluIDogZGVsZXRlZERvbWFpbnMpCi0gICAgICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX2RvbWFpbnMuYWRkKFdURk1vdmUoZG9tYWluKSk7
Ci0gICAgICAgIH0pOworICAgIGlmIChOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5
cGVzKHdlYnNpdGVEYXRhVHlwZXMpKSB7CisgICAgICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9z
dG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5h
Z2Vycy5lbmQoKSkgeworICAgICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhRm9y
UmVnaXN0cmFibGVEb21haW5zKHdlYnNpdGVEYXRhVHlwZXMsIGRvbWFpbnNUb0RlbGV0ZUFsbE5v
bkNvb2tpZVdlYnNpdGVEYXRhRm9yLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvJiYgZGVsZXRl
ZERvbWFpbnMpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byBkb21haW4gOiBk
ZWxldGVkRG9tYWlucykKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5t
X2RvbWFpbnMuYWRkKFdURk1vdmUoZG9tYWluKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQogICAgIH0KIAogICAgIGF1dG8gZGF0YVR5cGVzRm9yVUlQcm9jZXNzID0gV2Vic2l0ZURhdGE6
OmZpbHRlcih3ZWJzaXRlRGF0YVR5cGVzLCBXZWJzaXRlRGF0YVByb2Nlc3NUeXBlOjpVSSk7CkBA
IC0yMzA3LDcgKzIyNjUsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwcmVwYXJlVG9TdXNwZW5k
KGJvb2wgaXNTdXNwZW5zaW9uSW1taW5lbnQsIENvbXBsZXRpb25IYW5kbAogICAgIH0KICNlbmRp
ZgogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+c3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOworICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1fc3RvcmFnZU1hbmFnZXJzLnZhbHVl
cygpKQorICAgICAgICBtYW5hZ2VyLT5zdXNwZW5kKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5k
KCkKQEAgLTIzNDYsNyArMjMwNSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlc3VtZSgpCiAg
ICAgbV9zaG91bGRTdXNwZW5kSURCU2VydmVycyA9IGZhbHNlOwogI2VuZGlmCiAKLSAgICBtX3N0
b3JhZ2VNYW5hZ2VyU2V0LT5yZXN1bWUoKTsKKyAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX3N0
b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAgbWFuYWdlci0+cmVzdW1lKCk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUp
CkBAIC0yNDQyLDggKzI0MDIsOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKFBBTDo6U2Vzc2lvbklEIHNlcwogCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT53YWl0VW50
aWxTeW5jaW5nTG9jYWxTdG9yYWdlRmluaXNoZWQoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcigp
OworICAgIGF1dG8gYWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX3N0b3Jh
Z2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAgbWFuYWdlci0+c3luY0xvY2FsU3RvcmFnZShb
YWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90YShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTI0NzMsMTAgKzI0MzQsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpyZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgVQogICAgIGlmIChvbGRPcmlnaW4uaXNFbXB0eSgpIHx8IG5ld09yaWdpbi5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURh
dGFUeXBlOjpMb2NhbFN0b3JhZ2UpKSB7Ci0gICAgICAgIGlmIChtX3N0b3JhZ2VNYW5hZ2VyU2V0
LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+
cmVuYW1lT3JpZ2luKHNlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgW2FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmlu
ZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKKyAgICAg
ICAgaXRlcmF0b3ItPnZhbHVlLT5tb3ZlRGF0YShvbGRPcmlnaW4sIG5ld09yaWdpbiwgW2FnZ3Jl
Z2F0b3JdIHsgfSk7CiAKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6SW5kZXhlZERCRGF0YWJhc2VzKSkgewogICAgICAgICBhdXRvIHBhdGggPSBtX2lkYkRhdGFi
YXNlUGF0aHMuZ2V0KHNlc3Npb25JRCk7CkBAIC0yNzcxLDIxICsyNzMwLDggQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6cmVtb3ZlS2VwdEFsaXZlTG9hZChOZXR3b3JrUmVzb3VyY2VMb2FkZXImIGxv
YWRlcikKICAgICAgICAgc2Vzc2lvbi0+cmVtb3ZlS2VwdEFsaXZlTG9hZChsb2FkZXIpOwogfQog
Ci12b2lkIE5ldHdvcmtQcm9jZXNzOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8TG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKLXsKLSAgICBpZiAoIW1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25J
RCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDYW5ub3QgZ2V0IGxvY2FsIHN0b3JhZ2UgaW5mb3Jt
YXRpb24gZm9yIGFuIHVua25vd24gc2Vzc2lvbiIpOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cih7IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNl
dC0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29ubmVjdGlvblRvV2Vi
UHJvY2Vzc0Nsb3NlZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKIHsKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZW1vdmVDb25uZWN0aW9u
KGNvbm5lY3Rpb24pOwotCiAgICAgaWYgKGF1dG8qIHNlcnZlciA9IG1fd2ViSURCU2VydmVycy5n
ZXQoc2Vzc2lvbklEKSkKICAgICAgICAgc2VydmVyLT5yZW1vdmVDb25uZWN0aW9uKGNvbm5lY3Rp
b24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgK
aW5kZXggODgwMTdjNDRhMTA1ZjFjMGZkZTU1YjI0YzJmZTA5OWI3NjZmYWY4MS4uNWEyMGE3Y2Y5
NzAxNzBlOTRkZDdhYThlMzhmYmFkYjk1NDZhMDVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMTA3LDcgKzEwNyw2IEBAIGNsYXNzIE5l
dHdvcmtQcm94aW1pdHlNYW5hZ2VyOwogY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZGVyOwogY2xh
c3MgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOwogY2xhc3MgUHJvY2Vzc0Fzc2VydGlvbjsKLWNsYXNz
IFN0b3JhZ2VNYW5hZ2VyU2V0OwogY2xhc3MgV2ViUGFnZU5ldHdvcmtQYXJhbWV0ZXJzOwogY2xh
c3MgV2ViU1dTZXJ2ZXJDb25uZWN0aW9uOwogY2xhc3MgV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25u
ZWN0aW9uOwpAQCAtMjk2LDcgKzI5NSw2IEBAIHB1YmxpYzoKICAgICBib29sIHNlc3Npb25Jc0Nv
bnRyb2xsZWRCeUF1dG9tYXRpb24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwogCiAgICAgdm9pZCBj
b25uZWN0aW9uVG9XZWJQcm9jZXNzQ2xvc2VkKElQQzo6Q29ubmVjdGlvbiYsIFBBTDo6U2Vzc2lv
bklEKTsKLSAgICB2b2lkIGdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoUEFMOjpTZXNzaW9u
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYpOwogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKICAgICBOZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlciYgbmV0d29ya0NvbnRlbnRS
dWxlTGlzdE1hbmFnZXIoKSB7IHJldHVybiBtX25ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2Vy
OyB9CkBAIC01NTQsNyArNTUyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZFNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVp
bnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0
aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCk7CiAKLSAgICB2b2lkIGFkZFN0b3JhZ2VN
YW5hZ2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKKyAgICB2b2lkIGFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vz
c2lvbihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUmLCBjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZVBhdGgsIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEKTsKIAogICAgIC8vIENvbm5lY3Rpb25zIHRvIFdlYlByb2Nlc3Nlcy4KQEAg
LTU3Nyw4ICs1NzUsNiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0
ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7CiAKLSAgICBSZWY8U3RvcmFn
ZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7Ci0KICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggZjNj
MjNkMWMxODQ2ZDU0MzVkMGIxMzMxMzE4NDRmNDk1ZDIwNTM5MC4uMmVhNjQ1Yjc4MWFlNzNmZGYy
MjAzZjFlOTRkNDA1ZTM2MWZkOTZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0xNzMsNyArMTczLDYg
QEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogICAgIE1hcmtQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkgLT4gKCkgQXN5bmMKICAgICBTZXRQQ01GcmF1ZFByZXZlbnRpb25WYWx1ZXNG
b3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nIHNlY3JldFRva2VuLCBT
dHJpbmcgdW5saW5rYWJsZVRva2VuLCBTdHJpbmcgc2lnbmF0dXJlLCBTdHJpbmcga2V5SUQpIC0+
ICgpIEFzeW5jCiAgICAgU2V0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBcHBCdW5kbGVJREZvclRl
c3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcgYXBwQnVuZGxlSURGb3JUZXN0
aW5nKSAtPiAoKSBBc3luYwotICAgIEdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiAoVmVjdG9yPFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiBkZXRhaWxzKSBBc3luYwogCiAgICAgU2V0U2Vydmlj
ZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyBzZWNvbmRzKSAtPiAoKSBTeW5j
aHJvbm91cwogICAgIFJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSAt
PiAoKSBTeW5jaHJvbm91cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0ZGEz
M2IxOWViZTE3NjlhYjBhNTI5MzEyY2MwNTFhYTcyY2I4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5j
cHAKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTG9jYWxTdG9yYWdlTWFuYWdlci5oIgorCisjaW5jbHVkZSAiTWVtb3J5U3RvcmFn
ZUFyZWEuaCIKKyNpbmNsdWRlICJTUUxpdGVTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3Jh
Z2VBcmVhUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gU3VnZ2VzdGVkIGJ5IGh0dHBzOi8vd3d3Lncz
Lm9yZy9UUi93ZWJzdG9yYWdlLyNkaXNrLXNwYWNlCitjb25zdGV4cHIgdW5zaWduZWQgbG9jYWxT
dG9yYWdlUXVvdGFJbkJ5dGVzID0gNSAqIE1COworY29uc3RleHByIGF1dG8gZmlsZVN1ZmZpeCA9
ICIubG9jYWxzdG9yYWdlIl9zOworCisvLyBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgZm9y
IGV4aXN0aW5nIGZpbGVzLgorLy8gV2Ugc2hvdWxkIG5vdCBpbmNsdWRlIG9yaWdpbiBpbiBmaWxl
IG5hbWUuCitzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
IGZpbGVOYW1lVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK3sKKyAgICBpZiAoIWZp
bGVOYW1lLmVuZHNXaXRoKGZpbGVTdWZmaXgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgYXV0byBzdWZmaXhMZW5ndGggPSBzdHJsZW4oZmlsZVN1ZmZpeCk7CisgICAgYXV0
byBmaWxlTmFtZUxlbmd0aCA9IGZpbGVOYW1lLmxlbmd0aCgpOworICAgIGlmIChmaWxlTmFtZUxl
bmd0aCA8PSBzdWZmaXhMZW5ndGgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBhdXRvIG9yaWdpbklkZW50aWZpZXIgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWVM
ZW5ndGggLSBzdWZmaXhMZW5ndGgpOworICAgIHJldHVybiBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcik7Cit9CisKK3N0
YXRpYyBTdHJpbmcgb3JpZ2luVG9GaWxlTmFtZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4m
IG9yaWdpbikKK3sKKyAgICByZXR1cm4gb3JpZ2luLmNsaWVudE9yaWdpbi5kYXRhYmFzZUlkZW50
aWZpZXIoKSArICIubG9jYWxzdG9yYWdlIjsKK30KKworVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YT4gTG9jYWxTdG9yYWdlTWFuYWdlcjo6b3JpZ2luc09mTG9jYWxTdG9yYWdlRGF0
YShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YT4gb3JpZ2luczsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBvcmlnaW5zOworCisgICAgZm9yIChhdXRvJiBmaWxlTmFtZSA6IEZpbGVTeXN0ZW06Omxpc3RE
aXJlY3RvcnkocGF0aCkpIHsKKyAgICAgICAgaWYgKGF1dG8gb3JpZ2luID0gZmlsZU5hbWVUb09y
aWdpbihmaWxlTmFtZSkpCisgICAgICAgICAgICBvcmlnaW5zLmFwcGVuZCgqb3JpZ2luKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gb3JpZ2luczsKK30KKworU3RyaW5nIExvY2FsU3RvcmFnZU1hbmFn
ZXI6OmxvY2FsU3RvcmFnZUZpbGVQYXRoKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBpZiAoZGlyZWN0b3J5LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyB7IH07CisKKyAgICBGaWxlU3lzdGVtOjptYWtl
QWxsRGlyZWN0b3JpZXMoZGlyZWN0b3J5KTsKKyAgICByZXR1cm4gRmlsZVN5c3RlbTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KGRpcmVjdG9yeSwgb3JpZ2luVG9GaWxlTmFtZShvcmlnaW4pKTsK
K30KKworTG9jYWxTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTWFuYWdlcihjb25zdCBTdHJp
bmcmIHBhdGgsIFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQorICAgIDogbV9wYXRoKHBh
dGgpCisgICAgLCBtX3JlZ2lzdHJ5KHJlZ2lzdHJ5KQoreworfQorCitib29sIExvY2FsU3RvcmFn
ZU1hbmFnZXI6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fbG9jYWxTdG9yYWdl
QXJlYSAmJiBtX2xvY2FsU3RvcmFnZUFyZWEtPmhhc0xpc3RlbmVycygpKSB8fCAobV90cmFuc2ll
bnRTdG9yYWdlQXJlYSAmJiBtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5oYXNMaXN0ZW5lcnMoKSk7
Cit9CisKK2Jvb2wgTG9jYWxTdG9yYWdlTWFuYWdlcjo6aGFzRGF0YUluTWVtb3J5KCkgY29uc3QK
K3sKKyAgICBib29sIGhhc0RhdGFJbkxvY2FsU3RvcmFnZUFyZWEgPSBtX2xvY2FsU3RvcmFnZUFy
ZWEgJiYgaXM8TWVtb3J5U3RvcmFnZUFyZWE+KCptX2xvY2FsU3RvcmFnZUFyZWEpICYmICFtX2xv
Y2FsU3RvcmFnZUFyZWEtPmlzRW1wdHkoKTsKKyAgICByZXR1cm4gaGFzRGF0YUluTG9jYWxTdG9y
YWdlQXJlYSB8fCAobV90cmFuc2llbnRTdG9yYWdlQXJlYSAmJiAhbV90cmFuc2llbnRTdG9yYWdl
QXJlYS0+aXNFbXB0eSgpKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjbGVhckRh
dGFJbk1lbW9yeSgpCit7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlQXJlYSAmJiBpczxNZW1vcnlT
dG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkpCisgICAgICAgIG1fbG9jYWxTdG9yYWdl
QXJlYS0+Y2xlYXIoKTsKKworICAgIGlmIChtX3RyYW5zaWVudFN0b3JhZ2VBcmVhKQorICAgICAg
ICBtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5jbGVhcigpOworfQorCit2b2lkIExvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNsZWFyRGF0YU9uRGlzaygpCit7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlQXJl
YSAmJiBpczxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkpCisgICAgICAg
IG1fbG9jYWxTdG9yYWdlQXJlYS0+Y2xlYXIoKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5h
Z2VyOjpjbG9zZSgpCit7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlQXJlYSAmJiBpczxTUUxpdGVT
dG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkpCisgICAgICAgIGRvd25jYXN0PFNRTGl0
ZVN0b3JhZ2VBcmVhPigqbV9sb2NhbFN0b3JhZ2VBcmVhKS5jbG9zZSgpOworfQorCit2b2lkIExv
Y2FsU3RvcmFnZU1hbmFnZXI6OmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKQoreworICAgIGlmICht
X2xvY2FsU3RvcmFnZUFyZWEgJiYgaXM8U1FMaXRlU3RvcmFnZUFyZWE+KCptX2xvY2FsU3RvcmFn
ZUFyZWEpKQorICAgICAgICBkb3duY2FzdDxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9y
YWdlQXJlYSkuaGFuZGxlTG93TWVtb3J5V2FybmluZygpOworfQorCit2b2lkIExvY2FsU3RvcmFn
ZU1hbmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIGlmIChtX2xvY2FsU3RvcmFnZUFy
ZWEgJiYgaXM8U1FMaXRlU3RvcmFnZUFyZWE+KCptX2xvY2FsU3RvcmFnZUFyZWEpKQorICAgICAg
ICBkb3duY2FzdDxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkuY29tbWl0
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6
OmNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uKQor
eworICAgIGNvbm5lY3Rpb25DbG9zZWRGb3JMb2NhbFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24pOwor
ICAgIGNvbm5lY3Rpb25DbG9zZWRGb3JUcmFuc2llbnRTdG9yYWdlQXJlYShjb25uZWN0aW9uKTsK
K30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkRm9yTG9jYWxT
dG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24pCit7CisgICAg
aWYgKCFtX2xvY2FsU3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbG9jYWxT
dG9yYWdlQXJlYS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7CisgICAgaWYgKG1fbG9jYWxT
dG9yYWdlQXJlYS0+aGFzTGlzdGVuZXJzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChp
czxNZW1vcnlTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkgJiYgIW1fbG9jYWxTdG9y
YWdlQXJlYS0+aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlZ2lzdHJ5LnVu
cmVnaXN0ZXJTdG9yYWdlQXJlYShtX2xvY2FsU3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKSk7Cisg
ICAgbV9sb2NhbFN0b3JhZ2VBcmVhID0gbnVsbHB0cjsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VN
YW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkRm9yVHJhbnNpZW50U3RvcmFnZUFyZWEoSVBDOjpDb25u
ZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uKQoreworICAgIGlmICghbV90cmFuc2llbnRTdG9y
YWdlQXJlYSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90cmFuc2llbnRTdG9yYWdlQXJlYS0+
cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7CisgICAgaWYgKG1fdHJhbnNpZW50U3RvcmFnZUFy
ZWEtPmhhc0xpc3RlbmVycygpIHx8ICFtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVnaXN0cnkudW5yZWdpc3RlclN0b3JhZ2VBcmVh
KG1fdHJhbnNpZW50U3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKSk7CisgICAgbV90cmFuc2llbnRT
dG9yYWdlQXJlYSA9IG51bGxwdHI7Cit9CisKK1N0b3JhZ2VBcmVhSWRlbnRpZmllciBMb2NhbFN0
b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6
VW5pcXVlSUQgY29ubmVjdGlvbiwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4s
IFJlZjxXb3JrUXVldWU+JiYgd29ya1F1ZXVlKQoreworICAgIGlmICghbV9sb2NhbFN0b3JhZ2VB
cmVhKSB7CisgICAgICAgIGlmICghbV9wYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fbG9j
YWxTdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8U1FMaXRlU3RvcmFnZUFyZWE+KGxvY2FsU3RvcmFn
ZVF1b3RhSW5CeXRlcywgb3JpZ2luLCBtX3BhdGgsIFdURk1vdmUod29ya1F1ZXVlKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8TWVt
b3J5U3RvcmFnZUFyZWE+KG9yaWdpbiwgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZTo6TG9j
YWwpOworCisgICAgICAgIG1fcmVnaXN0cnkucmVnaXN0ZXJTdG9yYWdlQXJlYShtX2xvY2FsU3Rv
cmFnZUFyZWEtPmlkZW50aWZpZXIoKSwgKm1fbG9jYWxTdG9yYWdlQXJlYSk7CisgICAgfQorCisg
ICAgQVNTRVJUKG1fcGF0aC5pc0VtcHR5KCkgfHwgbV9sb2NhbFN0b3JhZ2VBcmVhLT50eXBlKCkg
PT0gU3RvcmFnZUFyZWFCYXNlOjpUeXBlOjpTUUxpdGUpOworICAgIG1fbG9jYWxTdG9yYWdlQXJl
YS0+YWRkTGlzdGVuZXIoY29ubmVjdGlvbik7CisgICAgcmV0dXJuIG1fbG9jYWxTdG9yYWdlQXJl
YS0+aWRlbnRpZmllcigpOworfQorCitTdG9yYWdlQXJlYUlkZW50aWZpZXIgTG9jYWxTdG9yYWdl
TWFuYWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3Jp
Z2luKQoreworICAgIGlmICghbV90cmFuc2llbnRTdG9yYWdlQXJlYSkgeworICAgICAgICBtX3Ry
YW5zaWVudFN0b3JhZ2VBcmVhID0gbWFrZVVuaXF1ZTxNZW1vcnlTdG9yYWdlQXJlYT4ob3JpZ2lu
LCBTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlOjpMb2NhbCk7CisgICAgICAgIG1fcmVnaXN0
cnkucmVnaXN0ZXJTdG9yYWdlQXJlYShtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5pZGVudGlmaWVy
KCksICptX3RyYW5zaWVudFN0b3JhZ2VBcmVhKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV90cmFu
c2llbnRTdG9yYWdlQXJlYS0+dHlwZSgpID09IFN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6TWVtb3J5
KTsKKyAgICBtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25uZWN0aW9uKTsK
KyAgICByZXR1cm4gbV90cmFuc2llbnRTdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpOworfQorCit2
b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRl
bnRpZmllcikKK3sKKyAgICBpZiAobV9sb2NhbFN0b3JhZ2VBcmVhICYmIG1fbG9jYWxTdG9yYWdl
QXJlYS0+aWRlbnRpZmllcigpID09IGlkZW50aWZpZXIpIHsKKyAgICAgICAgY29ubmVjdGlvbkNs
b3NlZEZvckxvY2FsU3RvcmFnZUFyZWEoY29ubmVjdGlvbik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobV90cmFuc2llbnRTdG9yYWdlQXJlYSAmJiBtX3RyYW5zaWVudFN0b3Jh
Z2VBcmVhLT5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcikKKyAgICAgICAgY29ubmVjdGlvbkNs
b3NlZEZvclRyYW5zaWVudFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24pOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2NmU2ZDVlMmJlMTI4
Y2E5NzhiN2UyNWVjN2FiNTA5NjNiOGUxZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oCkBAIC0wLDAg
KzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0b3JhZ2VB
cmVhSWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgQ2xpZW50T3Jp
Z2luOworc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIE1lbW9yeVN0b3JhZ2VBcmVhOworY2xhc3MgU3RvcmFnZUFyZWFCYXNlOworY2xh
c3MgU3RvcmFnZUFyZWFSZWdpc3RyeTsKKworY2xhc3MgTG9jYWxTdG9yYWdlTWFuYWdlciB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFZlY3RvcjxX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnNPZkxvY2FsU3RvcmFnZURhdGEoY29u
c3QgU3RyaW5nJiBwYXRoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGxvY2FsU3RvcmFnZUZpbGVQYXRo
KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisKKyAg
ICBMb2NhbFN0b3JhZ2VNYW5hZ2VyKGNvbnN0IFN0cmluZyYgcGF0aCwgU3RvcmFnZUFyZWFSZWdp
c3RyeSYpOworICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKKyAgICBib29sIGhhc0RhdGFJbk1l
bW9yeSgpIGNvbnN0OworICAgIHZvaWQgY2xlYXJEYXRhSW5NZW1vcnkoKTsKKyAgICB2b2lkIGNs
ZWFyRGF0YU9uRGlzaygpOworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2b2lkIGhhbmRsZUxvd01l
bW9yeVdhcm5pbmcoKTsKKyAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoKTsKKyAgICB2b2lkIGNv
bm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7CisKKyAgICBTdG9yYWdl
QXJlYUlkZW50aWZpZXIgY29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBSZWY8V29ya1F1ZXVlPiYm
KTsKKyAgICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgY29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9y
YWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBjb25zdCBXZWJDb3JlOjpDbGllbnRP
cmlnaW4mKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0
aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICB2
b2lkIGNvbm5lY3Rpb25DbG9zZWRGb3JMb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6
VW5pcXVlSUQpOworICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZEZvclRyYW5zaWVudFN0b3JhZ2VB
cmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQpOworCisgICAgU3RyaW5nIG1fcGF0aDsKKyAg
ICBTdG9yYWdlQXJlYVJlZ2lzdHJ5JiBtX3JlZ2lzdHJ5OworICAgIHN0ZDo6dW5pcXVlX3B0cjxN
ZW1vcnlTdG9yYWdlQXJlYT4gbV90cmFuc2llbnRTdG9yYWdlQXJlYTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8U3RvcmFnZUFyZWFCYXNlPiBtX2xvY2FsU3RvcmFnZUFyZWE7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzVjMDY1
ZGIxNzRkYzQzMWY4N2YyMDU2ZjBiMGM3ZDI3MmU5ZGYyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNwcApA
QCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTWVtb3J5U3RvcmFnZUFyZWEuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK01l
bW9yeVN0b3JhZ2VBcmVhOjpNZW1vcnlTdG9yYWdlQXJlYShjb25zdCBXZWJDb3JlOjpDbGllbnRP
cmlnaW4mIG9yaWdpbiwgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZSB0eXBlKQorICAgIDog
U3RvcmFnZUFyZWFCYXNlKFdlYkNvcmU6OlN0b3JhZ2VNYXA6Om5vUXVvdGEsIG9yaWdpbikKKyAg
ICAsIG1fbWFwKFdlYkNvcmU6OlN0b3JhZ2VNYXAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6bm9RdW90
YSkpCisgICAgLCBtX3N0b3JhZ2VUeXBlKHR5cGUpCit7Cit9CisKK2Jvb2wgTWVtb3J5U3RvcmFn
ZUFyZWE6OmlzRW1wdHkoKQoreworICAgIHJldHVybiAhbV9tYXAubGVuZ3RoKCk7Cit9CisKK3Zv
aWQgTWVtb3J5U3RvcmFnZUFyZWE6OmNsZWFyKCkKK3sKKyAgICBtX21hcC5jbGVhcigpOworICAg
IG5vdGlmeUxpc3RlbmVyc0Fib3V0Q2xlYXIoKTsKK30KKworSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gTWVtb3J5U3RvcmFnZUFyZWE6OmFsbEl0ZW1zKCkKK3sKKyAgICByZXR1cm4gbV9tYXAuaXRl
bXMoKTsKK30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBNZW1vcnlTdG9yYWdlQXJl
YTo6c2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VB
cmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIFN0cmluZyYmIGtleSwgU3RyaW5n
JiYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIFN0cmluZyBvbGRWYWx1
ZTsKKyAgICBib29sIGhhc1F1b3RhRXJyb3IgPSBmYWxzZTsKKyAgICBtX21hcC5zZXRJdGVtKGtl
eSwgdmFsdWUsIG9sZFZhbHVlLCBoYXNRdW90YUVycm9yKTsKKyAgICBpZiAoaGFzUXVvdGFFcnJv
cikKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6UXVvdGFFeGNl
ZWRlZCk7CisKKyAgICBkaXNwYXRjaEV2ZW50cyhjb25uZWN0aW9uLCBzdG9yYWdlQXJlYUltcGxJ
RCwga2V5LCBvbGRWYWx1ZSwgdmFsdWUsIHVybFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9Owor
fQorCitFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IE1lbW9yeVN0b3JhZ2VBcmVhOjpyZW1v
dmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJ
bXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICBtX21hcC5y
ZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOworICAgIGRpc3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24s
IHN0b3JhZ2VBcmVhSW1wbElELCBrZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsK
KworICAgIHJldHVybiB7IH07Cit9CisKK0V4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gTWVt
b3J5U3RvcmFnZUFyZWE6OmNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlv
biwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpCit7CisgICAgaWYgKCFtX21hcC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIG1fbWFwLmNsZWFyKCk7CisgICAgZGlzcGF0Y2hFdmVudHMoY29ubmVjdGlv
biwgaW1wbElkZW50aWZpZXIsIFN0cmluZygpLCBTdHJpbmcoKSwgU3RyaW5nKCksIHVybFN0cmlu
Zyk7CisKKyAgICByZXR1cm4geyB9OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFn
ZUFyZWE+IE1lbW9yeVN0b3JhZ2VBcmVhOjpjbG9uZSgpIGNvbnN0Cit7CisgICAgYXV0byBzdG9y
YWdlQXJlYSA9IG1ha2VVbmlxdWU8TWVtb3J5U3RvcmFnZUFyZWE+KG9yaWdpbigpLCBtX3N0b3Jh
Z2VUeXBlKTsKKyAgICBzdG9yYWdlQXJlYS0+bV9tYXAgPSBtX21hcDsKKworICAgIHJldHVybiBz
dG9yYWdlQXJlYTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuaCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdlQXJlYS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIzNzY4OTlkMjg5MTMzYjVlOTdmNDMwNWNiMmU1MWM3NDJlMWQ5Y2EKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5
U3RvcmFnZUFyZWEuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhQmFzZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
U3RvcmFnZU1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTdG9yYWdlTWFwOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTWVtb3J5U3RvcmFnZUFyZWEgZmluYWwg
OiBwdWJsaWMgU3RvcmFnZUFyZWFCYXNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBNZW1vcnlT
dG9yYWdlQXJlYShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBTdG9yYWdlQXJlYUJhc2U6
OlN0b3JhZ2VUeXBlID0gU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZTo6U2Vzc2lvbik7CisK
KyAgICBTdG9yYWdlQXJlYUJhc2U6OlR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFN0
b3JhZ2VBcmVhQmFzZTo6VHlwZTo6TWVtb3J5OyB9OworICAgIGJvb2wgaXNFbXB0eSgpIGZpbmFs
OworICAgIHZvaWQgY2xlYXIoKSBmaW5hbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3Rv
cmFnZUFyZWE+IGNsb25lKCkgY29uc3Q7CisgICAgCisKK3ByaXZhdGU6CisgICAgLy8gU3RvcmFn
ZUFyZWFCYXNlCisgICAgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3RvcmFnZVR5cGU7IH0KKyAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBhbGxJdGVtcygpIGZpbmFsOworICAgIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VF
cnJvcj4gc2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJ
ZGVudGlmaWVyLCBTdHJpbmcmJiBrZXksIFN0cmluZyYmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVy
bFN0cmluZykgZmluYWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiByZW1vdmVJ
dGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgZmluYWw7CisgICAg
RXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBjbGVhcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1
ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykg
ZmluYWw7CisKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlN0b3JhZ2VNYXAgbV9tYXA7CisgICAgU3Rv
cmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZSBtX3N0b3JhZ2VUeXBlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViS2l0OjpNZW1v
cnlTdG9yYWdlQXJlYSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViS2l0OjpTdG9y
YWdlQXJlYUJhc2UmIGFyZWEpIHsgcmV0dXJuIGFyZWEudHlwZSgpID09IFdlYktpdDo6U3RvcmFn
ZUFyZWFCYXNlOjpUeXBlOjpNZW1vcnk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3Jr
U3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggYzEwYWNiZGQ2NGZlMDRlZmYxNmExYzhi
NzRkMmJmYzE5NTNkYmQ3My4uNTY0MTg1Y2E5MDc1Y2FkMDhmNzg0NzNlMTUyMDc1ZDE3MjU3MDI5
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdv
cmtTdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKQEAgLTI4LDEyICsyOCwxOSBAQAogCiAj
aW5jbHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkZp
bGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZU1hbmFnZXIu
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJPcmlnaW5TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUg
IlNlc3Npb25TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhQmFzZS5oIgor
I2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJl
YVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDxwYWwvY3J5cHRvL0NyeXB0b0Rp
Z2VzdC5oPgogI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9TdXNwZW5kYWJs
ZVdvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJz
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKQEAgLTQzLDcgKzUwLDcgQEAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiByZWFkT3JpZ2luRnJvbUZp
bGUoY29uc3QgU3RyaW5nJiBmaWwKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
IAotICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxlUGF0aCkpCisgICAgaWYgKGZp
bGVQYXRoLmlzRW1wdHkoKSB8fCAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxlUGF0aCkpCiAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBhdXRvIG9yaWdpbkZpbGVIYW5kbGUg
PSBGaWxlU3lzdGVtOjpvcGVuRmlsZShmaWxlUGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2Rl
OjpSZWFkKTsKQEAgLTY2LDcgKzczLDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6
Q2xpZW50T3JpZ2luPiByZWFkT3JpZ2luRnJvbUZpbGUoY29uc3QgU3RyaW5nJiBmaWwKIAogc3Rh
dGljIHZvaWQgd3JpdGVPcmlnaW5Ub0ZpbGVJZk5lY2Vzc2FyeShjb25zdCBTdHJpbmcmIGZpbGVQ
YXRoLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKLSAgICBpZiAoRmls
ZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxlUGF0aCkpCisgICAgaWYgKGZpbGVQYXRoLmlzRW1wdHko
KSB8fCBGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGZpbGVQYXRoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKEZpbGVTeXN0ZW06OnBhcmVudFBh
dGgoZmlsZVBhdGgpKTsKQEAgLTc2LDcgKzgzLDcgQEAgc3RhdGljIHZvaWQgd3JpdGVPcmlnaW5U
b0ZpbGVJZk5lY2Vzc2FyeShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBjb25zdCBXZWJDb3JlOjoK
ICAgICB9KTsKIAogICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChvcmlnaW5GaWxl
SGFuZGxlKSkgewotICAgICAgICBMT0dfRVJST1IoIndyaXRlT3JpZ2luVG9GaWxlSWZOZWNlc3Nh
cnk6IEZhaWxlZCB0byBvcGVuIG9yaWdpbiBmaWxlIik7CisgICAgICAgIExPR19FUlJPUigid3Jp
dGVPcmlnaW5Ub0ZpbGVJZk5lY2Vzc2FyeTogRmFpbGVkIHRvIG9wZW4gb3JpZ2luIGZpbGUgJyVz
JyIsIGZpbGVQYXRoLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC05MywyMCArMTAwLDIyIEBAIHN0YXRpYyB2b2lkIGRlbGV0ZU9yaWdpbkZpbGVJZk5lY2Vzc2Fy
eShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQogICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxl
KGZpbGVQYXRoKTsKIH0KIAotUmVmPE5ldHdvcmtTdG9yYWdlTWFuYWdlcj4gTmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcm
IHBhdGgpCitSZWY8TmV0d29ya1N0b3JhZ2VNYW5hZ2VyPiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmNyZWF0ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgU3RyaW5nJiBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE5ldHdvcmtTdG9yYWdlTWFuYWdlcihzZXNzaW9uSUQsIHBhdGgpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrU3RvcmFnZU1hbmFnZXIoc2Vzc2lvbklELCBwYXRoLCBj
dXN0b21Mb2NhbFN0b3JhZ2VQYXRoKSk7CiB9CiAKLU5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6TmV0
d29ya1N0b3JhZ2VNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5n
JiBwYXRoKQorTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXIoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYg
Y3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkKICAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKLSAg
ICAsIG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuU3RvcmFnZSIp
KQorICAgICwgbV9xdWV1ZShTdXNwZW5kYWJsZVdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUu
V2ViS2l0LlN0b3JhZ2UiKSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0g
ICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9
LCBwYXRoID0gcGF0aC5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKKyAgICBtX3F1ZXVlLT5k
aXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHBhdGggPSBwYXRo
Lmlzb2xhdGVkQ29weSgpLCBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoID0gY3Jvc3NUaHJlYWRDb3B5
KGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgpXSgpIG11dGFibGUgewogICAgICAgICBtX2ZpbGVTeXN0
ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkgPSBtYWtlVW5pcXVlPEZpbGVTeXN0ZW1TdG9yYWdlSGFu
ZGxlUmVnaXN0cnk+KCk7CisgICAgICAgIG1fc3RvcmFnZUFyZWFSZWdpc3RyeSA9IG1ha2VVbmlx
dWU8U3RvcmFnZUFyZWFSZWdpc3RyeT4oKTsKICAgICAgICAgbV9wYXRoID0gcGF0aDsKKyAgICAg
ICAgbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoID0gY3VzdG9tTG9jYWxTdG9yYWdlUGF0aDsKICAg
ICAgICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhdXRvIHNhbHRQYXRo
ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcGF0aCwgInNhbHQiKTsK
ICAgICAgICAgICAgIG1fc2FsdCA9IEZpbGVTeXN0ZW06OnJlYWRPck1ha2VTYWx0KHNhbHRQYXRo
KS52YWx1ZV9vcihGaWxlU3lzdGVtOjpTYWx0KCkpOwpAQCAtMTIwLDYgKzEyOSwxMSBAQCBOZXR3
b3JrU3RvcmFnZU1hbmFnZXI6On5OZXR3b3JrU3RvcmFnZU1hbmFnZXIoKQogICAgIEFTU0VSVCht
X2Nsb3NlZCk7CiB9CiAKK2Jvb2wgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBl
cyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcykKK3sKKyAgICByZXR1cm4gdHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpIHx8IHR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpIHx8IHR5cGVzLmNvbnRhaW5zKFdlYnNp
dGVEYXRhVHlwZTo6RmlsZVN5c3RlbSk7Cit9CisKIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
OjpjbG9zZSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTEzMyw3ICsx
NDcsNiBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xvc2UoKQogCiAgICAgbV9xdWV1
ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSgpIG11dGFi
bGUgewogICAgICAgICBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmNsZWFyKCk7Ci0gICAg
ICAgIG1fc2Vzc2lvbk9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5jbGVhcigpOwogICAgICAgICBtX2Zp
bGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkgPSBudWxscHRyOwogCiAgICAgICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhp
cyldIHsgfSk7CkBAIC0xNzcsNyArMTkwLDcgQEAgc3RhdGljIFN0cmluZyBlbmNvZGUoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIEZpbGVTeXN0ZW06OlNhbHQgc2FsdCkKIHN0YXRpYyBTdHJpbmcgb3Jp
Z2luRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBjb25zdCBXZWJDb3JlOjpD
bGllbnRPcmlnaW4mIG9yaWdpbiwgRmlsZVN5c3RlbTo6U2FsdCBzYWx0KQogewogICAgIGlmIChy
b290UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiByb290UGF0aDsKKyAgICAgICAgcmV0
dXJuIFN0cmluZyB7IH07CiAKICAgICBhdXRvIGVuY29kZWRUb3BPcmlnaW4gPSBlbmNvZGUob3Jp
Z2luLnRvcE9yaWdpbi50b1N0cmluZygpLCBzYWx0KTsKICAgICBhdXRvIGVuY29kZWRPcGVuaW5n
T3JpZ2luID0gZW5jb2RlKG9yaWdpbi5jbGllbnRPcmlnaW4udG9TdHJpbmcoKSwgc2FsdCk7CkBA
IC0xODYsNiArMTk5LDggQEAgc3RhdGljIFN0cmluZyBvcmlnaW5EaXJlY3RvcnlQYXRoKGNvbnN0
IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE8KIAogc3RhdGljIFN0cmlu
ZyBvcmlnaW5GaWxlUGF0aChjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKIHsKKyAgICBpZiAoZGly
ZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyB7IH07CiAgICAgcmV0dXJu
IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChkaXJlY3RvcnksICJvcmlnaW4i
X3MpOwogfQogCkBAIC0xOTYsMTYgKzIxMSwzNCBAQCBPcmlnaW5TdG9yYWdlTWFuYWdlciYgTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKGNvbnN0IFdlYgog
ICAgIHJldHVybiAqbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5lbnN1cmUob3JpZ2luLCBb
Jl0gewogICAgICAgICBhdXRvIG9yaWdpbkRpcmVjdG9yeSA9IG9yaWdpbkRpcmVjdG9yeVBhdGgo
bV9wYXRoLCBvcmlnaW4sIG1fc2FsdCk7CiAgICAgICAgIHdyaXRlT3JpZ2luVG9GaWxlSWZOZWNl
c3Nhcnkob3JpZ2luRmlsZVBhdGgob3JpZ2luRGlyZWN0b3J5KSwgb3JpZ2luKTsKLSAgICAgICAg
cmV0dXJuIG1ha2VVbmlxdWU8T3JpZ2luU3RvcmFnZU1hbmFnZXI+KFdURk1vdmUob3JpZ2luRGly
ZWN0b3J5KSk7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPE9yaWdpblN0b3JhZ2VNYW5hZ2Vy
PihXVEZNb3ZlKG9yaWdpbkRpcmVjdG9yeSksIExvY2FsU3RvcmFnZU1hbmFnZXI6OmxvY2FsU3Rv
cmFnZUZpbGVQYXRoKG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgb3JpZ2luKSk7CiAgICAgfSku
aXRlcmF0b3ItPnZhbHVlOwogfQogCi12b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVtb3Zl
T3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdp
biYgb3JpZ2luKQorYm9vbCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnJlbW92ZU9yaWdpblN0b3Jh
Z2VNYW5hZ2VySWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikK
IHsKLSAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMu
ZmluZChvcmlnaW4pOyBpdGVyYXRvciAhPSBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmVu
ZCgpKSB7Ci0gICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLT5pc0FjdGl2ZSgpKQotICAgICAg
ICAgICAgbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5yZW1vdmUoaXRlcmF0b3IpOwotICAg
IH0KKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5maW5k
KG9yaWdpbik7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdl
cnMuZW5kKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGl0ZXJhdG9yLT52YWx1
ZS0+aXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9sb2NhbE9yaWdp
blN0b3JhZ2VNYW5hZ2Vycy5yZW1vdmUoaXRlcmF0b3IpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlT3JpZ2luRGlyZWN0b3J5SWZQb3Nz
aWJsZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBib29sIGlz
RW1wdHkgPSBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbikuaXNFbXB0eSgpOworICAg
IGJvb2wgcmVtb3ZlZCA9IHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShvcmln
aW4pOworICAgIGlmICghcmVtb3ZlZCB8fCAhaXNFbXB0eSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byBvcmlnaW5EaXJlY3RvcnkgPSBvcmlnaW5EaXJlY3RvcnlQYXRoKG1fcGF0aCwgb3Jp
Z2luLCBtX3NhbHQpOworICAgIGF1dG8gZmlsZVBhdGggPSBvcmlnaW5GaWxlUGF0aChvcmlnaW5E
aXJlY3RvcnkpOworICAgIGRlbGV0ZU9yaWdpbkZpbGVJZk5lY2Vzc2FyeShmaWxlUGF0aCk7Cisg
ICAgRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3Rvcnkob3JpZ2luRGlyZWN0b3J5KTsKIH0K
IAogdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnBlcnNpc3RlZChjb25zdCBXZWJDb3JlOjpD
bGllbnRPcmlnaW4mIG9yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTIzMiw5ICsyNjUsNiBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFu
YWdlcjo6Y2xlYXJTdG9yYWdlRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
YwogICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFn
ZXJzLnZhbHVlcygpKQogICAgICAgICAgICAgbWFuYWdlci0+c2V0UGVyc2lzdGVkKGZhbHNlKTsK
IAotICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX3Nlc3Npb25PcmlnaW5TdG9yYWdlTWFu
YWdlcnMudmFsdWVzKCkpCi0gICAgICAgICAgICBtYW5hZ2VyLT5zZXRQZXJzaXN0ZWQoZmFsc2Up
OwotCiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdU
Rk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwogICAgICAgICB9KTsKQEAgLTM4MiwxNCArNDEyLDYgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZU1h
bmFnZXI6OmdldEhhbmRsZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OkZp
bGUKICAgICBjb21wbGV0aW9uSGFuZGxlcihoYW5kbGUtPmdldEhhbmRsZShjb25uZWN0aW9uLnVu
aXF1ZUlEKCksIFdURk1vdmUobmFtZSkpKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2Vi
c2l0ZURhdGFUeXBlPiB0b1dlYnNpdGVEYXRhVHlwZShjb25zdCBTdHJpbmcmIHN0b3JhZ2VUeXBl
KQotewotICAgIGlmIChzdG9yYWdlVHlwZSA9PSAiRmlsZVN5c3RlbSIpCi0gICAgICAgIHJldHVy
biBXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW07Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotfQotCiB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Zm9yRWFjaE9yaWdpbkRpcmVjdG9y
eShjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYgYXBwbHkpCiB7CiAgICAgZm9y
IChhdXRvJiB0b3BPcmlnaW4gOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KG1fcGF0aCkpIHsK
QEAgLTQwMSwzMCArNDIzLDQzIEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpmb3JFYWNo
T3JpZ2luRGlyZWN0b3J5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyCiAgICAgICAgIH0K
IAogICAgICAgICBmb3IgKGF1dG8mIG9wZW5pbmdPcmlnaW4gOiBvcGVuaW5nT3JpZ2lucykgewor
ICAgICAgICAgICAgaWYgKG9wZW5pbmdPcmlnaW4uc3RhcnRzV2l0aCgnLicpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgICAgICBhdXRvIG9wZW5pbmdPcmlnaW5EaXJlY3Rv
cnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQodG9wT3JpZ2luRGlyZWN0
b3J5LCBvcGVuaW5nT3JpZ2luKTsKICAgICAgICAgICAgIGFwcGx5KG9wZW5pbmdPcmlnaW5EaXJl
Y3RvcnkpOwogICAgICAgICB9CiAgICAgfQogfQogCitIYXNoU2V0PFdlYkNvcmU6OkNsaWVudE9y
aWdpbj4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpnZXRBbGxPcmlnaW5zKCkKK3sKKyAgICBIYXNo
U2V0PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gYWxsT3JpZ2luczsKKyAgICBmb3IgKGF1dG8mIG9y
aWdpbiA6IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMua2V5cygpKQorICAgICAgICBhbGxP
cmlnaW5zLmFkZChvcmlnaW4pOworCisgICAgZm9yRWFjaE9yaWdpbkRpcmVjdG9yeShbJl0oYXV0
byBkaXJlY3RvcnkpIHsKKyAgICAgICAgaWYgKGF1dG8gb3JpZ2luID0gcmVhZE9yaWdpbkZyb21G
aWxlKG9yaWdpbkZpbGVQYXRoKGRpcmVjdG9yeSkpKQorICAgICAgICAgICAgYWxsT3JpZ2lucy5h
ZGQoKm9yaWdpbik7CisgICAgfSk7CisKKyAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IExvY2FsU3Rv
cmFnZU1hbmFnZXI6Om9yaWdpbnNPZkxvY2FsU3RvcmFnZURhdGEobV9jdXN0b21Mb2NhbFN0b3Jh
Z2VQYXRoKSkKKyAgICAgICAgYWxsT3JpZ2lucy5hZGQoV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsg
b3JpZ2luLCBvcmlnaW4gfSk7CisKKyAgICByZXR1cm4gYWxsT3JpZ2luczsKK30KKwogVmVjdG9y
PFdlYnNpdGVEYXRhOjpFbnRyeT4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpmZXRjaERhdGFGcm9t
RGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0YXJnZXRUeXBlcykKIHsKICAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPj4gb3JpZ2luVHlwZXM7Ci0gICAg
Zm9yRWFjaE9yaWdpbkRpcmVjdG9yeShbJl0oYXV0byBkaXJlY3RvcnkpIG11dGFibGUgewotICAg
ICAgICBhdXRvIG9yaWdpbiA9IHJlYWRPcmlnaW5Gcm9tRmlsZShvcmlnaW5GaWxlUGF0aChkaXJl
Y3RvcnkpKTsKLSAgICAgICAgaWYgKCFvcmlnaW4pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgZm9yIChhdXRvJiBzdG9yYWdlVHlwZSA6IEZpbGVTeXN0ZW06Omxpc3REaXJlY3Rvcnko
ZGlyZWN0b3J5KSkgewotICAgICAgICAgICAgaWYgKGF1dG8gdHlwZSA9IHRvV2Vic2l0ZURhdGFU
eXBlKHN0b3JhZ2VUeXBlKTsgdHlwZSAmJiB0YXJnZXRUeXBlcy5jb250YWlucygqdHlwZSkpIHsK
LSAgICAgICAgICAgICAgICAvLyBSZXR1cm4gYm90aCB0b3Agb3JpZ2luIGFuZCBvcGVuaW5nIG9y
aWdpbiBmb3IgdGhpcyBkYXRhLgotICAgICAgICAgICAgICAgIG9yaWdpblR5cGVzLmFkZChvcmln
aW4tPmNsaWVudE9yaWdpbiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4geyB9KS5pdGVyYXRv
ci0+dmFsdWUuYWRkKCp0eXBlKTsKLSAgICAgICAgICAgICAgICBvcmlnaW5UeXBlcy5hZGQob3Jp
Z2luLT50b3BPcmlnaW4sIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHsgfSkuaXRlcmF0b3It
PnZhbHVlLmFkZCgqdHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsKKyAg
ICBmb3IgKGF1dG8mIG9yaWdpbiA6IGdldEFsbE9yaWdpbnMoKSkgeworICAgICAgICBhdXRvIHR5
cGVzID0gbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihvcmlnaW4pLmZldGNoRGF0YVR5cGVzSW5M
aXN0KHRhcmdldFR5cGVzKTsKKyAgICAgICAgb3JpZ2luVHlwZXMuYWRkKG9yaWdpbi5jbGllbnRP
cmlnaW4sIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHsgfSkuaXRlcmF0b3ItPnZhbHVlLmFk
ZCh0eXBlcyk7CisgICAgICAgIG9yaWdpblR5cGVzLmFkZChvcmlnaW4udG9wT3JpZ2luLCBPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQodHlwZXMpOwor
ICAgICAgICByZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUob3JpZ2luKTsKKyAg
ICB9CiAKICAgICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBlbnRyaWVzOwogICAgIGZvciAo
YXV0byBbb3JpZ2luLCB0eXBlc10gOiBvcmlnaW5UeXBlcykgewpAQCAtNDQ4LDM1ICs0ODMsMjIg
QEAgdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YShPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiB0eXBlcywgQ29tcGxldGkKICAgICB9KTsKIH0KIAotVmVjdG9yPFdlYkNvcmU6
OkNsaWVudE9yaWdpbj4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrKE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzLCBXYWxsVGltZSBtb2RpZmllZFNpbmNlVGlt
ZSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKT4mIGZp
bHRlcikKK0hhc2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OmRlbGV0ZURhdGFPbkRpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMsIFdh
bGxUaW1lIG1vZGlmaWVkU2luY2VUaW1lLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IFdlYkNv
cmU6OkNsaWVudE9yaWdpbiYpPiYgZmlsdGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwogCi0gICAgVmVjdG9yPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gZGVsZXRlZE9yaWdp
bnM7Ci0gICAgZm9yRWFjaE9yaWdpbkRpcmVjdG9yeShbJl0oYXV0byBkaXJlY3RvcnkpIG11dGFi
bGUgewotICAgICAgICBhdXRvIGZpbGVQYXRoID0gb3JpZ2luRmlsZVBhdGgoZGlyZWN0b3J5KTsK
LSAgICAgICAgYXV0byBvcmlnaW4gPSByZWFkT3JpZ2luRnJvbUZpbGUoZmlsZVBhdGgpOwotICAg
ICAgICBpZiAoIW9yaWdpbikgewotICAgICAgICAgICAgLy8gSWYgb3JpZ2luIGNhbm5vdCBiZSBy
ZXRyaWV2ZWQsIGJ1dCB3ZSBhcmUgYXNrZWQgdG8gcmVtb3ZlIGRhdGEgZm9yIGFsbCBvcmlnaW5z
LCByZW1vdmUgaXQuCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrIGZhaWxlZCB0byByZWFkIG9yaWdp
biBmcm9tICclcyciLCBmaWxlUGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGlmIChm
aWx0ZXIoV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgfSkpIHsKLSAgICAgICAgICAgICAgICBhdXRv
IHRlbXBPcmlnaW5TdG9yYWdlTWFuYWdlciA9IG1ha2VVbmlxdWU8T3JpZ2luU3RvcmFnZU1hbmFn
ZXI+KFN0cmluZyB7IGRpcmVjdG9yeSB9KTsKLSAgICAgICAgICAgICAgICB0ZW1wT3JpZ2luU3Rv
cmFnZU1hbmFnZXItPmRlbGV0ZURhdGEodHlwZXMsIG1vZGlmaWVkU2luY2VUaW1lKTsKLSAgICAg
ICAgICAgICAgICBkZWxldGVPcmlnaW5GaWxlSWZOZWNlc3NhcnkoZmlsZVBhdGgpOwotICAgICAg
ICAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KGRpcmVjdG9yeSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIWZpbHRlcigqb3JpZ2luKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBIYXNoU2V0PFdl
YkNvcmU6OkNsaWVudE9yaWdpbj4gZGVsZXRlZE9yaWdpbnM7CisgICAgZm9yIChhdXRvJiBvcmln
aW4gOiBnZXRBbGxPcmlnaW5zKCkpIHsKKyAgICAgICAgaWYgKCFmaWx0ZXIob3JpZ2luKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGRlbGV0ZWRPcmlnaW5zLmFwcGVuZCgqb3Jp
Z2luKTsKLSAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcigqb3JpZ2luKS5kZWxldGVE
YXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlVGltZSk7Ci0gICAgICAgIHJlbW92ZU9yaWdpblN0b3Jh
Z2VNYW5hZ2VySWZQb3NzaWJsZSgqb3JpZ2luKTsKLSAgICAgICAgZGVsZXRlT3JpZ2luRmlsZUlm
TmVjZXNzYXJ5KGZpbGVQYXRoKTsKLSAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEaXJl
Y3RvcnkoZGlyZWN0b3J5KTsKLSAgICB9KTsKKyAgICAgICAgYXV0byBleGlzdGluZ0RhdGFUeXBl
cyA9IGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5mZXRjaERhdGFUeXBlc0luTGlz
dCh0eXBlcyk7CisgICAgICAgIGlmICghZXhpc3RpbmdEYXRhVHlwZXMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBkZWxldGVkT3JpZ2lucy5hZGQob3JpZ2luKTsKKyAgICAgICAgICAgIGxvY2Fs
T3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5kZWxldGVEYXRhKHR5cGVzLCBtb2RpZmllZFNp
bmNlVGltZSk7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlT3JpZ2luRGlyZWN0b3J5SWZQb3Nz
aWJsZShvcmlnaW4pOworICAgIH0KIAogICAgIHJldHVybiBkZWxldGVkT3JpZ2luczsKIH0KQEAg
LTU0MSw1ICs1NjMsMTYwIEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRh
Rm9yUmVnaXN0cmFibGVEb21haW5zKE9wdGlvblNldDxXZWJzaXRlRGF0CiAgICAgfSk7CiB9CiAK
K3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjptb3ZlRGF0YShjb25zdCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGEmIHNvdXJjZSwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
JiB0YXJnZXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVCghbV9jbG9zZWQp
OworCisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAq
dGhpcyB9LCBzb3VyY2UgPSBjcm9zc1RocmVhZENvcHkoc291cmNlKSwgdGFyZ2V0ID0gY3Jvc3NU
aHJlYWRDb3B5KHRhcmdldCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gc291cmNlT3JpZ2luID0gV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luIHsgc291cmNlLCBzb3VyY2UgfTsKKyAgICAgICAgYXV0byB0YXJnZXRP
cmlnaW4gPSBXZWJDb3JlOjpDbGllbnRPcmlnaW4geyB0YXJnZXQsIHRhcmdldCB9OworICAgICAg
ICAKKyAgICAgICAgLy8gQ2xlYXIgZXhpc3RpbmcgZGF0YSBvZiB0YXJnZXQgb3JpZ2luLgorICAg
ICAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcyA9IHsgV2Vic2l0ZURhdGFUeXBl
OjpGaWxlU3lzdGVtLCBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSwgV2Vic2l0ZURhdGFU
eXBlOjpTZXNzaW9uU3RvcmFnZSAgfTsKKyAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdl
cih0YXJnZXRPcmlnaW4pLmRlbGV0ZURhdGEodHlwZXMsIC1XYWxsVGltZTo6aW5maW5pdHkoKSk7
CisgICAgICAgIHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZSh0YXJnZXRPcmln
aW4pOworCisgICAgICAgIC8vIE1vdmUgZGF0YSBmcm9tIHNvdXJjZSBvcmlnaW4gdG8gdGFyZ2V0
IG9yaWdpbi4KKyAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihzb3VyY2VPcmlnaW4p
Lm1vdmVEYXRhKG9yaWdpbkRpcmVjdG9yeVBhdGgobV9wYXRoLCB0YXJnZXRPcmlnaW4sIG1fc2Fs
dCksIExvY2FsU3RvcmFnZU1hbmFnZXI6OmxvY2FsU3RvcmFnZUZpbGVQYXRoKG1fY3VzdG9tTG9j
YWxTdG9yYWdlUGF0aCwgdGFyZ2V0T3JpZ2luKSk7CisgICAgICAgIHJlbW92ZU9yaWdpblN0b3Jh
Z2VNYW5hZ2VySWZQb3NzaWJsZShzb3VyY2VPcmlnaW4pOworCisgICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisK
K3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzdXNwZW5kKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgbV9xdWV1ZS0+c3VzcGVuZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7
ICp0aGlzIH1dIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9sb2NhbE9yaWdpblN0
b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gbG9jYWxTdG9y
YWdlTWFuYWdlciA9IG1hbmFnZXItPmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcigpKQorICAg
ICAgICAgICAgICAgIGxvY2FsU3RvcmFnZU1hbmFnZXItPnN5bmNMb2NhbFN0b3JhZ2UoKTsKKyAg
ICAgICAgfQorICAgIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBO
ZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnJlc3VtZSgpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIG1fcXVldWUtPnJlc3VtZSgpOworfQorCit2b2lkIE5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6aGFuZGxlTG93TWVtb3J5V2FybmluZygpCit7CisgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gUmVmIHsgKnRoaXMgfV0geworICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xv
Y2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoYXV0
byBsb2NhbFN0b3JhZ2VNYW5hZ2VyID0gbWFuYWdlci0+ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5h
Z2VyKCkpCisgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTWFuYWdlci0+aGFuZGxlTG93TWVt
b3J5V2FybmluZygpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgeworICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1h
bmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBsb2NhbFN0b3JhZ2VNYW5h
Z2VyID0gbWFuYWdlci0+ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkpCisgICAgICAgICAg
ICAgICAgbG9jYWxTdG9yYWdlTWFuYWdlci0+c3luY0xvY2FsU3RvcmFnZSgpOworICAgICAgICB9
CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNvbm5l
Y3RUb0xvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBTdG9yYWdl
TmFtZXNwYWNlSWRlbnRpZmllciwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYgdG9wT3Jp
Z2luLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBcmVhSWRlbnRpZmllcik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luID0geyB0b3BPcmlnaW4sIHRvcE9yaWdpbiB9
OworICAgIGNvbXBsZXRpb25IYW5kbGVyKGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2lu
KS5sb2NhbFN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VBcmVhUmVnaXN0cnkpLmNvbm5lY3RUb0xv
Y2FsU3RvcmFnZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBvcmlnaW4sIG1fcXVldWUuY29w
eVJlZigpKSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9UcmFu
c2llbnRMb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFn
ZU5hbWVzcGFjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmIHRvcE9y
aWdpbiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYgb3BlbmluZ09yaWdpbiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQXJlYUlkZW50aWZpZXIpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQoreworICAgIFdlYkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4gPSB7IHRvcE9yaWdpbiwg
b3BlbmluZ09yaWdpbiB9OworICAgIGNvbXBsZXRpb25IYW5kbGVyKGxvY2FsT3JpZ2luU3RvcmFn
ZU1hbmFnZXIob3JpZ2luKS5sb2NhbFN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VBcmVhUmVnaXN0
cnkpLmNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJ
RCgpLCBvcmlnaW4pKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RU
b1Nlc3Npb25TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFN0b3JhZ2VO
YW1lc3BhY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYmIHRvcE9yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQXJlYUlkZW50aWZp
ZXIpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIFdlYkNvcmU6OkNsaWVudE9yaWdpbiBv
cmlnaW4gPSB7IHRvcE9yaWdpbiwgdG9wT3JpZ2luIH07CisgICAgY29tcGxldGlvbkhhbmRsZXIo
bG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihvcmlnaW4pLnNlc3Npb25TdG9yYWdlTWFuYWdlcigq
bV9zdG9yYWdlQXJlYVJlZ2lzdHJ5KS5jb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoY29ubmVj
dGlvbi51bmlxdWVJRCgpLCBvcmlnaW4sIGlkZW50aWZpZXIpKTsKK30KKwordm9pZCBOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBtX3N0
b3JhZ2VBcmVhUmVnaXN0cnktPmdldFN0b3JhZ2VBcmVhKGlkZW50aWZpZXIpOworICAgIGlmICgh
c3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzdG9yYWdlQXJlYS0+c3Rv
cmFnZVR5cGUoKSA9PSBTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlOjpMb2NhbCkKKyAgICAg
ICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihzdG9yYWdlQXJlYS0+b3JpZ2luKCkpLmxvY2Fs
U3RvcmFnZU1hbmFnZXIoKm1fc3RvcmFnZUFyZWFSZWdpc3RyeSkuZGlzY29ubmVjdEZyb21TdG9y
YWdlQXJlYShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIGlkZW50aWZpZXIpOworICAgIGVsc2UKKyAg
ICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihzdG9yYWdlQXJlYS0+b3JpZ2luKCkpLnNl
c3Npb25TdG9yYWdlTWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5KS5kaXNjb25uZWN0RnJv
bVN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaWRlbnRpZmllcik7Cit9CisKK3Zv
aWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgZnJv
bUlkZW50aWZpZXIsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHRvSWRlbnRpZmllcikKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGZvciAoYXV0byYgbWFuYWdl
ciA6IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYg
KGF1dG8qIHNlc3Npb25TdG9yYWdlTWFuYWdlciA9IG1hbmFnZXItPmV4aXN0aW5nU2Vzc2lvblN0
b3JhZ2VNYW5hZ2VyKCkpCisgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZU1hbmFnZXItPmNsb25l
U3RvcmFnZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBmcm9tSWRlbnRpZmllciwgdG9JZGVu
dGlmaWVyKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpnZXRWYWx1
ZXMoU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChhdXRvIHN0b3Jh
Z2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9yYWdlQXJlYShpZGVudGlmaWVy
KSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VBcmVhLT5hbGxJdGVt
cygpKTsKKyAgICAKKyAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKK30KKwordm9p
ZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgU3RvcmFnZUFyZWFJbXBsSWRl
bnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIFN0cmluZyYm
IGtleSwgU3RyaW5nJiYgdmFsdWUsIFN0cmluZyYmIHVybFN0cmluZykKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGJvb2wgaGFzUXVvdGFFcnJvciA9IGZhbHNlOwor
ICAgIGlmIChhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9y
YWdlQXJlYShpZGVudGlmaWVyKSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHN0b3JhZ2VBcmVh
LT5zZXRJdGVtKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaW1wbElkZW50aWZpZXIsIFN0cmluZyB7
IGtleSB9LCBXVEZNb3ZlKHZhbHVlKSwgV1RGTW92ZSh1cmxTdHJpbmcpKTsKKyAgICAgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgICAgICBoYXNRdW90YUVycm9yID0gKHJlc3VsdC5lcnJvcigpID09
IFN0b3JhZ2VFcnJvcjo6UXVvdGFFeGNlZWRlZCk7CisgICAgfQorCisgICAgY29ubmVjdGlvbi5z
ZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlkU2V0SXRlbShzdG9yYWdlTWFwU2VlZCwg
a2V5LCBoYXNRdW90YUVycm9yKSwgaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFn
ZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgaW1w
bElkZW50aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcmJiBrZXksIFN0cmlu
ZyYmIHVybFN0cmluZykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGlmIChhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9yYWdl
QXJlYShpZGVudGlmaWVyKSkKKyAgICAgICAgc3RvcmFnZUFyZWEtPnJlbW92ZUl0ZW0oY29ubmVj
dGlvbi51bmlxdWVJRCgpLCBpbXBsSWRlbnRpZmllciwga2V5LCBXVEZNb3ZlKHVybFN0cmluZykp
OworCisgICAgY29ubmVjdGlvbi5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlkUmVt
b3ZlSXRlbShzdG9yYWdlTWFwU2VlZCwgV1RGTW92ZShrZXkpKSwgaWRlbnRpZmllcik7Cit9CisK
K3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbGVhcihJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBTdG9yYWdlQXJlYUltcGxJ
ZGVudGlmaWVyIGltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgU3RyaW5n
JiYgdXJsU3RyaW5nKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
aWYgKGF1dG8gc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhUmVnaXN0cnktPmdldFN0b3JhZ2VB
cmVhKGlkZW50aWZpZXIpKQorICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoY29ubmVjdGlvbi51
bmlxdWVJRCgpLCBpbXBsSWRlbnRpZmllciwgV1RGTW92ZSh1cmxTdHJpbmcpKTsKKworICAgIGNv
bm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZENsZWFyKHN0b3JhZ2VN
YXBTZWVkKSwgaWRlbnRpZmllcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29y
a1N0b3JhZ2VNYW5hZ2VyLmgKaW5kZXggMmFkZGYyYjVlMjBhZDM2ZDI4ZTQ0NTk3ZWE0MTNmZmU4
OTYxYTQwZi4uYjgwOTcyNThmZGI5MmQxMGM1NzAwMzQwNWNmODNjZDEwOWUwMGZlOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdl
TWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3
b3JrU3RvcmFnZU1hbmFnZXIuaApAQCAtMjgsNiArMjgsOSBAQAogI2luY2x1ZGUgIkNvbm5lY3Rp
b24uaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtU3RvcmFnZUVycm9yLmgiCiAjaW5jbHVkZSAiT3Jp
Z2luU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50aWZpZXIuaCIK
KyNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU3RvcmFn
ZU5hbWVzcGFjZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVt
SGFuZGxlSWRlbnRpZmllci5oPgpAQCAtNDYsMTAgKzQ5LDEyIEBAIHN0cnVjdCBDbGllbnRPcmln
aW47CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVS
ZWdpc3RyeTsKK2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnk7CiAKIGNsYXNzIE5ldHdvcmtTdG9y
YWdlTWFuYWdlciBmaW5hbCA6IHB1YmxpYyBJUEM6OkNvbm5lY3Rpb246OldvcmtRdWV1ZU1lc3Nh
Z2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBzdGF0
aWMgUmVmPE5ldHdvcmtTdG9yYWdlTWFuYWdlcj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCk7Cisg
ICAgc3RhdGljIGJvb2wgY2FuSGFuZGxlVHlwZXMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4p
OwogCiAgICAgdm9pZCBzdGFydFJlY2VpdmluZ01lc3NhZ2VGcm9tQ29ubmVjdGlvbihJUEM6OkNv
bm5lY3Rpb24mKTsKICAgICB2b2lkIHN0b3BSZWNlaXZpbmdNZXNzYWdlRnJvbUNvbm5lY3Rpb24o
SVBDOjpDb25uZWN0aW9uJik7CkBAIC02MSwyMiArNjYsMzAgQEAgcHVibGljOgogICAgIHZvaWQg
ZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwog
ICAgIHZvaWQgZGVsZXRlRGF0YU1vZGlmaWVkU2luY2UoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4sIFdhbGxUaW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZGVs
ZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwg
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik+JiYpOworICAg
IHZvaWQgbW92ZURhdGEoY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBzb3VyY2Us
IGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdGFyZ2V0LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc3VzcGVuZChDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOworICAgIHZvaWQgcmVzdW1lKCk7CisgICAgdm9pZCBoYW5kbGVMb3dNZW1vcnlXYXJu
aW5nKCk7CisgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CiAKIHByaXZhdGU6Ci0gICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyKFBBTDo6U2Vzc2lv
bklELCBjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIE5ldHdvcmtTdG9yYWdlTWFuYWdlcihQQUw6
OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGN1c3RvbUxvY2Fs
U3RvcmFnZVBhdGgpOwogICAgIH5OZXR3b3JrU3RvcmFnZU1hbmFnZXIoKTsKICAgICBPcmlnaW5T
dG9yYWdlTWFuYWdlciYgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihjb25zdCBXZWJDb3JlOjpD
bGllbnRPcmlnaW4mKTsKLSAgICB2b2lkIHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3Nz
aWJsZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICBib29sIHJlbW92ZU9yaWdp
blN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsK
KyAgICB2b2lkIGRlbGV0ZU9yaWdpbkRpcmVjdG9yeUlmUG9zc2libGUoY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJik7CiAgICAgRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSYgZmls
ZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSgpOwogCiAgICAgdm9pZCBmb3JFYWNoT3JpZ2lu
RGlyZWN0b3J5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+Jik7CisgICAgSGFz
aFNldDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IGdldEFsbE9yaWdpbnMoKTsKICAgICBWZWN0b3I8
V2Vic2l0ZURhdGE6OkVudHJ5PiBmZXRjaERhdGFGcm9tRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPik7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gZGVsZXRlRGF0YU9u
RGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUsIGNvbnN0IEZ1bmN0aW9u
PGJvb2woY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik+Jik7CisgICAgSGFzaFNldDxXZWJD
b3JlOjpDbGllbnRPcmlnaW4+IGRlbGV0ZURhdGFPbkRpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4sIFdhbGxUaW1lLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYpPiYpOwogCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIgKGltcGxlbWVudGVk
IGJ5IGdlbmVyYXRlZCBjb2RlKQogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBkaWRSZWNlaXZlU3luY01lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6RW5jb2Rlcj4m
IHJlcGx5RW5jb2Rlcik7CiAKLSAgICAvLyBNZXNzYWdlIGhhbmRsZXJzCisgICAgLy8gTWVzc2Fn
ZSBoYW5kbGVycyBmb3IgRmlsZVN5c3RlbS4KICAgICB2b2lkIHBlcnNpc3RlZChjb25zdCBXZWJD
b3JlOjpDbGllbnRPcmlnaW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAg
ICB2b2lkIHBlcnNpc3QoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCBmaWxlU3lzdGVtR2V0RGlyZWN0b3J5KElQ
Qzo6Q29ubmVjdGlvbiYsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoRXhwZWN0ZWQ8V2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIs
IEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CkBAIC04OCwyMiArMTAxLDMzIEBAIHByaXZh
dGU6CiAgICAgdm9pZCByZW1vdmVFbnRyeShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGRlbGV0ZVJlY3Vyc2l2ZWx5LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYm
KTsKICAgICB2b2lkIHJlc29sdmUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIs
IFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYp
OwogICAgIHZvaWQgZ2V0RmlsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChFeHBlY3RlZDxTdHJpbmcsIEZpbGVTeXN0ZW1TdG9yYWdl
RXJyb3I+KT4mJik7Ci0KICAgICB1c2luZyBBY2Nlc3NIYW5kbGVJbmZvID0gc3RkOjpwYWlyPFdl
YkNvcmU6OkZpbGVTeXN0ZW1TeW5jQWNjZXNzSGFuZGxlSWRlbnRpZmllciwgSVBDOjpTaGFyZWRG
aWxlSGFuZGxlPjsKICAgICB2b2lkIGNyZWF0ZVN5bmNBY2Nlc3NIYW5kbGUoV2ViQ29yZTo6Rmls
ZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwZWN0ZWQ8
QWNjZXNzSGFuZGxlSW5mbywgRmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsKICAgICB2b2lk
IGNsb3NlQWNjZXNzSGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBX
ZWJDb3JlOjpGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50aWZpZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxGaWxlU3lzdGVtU3RvcmFnZUVycm9yPik+JiYpOwog
ICAgIHZvaWQgZ2V0SGFuZGxlTmFtZXMoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZp
ZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwZWN0ZWQ8VmVjdG9yPFN0cmluZz4sIEZpbGVT
eXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCBnZXRIYW5kbGUoSVBDOjpDb25uZWN0
aW9uJiwgV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIFN0cmluZyYmIG5hbWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwZWN0ZWQ8c3RkOjpwYWlyPFdlYkNvcmU6OkZpbGVT
eXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBib29sPiwgRmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYm
KTsKKyAgICAKKyAgICAvLyBNZXNzYWdlIGhhbmRsZXJzIGZvciBXZWJTdG9yYWdlLgorICAgIHZv
aWQgY29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlTmFt
ZXNwYWNlSWRlbnRpZmllciwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU3RvcmFnZUFyZWFJZGVudGlmaWVyKT4mJik7CisgICAgdm9pZCBjb25u
ZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VO
YW1lc3BhY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFy
ZWFJZGVudGlmaWVyKT4mJik7CisgICAgdm9pZCBjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEo
SVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luRGF0YSYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBcmVhSWRl
bnRpZmllcik+JiYpOworICAgIHZvaWQgZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShJUEM6OkNv
bm5lY3Rpb24mLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIpOworICAgIHZvaWQgY2xvbmVTZXNzaW9u
U3RvcmFnZU5hbWVzcGFjZShJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRp
ZmllciwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZ2V0VmFsdWVzKFN0
b3JhZ2VBcmVhSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiYpPiYmKTsKKyAgICB2b2lkIHNldEl0ZW0oSVBDOjpDb25uZWN0aW9u
JiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyLCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCB1aW50
NjRfdCBzZWVkLCBTdHJpbmcmJiBrZXksIFN0cmluZyYmIHZhbHVlLCBTdHJpbmcmJiB1cmxTdHJp
bmcpOworICAgIHZvaWQgcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlQXJlYUlk
ZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHNlZWQsIFN0cmlu
ZyYmIGtleSwgU3RyaW5nJiYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIGNsZWFyKElQQzo6Q29ubmVj
dGlvbiYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwg
dWludDY0X3Qgc2VlZCwgU3RyaW5nJiYgdXJsU3RyaW5nKTsKIAogICAgIFBBTDo6U2Vzc2lvbklE
IG1fc2Vzc2lvbklEOwotICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7CisgICAgUmVmPFN1c3Bl
bmRhYmxlV29ya1F1ZXVlPiBtX3F1ZXVlOwogICAgIFN0cmluZyBtX3BhdGg7CiAgICAgRmlsZVN5
c3RlbTo6U2FsdCBtX3NhbHQ7CiAgICAgYm9vbCBtX2Nsb3NlZCB7IGZhbHNlIH07CiAgICAgSGFz
aE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxPcmlnaW5TdG9yYWdl
TWFuYWdlcj4+IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnM7Ci0gICAgSGFzaE1hcDxXZWJD
b3JlOjpDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxPcmlnaW5TdG9yYWdlTWFuYWdlcj4+
IG1fc2Vzc2lvbk9yaWdpblN0b3JhZ2VNYW5hZ2VyczsKICAgICBXZWFrSGFzaFNldDxJUEM6OkNv
bm5lY3Rpb24+IG1fY29ubmVjdGlvbnM7IC8vIE1haW4gdGhyZWFkIG9ubHkuCiAgICAgc3RkOjp1
bmlxdWVfcHRyPEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnk+IG1fZmlsZVN5c3RlbVN0
b3JhZ2VIYW5kbGVSZWdpc3RyeTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZUFyZWFSZWdp
c3RyeT4gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5OworICAgIFN0cmluZyBtX2N1c3RvbUxvY2FsU3Rv
cmFnZVBhdGg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0d29ya1N0
b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluCmluZGV4IDRlNDA1YzZlZWFkMzI2ZTI1YjQzMTY0MjA3
MDgwOTVmYTYwZGM4MzguLjA0MjJiNjM0NzUxZDAzODVmODRlMDFmNjRhYzYxZGFmMzFjMTVlODgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3Jr
U3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbgpAQCAtMzUsOSAr
MzUsMTggQEAKICAgICBSZXNvbHZlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVy
IGlkZW50aWZpZXIsIFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIHRhcmdldElk
ZW50aWZpZXIpIC0+IChFeHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgV2ViS2l0OjpGaWxlU3lzdGVt
U3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5jCiAgICAgTW92ZShXZWJDb3JlOjpGaWxlU3lzdGVt
SGFuZGxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRl
bnRpZmllciBkZXN0aW5hdGlvbklkZW50aWZpZXIsIFN0cmluZyBuZXdOYW1lKSAtPiAoc3RkOjpv
cHRpb25hbDxXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkgQXN5bmMKICAg
ICBHZXRGaWxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIGlkZW50aWZpZXIp
IC0+IChFeHBlY3RlZDxTdHJpbmcsIFdlYktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVz
dWx0KSBBc3luYwotCiAgICAgQ3JlYXRlU3luY0FjY2Vzc0hhbmRsZShXZWJDb3JlOjpGaWxlU3lz
dGVtSGFuZGxlSWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAoRXhwZWN0ZWQ8c3RkOjpwYWlyPFdl
YkNvcmU6OkZpbGVTeXN0ZW1TeW5jQWNjZXNzSGFuZGxlSWRlbnRpZmllciwgSVBDOjpTaGFyZWRG
aWxlSGFuZGxlPiwgV2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5j
CiAgICAgQ2xvc2VBY2Nlc3NIYW5kbGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZp
ZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6RmlsZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlm
aWVyIGFjY2Vzc0hhbmRsZUlkZW50aWZpZXIpIC0+IChzdGQ6Om9wdGlvbmFsPFdlYktpdDo6Rmls
ZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYwogICAgIEdldEhhbmRsZU5hbWVzKFdl
YkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IChFeHBlY3Rl
ZDxWZWN0b3I8U3RyaW5nPiwgV2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQp
IEFzeW5jCiAgICAgR2V0SGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVy
IGlkZW50aWZpZXIsIFN0cmluZyBuYW1lKSAtPiAoRXhwZWN0ZWQ8c3RkOjpwYWlyPFdlYkNvcmU6
OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBib29sPiwgV2ViS2l0OjpGaWxlU3lzdGVtU3Rv
cmFnZUVycm9yPiByZXN1bHQpIEFzeW5jIFdhbnRzQ29ubmVjdGlvbgorCisgICAgQ29ubmVjdFRv
TG9jYWxTdG9yYWdlQXJlYShXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHN0b3Jh
Z2VOYW1lc3BhY2VJRCwgc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBzZWN1cml0
eU9yaWdpbkRhdGEpIC0+IChXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVy
KSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KKyAgICBDb25uZWN0VG9UcmFuc2llbnRMb2Nh
bFN0b3JhZ2VBcmVhKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgc3RvcmFnZU5h
bWVzcGFjZUlELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHRvcExldmVsU2Vj
dXJpdHlPcmlnaW5EYXRhLCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHNlY3Vy
aXR5T3JpZ2luRGF0YSkgLT4gKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZp
ZXIpIFN5bmNocm9ub3VzIFdhbnRzQ29ubmVjdGlvbgorICAgIENvbm5lY3RUb1Nlc3Npb25TdG9y
YWdlQXJlYShXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHN0b3JhZ2VOYW1lc3Bh
Y2VJRCwgc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBzZWN1cml0eU9yaWdpbkRh
dGEpIC0+IChXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKSBTeW5jaHJv
bm91cyBXYW50c0Nvbm5lY3Rpb24KKyAgICBEaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKFdlYktp
dDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpIFdhbnRzQ29ubmVjdGlvbgorICAg
IENsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSWRl
bnRpZmllciBmcm9tU3RvcmFnZU5hbWVzcGFjZUlELCBXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJ
ZGVudGlmaWVyIHRvU3RvcmFnZU5hbWVzcGFjZUlEKSBXYW50c0Nvbm5lY3Rpb24KKyAgICBHZXRW
YWx1ZXMoV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gKEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IHZhbHVlcykgU3luY2hyb25vdXMKKyAgICBTZXRJdGVtKFdlYktp
dDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6U3RvcmFnZUFyZWFJ
bXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIFN0
cmluZyBrZXksIFN0cmluZyB2YWx1ZSwgU3RyaW5nIHVybFN0cmluZykgV2FudHNDb25uZWN0aW9u
CisgICAgUmVtb3ZlSXRlbShXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVy
LCBXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2
NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcga2V5LCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50c0Nv
bm5lY3Rpb24KKyAgICBDbGVhcihXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlm
aWVyLCBXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZpZXIsIHVp
bnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50c0Nvbm5lY3Rpb24K
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Pcmln
aW5TdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IDI1NGRmZTNiZmY0YTU2ZDJlOTU5MjI2
YmZjZmJmZWQ1NWEyMTU2NmMuLmY2YjM2MTlhNWRlM2RkMmE5NGFmNWRkYmQ1MDNmNTc2MDRjOThk
ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9Pcmln
aW5TdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMjgsMTkgKzI4LDI1IEBACiAKICNp
bmNsdWRlICJGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiRmls
ZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlTWFuYWdlci5o
IgorI2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VB
cmVhUmVnaXN0cnkuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVR5cGUuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL1NRTGl0ZUZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorc3RhdGljIGNvbnN0ZXhwciBhdXRvIG9yaWdpbkZpbGVO
YW1lID0gIm9yaWdpbiJfczsKIGVudW0gY2xhc3MgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3Jh
Z2VCdWNrZXRNb2RlIDogYm9vbCB7IEJlc3RFZmZvcnQsIFBlcnNpc3RlbnQgfTsKIAogY2xhc3Mg
T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIFN0b3JhZ2VCdWNrZXQoY29uc3QgU3RyaW5nJiByb290
UGF0aCwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQorICAgIFN0b3JhZ2VCdWNrZXQoY29uc3Qg
U3RyaW5nJiByb290UGF0aCwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IGxvY2FsU3RvcmFnZVBhdGgpCiAgICAgICAgIDogbV9yb290UGF0aChyb290UGF0aCkKICAgICAg
ICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAgICAgLCBtX2xvY2FsU3RvcmFnZVBh
dGgobG9jYWxTdG9yYWdlUGF0aCkKICAgICB7CiAgICAgfQogCkBAIC01NSwxMyArNjEsMzEgQEAg
cHVibGljOgogCiAgICAgZW51bSBjbGFzcyBTdG9yYWdlVHlwZSA6IHVpbnQ4X3QgewogICAgICAg
ICBGaWxlU3lzdGVtLAorICAgICAgICBMb2NhbFN0b3JhZ2UsCisgICAgICAgIFNlc3Npb25TdG9y
YWdlLAogICAgIH07CiAKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJzaXRlRGF0YVR5cGU+
IHRvV2Vic2l0ZURhdGFUeXBlKGNvbnN0IFN0cmluZyYgc3RvcmFnZUlkZW50aWZpZXIpCisgICAg
eworICAgICAgICBpZiAoc3RvcmFnZUlkZW50aWZpZXIgPT0gIkZpbGVTeXN0ZW0iX3MpCisgICAg
ICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtOworICAgICAgICBpZiAo
c3RvcmFnZUlkZW50aWZpZXIgPT0gIkxvY2FsU3RvcmFnZSJfcykKKyAgICAgICAgICAgIHJldHVy
biBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZTsKKyAgICAgICAgaWYgKHN0b3JhZ2VJZGVu
dGlmaWVyID09ICJTZXNzaW9uU3RvcmFnZSJfcykKKyAgICAgICAgICAgIHJldHVybiBXZWJzaXRl
RGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlOworCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisgICAgfQorCiAgICAgc3RhdGljIFN0cmluZyB0b1N0b3JhZ2VJZGVudGlmaWVyKFN0b3JhZ2VU
eXBlIHR5cGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBT
dG9yYWdlVHlwZTo6RmlsZVN5c3RlbToKICAgICAgICAgICAgIHJldHVybiAiRmlsZVN5c3RlbSJf
czsKKyAgICAgICAgY2FzZSBTdG9yYWdlVHlwZTo6TG9jYWxTdG9yYWdlOgorICAgICAgICAgICAg
cmV0dXJuICJMb2NhbFN0b3JhZ2UiX3M7CisgICAgICAgIGNhc2UgU3RvcmFnZVR5cGU6OlNlc3Np
b25TdG9yYWdlOgorICAgICAgICAgICAgcmV0dXJuICJTZXNzaW9uU3RvcmFnZSJfczsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04NiwxOCArMTEw
LDExOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFn
ZXI7CiAgICAgfQogCi0gICAgYm9vbCBpc0FjdGl2ZSgpCisgICAgTG9jYWxTdG9yYWdlTWFuYWdl
ciYgbG9jYWxTdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKKyAg
ICB7CisgICAgICAgIGlmICghbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICAgICAgbV9s
b2NhbFN0b3JhZ2VNYW5hZ2VyID0gbWFrZVVuaXF1ZTxMb2NhbFN0b3JhZ2VNYW5hZ2VyPihtX2xv
Y2FsU3RvcmFnZVBhdGgsIHJlZ2lzdHJ5KTsKKworICAgICAgICByZXR1cm4gKm1fbG9jYWxTdG9y
YWdlTWFuYWdlcjsKKyAgICB9CisKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ0xv
Y2FsU3RvcmFnZU1hbmFnZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWxTdG9yYWdl
TWFuYWdlci5nZXQoKTsKKyAgICB9CisKKyAgICBTZXNzaW9uU3RvcmFnZU1hbmFnZXImIHNlc3Np
b25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAhIW1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOworICAgICAgICBpZiAo
IW1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1h
bmFnZXIgPSBtYWtlVW5pcXVlPFNlc3Npb25TdG9yYWdlTWFuYWdlcj4ocmVnaXN0cnkpOworCisg
ICAgICAgIHJldHVybiAqbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXI7CisgICAgfQorCisgICAgU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdlcigpCisgICAg
eworICAgICAgICByZXR1cm4gbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIuZ2V0KCk7CisgICAgfQor
CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9maWxl
U3lzdGVtU3RvcmFnZU1hbmFnZXIgfHwgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyIHx8IG1fc2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyOworICAgIH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAg
eworICAgICAgICBhdXRvIGZpbGVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShtX3Jvb3RQ
YXRoKTsKKyAgICAgICAgYXV0byBoYXNWYWxpZEZpbGUgPSBXVEY6OmFueU9mKGZpbGVzLCBbJl0o
YXV0byBmaWxlKSB7CisgICAgICAgICAgICBib29sIGlzSW52YWxpZEZpbGUgPSAoZmlsZSA9PSBv
cmlnaW5GaWxlTmFtZSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgICAgICBpc0ludmFs
aWRGaWxlIHw9IChmaWxlID09ICIuRFNfU3RvcmUiKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0
dXJuICFpc0ludmFsaWRGaWxlOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKGhhc1ZhbGlkRmls
ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gIUZpbGVTeXN0
ZW06OmZpbGVFeGlzdHMobV9sb2NhbFN0b3JhZ2VQYXRoKTsKKyAgICB9CisKKyAgICBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGFUeXBlc0luTGlzdChPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiB0eXBlcykKKyAgICB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZmV0Y2hEYXRh
VHlwZXNJbkxpc3RGcm9tTWVtb3J5KHR5cGVzKTsKKyAgICAgICAgcmVzdWx0LmFkZChmZXRjaERh
dGFUeXBlc0luTGlzdEZyb21EaXNrKHR5cGVzKSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKICAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
dHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2VUaW1lKQogICAgIHsKICAgICAgICAgaWYgKHR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSkpCiAgICAgICAgICAgICBk
ZWxldGVGaWxlU3lzdGVtU3RvcmFnZURhdGEobW9kaWZpZWRTaW5jZVRpbWUpOworCisgICAgICAg
IGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkpCisgICAg
ICAgICAgICBkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKG1vZGlmaWVkU2luY2VUaW1lKTsKKworICAg
ICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSkg
JiYgbW9kaWZpZWRTaW5jZVRpbWUgPT0gLVdhbGxUaW1lOjppbmZpbml0eSgpKQorICAgICAgICAg
ICAgZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKCk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlRGF0
YShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlUGF0aCkKKyAg
ICB7CisgICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0cjsKKyAgICAg
ICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdlcikKKyAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdl
TWFuYWdlci0+Y2xvc2UoKTsKKworICAgICAgICBGaWxlU3lzdGVtOjptb3ZlRmlsZShtX3Jvb3RQ
YXRoLCBwYXRoKTsKKworICAgICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlUGF0aC5pc0VtcHR5KCkg
JiYgIWxvY2FsU3RvcmFnZVBhdGguaXNFbXB0eSgpKQorICAgICAgICAgICAgV2ViQ29yZTo6U1FM
aXRlRmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZShtX2xvY2FsU3RvcmFnZVBhdGgsIGxvY2Fs
U3RvcmFnZVBhdGgpOwogICAgIH0KIAogcHJpdmF0ZToKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiBmZXRjaERhdGFUeXBlc0luTGlzdEZyb21NZW1vcnkoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gdHlwZXMpCisgICAgeworICAgICAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiByZXN1bHQ7CisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6Okxv
Y2FsU3RvcmFnZSkpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZU1hbmFnZXIgJiYg
bV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9y
YWdlKSkgeworICAgICAgICAgICAgaWYgKG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyICYmIG1fc2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSkKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiBmZXRjaERhdGFUeXBlc0luTGlzdEZyb21EaXNrKE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+IHR5cGVzKQorICAgIHsKKyAgICAgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
cmVzdWx0OworICAgICAgICBmb3IgKGF1dG8mIHN0b3JhZ2VUeXBlIDogRmlsZVN5c3RlbTo6bGlz
dERpcmVjdG9yeShtX3Jvb3RQYXRoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gdHlwZSA9IHRv
V2Vic2l0ZURhdGFUeXBlKHN0b3JhZ2VUeXBlKTsgdHlwZSAmJiB0eXBlcy5jb250YWlucygqdHlw
ZSkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZCgqdHlwZSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpICYm
ICFyZXN1bHQuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpKSB7CisgICAg
ICAgICAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhtX2xvY2FsU3RvcmFnZVBhdGgpKQor
ICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2Up
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICB2b2lk
IGRlbGV0ZUZpbGVTeXN0ZW1TdG9yYWdlRGF0YShXYWxsVGltZSBtb2RpZmllZFNpbmNlVGltZSkK
ICAgICB7CiAgICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0cjsKQEAg
LTEwNiwxNCArMjMwLDQ0IEBAIHByaXZhdGU6CiAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUFs
bEZpbGVzTW9kaWZpZWRTaW5jZShmaWxlU3lzdGVtU3RvcmFnZVBhdGgsIG1vZGlmaWVkU2luY2VU
aW1lKTsKICAgICB9CiAKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZURhdGEoV2FsbFRpbWUg
dGltZSkKKyAgICB7CisgICAgICAgIGlmIChhdXRvIG1vZGlmaWNhdGlvblRpbWUgPSBGaWxlU3lz
dGVtOjpmaWxlTW9kaWZpY2F0aW9uVGltZShtX2xvY2FsU3RvcmFnZVBhdGgpOyAqbW9kaWZpY2F0
aW9uVGltZSA+PSB0aW1lKSB7CisgICAgICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2VNYW5hZ2Vy
KQorICAgICAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+Y2xlYXJEYXRhT25EaXNr
KCk7CisgICAgICAgICAgICBXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFz
ZUZpbGUobV9sb2NhbFN0b3JhZ2VQYXRoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9s
b2NhbFN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fbG9j
YWxTdG9yYWdlTWFuYWdlci0+Y2xlYXJEYXRhSW5NZW1vcnkoKTsKKyAgICAgICAgaWYgKCFtX2xv
Y2FsU3RvcmFnZU1hbmFnZXItPmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX2xvY2FsU3RvcmFn
ZU1hbmFnZXIgPSBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgZGVsZXRlU2Vzc2lvblN0b3Jh
Z2VEYXRhKCkKKyAgICB7CisgICAgICAgIGlmICghbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXItPmNs
ZWFyRGF0YSgpOworICAgICAgICBpZiAoIW1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5pc0FjdGl2
ZSgpKQorICAgICAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIgPSBudWxscHRyOworICAg
IH0KKyAgICAKICAgICBTdHJpbmcgbV9yb290UGF0aDsKICAgICBTdHJpbmcgbV9pZGVudGlmaWVy
OwogICAgIFN0b3JhZ2VCdWNrZXRNb2RlIG1fbW9kZSB7IFN0b3JhZ2VCdWNrZXRNb2RlOjpCZXN0
RWZmb3J0IH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlcj4g
bV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPExvY2FsU3Rv
cmFnZU1hbmFnZXI+IG1fbG9jYWxTdG9yYWdlTWFuYWdlcjsKKyAgICBTdHJpbmcgbV9sb2NhbFN0
b3JhZ2VQYXRoOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTZXNzaW9uU3RvcmFnZU1hbmFnZXI+IG1f
c2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOwogfTsKIAotT3JpZ2luU3RvcmFnZU1hbmFnZXI6Ok9yaWdp
blN0b3JhZ2VNYW5hZ2VyKFN0cmluZyYmIHBhdGgpCitPcmlnaW5TdG9yYWdlTWFuYWdlcjo6T3Jp
Z2luU3RvcmFnZU1hbmFnZXIoU3RyaW5nJiYgcGF0aCwgU3RyaW5nJiYgbG9jYWxTdG9yYWdlUGF0
aCkKICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQorICAgICwgbV9sb2NhbFN0b3JhZ2VQYXRo
KFdURk1vdmUobG9jYWxTdG9yYWdlUGF0aCkpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CiB9CkBAIC0xMjksNyArMjgzLDcgQEAgdm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6
Y29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24KIE9y
aWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0JiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6
ZGVmYXVsdEJ1Y2tldCgpCiB7CiAgICAgaWYgKCFtX2RlZmF1bHRCdWNrZXQpCi0gICAgICAgIG1f
ZGVmYXVsdEJ1Y2tldCA9IG1ha2VVbmlxdWU8U3RvcmFnZUJ1Y2tldD4obV9wYXRoLCAiZGVmYXVs
dCJfcyk7CisgICAgICAgIG1fZGVmYXVsdEJ1Y2tldCA9IG1ha2VVbmlxdWU8U3RvcmFnZUJ1Y2tl
dD4obV9wYXRoLCAiZGVmYXVsdCJfcywgbV9sb2NhbFN0b3JhZ2VQYXRoKTsKIAogICAgIHJldHVy
biAqbV9kZWZhdWx0QnVja2V0OwogfQpAQCAtMTM5LDE1ICsyOTMsMzQgQEAgRmlsZVN5c3RlbVN0
b3JhZ2VNYW5hZ2VyJiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZmlsZVN5c3RlbVN0b3JhZ2VNYW5h
Z2VyKEZpbGVTeXMKICAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmZpbGVTeXN0ZW1TdG9yYWdl
TWFuYWdlcihyZWdpc3RyeSk7CiB9CiAKK0xvY2FsU3RvcmFnZU1hbmFnZXImIE9yaWdpblN0b3Jh
Z2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lz
dHJ5KQoreworICAgIHJldHVybiBkZWZhdWx0QnVja2V0KCkubG9jYWxTdG9yYWdlTWFuYWdlcihy
ZWdpc3RyeSk7Cit9CisKK0xvY2FsU3RvcmFnZU1hbmFnZXIqIE9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKQoreworICAgIHJldHVybiBkZWZhdWx0QnVj
a2V0KCkuZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCk7Cit9CisKK1Nlc3Npb25TdG9yYWdl
TWFuYWdlciYgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OnNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9y
YWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKK3sKKyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgp
LnNlc3Npb25TdG9yYWdlTWFuYWdlcihyZWdpc3RyeSk7Cit9CisKK1Nlc3Npb25TdG9yYWdlTWFu
YWdlciogT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
KCkKK3sKKyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VN
YW5hZ2VyKCk7Cit9CisKIGJvb2wgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmlzQWN0aXZlKCkKIHsK
ICAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmlzQWN0aXZlKCk7CiB9CiAKLXZvaWQgT3JpZ2lu
U3RvcmFnZU1hbmFnZXI6OmRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlw
ZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpCitib29sIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpp
c0VtcHR5KCkKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBkZWZhdWx0
QnVja2V0KCkuZGVsZXRlRGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZSk7CisgICAgcmV0dXJuIGRl
ZmF1bHRCdWNrZXQoKS5pc0VtcHR5KCk7CiB9CiAKIHZvaWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6
OnNldFBlcnNpc3RlZChib29sIHZhbHVlKQpAQCAtMTU4LDUgKzMzMSwyNiBAQCB2b2lkIE9yaWdp
blN0b3JhZ2VNYW5hZ2VyOjpzZXRQZXJzaXN0ZWQoYm9vbCB2YWx1ZSkKICAgICBkZWZhdWx0QnVj
a2V0KCkuc2V0TW9kZSh2YWx1ZSA/IFN0b3JhZ2VCdWNrZXRNb2RlOjpQZXJzaXN0ZW50IDogU3Rv
cmFnZUJ1Y2tldE1vZGU6OkJlc3RFZmZvcnQpOwogfQogCitPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZmV0Y2hEYXRhVHlwZXNJbkxpc3QoT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmZldGNoRGF0YVR5cGVzSW5MaXN0KHR5
cGVzKTsKK30KKwordm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0YShPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSkKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGRlZmF1bHRCdWNrZXQoKS5kZWxl
dGVEYXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlKTsKK30KKwordm9pZCBPcmlnaW5TdG9yYWdlTWFu
YWdlcjo6bW92ZURhdGEoY29uc3QgU3RyaW5nJiBuZXdQYXRoLCBjb25zdCBTdHJpbmcmIGxvY2Fs
U3RvcmFnZVBhdGgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBk
ZWZhdWx0QnVja2V0KCkubW92ZURhdGEobmV3UGF0aCwgbG9jYWxTdG9yYWdlUGF0aCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oCmluZGV4IDdhZGZh
NWIwM2I2YmE2ZTNmODY5ODBiMTJkMmY4YTQ0ZDllNGU2NGIuLjVlNzY2OTk4NmU0NjY4NWYzODli
N2E1MjcxZTY2ZDBlNjNjMmQxOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oCkBAIC0zNiwyMCAr
MzYsMzAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEZpbGVTeXN0ZW1TdG9yYWdlSGFu
ZGxlUmVnaXN0cnk7CiBjbGFzcyBGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI7CitjbGFzcyBMb2Nh
bFN0b3JhZ2VNYW5hZ2VyOworY2xhc3MgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOworY2xhc3MgU3Rv
cmFnZUFyZWFSZWdpc3RyeTsKIGVudW0gY2xhc3MgV2Vic2l0ZURhdGFUeXBlIDogdWludDMyX3Q7
CiAKIGNsYXNzIE9yaWdpblN0b3JhZ2VNYW5hZ2VyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBPcmlnaW5TdG9yYWdlTWFuYWdlcihTdHJpbmcm
JiBwYXRoKTsKKyAgICBPcmlnaW5TdG9yYWdlTWFuYWdlcihTdHJpbmcmJiBwYXRoLCBTdHJpbmcm
JiBsb2NhbFN0b3JhZ2VQYXRoKTsKICAgICB+T3JpZ2luU3RvcmFnZU1hbmFnZXIoKTsKIAogICAg
IHZvaWQgY29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKICAgICBi
b29sIHBlcnNpc3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGVyc2lzdGVkOyB9CiAgICAgdm9pZCBz
ZXRQZXJzaXN0ZWQoYm9vbCB2YWx1ZSk7CiAgICAgRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyJiBm
aWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIoRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSYp
OworICAgIExvY2FsU3RvcmFnZU1hbmFnZXImIGxvY2FsU3RvcmFnZU1hbmFnZXIoU3RvcmFnZUFy
ZWFSZWdpc3RyeSYpOworICAgIExvY2FsU3RvcmFnZU1hbmFnZXIqIGV4aXN0aW5nTG9jYWxTdG9y
YWdlTWFuYWdlcigpOworICAgIFNlc3Npb25TdG9yYWdlTWFuYWdlciYgc2Vzc2lvblN0b3JhZ2VN
YW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmKTsKKyAgICBTZXNzaW9uU3RvcmFnZU1hbmFnZXIq
IGV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCk7CiAgICAgYm9vbCBpc0FjdGl2ZSgpOwor
ICAgIGJvb2wgaXNFbXB0eSgpOworICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGZldGNo
RGF0YVR5cGVzSW5MaXN0KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+KTsKICAgICB2b2lkIGRl
bGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lKTsKKyAgICB2b2lk
IG1vdmVEYXRhKGNvbnN0IFN0cmluZyYgbmV3UGF0aCwgY29uc3QgU3RyaW5nJiBsb2NhbFN0b3Jh
Z2VQYXRoKTsKIAogcHJpdmF0ZToKICAgICBlbnVtIGNsYXNzIFN0b3JhZ2VCdWNrZXRNb2RlIDog
Ym9vbDsKQEAgLTYyLDYgKzcyLDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3Rv
cmFnZUJ1Y2tldD4gbV9kZWZhdWx0QnVja2V0OwogICAgIFN0cmluZyBtX3BhdGg7CiAgICAgYm9v
bCBtX3BlcnNpc3RlZCB7IGZhbHNlIH07CisgICAgU3RyaW5nIG1fbG9jYWxTdG9yYWdlUGF0aDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWJiZjY2MzYyMmMyZjdkZDY0Mjk0ZTgzZDdlNjI0ZmJjZGVjZDIzNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdl
QXJlYS5jcHAKQEAgLTAsMCArMSwzOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTUUxpdGVTdG9yYWdlQXJlYS5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9TUUxpdGVGaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVRyYW5zYWN0aW9uLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9TdG9yYWdlTWFwLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjb25zdGV4cHIg
U2Vjb25kcyB0cmFuc2FjdGlvbkR1cmF0aW9uIHsgNTAwX21zIH07Citjb25zdGV4cHIgdW5zaWdu
ZWQgbWF4aW11bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1vcnkgeyAxICogS0IgfTsKK2NvbnN0ZXhw
ciBhdXRvIGNyZWF0ZUl0ZW1UYWJsZVN0YXRlbWVudEFsdGVybmF0aXZlID0gIkNSRUFURSBUQUJM
RSBJRiBOT1QgRVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJF
UExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiX3M7Citjb25zdGV4
cHIgYXV0byBjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnQgPSAiQ1JFQVRFIFRBQkxFIEl0ZW1UYWJs
ZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5V
TEwgT04gQ09ORkxJQ1QgRkFJTCkiX3M7CisKK0FTQ0lJTGl0ZXJhbCBTUUxpdGVTdG9yYWdlQXJl
YTo6c3RhdGVtZW50U3RyaW5nKFN0YXRlbWVudFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OkNvdW50SXRlbXM6CisgICAgICAg
IHJldHVybiAiU0VMRUNUIENPVU5UKCopIEZST00gSXRlbVRhYmxlIl9zOworICAgIGNhc2UgU3Rh
dGVtZW50VHlwZTo6RGVsZXRlSXRlbToKKyAgICAgICAgcmV0dXJuICJERUxFVEUgRlJPTSBJdGVt
VGFibGUgV0hFUkUga2V5PT8iX3M7CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpEZWxldGVBbGxJ
dGVtczoKKyAgICAgICAgcmV0dXJuICJERUxFVEUgRlJPTSBJdGVtVGFibGUiX3M7CisgICAgY2Fz
ZSBTdGF0ZW1lbnRUeXBlOjpHZXRJdGVtOgorICAgICAgICByZXR1cm4gIlNFTEVDVCB2YWx1ZSBG
Uk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyJfczsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6Okdl
dEFsbEl0ZW1zOgorICAgICAgICByZXR1cm4gIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRh
YmxlIl9zOworICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6U2V0SXRlbToKKyAgICAgICAgcmV0dXJu
ICJJTlNFUlQgSU5UTyBJdGVtVGFibGUgVkFMVUVTICg/LCA/KSJfczsKKyAgICBjYXNlIFN0YXRl
bWVudFR5cGU6OkludmFsaWQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAiIl9zOworfQorCitTUUxpdGVTdG9yYWdlQXJlYTo6
U1FMaXRlU3RvcmFnZUFyZWEodW5zaWduZWQgcXVvdGEsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9y
aWdpbiYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGgsIFJlZjxXb3JrUXVldWU+JiYgd29ya1F1
ZXVlKQorICAgIDogU3RvcmFnZUFyZWFCYXNlKHF1b3RhLCBvcmlnaW4pCisgICAgLCBtX3BhdGgo
cGF0aCkKKyAgICAsIG1fcXVldWUoV1RGTW92ZSh3b3JrUXVldWUpKQoreworICAgIEFTU0VSVCgh
aXNNYWluUnVuTG9vcCgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKTsgKytpKQorICAgICAgICBtX2NhY2hl
ZFN0YXRlbWVudHMuYXBwZW5kKG51bGxwdHIpOworfQorCit2b2lkIFNRTGl0ZVN0b3JhZ2VBcmVh
OjpjbG9zZSgpCit7CisgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOworCisgICAgbV9jYWNo
ZSA9IHN0ZDo6bnVsbG9wdDsKKyAgICBjb21taXRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KFN0YXRlbWVudFR5
cGU6OkludmFsaWQpOyArK2kpCisgICAgICAgIG1fY2FjaGVkU3RhdGVtZW50c1tpXSA9IG51bGxw
dHI7CisgICAgbV9kYXRhYmFzZSA9IG51bGxwdHI7Cit9CisKK1NRTGl0ZVN0b3JhZ2VBcmVhOjp+
U1FMaXRlU3RvcmFnZUFyZWEoKQoreworICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKKwor
ICAgIGJvb2wgZGF0YWJhc2VJc0VtcHR5ID0gaXNFbXB0eSgpOworICAgIGNsb3NlKCk7CisgICAg
aWYgKGRhdGFiYXNlSXNFbXB0eSkKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6
ZGVsZXRlRGF0YWJhc2VGaWxlKG1fcGF0aCk7Cit9CisKK2Jvb2wgU1FMaXRlU3RvcmFnZUFyZWE6
OmlzRW1wdHkoKQoreworICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKKworICAgIGlmICht
X2NhY2hlKQorICAgICAgICByZXR1cm4gbV9jYWNoZS0+aXNFbXB0eSgpOworCisgICAgaWYgKCFw
cmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBhdXRvIHN0YXRl
bWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlOjpDb3VudEl0ZW1zKTsKKyAgICBp
ZiAoIXN0YXRlbWVudCB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6aXNFbXB0
eSBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5s
YXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gIXN0YXRlbWVudC0+Y29sdW1uSW50KDApOworfQor
Cit2b2lkIFNRTGl0ZVN0b3JhZ2VBcmVhOjpjbGVhcigpCit7CisgICAgQVNTRVJUKCFpc01haW5S
dW5Mb29wKCkpOworCisgICAgY2xvc2UoKTsKKyAgICBXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVt
OjpkZWxldGVEYXRhYmFzZUZpbGUobV9wYXRoKTsKKyAgICBub3RpZnlMaXN0ZW5lcnNBYm91dENs
ZWFyKCk7Cit9CisKK2Jvb2wgU1FMaXRlU3RvcmFnZUFyZWE6OmNyZWF0ZVRhYmxlSWZOZWNlc3Nh
cnkoKQoreworICAgIGlmICghbV9kYXRhYmFzZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgU3RyaW5nIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnRhYmxlU1FMKCJJdGVtVGFibGUiX3Mp
OworICAgIGlmIChzdGF0ZW1lbnQgPT0gY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50IHx8IHN0YXRl
bWVudCA9PSBjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnRBbHRlcm5hdGl2ZSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAvLyBUYWJsZSBleGlzdHMgYnV0IHN0YXRlbWVudCBpcyB3cm9uZzsg
ZHJvcCBpdC4KKyAgICBpZiAoIXN0YXRlbWVudC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFt
X2RhdGFiYXNlLT5leGVjdXRlQ29tbWFuZCgiRFJPUCBUQUJMRSBJdGVtVGFibGUiX3MpKSB7Cisg
ICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6
OmNyZWF0ZVRhYmxlSWZOZWNlc3NhcnkgZmFpbGVkIHRvIGRyb3AgZXhpc3RpbmcgaXRlbSB0YWJs
ZSAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gVGFibGUgZG9lcyBub3QgZXhpc3QuCisgICAgaWYgKCFtX2RhdGFiYXNlLT5leGVj
dXRlQ29tbWFuZChjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnQpKSB7CisgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Y3JlYXRlVGFibGVJZk5lY2Vz
c2FyeSBmYWlsZWQgdG8gY3JlYXRlIGl0ZW0gdGFibGUgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+
bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNRTGl0ZVN0b3Jh
Z2VBcmVhOjpwcmVwYXJlRGF0YWJhc2UoKQoreworICAgIGlmIChtX2RhdGFiYXNlICYmIG1fZGF0
YWJhc2UtPmlzT3BlbigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1fZGF0YWJhc2Ug
PSBtYWtlVW5pcXVlPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPigpOworICAgIGlmICghbV9kYXRh
YmFzZS0+b3BlbihtX3BhdGgpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2Us
ICJTUUxpdGVTdG9yYWdlQXJlYTo6cHJlcGFyZURhdGFiYXNlIGZhaWxlZCB0byBvcGVuIGRhdGFi
YXNlIGF0ICclcyciLCBtX3BhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1fZGF0YWJhc2Ug
PSBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKKyAgICAv
LyBTaW5jZSBhIFdvcmtRdWV1ZSBpc24ndCBib3VuZCB0byBhIHNwZWNpZmljIHRocmVhZCwgd2Ug
bmVlZCB0byBkaXNhYmxlIHRocmVhZGluZyBjaGVjay4KKyAgICAvLyBXZSB3aWxsIG5ldmVyIGFj
Y2VzcyB0aGUgZGF0YWJhc2UgZnJvbSBkaWZmZXJlbnQgdGhyZWFkcyBzaW11bHRhbmVvdXNseS4K
KyAgICBtX2RhdGFiYXNlLT5kaXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7CisKKyAgICBpZiAoIWNy
ZWF0ZVRhYmxlSWZOZWNlc3NhcnkoKSkgeworICAgICAgICBtX2RhdGFiYXNlID0gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChxdW90YSgpICE9IFdlYkNv
cmU6OlN0b3JhZ2VNYXA6Om5vUXVvdGEpCisgICAgICAgIG1fZGF0YWJhc2UtPnNldE1heGltdW1T
aXplKHF1b3RhKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1FMaXRlU3RvcmFn
ZUFyZWE6OnN0YXJ0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKCFtX3RyYW5z
YWN0aW9uKQorICAgICAgICBtX3RyYW5zYWN0aW9uID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpTUUxp
dGVUcmFuc2FjdGlvbj4oKm1fZGF0YWJhc2UpOworCisgICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlu
UHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90cmFuc2FjdGlvbi0+YmVnaW4o
KTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaEFmdGVyKHRyYW5zYWN0aW9uRHVyYXRpb24sIFt3ZWFr
VGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9XSB7CisgICAgICAgIGlmICghd2Vha1RoaXMgfHwgIXdl
YWtUaGlzLT5tX3RyYW5zYWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgIAorICAgICAg
ICBhdXRvIHRyYW5zYWN0aW9uID0gc3RkOjpleGNoYW5nZSh3ZWFrVGhpcy0+bV90cmFuc2FjdGlv
biwgbnVsbHB0cik7CisgICAgICAgIHRyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICB9KTsKK30K
KworV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgU1FMaXRlU3RvcmFnZUFy
ZWE6OmNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlIHR5cGUpCit7CisgICAgQVNTRVJUKG1f
ZGF0YWJhc2UpOworICAgIEFTU0VSVCh0eXBlIDwgU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7CisK
KyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odHlwZSk7CisgICAgaWYgKCFt
X2NhY2hlZFN0YXRlbWVudHNbaW5kZXhdKSB7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IG1f
ZGF0YWJhc2UtPnByZXBhcmVIZWFwU3RhdGVtZW50KHN0YXRlbWVudFN0cmluZyh0eXBlKSkpCisg
ICAgICAgICAgICBtX2NhY2hlZFN0YXRlbWVudHNbaW5kZXhdID0gcmVzdWx0LnZhbHVlKCkubW92
ZVRvVW5pcXVlUHRyKCk7CisgICAgfQorCisgICAgcmV0dXJuIFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlIHsgbV9jYWNoZWRTdGF0ZW1lbnRzW2luZGV4XS5nZXQoKSB9Owor
fQorCitFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJvcj4gU1FMaXRlU3RvcmFnZUFyZWE6Omdl
dEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgaWYgKG1fY2FjaGUpIHsKKyAgICAgICAg
YXV0byBpdGVyYXRvciA9IG1fY2FjaGUtPmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGl0ZXJhdG9y
ID09IG1fY2FjaGUtPmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
ICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGl0
ZXJhdG9yLT52YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZ2V0SXRlbUZyb21EYXRhYmFzZShr
ZXkpOworfQorCitFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJvcj4gU1FMaXRlU3RvcmFnZUFy
ZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgaWYgKCFw
cmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VF
cnJvcjo6RGF0YWJhc2UpOworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQo
U3RhdGVtZW50VHlwZTo6R2V0SXRlbSk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50
LT5iaW5kVGV4dCgxLCBrZXkpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2Us
ICJTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0SXRlbUZyb21EYXRhYmFzZSBmYWlsZWQgb24gY3JlYXRp
bmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFi
YXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChTdG9y
YWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9CisKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50
LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4g
c3RhdGVtZW50LT5jb2x1bW5CbG9iQXNTdHJpbmcoMCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJ
VEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3Rv
cmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2UgZmFpbGVkIG9uIHN0ZXBwaW5nIHN0YXRlbWVu
dCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpE
YXRhYmFzZSk7CisgICAgfQorCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJv
cjo6SXRlbU5vdEZvdW5kKTsKK30KKworSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gU1FMaXRlU3Rv
cmFnZUFyZWE6OmFsbEl0ZW1zKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CisK
KyAgICBpZiAoIXByZXBhcmVEYXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4geyB9OworCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaXRlbXM7Cisg
ICAgaWYgKG1fY2FjaGUpIHsKKyAgICAgICAgaXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X2NhY2hlLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIFtrZXksIHZhbHVlXSA6ICptX2Nh
Y2hlKSB7CisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAg
ICAgaXRlbXMuYWRkKGtleSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBnZXRJdGVtRnJvbURh
dGFiYXNlKGtleSkpCisgICAgICAgICAgICAgICAgaXRlbXMuYWRkKGtleSwgcmVzdWx0LnZhbHVl
KCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpdGVtczsKKyAgICB9CisKKyAgICAvLyBJ
bXBvcnQgZnJvbSBkYXRhYmFzZS4KKyAgICBhdXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVu
dChTdGF0ZW1lbnRUeXBlOjpHZXRBbGxJdGVtcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRB
bGxJdGVtcyBmYWlsZWQgb24gY3JlYXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJh
c2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfQorCisgICAgbV9jYWNoZSA9IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
IHsgfTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgd2hpbGUgKHJl
c3VsdCA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFN0cmluZyBrZXkgPSBzdGF0ZW1lbnQtPmNv
bHVtblRleHQoMCk7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IHN0YXRlbWVudC0+Y29sdW1uQmxv
YkFzU3RyaW5nKDEpOworICAgICAgICBpZiAoIWtleS5pc051bGwoKSAmJiAhdmFsdWUuaXNOdWxs
KCkpIHsKKyAgICAgICAgICAgIG1fY2FjaGUtPmFkZChrZXksIHZhbHVlLnNpemVJbkJ5dGVzKCkg
PiBtYXhpbXVtU2l6ZUZvclZhbHVlc0tlcHRJbk1lbW9yeSA/IFN0cmluZygpIDogdmFsdWUpOwor
ICAgICAgICAgICAgaXRlbXMuYWRkKFdURk1vdmUoa2V5KSwgV1RGTW92ZSh2YWx1ZSkpOworICAg
ICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgfQorCisg
ICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
U3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRBbGxJdGVtcyBmYWlsZWQgb24gZXhlY3V0
aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRh
YmFzZS0+bGFzdEVycm9yTXNnKCkpOworCisgICAgcmV0dXJuIGl0ZW1zOworfQorCitFeHBlY3Rl
ZDx2b2lkLCBTdG9yYWdlRXJyb3I+IFNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBz
dG9yYWdlQXJlYUltcGxJRCwgU3RyaW5nJiYga2V5LCBTdHJpbmcmJiB2YWx1ZSwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpCit7CisgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOworCisgICAg
aWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0
b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworCisgICAgc3RhcnRUcmFuc2FjdGlvbklmTmVjZXNzYXJ5
KCk7CisKKyAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgaWYgKGF1dG8gdmFsdWVPckVycm9yID0g
Z2V0SXRlbShrZXkpKQorICAgICAgICBvbGRWYWx1ZSA9IHZhbHVlT3JFcnJvci52YWx1ZSgpOwor
CisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZTo6U2V0
SXRlbSk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBrZXkp
IHx8IHN0YXRlbWVudC0+YmluZEJsb2IoMiwgdmFsdWUpKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6c2V0SXRlbSBmYWlsZWQgb24gY3Jl
YXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2Rh
dGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChT
dG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9CisKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVt
ZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRlVMTCkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6UXVvdGFFeGNlZWRlZCk7CisgICAgaWYg
KHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9y
YWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OnNldEl0ZW0gZmFpbGVkIG9uIHN0ZXBwaW5nIHN0YXRl
bWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFz
dEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9y
OjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgZGlzcGF0Y2hFdmVudHMoY29ubmVjdGlvbiwgc3Rv
cmFnZUFyZWFJbXBsSUQsIGtleSwgb2xkVmFsdWUsIHZhbHVlLCB1cmxTdHJpbmcpOworCisgICAg
aWYgKG1fY2FjaGUpCisgICAgICAgIG1fY2FjaGUtPnNldChXVEZNb3ZlKGtleSksIHZhbHVlLnNp
emVJbkJ5dGVzKCkgPiBtYXhpbXVtU2l6ZUZvclZhbHVlc0tlcHRJbk1lbW9yeSA/IFN0cmluZygp
IDogV1RGTW92ZSh2YWx1ZSkpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworRXhwZWN0ZWQ8dm9p
ZCwgU3RvcmFnZUVycm9yPiBTUUxpdGVTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShJUEM6OkNvbm5l
Y3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3Rv
cmFnZUFyZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZykKK3sKKyAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CisKKyAgICBpZiAoIXByZXBhcmVE
YXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpE
YXRhYmFzZSk7CisKKyAgICBzdGFydFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKyAgICBTdHJp
bmcgb2xkVmFsdWU7CisgICAgaWYgKGF1dG8gdmFsdWVPckVycm9yID0gZ2V0SXRlbShrZXkpKQor
ICAgICAgICBvbGRWYWx1ZSA9IHZhbHVlT3JFcnJvci52YWx1ZSgpOworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6SXRlbU5vdEZvdW5kKTsKKwor
ICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50KFN0YXRlbWVudFR5cGU6OkRlbGV0
ZUl0ZW0pOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRlbWVudC0+YmluZFRleHQoMSwga2V5
KSB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0gZmFpbGVk
IG9uIGV4ZWN1dGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9y
KCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworICAgIH0KKworICAgIGRpc3BhdGNoRXZl
bnRzKGNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBrZXksIG9sZFZhbHVlLCBTdHJpbmco
KSwgdXJsU3RyaW5nKTsKKworICAgIGlmIChtX2NhY2hlKQorICAgICAgICBtX2NhY2hlLT5yZW1v
dmUoa2V5KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK0V4cGVjdGVkPHZvaWQsIFN0b3JhZ2VF
cnJvcj4gU1FMaXRlU3RvcmFnZUFyZWE6OmNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQg
Y29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUltcGxJRCwg
Y29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkp
OworCisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworCisgICAgaWYgKG1fY2FjaGUgJiYgbV9j
YWNoZS0+aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVy
cm9yOjpJdGVtTm90Rm91bmQpOworCisgICAgaWYgKG1fY2FjaGUpCisgICAgICAgIG1fY2FjaGUt
PmNsZWFyKCk7CisKKyAgICBzdGFydFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKyAgICBhdXRv
IHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlOjpEZWxldGVBbGxJdGVt
cyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VB
cmVhOjpjbGVhciBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2Rh
dGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQor
CisgICAgaWYgKG1fZGF0YWJhc2UtPmxhc3RDaGFuZ2VzKCkgPD0gMCkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6SXRlbU5vdEZvdW5kKTsKKworICAgIGRpc3Bh
dGNoRXZlbnRzKGNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBTdHJpbmcoKSwgU3RyaW5n
KCksIFN0cmluZygpLCB1cmxTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBT
UUxpdGVTdG9yYWdlQXJlYTo6Y29tbWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpCit7CisgICAg
aWYgKGF1dG8gdHJhbnNhY3Rpb24gPSBzdGQ6OmV4Y2hhbmdlKG1fdHJhbnNhY3Rpb24sIG51bGxw
dHIpKQorICAgICAgICB0cmFuc2FjdGlvbi0+Y29tbWl0KCk7Cit9CisKK3ZvaWQgU1FMaXRlU3Rv
cmFnZUFyZWE6OmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKQoreworICAgIEFTU0VSVCghaXNNYWlu
UnVuTG9vcCgpKTsKKworICAgIGlmIChtX2RhdGFiYXNlICYmIG1fZGF0YWJhc2UtPmlzT3Blbigp
KQorICAgICAgICBtX2RhdGFiYXNlLT5yZWxlYXNlTWVtb3J5KCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5MDU2YTEzNWFiYzAzMzFi
MDNkNDg5OWRhNzcyMWNlNmZiNjM0OTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuaApAQCAtMCwwICsxLDg0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0b3JhZ2VB
cmVhQmFzZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBTUUxpdGVTdG9yYWdlQXJlYSBmaW5hbCA6IHB1YmxpYyBTdG9yYWdl
QXJlYUJhc2UgeworcHVibGljOgorICAgIFNRTGl0ZVN0b3JhZ2VBcmVhKHVuc2lnbmVkIHF1b3Rh
LCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBjb25zdCBTdHJpbmcmIHBhdGgsIFJlZjxX
b3JrUXVldWU+JiYpOworICAgIH5TUUxpdGVTdG9yYWdlQXJlYSgpOworCisgICAgdm9pZCBjbG9z
ZSgpOworICAgIHZvaWQgaGFuZGxlTG93TWVtb3J5V2FybmluZygpOworICAgIHZvaWQgY29tbWl0
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCitwcml2YXRlOgorICAgIC8vIFN0b3JhZ2VBcmVh
QmFzZQorICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFN0b3JhZ2VBcmVhQmFz
ZTo6VHlwZTo6U1FMaXRlOyB9OworICAgIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZTo6TG9jYWw7IH07Cisg
ICAgYm9vbCBpc0VtcHR5KCkgZmluYWw7CisgICAgdm9pZCBjbGVhcigpIGZpbmFsOworICAgIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IGFsbEl0ZW1zKCkgZmluYWw7CisgICAgRXhwZWN0ZWQ8dm9p
ZCwgU3RvcmFnZUVycm9yPiBzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3Jh
Z2VBcmVhSW1wbElkZW50aWZpZXIsIFN0cmluZyYmIGtleSwgU3RyaW5nJiYgdmFsdWUsIGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJy
b3I+IHJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJbXBs
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBm
aW5hbDsKKyAgICBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IGNsZWFyKElQQzo6Q29ubmVj
dGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nKSBmaW5hbDsKKworICAgIGJvb2wgY3JlYXRlVGFibGVJZk5lY2Vzc2FyeSgpOwor
ICAgIGJvb2wgcHJlcGFyZURhdGFiYXNlKCk7CisgICAgdm9pZCBzdGFydFRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKKworICAgIGVudW0gY2xhc3MgU3RhdGVtZW50VHlwZSA6IHVpbnQ4X3Qgewor
ICAgICAgICBDb3VudEl0ZW1zLAorICAgICAgICBEZWxldGVJdGVtLAorICAgICAgICBEZWxldGVB
bGxJdGVtcywKKyAgICAgICAgR2V0SXRlbSwKKyAgICAgICAgR2V0QWxsSXRlbXMsCisgICAgICAg
IFNldEl0ZW0sCisgICAgICAgIEludmFsaWQKKyAgICB9OworICAgIEFTQ0lJTGl0ZXJhbCBzdGF0
ZW1lbnRTdHJpbmcoU3RhdGVtZW50VHlwZSkgY29uc3Q7CisgICAgV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50QXV0b1Jlc2V0U2NvcGUgY2FjaGVkU3RhdGVtZW50KFN0YXRlbWVudFR5cGUpOworICAg
IEV4cGVjdGVkPFN0cmluZywgU3RvcmFnZUVycm9yPiBnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5
KTsKKyAgICBFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJvcj4gZ2V0SXRlbUZyb21EYXRhYmFz
ZShjb25zdCBTdHJpbmcmIGtleSk7CisKKyAgICBTdHJpbmcgbV9wYXRoOworICAgIFJlZjxXb3Jr
UXVldWU+IG1fcXVldWU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZURhdGFi
YXNlPiBtX2RhdGFiYXNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVUcmFu
c2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudD4+IG1fY2FjaGVkU3RhdGVtZW50czsKKyAgICBzdGQ6Om9wdGlv
bmFsPEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+PiBtX2NhY2hlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViS2l0OjpTUUxpdGVT
dG9yYWdlQXJlYSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViS2l0OjpTdG9yYWdl
QXJlYUJhc2UmIGFyZWEpIHsgcmV0dXJuIGFyZWEudHlwZSgpID09IFdlYktpdDo6U3RvcmFnZUFy
ZWFCYXNlOjpUeXBlOjpTUUxpdGU7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3Rv
cmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1Nl
c3Npb25TdG9yYWdlTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDBmZDc5NjBhYzVkYjY3NjU5ZTJk
NzM5MTdkZjI2YjRjMDczZmQzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEs
MTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlc3Np
b25TdG9yYWdlTWFuYWdlci5oIgorCisjaW5jbHVkZSAiTWVtb3J5U3RvcmFnZUFyZWEuaCIKKyNp
bmNsdWRlICJTdG9yYWdlQXJlYVJlZ2lzdHJ5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitT
ZXNzaW9uU3RvcmFnZU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJl
Z2lzdHJ5JiByZWdpc3RyeSkKKyAgICA6IG1fcmVnaXN0cnkocmVnaXN0cnkpCit7Cit9CisKK2Jv
b2wgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdURjo6YW55T2YobV9zdG9yYWdlQXJlYXMudmFsdWVzKCksIFsmXSAoYXV0byYgc3RvcmFnZUFy
ZWEpIHsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLT5oYXNMaXN0ZW5lcnMoKTsKKyAgICB9
KTsKK30KKworYm9vbCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFdURjo6YW55T2YobV9zdG9yYWdlQXJlYXMudmFsdWVzKCksIFsm
XSAoYXV0byYgc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgcmV0dXJuICFzdG9yYWdlQXJlYS0+aXNF
bXB0eSgpOworICAgIH0pOworfQorCit2b2lkIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y2xlYXJE
YXRhKCkKK3sKKyAgICBmb3IgKGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYXMudmFs
dWVzKCkpCisgICAgICAgIHN0b3JhZ2VBcmVhLT5jbGVhcigpOworfQorCit2b2lkIFNlc3Npb25T
dG9yYWdlTWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlE
IGNvbm5lY3Rpb24pCit7CisgICAgZm9yIChhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFy
ZWFzLnZhbHVlcygpKQorICAgICAgICBzdG9yYWdlQXJlYS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVj
dGlvbik7Cit9CisKK1N0b3JhZ2VBcmVhSWRlbnRpZmllciBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6
OmFkZFN0b3JhZ2VBcmVhKHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlTdG9yYWdlQXJlYT4gc3RvcmFn
ZUFyZWEsIElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZU5hbWVz
cGFjZUlkZW50aWZpZXIgbmFtZXNwYWNlSWRlbnRpZmllcikKK3sKKyAgICBhdXRvIGlkZW50aWZp
ZXIgPSBzdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpOworICAgIG1fcmVnaXN0cnkucmVnaXN0ZXJT
dG9yYWdlQXJlYShpZGVudGlmaWVyLCAqc3RvcmFnZUFyZWEpOworICAgIHN0b3JhZ2VBcmVhLT5h
ZGRMaXN0ZW5lcihjb25uZWN0aW9uKTsKKyAgICBtX3N0b3JhZ2VBcmVhc0J5TmFtZXNwYWNlLmFk
ZChuYW1lc3BhY2VJZGVudGlmaWVyLCBpZGVudGlmaWVyKTsKKyAgICBtX3N0b3JhZ2VBcmVhcy5h
ZGQoaWRlbnRpZmllciwgV1RGTW92ZShzdG9yYWdlQXJlYSkpOworCisgICAgcmV0dXJuIGlkZW50
aWZpZXI7Cit9CisKK1N0b3JhZ2VBcmVhSWRlbnRpZmllciBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6
OmNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNv
bm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBTdG9yYWdlTmFt
ZXNwYWNlSWRlbnRpZmllciBuYW1lc3BhY2VJZGVudGlmaWVyKQoreworICAgIGF1dG8gaWRlbnRp
ZmllciA9IG1fc3RvcmFnZUFyZWFzQnlOYW1lc3BhY2UuZ2V0KG5hbWVzcGFjZUlkZW50aWZpZXIp
OworICAgIGlmIChpZGVudGlmaWVyLmlzVmFsaWQoKSkgeworICAgICAgICBBU1NFUlQobV9zdG9y
YWdlQXJlYXMuY29udGFpbnMoaWRlbnRpZmllcikpOworICAgICAgICByZXR1cm4gaWRlbnRpZmll
cjsKKyAgICB9CisKKyAgICBhdXRvIG5ld1N0b3JhZ2VBcmVhID0gbWFrZVVuaXF1ZTxNZW1vcnlT
dG9yYWdlQXJlYT4ob3JpZ2luKTsKKyAgICByZXR1cm4gYWRkU3RvcmFnZUFyZWEoV1RGTW92ZShu
ZXdTdG9yYWdlQXJlYSksIGNvbm5lY3Rpb24sIG5hbWVzcGFjZUlkZW50aWZpZXIpOworfQorCit2
b2lkIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6ZGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYShJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBp
ZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvKiBzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFz
LmdldChpZGVudGlmaWVyKSkKKyAgICAgICAgc3RvcmFnZUFyZWEtPnJlbW92ZUxpc3RlbmVyKGNv
bm5lY3Rpb24pOworfQorCit2b2lkIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y2xvbmVTdG9yYWdl
QXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VOYW1lc3Bh
Y2VJZGVudGlmaWVyIHNvdXJjZU5hbWVzcGFjZUlkZW50aWZpZXIsIFN0b3JhZ2VOYW1lc3BhY2VJ
ZGVudGlmaWVyIHRhcmdldE5hbWVzcGFjZUlkZW50aWZpZXIpCit7CisgICAgYXV0byBpZGVudGlm
aWVyID0gbV9zdG9yYWdlQXJlYXNCeU5hbWVzcGFjZS5nZXQoc291cmNlTmFtZXNwYWNlSWRlbnRp
Zmllcik7CisgICAgaWYgKCFpZGVudGlmaWVyLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VBcmVhcy5maW5kKGlkZW50aWZpZXIp
OyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VBcmVhcy5lbmQoKSkgeworICAgICAgICBhdXRvIG5ld1N0
b3JhZ2VBcmVhID0gaXRlcmF0b3ItPnZhbHVlLT5jbG9uZSgpOworICAgICAgICBhZGRTdG9yYWdl
QXJlYShXVEZNb3ZlKG5ld1N0b3JhZ2VBcmVhKSwgY29ubmVjdGlvbiwgdGFyZ2V0TmFtZXNwYWNl
SWRlbnRpZmllcik7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1h
bmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3Rv
cmFnZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzdjYmQ4OTdhMTUwZWVlMjJlYjcyODBlZTUyZDAy
NGRkYzU1NWZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlTWFuYWdlci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSWRlbnRpZmllci5o
IgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBNZW1vcnlTdG9yYWdlQXJlYTsKK2NsYXNzIFN0b3JhZ2VBcmVhUmVn
aXN0cnk7CisKK2NsYXNzIFNlc3Npb25TdG9yYWdlTWFuYWdlciB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
KFN0b3JhZ2VBcmVhUmVnaXN0cnkmKTsKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAg
Ym9vbCBoYXNEYXRhSW5NZW1vcnkoKSBjb25zdDsKKyAgICB2b2lkIGNsZWFyRGF0YSgpOworICAg
IHZvaWQgY29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKKworICAg
IFN0b3JhZ2VBcmVhSWRlbnRpZmllciBjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEoSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgU3RvcmFn
ZU5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZGlzY29ubmVjdEZyb21TdG9yYWdlQXJl
YShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUlkZW50aWZpZXIpOworICAg
IHZvaWQgY2xvbmVTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdl
TmFtZXNwYWNlSWRlbnRpZmllciwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIpOworCitwcml2
YXRlOgorICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBhZGRTdG9yYWdlQXJlYShzdGQ6OnVuaXF1
ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+LCBJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9y
YWdlTmFtZXNwYWNlSWRlbnRpZmllcik7CisKKyAgICBTdG9yYWdlQXJlYVJlZ2lzdHJ5JiBtX3Jl
Z2lzdHJ5OworICAgIEhhc2hNYXA8U3RvcmFnZUFyZWFJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9w
dHI8TWVtb3J5U3RvcmFnZUFyZWE+PiBtX3N0b3JhZ2VBcmVhczsKKyAgICBIYXNoTWFwPFN0b3Jh
Z2VOYW1lc3BhY2VJZGVudGlmaWVyLCBTdG9yYWdlQXJlYUlkZW50aWZpZXI+IG1fc3RvcmFnZUFy
ZWFzQnlOYW1lc3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuY3Bw
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTQ0YmEwMTM1YTY0M2MwMWE1YjkwMGM3NjMxYmExNDk5OGY4ZjNjMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9T
dG9yYWdlQXJlYUJhc2UuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUJhc2UuaCIKKworI2luY2x1
ZGUgIlN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1N0
b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZUFyZWFCYXNlKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJD
b3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKKyAgICA6IG1faWRlbnRpZmllcihTdG9yYWdlQXJl
YUlkZW50aWZpZXI6OmdlbmVyYXRlKCkpCisgICAgLCBtX3F1b3RhKHF1b3RhKQorICAgICwgbV9v
cmlnaW4ob3JpZ2luKQoreworfQorCitTdG9yYWdlQXJlYUJhc2U6On5TdG9yYWdlQXJlYUJhc2Uo
KSA9IGRlZmF1bHQ7CisKK3ZvaWQgU3RvcmFnZUFyZWFCYXNlOjphZGRMaXN0ZW5lcihJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24pCit7CisgICAgQVNTRVJUKCFtX2xpc3RlbmVy
cy5jb250YWlucyhjb25uZWN0aW9uKSk7CisKKyAgICBtX2xpc3RlbmVycy5hZGQoY29ubmVjdGlv
bik7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFCYXNlOjpyZW1vdmVMaXN0ZW5lcihJUEM6OkNvbm5l
Y3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24pCit7CisgICAgbV9saXN0ZW5lcnMucmVtb3ZlKGNv
bm5lY3Rpb24pOworfQorCitib29sIFN0b3JhZ2VBcmVhQmFzZTo6aGFzTGlzdGVuZXJzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gIW1fbGlzdGVuZXJzLmlzRW1wdHkoKTsKK30KKwordm9pZCBTdG9y
YWdlQXJlYUJhc2U6Om5vdGlmeUxpc3RlbmVyc0Fib3V0Q2xlYXIoKQoreworICAgIGZvciAoYXV0
byYgY29ubmVjdGlvbiA6IG1fbGlzdGVuZXJzKQorICAgICAgICBJUEM6OkNvbm5lY3Rpb246OnNl
bmQoY29ubmVjdGlvbiwgTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpDbGVhckNhY2hlKCksIG1f
aWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYUJhc2U6OmRpc3Bh
dGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgU3Rv
cmFnZUFyZWFJbXBsSWRlbnRpZmllciBzb3VyY2VJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdAoreworICAgIEFTU0VSVChzb3VyY2VJbXBsSWRl
bnRpZmllcik7CisKKyAgICBmb3IgKGF1dG8mIGNvbm5lY3Rpb24gOiBtX2xpc3RlbmVycykgewor
ICAgICAgICBzdGQ6Om9wdGlvbmFsPFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXI+IGltcGxJZGVu
dGlmaWVyOworICAgICAgICBpZiAoY29ubmVjdGlvbiA9PSBzb3VyY2VDb25uZWN0aW9uKQorICAg
ICAgICAgICAgaW1wbElkZW50aWZpZXIgPSBzb3VyY2VJbXBsSWRlbnRpZmllcjsKKyAgICAgICAg
SVBDOjpDb25uZWN0aW9uOjpzZW5kKGNvbm5lY3Rpb24sIE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1h
cDo6RGlzcGF0Y2hTdG9yYWdlRXZlbnQoaW1wbElkZW50aWZpZXIsIGtleSwgb2xkVmFsdWUsIG5l
d1ZhbHVlLCB1cmxTdHJpbmcpLCBtX2lkZW50aWZpZXIudG9VSW50NjQoKSk7CisgICAgfQorfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZDNlZDE0MjA2
ZTE3NWRjYWNjOGMxZjk5NDkwNzUwNTQ1ZTM0ZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5oCkBAIC0wLDAg
KzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29u
bmVjdGlvbi5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSWRlbnRpZmllci5oIgorI2luY2x1ZGUg
IlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9y
aWdpbi5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K3N0cnVjdCBDbGllbnRPcmlnaW47Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIGNs
YXNzIFN0b3JhZ2VFcnJvciA6IHVpbnQ4X3QgeworICAgIERhdGFiYXNlLAorICAgIEl0ZW1Ob3RG
b3VuZCwKKyAgICBRdW90YUV4Y2VlZGVkLAorfTsKKworY2xhc3MgU3RvcmFnZUFyZWFCYXNlIDog
cHVibGljIENhbk1ha2VXZWFrUHRyPFN0b3JhZ2VBcmVhQmFzZT4geworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFN0b3JhZ2VBcmVhQmFzZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+U3RvcmFnZUFyZWFCYXNlKCk7CisKKyAgICBlbnVtIGNs
YXNzIFR5cGUgOiBib29sIHsgU1FMaXRlLCBNZW1vcnkgfTsKKyAgICB2aXJ0dWFsIFR5cGUgdHlw
ZSgpIGNvbnN0ID0gMDsKKyAgICBlbnVtIGNsYXNzIFN0b3JhZ2VUeXBlIDogYm9vbCB7IFNlc3Np
b24sIExvY2FsIH07CisgICAgdmlydHVhbCBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXIoKSA9IDA7CisKKyAgICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNv
bnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIFdlYkNvcmU6OkNsaWVudE9yaWdpbiBv
cmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIHVuc2lnbmVkIHF1b3RhKCkg
Y29uc3QgeyByZXR1cm4gbV9xdW90YTsgfQorICAgIHZvaWQgYWRkTGlzdGVuZXIoSVBDOjpDb25u
ZWN0aW9uOjpVbmlxdWVJRCk7CisgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlEKTsKKyAgICBib29sIGhhc0xpc3RlbmVycygpIGNvbnN0OworICAgIHZvaWQg
bm90aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcigpOworCisgICAgdmlydHVhbCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBhbGxJdGVtcygpID0gMDsKKyAgICB2aXJ0dWFsIEV4cGVjdGVkPHZvaWQsIFN0
b3JhZ2VFcnJvcj4gc2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJl
YUltcGxJZGVudGlmaWVyLCBTdHJpbmcmJiBrZXksIFN0cmluZyYmIHZhbHVlLCBjb25zdCBTdHJp
bmcmIHVybFN0cmluZykgPSAwOworICAgIHZpcnR1YWwgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVy
cm9yPiByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1w
bElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykg
PSAwOworICAgIHZpcnR1YWwgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBjbGVhcihJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIHVybFN0cmluZykgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgU3RvcmFnZUFyZWFCYXNl
KHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICB2b2lk
IGRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1w
bElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBj
b25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKyAgICB1
bnNpZ25lZCBtX3F1b3RhOworICAgIFdlYkNvcmU6OkNsaWVudE9yaWdpbiBtX29yaWdpbjsKKyAg
ICBIYXNoU2V0PElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQ+IG1fbGlzdGVuZXJzOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWRkMTRjNmY1MGM5NDZhNGNlNGQ4NTAwMzk2MWQzZmZjNmI5Y2I0NwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYVJlZ2lz
dHJ5LmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhUmVnaXN0cnkuaCIKKworI2luY2x1ZGUgIlN0b3JhZ2VB
cmVhQmFzZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworU3RvcmFnZUFyZWFSZWdpc3RyeTo6
U3RvcmFnZUFyZWFSZWdpc3RyeSgpID0gZGVmYXVsdDsKKwordm9pZCBTdG9yYWdlQXJlYVJlZ2lz
dHJ5OjpyZWdpc3RlclN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVy
LCBTdG9yYWdlQXJlYUJhc2UmIHN0b3JhZ2VBcmVhKQoreworICAgIEFTU0VSVCghbV9zdG9yYWdl
QXJlYXMuY29udGFpbnMoaWRlbnRpZmllcikpOworCisgICAgbV9zdG9yYWdlQXJlYXMuYWRkKGlk
ZW50aWZpZXIsIHN0b3JhZ2VBcmVhKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYVJlZ2lzdHJ5Ojp1
bnJlZ2lzdGVyU3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7
CisgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKKworICAg
IG1fc3RvcmFnZUFyZWFzLnJlbW92ZShpZGVudGlmaWVyKTsKK30KKworU3RvcmFnZUFyZWFCYXNl
KiBTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpnZXRTdG9yYWdlQXJlYShTdG9yYWdlQXJlYUlkZW50aWZp
ZXIgaWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4gbV9zdG9yYWdlQXJlYXMuZ2V0KGlkZW50aWZp
ZXIpLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYVJlZ2lzdHJ5LmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQwY2M3NDIzNzY1MmY1YzE2N2M2OGJlMWY2YTJiNmNjNGVlZTQzZjQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3Rv
cmFnZUFyZWFSZWdpc3RyeS5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTdG9yYWdlQXJlYUJh
c2U7CisKK2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnkgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIFN0b3JhZ2VBcmVhUmVnaXN0cnkoKTsKKyAgICB2b2lkIHJl
Z2lzdGVyU3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVyLCBTdG9yYWdlQXJlYUJhc2Um
KTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTdG9yYWdlQXJlYShTdG9yYWdlQXJlYUlkZW50aWZpZXIp
OworICAgIFN0b3JhZ2VBcmVhQmFzZSogZ2V0U3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlm
aWVyKTsKKworcHJpdmF0ZToKKyAgICBIYXNoTWFwPFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgV2Vh
a1B0cjxTdG9yYWdlQXJlYUJhc2U+PiBtX3N0b3JhZ2VBcmVhczsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL2dlbmVyYXRlLXVu
aWZpZWQtc291cmNlcy5zaCBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy9nZW5lcmF0ZS11bmlmaWVk
LXNvdXJjZXMuc2gKaW5kZXggYjZkNDBhZDllOTU0N2JkNDBkZTg1YzljODVhMzVjMWUyNWNkZjE5
MS4uNGYxYWM4M2NiM2EyMjZlY2NkMDc4Mzk4Mzc5MjNjYmM0NGJhYjkyMyAxMDA3NTUKLS0tIGEv
U291cmNlL1dlYktpdC9TY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaAorKysgYi9T
b3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtdW5pZmllZC1zb3VyY2VzLnNoCkBAIC0xNCw3
ICsxNCw3IEBAIGlmIFsgLXogIiR7QlVJTERfU0NSSVBUU19ESVJ9IiBdOyB0aGVuCiAgICAgZmkK
IGZpCiAKLVVuaWZpZWRTb3VyY2VDcHBGaWxlQ291bnQ9MTExCitVbmlmaWVkU291cmNlQ3BwRmls
ZUNvdW50PTExMgogVW5pZmllZFNvdXJjZU1tRmlsZUNvdW50PTgwCiAKIGlmIFsgJCMgLWVxIDAg
XTsgdGhlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9X
ZWJLaXQvU291cmNlcy50eHQKaW5kZXggMDVhODViMDE5NjA0MjAxNmFiNjg1ZjIwZDRiZWY3M2M0
NjI2NTYwNy4uNDJmYjYxYjE3NzUxZTExOTczMmZhYWIyNmUxNThhNTI2MzU1MzUyMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXMudHh0CkBAIC0xNDMsOCArMTQzLDE0IEBAIE5ldHdvcmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIv
V2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmNwcCBAbm8tdW5pZnkKIE5ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3Mv
c3RvcmFnZS9GaWxlU3lzdGVtU3RvcmFnZUhhbmRsZS5jcHAKIE5ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5jcHAKK05ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5jcHAKK05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVt
b3J5U3RvcmFnZUFyZWEuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdl
TWFuYWdlci5jcHAKIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIu
Y3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcAorTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwCitOZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHAKK05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3Rv
cmFnZUFyZWFSZWdpc3RyeS5jcHAKIAogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0
b3JhZ2VEYXRhYmFzZS5jcHAKIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdl
RGF0YWJhc2VUcmFja2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggZjQwMDBhNmI3MTkxMzVjMzQz
YjRjZDA5YzAyM2E2OGYyYzVlNzg1ZS4uYjExZjJkNTNjZmZhODVmOTZmMjc0MTFkOWQyZGIwN2Q5
NmEwN2MzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0xNTcyLDE2ICsxNTcyLDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoY29uc3QgU3RyaW5n
JiBpbmRleGVkRGF0YWIKICAgICAgICAgRmlsZVN5c3RlbTo6Y3JlYXRlU3ltYm9saWNMaW5rKGlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgb2xkVmVyc2lvbkRpcmVjdG9yeSk7CiB9CiAKLXZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17
Ci0gICAgaWYgKCFjYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpHZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKHNl
c3Npb25JRCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQogdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpwcmVjb25uZWN0VG8oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJQ
YWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmll
ciB3ZWJQYWdlSUQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHN0
ZDo6b3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzTmF2aWdhdGluZ1RvQXBw
Qm91bmREb21haW4sIExhc3ROYXZpZ2F0aW9uV2FzQXBwSW5pdGlhdGVkIGxhc3ROYXZpZ2F0aW9u
V2FzQXBwSW5pdGlhdGVkKQogewogICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCAhdXJsLnByb3Rv
Y29sSXNJbkhUVFBGYW1pbHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpp
bmRleCAwY2NiNjYyYmExYjM5NzNlNDNkNmY3NWMyMTRkNWU3NWM0ZjlhZWU1Li5jMTZlZGFkYTBi
MGE1ZTYxMDFjZDg0NTk0NzQ1NTRjMzY1OWMzNzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFT
dG9yZUNvY29hLm1tCkBAIC02NDQsNCArNjQ0LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb0FsbFByb2Nlc3NlcygpCiAjZW5kaWYKIH0K
IAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZXhj
bHVkZURpcmVjdG9yeUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpCit7CisgICAg
TlNTdHJpbmcgKnVybCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOihOU1N0cmluZyAqKWRpcmVjdG9y
eV07CisgICAgaWYgKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRGlyZWN0
b3J5QXRVUkw6dXJsIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0cmlidXRlczpu
aWwgZXJyb3I6bnVsbHB0cl0pCisgICAgICAgIFtbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOihOU1N0
cmluZyAqKWRpcmVjdG9yeSBpc0RpcmVjdG9yeTpZRVNdIHNldFJlc291cmNlVmFsdWU6QFlFUyBm
b3JLZXk6TlNVUkxJc0V4Y2x1ZGVkRnJvbUJhY2t1cEtleSBlcnJvcjpuaWxdOworfQorCisjZW5k
aWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCA5MDk3OTNlMzc1NjhjMDQyYjEwMDJhMjZhYTAy
NzQ3ODRhOTFlNGNhLi4yNTZiODg3NDAzZGFmNjVkNGJhMWJlNWExOGY0NWVlZGVjYjc4N2Q2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmNwcApAQCAtMTkwMyw2ICsxOTAzLDkgQEAgV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgYXV0byBsb2NhbFN0
b3JhZ2VEaXJlY3RvcnkgPSByZXNvbHZlZExvY2FsU3RvcmFnZURpcmVjdG9yeSgpOwogICAgIGlm
ICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewogICAgICAgICBwYXJhbWV0ZXJz
LmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgICAgICBleGNsdWRlRGlyZWN0b3J5RnJvbUJhY2t1cChsb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkpOworI2VuZGlmCiAgICAgICAgIC8vIEZJWE1FOiBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkgcmVzb2x2ZXMgdGhlIGRp
cmVjdG9yeSwgYnV0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkb25lLiBSZW1vdmUgdGhpcyBkdXBs
aWNhdGUgd29yay4KICAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSkp
CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSA9IFdURk1vdmUoKmhhbmRsZSk7CkBAIC0xOTY5LDE4ICsxOTcyLDYgQEAgQVBJOjpIVFRQ
Q29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tpZVN0b3JlKCkKICAgICByZXR1cm4g
Km1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6Z2V0TG9jYWxTdG9y
YWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNr
ZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICgh
aXNQZXJzaXN0ZW50KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG5ldHdvcmtQcm9jZXNzKCkuZ2V0TG9jYWxTdG9yYWdl
RGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdURk1vdmUoZGV0YWlscykpOwotICAgIH0pOwotfQotCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6
OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpj
cmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDFkZTI1
YTY2MDU3ZjJkNjZjNjI5OWU1ZWJiYjgxNDZiZWU5YjgxZTMuLmFmY2MyYWJiNjkxODFlZDc1NDBm
MjhhZTdhZTVhY2JkODk1NDU2YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTE2Nyw3ICsxNjcsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBX
YWxsVGltZSBtb2RpZmllZFNpbmNlLCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpOwogICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29u
c3QgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiYsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcik7CiAKLSAgICB2b2lkIGdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248
dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYm
KT4mJik7CiAgICAgdm9pZCBzZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoQ2Fj
aGVNb2RlbCk7CiAgICAgdm9pZCBzZXRTZXJ2aWNlV29ya2VyVGltZW91dEZvclRlc3RpbmcoU2Vj
b25kcyk7CiAgICAgdm9pZCByZXNldFNlcnZpY2VXb3JrZXJUaW1lb3V0Rm9yVGVzdGluZygpOwpA
QCAtMzcyLDYgKzM3MSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNvdW50Tm9uRGVmYXVsdFNl
c3Npb25TZXRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc2l6ZV90KT4mJik7CiAKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgIGV4Y2x1ZGVEaXJlY3RvcnlGcm9tQmFja3VwKGNvbnN0IFN0
cmluZyYgZGlyZWN0b3J5KTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIGVudW0gY2xhc3MgRm9y
Y2VSZWluaXRpYWxpemF0aW9uIDogYm9vbCB7IE5vLCBZZXMgfTsKICNpZiBFTkFCTEUoQVBQX0JP
VU5EX0RPTUFJTlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VuaWZpZWRTb3VyY2VzLW91
dHB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1vdXRwdXQueGNm
aWxlbGlzdAppbmRleCA1MDg5OGU0NjMwMTczMTk0YWU0ZWY3Y2NlNDNhZThlYjQ2NzNhODZiLi4y
YWQ3OTY0NWQ2ZWY2ODNkYWQ0ZWIwNzZmNWRkNzI0NzJiZjg2MGI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VuaWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9X
ZWJLaXQvVW5pZmllZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKQEAgLTE3LDYgKzE3LDcgQEAg
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJj
ZXMvVW5pZmllZFNvdXJjZTExLW1tLm0KICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMS5jcHAKICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZp
ZWRTb3VyY2UxMTAuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTExLmNwcAorJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJj
ZTExMi5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5p
ZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2UxMi1tbS5tbQogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTEyLmNw
cAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNv
dXJjZXMvVW5pZmllZFNvdXJjZTEzLW1tLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhNDVkNGQzNjkzMTc4NDQ3MDRkNDcxODBmYzRk
YWQ2ZjFiOTY2MjM2Li5kZDk4Njk5OTg1YjQ2ZmJmZDAyNTIzNzhiNTgyZTQyNDQ0NTU0ZTlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTE1MTQsNiArMTUxNCwxMyBAQAogCQk5M0U3OTk4NTI3NTZGQTU1MDA3NDAwOEEgLyogV2ViRmls
ZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OTgyMjc1NkZBNTQwMDc0MDA4
QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICov
OyB9OwogCQk5M0U3OTk4NzI3NTZGQUI0MDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VD
b25uZWN0aW9uTWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTk4MzI3NTZGQTU0MDA3NDAwOEEgLyogV2ViRmlsZVN5c3Rl
bVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXNSZXBsaWVzLmggKi87IH07CiAJCTkzRTc5OTg4Mjc1
NkZBQzIwMDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5ODEy
NzU2RkE1MzAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2Vz
LmggKi87IH07CisJCTkzRTc5OUM3Mjc2MDI3NDYwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lz
dHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3
OTlDNjI3NjAyNzM3MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3RyeS5oICovOyB9OworCQk5
M0U3OTlDRTI3NjA0OTdCMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTlDQTI3NjA0OTdB
MDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmggKi87IH07CisJCTkzRTc5OUNGMjc2
MDQ5N0IwMDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTlDQjI3NjA0OTdBMDA3NDAwOEEgLyog
TG9jYWxTdG9yYWdlTWFuYWdlci5oICovOyB9OworCQk5M0U3OTlEMjI3NjBBQTVCMDA3NDAwOEEg
LyogVW5pZmllZFNvdXJjZTExMi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0U3OTlEMTI3NjBBQTVBMDA3NDAwOEEgLyogVW5pZmllZFNvdXJjZTEx
Mi5jcHAgKi87IH07CisJCTkzRTc5OURBMjc2MTIxMDgwMDc0MDA4QSAvKiBTUUxpdGVTdG9yYWdl
QXJlYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNF
Nzk5RDQyNzYxMjEwNzAwNzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmggKi87IH07CisJCTkz
RTc5OURCMjc2MTIxMDgwMDc0MDA4QSAvKiBNZW1vcnlTdG9yYWdlQXJlYS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5RDUyNzYxMjEwNzAwNzQw
MDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmggKi87IH07CisJCTkzRTc5OURDMjc2MTIxMDgwMDc0
MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzRTc5OUQ2Mjc2MTIxMDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJh
c2UuaCAqLzsgfTsKIAkJOTNGNTQ5QjQxRTMxNzRCNzAwMEU3MjM5IC8qIFdLU25hcHNob3RDb25m
aWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0Y1NDlCMzFFMzE3NEI3MDAwRTcyMzkgLyogV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTk1MEYyODgw
MjUyNDE0RUEwMEI3NEYxQyAvKiBXS01vdXNlRGV2aWNlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEYyODdFMjUyNDE0RTkwMEI3NEYx
QyAvKiBXS01vdXNlRGV2aWNlT2JzZXJ2ZXIuaCAqLzsgfTsKIAkJOTU2NTA4MzkyNkQ4N0EyQjAw
RTE1Q0I3IC8qIEFwcGxlTWVkaWFTZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTU2NTA4MzcyNkQ4N0EyQjAwRTE1Q0I3IC8qIEFwcGxl
TWVkaWFTZXJ2aWNlc1NQSS5oICovOyB9OwpAQCAtNTM1Myw2ICs1MzYwLDE5IEBACiAJCTkzRTc5
OTgxMjc1NkZBNTMwMDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNz
YWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGaWxlU3lzdGVtU3Rv
cmFnZUNvbm5lY3Rpb25NZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0U3OTk4MjI3NTZGQTU0MDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9u
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRTc5OTgzMjc1NkZBNTQwMDc0MDA4QSAvKiBXZWJG
aWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlc1JlcGxpZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVzc2Fn
ZXNSZXBsaWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUM1Mjc2MDI3
MzYwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VBcmVhUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5M0U3OTlDNjI3NjAyNzM3MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFS
ZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQXJlYVJl
Z2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUM5Mjc2MDQ5N0Ew
MDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IExvY2FsU3RvcmFnZU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5M0U3OTlDQTI3NjA0OTdBMDA3NDAwOEEgLyogU2Vzc2lvblN0b3JhZ2VN
YW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlc3Npb25TdG9yYWdl
TWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlDQjI3NjA0OTdB
MDA3NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTkzRTc5OUNDMjc2MDQ5N0IwMDc0MDA4QSAvKiBTZXNzaW9uU3RvcmFnZU1hbmFnZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Vzc2lvblN0b3JhZ2VN
YW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDEyNzYwQUE1
QTAwNzQwMDhBIC8qIFVuaWZpZWRTb3VyY2UxMTIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVW5pZmllZFNvdXJjZTExMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTkzRTc5OUQzMjc2MTIxMDcwMDc0MDA4QSAvKiBTUUxpdGVTdG9yYWdlQXJlYS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxpdGVTdG9yYWdlQXJl
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQ0Mjc2MTIxMDcwMDc0
MDA4QSAvKiBTUUxpdGVTdG9yYWdlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTUUxpdGVTdG9yYWdlQXJlYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
M0U3OTlENTI3NjEyMTA3MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVtb3J5U3RvcmFnZUFyZWEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDYyNzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVh
QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQXJlYUJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDcyNzYxMjEwODAwNzQwMDhB
IC8qIFN0b3JhZ2VBcmVhQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTdG9yYWdlQXJlYUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
M0U3OTlEODI3NjEyMTA4MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVtb3J5U3RvcmFnZUFyZWEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y1NDlCMzFFMzE3NEI3MDAwRTcyMzkgLyogV0tT
bmFwc2hvdENvbmZpZ3VyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0tTbmFwc2hvdENvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTNGNTQ5QjUxRTMxNzREQTAwMEU3MjM5IC8qIFdLU25hcHNob3RDb25maWd1cmF0aW9uLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tTbmFwc2hvdENvbmZpZ3Vy
YXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk1MEYyODdFMjUyNDE0RTkw
MEI3NEYxQyAvKiBXS01vdXNlRGV2aWNlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV0tNb3VzZURldmljZU9ic2VydmVyLmg7IHBhdGggPSBpb3MvV0tNb3VzZURl
dmljZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MjM0LDYgKzgy
NTQsNyBAQAogCQkJCTFDQUVDQjVEMjc0NjVBRTMwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTA5
LmNwcCAqLywKIAkJCQkxQ0FFQ0I2MDI3NDY1QUUzMDBBQjc4RDAgLyogVW5pZmllZFNvdXJjZTEx
MC5jcHAgKi8sCiAJCQkJMUNBRUNCNUUyNzQ2NUFFMzAwQUI3OEQwIC8qIFVuaWZpZWRTb3VyY2Ux
MTEuY3BwICovLAorCQkJCTkzRTc5OUQxMjc2MEFBNUEwMDc0MDA4QSAvKiBVbmlmaWVkU291cmNl
MTEyLmNwcCAqLywKIAkJCSk7CiAJCQluYW1lID0gInVuaWZpZWQtc291cmNlcyI7CiAJCQlwYXRo
ID0gIkRlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMiOwpAQCAtMTAzMTQsMTEg
KzEwMzM1LDIzIEBACiAJCQkJOTM1QjU3OTgyNkY1MTI3MDAwOEI0OEFDIC8qIEZpbGVTeXN0ZW1T
dG9yYWdlSGFuZGxlUmVnaXN0cnkuaCAqLywKIAkJCQk5MzFBMDc1MTI2RjA2MzEwMDA0NDc0Q0Qg
LyogRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLmNwcCAqLywKIAkJCQk5MzFBMDc1MDI2RjA2MzEw
MDA0NDc0Q0QgLyogRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLmggKi8sCisJCQkJOTNFNzk5Qzky
NzYwNDk3QTAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFnZXIuY3BwICovLAorCQkJCTkzRTc5
OUNCMjc2MDQ5N0EwMDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmggKi8sCisJCQkJOTNF
Nzk5RDgyNzYxMjEwODAwNzQwMDhBIC8qIE1lbW9yeVN0b3JhZ2VBcmVhLmNwcCAqLywKKwkJCQk5
M0U3OTlENTI3NjEyMTA3MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuaCAqLywKIAkJCQk5
MzA4NURDMzI2RTFCQkJEMDAwRUM2QTcgLyogTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmNwcCAqLywK
IAkJCQk5MzA4NURDNDI2RTFCQkJEMDAwRUM2QTcgLyogTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmgg
Ki8sCiAJCQkJOTMwODVEQzcyNkUxQzZFRTAwMEVDNkE3IC8qIE5ldHdvcmtTdG9yYWdlTWFuYWdl
ci5tZXNzYWdlcy5pbiAqLywKIAkJCQk5MzA4NURDNTI2RTFDNkNGMDAwRUM2QTcgLyogT3JpZ2lu
U3RvcmFnZU1hbmFnZXIuY3BwICovLAogCQkJCTkzMDg1REM2MjZFMUM2Q0YwMDBFQzZBNyAvKiBP
cmlnaW5TdG9yYWdlTWFuYWdlci5oICovLAorCQkJCTkzRTc5OUNDMjc2MDQ5N0IwMDc0MDA4QSAv
KiBTZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwICovLAorCQkJCTkzRTc5OUNBMjc2MDQ5N0EwMDc0
MDA4QSAvKiBTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCAqLywKKwkJCQk5M0U3OTlEMzI3NjEyMTA3
MDA3NDAwOEEgLyogU1FMaXRlU3RvcmFnZUFyZWEuY3BwICovLAorCQkJCTkzRTc5OUQ0Mjc2MTIx
MDcwMDc0MDA4QSAvKiBTUUxpdGVTdG9yYWdlQXJlYS5oICovLAorCQkJCTkzRTc5OUQ3Mjc2MTIx
MDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuY3BwICovLAorCQkJCTkzRTc5OUQ2Mjc2MTIx
MDgwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYUJhc2UuaCAqLywKKwkJCQk5M0U3OTlDNTI3NjAyNzM2
MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAgKi8sCisJCQkJOTNFNzk5QzYyNzYw
MjczNzAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuaCAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gc3RvcmFnZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMjk3Myw2ICsxMzAw
Niw3IEBACiAJCQkJNTdEQ0VEQUUyMTRDNjAzMzAwMTZCODQ3IC8qIExvY2FsU2VydmljZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTNCMjYxNEUyMjdEMTRCMTAwQjk3QTc2IC8qIExvY2FsU3RvcmFn
ZURhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0IyNjE0RjIyN0QxNEIxMDBCOTdBNzYg
LyogTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3
OTlDRjI3NjA0OTdCMDA3NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDZCRUI2REIyMkZCOUQ0ODAwMjY5ODY3IC8qIExvY2FsU3RvcmFnZU5hbWVzcGFj
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBN0YyRjMxMjVCRjgyMDAwOEFFQjFEIC8qIExvZ2dp
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRENEN0Y3MUQ0N0U5MkEwMDlGMDhCQyAvKiBMb2dJ
bml0aWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMjk5MSw2ICsxMzAyNSw3IEBACiAJ
CQkJQTE1Nzk5QkQyNTg0NDMzMjAwNTI4MjM2IC8qIE1lZGlhU2FtcGxlQ3Vyc29yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwNzVBOUNGMzI2MTY5QkFCMDA2REZBM0EgLyogTWVkaWFTZXNzaW9uQ29v
cmRpbmF0b3JQcm94eVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTc5OUI3MjU4NDQz
MzIwMDUyODIzNiAvKiBNZWRpYVRyYWNrUmVhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3
OTlEQjI3NjEyMTA4MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxOTMzREVGMTk2NUVCMzEwMDhBQzNFQSAvKiBNZW51VXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5QjQ3OTA4RDI1MzE0RDgzMDBFQzExQUIgLyogTWVzc2FnZUFyZ3VtZW50
RGVzY3JpcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUM0QzgyOTE2Qjg3NkE5MDA2OURD
Q0QgLyogTWVzc2FnZUZsYWdzLmggaW4gSGVhZGVycyAqLywKQEAgLTEzMDM5LDcgKzEzMDc0LDYg
QEAKIAkJCQk1MzIxNTk1NjFEQkFFNzJEMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrQ29jb2Eu
aCBpbiBIZWFkZXJzICovLAogCQkJCTgzOTkwMjAzMUJFOUEwMkIwMDBGMzY1MyAvKiBOZXR3b3Jr
TG9hZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNENDU0RDcxQkU5RDNDNDAwNkM5M0JEIC8qIE5l
dHdvcmtMb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTdCNUY5NzI3NUVDNUU1MDAy
REMyMkQgLyogV2ViUHVzaE1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzOTE0OTY1MUJF
QTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUU0N0ZDOEEwMjVCODMzMUMwMDU0OTVGQyAvKiBOZXR3b3JrTG9hZFNjaGVkdWxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTE0NTI2RUQyNzFFMTY0NzAwMDQ2N0I2IC8qIE5ldHdvcmtOb3Rp
ZmljYXRpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTEzMTI3LDYgKzEzMTYxLDcgQEAK
IAkJCQkyRDI3OUUxOTI2OTU1NzY4MDA0QjNFRUIgLyogUHJvdG90eXBlVG9vbHNTUEkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxN0I1RjgxMjc1RTk3QjYwMDJEQzIyRCAvKiBQdXNoQXBwQnVuZGxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUY3RDI3NUU5N0I2MDAyREMyMkQgLyogUHVzaENs
aWVudENvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0I1Rjk1Mjc1RUJBNjMwMDJE
QzIyRCAvKiBQdXNoTWVzc2FnZUZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUExRTY4
ODcwMUY2RTJCQUIwMDcwMDZBNiAvKiBRdWFyYW50aW5lU1BJLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTBDMjI3RTI0NTExMzBBMDBFRDYxNEQgLyogUXVpY2tMb29rVGh1bWJuYWlsaW5nU29mdExp
bmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRUU1NzI1MjQwOUYxNDIwMDIwMDVENiAvKiBRdWlj
a0xvb2tUaHVtYm5haWxMb2FkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTMyMTEsNiArMTMyNDYs
NyBAQAogCQkJCTUxNEQ5RjU3MTkxMTlEMzUwMDAwNjNBNyAvKiBTZXJ2aWNlc0NvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBRkRFNjVBMTk1NEE0MkIwMEM0OEZGQSAvKiBTZXNzaW9u
U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMDAyRDQ5MTk2QjM0NUQwMEI5QUQ0NCAvKiBT
ZXNzaW9uU3RhdGVDb2RpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTc5OUNFMjc2MDQ5N0Iw
MDc0MDA4QSAvKiBTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2
QkVCNkRGMjJGQkIxNkIwMDI2OTg2NyAvKiBTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUE2NDIwRTUxMkRDRTJGRjAwQ0FBRTJDIC8qIFNoYXJlYWJsZUJpdG1h
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQzQTlDRTAyNUQ3MkYxQzAwOTkwRTI2IC8qIFNoYXJl
YWJsZUJpdG1hcFV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzIzOSwxMSArMTMyNzUs
MTQgQEAKIAkJCQk5M0Q2Qjc3MjI1NEJCNTE5MDA1OEREM0EgLyogU3BlZWNoUmVjb2duaXRpb25T
ZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRDZCNzg0MjU0Q0NEMEUwMDU4REQzQSAvKiBT
cGVlY2hSZWNvZ25pdGlvblNlcnZlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Q2
Qjc4NTI1NENDRDQzMDA1OEREM0EgLyogU3BlZWNoUmVjb2duaXRpb25TZXJ2ZXJNZXNzYWdlc1Jl
cGxpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTc5OURBMjc2MTIxMDgwMDc0MDA4QSAvKiBT
UUxpdGVTdG9yYWdlQXJlYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EzRkVDQTIyMUY3QzA5NzAw
RjI2N0NEIC8qIFN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2QkVC
NkQ3MjJGQjlCRDcwMDI2OTg2NyAvKiBTdG9yYWdlQXJlYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTNFNzk5REMyNzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUFEMzMwNkYxNkIxRDk5MTAwNEY2MEU3IC8qIFN0b3JhZ2VBcmVhSW1wbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUFDRUNEMjUxNzE2MkRCMTAwMUZDOUVGIC8qIFN0b3JhZ2VBcmVh
TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTMzNERFRTE2REU4Rjg4MDA2QThFMzggLyogU3Rv
cmFnZUFyZWFNYXBNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNzk5QzcyNzYwMjc0
NjAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
QjI2MTREMjI3RDE0OUUwMEI5N0E3NiAvKiBTdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTM2QjA1OTgyMzAzOTA5NzAwMkZDMDZCIC8qIFN0b3JhZ2VNYW5hZ2VyU2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzY4RUVERjIzMDNBOUVEMDBCREIxMUEgLyogU3RvcmFnZU1hbmFn
ZXJTZXRNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzUxMyw2ICsxMzU1Miw3IEBACiAJ
CQkJNTE3QjVGMkUyNzU3MzgyQTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9uQ29u
ZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyQ0Q2OUEyNzIxRjBBOTAwRjdGOEVD
IC8qIFdlYlB1c2hEYWVtb25Db25zdGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0I1Rjcz
Mjc1RTk2MDkwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uTWFpbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTE3QjVGOTcyNzVFQzVFNTAwMkRDMjJEIC8qIFdlYlB1c2hNZXNzYWdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0NjFDQ0NBNjIzMTQ4NUFBMDBCNjU5QjkgLyogV2ViUmVtb3RlT2JqZWN0UmVn
aXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1ODYwRTcxMjMwRjY3RkMwMDQ2MUFBRSAvKiBX
ZWJSZXNvdXJjZUludGVyY2VwdENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMEFG
RkJBMTY1NDIwNDgwMDFCQTA1RSAvKiBXZWJSZXNvdXJjZUxvYWRlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC0xMzU0Nyw3ICsxMzU4Nyw2IEBACiAJCQkJOTM1NkYyREMyMTUyQjZCNTAwRTZENURGIC8q
IFdlYlNXQ2xpZW50Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QTUzMTAxRjQ3
QTg2MjAwRENEQzBBIC8qIFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0NjZCQzAzQzFGQTI2NkRBMDAyRkE5QzEgLyogV2ViU1dDb250ZXh0TWFuYWdl
ckNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTUxN0I1Rjk1Mjc1RUJBNjMwMDJEQzIy
RCAvKiBQdXNoTWVzc2FnZUZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2MEY0ODkw
MUY5OTZGNzEwMENGNEI4NyAvKiBXZWJTV0NvbnRleHRNYW5hZ2VyQ29ubmVjdGlvbk1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMTFBOUVDQzIxNDAzNUY4MDBDRkIyMEEgLyogV2ViU3dp
dGNoaW5nR1BVQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzU2RjJERTIxNTJCNzEwMDBF
NkQ1REYgLyogV2ViU1dPcmlnaW5TdG9yZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTExNiw5ICsx
NTE1NSw5IEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAo
CiAJCQkJNTE3QjVGOUEyNzVGM0E4NjAwMkRDMjJEIC8qIEFyZ3VtZW50Q29kZXJzLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTUxN0I1RjY4Mjc1QTlBNzgwMDJEQzIyRCAvKiBXZWJQdXNoVG9vbENv
bm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKLQkJCQk1MTdCNUY5QjI3NUYzQTk4MDAyREMyMkQg
LyogRGFlbW9uVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QjVGOUMyNzVGM0Mz
NzAwMkRDMjJEIC8qIERhZW1vbkVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE3QjVG
OUIyNzVGM0E5ODAwMkRDMjJEIC8qIERhZW1vblV0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTUxN0I1RjY4Mjc1QTlBNzgwMDJEQzIyRCAvKiBXZWJQdXNoVG9vbENvbm5lY3Rpb24ubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1MTdCNUY2NTI3NUE4RDdGMDAyREMyMkQgLyogV2ViUHVzaFRv
b2xNYWluLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0xNTIxNCw3ICsxNTI1Myw2IEBACiAJCQkJQ0RBOTNEQjEy
MkY4QkNGNDAwNDkwQTY5IC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpY1BhcmFtZXRlcnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzFBMTUyRDcyNEU1QTI5QTAwOTc4QzhCIC8qIEhhbmRs
ZVhQQ0VuZHBvaW50TWVzc2FnZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQkyNzQ5RjY0NDIxNDY1
NjFCMDA4MzgwQkYgLyogSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTUxN0I1Rjk5Mjc1RUM2MDEwMDJEQzIyRCAvKiBXZWJQdXNoTWVzc2FnZUNvY29hLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMjc0OUY2NDUyMTQ2NTYxRTAwODM4MEJGIC8qIEluamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUJGNUVDNjQyNTQxMTQ1
NjAwOTg0RTc3IC8qIEpTSVBDQmluZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMTREMzdG
RTI0QUNFMDg2MDA3RkYwMTQgLyogTGF1bmNoU2VydmljZXNEYXRhYmFzZU1hbmFnZXIubW0gaW4g
U291cmNlcyAqLywKQEAgLTE1NTAzLDYgKzE1NTQxLDcgQEAKIAkJCQkxQ0FFQ0I2NTI3NDY1QUU0
MDBBQjc4RDAgLyogVW5pZmllZFNvdXJjZTEwOS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQ0FF
Q0I2ODI3NDY1QUU0MDBBQjc4RDAgLyogVW5pZmllZFNvdXJjZTExMC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQ0FFQ0I2NjI3NDY1QUU0MDBBQjc4RDAgLyogVW5pZmllZFNvdXJjZTExMS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk5M0U3OTlEMjI3NjBBQTVCMDA3NDAwOEEgLyogVW5pZmllZFNv
dXJjZTExMi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzhBMUZDMDIzQTU1MUJGMDBEMjM3NEYg
LyogVXNlckludGVyZmFjZUlkaW9tLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q0OTFCMEQxRTcz
MkU0RDAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUNENDkxQjE3MUU3MzUyNTUwMDAwOTA2NiAvKiBVc2VyTWVk
aWFDYXB0dXJlTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMTU1NzQsNiArMTU2MTMsNyBAQAogCQkJCUJDRUU3QUQwMTI4MTc5ODgwMDk4MjdEQSAvKiBX
ZWJQcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3
QjVGN0EyNzVFOTdBNDAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb24ubW0gaW4gU291cmNlcyAqLywK
IAkJCQk1MTdCNUY3OTI3NUU5N0ExMDAyREMyMkQgLyogV2ViUHVzaERhZW1vbk1haW4ubW0gaW4g
U291cmNlcyAqLywKKwkJCQk1MTdCNUY5OTI3NUVDNjAxMDAyREMyMkQgLyogV2ViUHVzaE1lc3Nh
Z2VDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRjA2MEUxMTY1NDMxODUwMEYzMjgxQiAv
KiBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MUYwNjBFMTE2NTQzMTg1MDBGMzI4MUYgLyogV2ViUlRDTW9uaXRvck1lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYwNjBFMTE2NTQzMTg1MDBGMzI4MkMgLyogV2Vi
UlRDUmVzb2x2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAK
aW5kZXggMGZhNmFjMThmZDk0NzA1OTBjZjEwN2Q2YTQ0MDY2ZDkyZDlhNDM2ZC4uMmNmN2E2ZDRi
NjAwNWMxZDdlYzI1NmJkNjM4ODc2Mjk0ZTllNGNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcApAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlTWFuYWdlck1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFNYXBN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VNYW5hZ2VyU2V0TWVzc2FnZXMuaCIKQEAgLTk1
LDcgKzk2LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6c2V0SXRlbShGcmFtZSogc291cmNlRnJh
bWUsIFN0b3JhZ2VBcmVhSW1wbCogc291cmNlQXJlYSwgY28KICAgICBtX3BlbmRpbmdWYWx1ZUNo
YW5nZXMuYWRkKGtleSk7CiAKICAgICBpZiAobV9tYXBJRCkKLSAgICAgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigp
LnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpTZXRJdGVtKCptX21hcElELCBzb3Vy
Y2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIGtleSwgdmFsdWUsIHNvdXJjZUZy
YW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOworICAgICAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpTZXRJdGVtKCptX21hcElE
LCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIGtleSwgdmFsdWUsIHNv
dXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOwogICAgIGVsc2UKICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVt
IGZhaWxlZCBiZWNhdXNlIHN0b3JhZ2UgbWFwIElEIGlzIGludmFsaWQiKTsKIH0KQEAgLTExNCw3
ICsxMTUsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJdGVtKFdlYkNvcmU6OkZyYW1l
KiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzbwogICAgIG1fcGVuZGluZ1ZhbHVlQ2hh
bmdlcy5hZGQoa2V5KTsKIAogICAgIGlmIChtX21hcElEKQotICAgICAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCku
c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OlJlbW92ZUl0ZW0oKm1fbWFwSUQsIHNv
dXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwga2V5LCBzb3VyY2VGcmFtZS0+
ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6UmVtb3ZlSXRlbSgqbV9tYXBJRCwg
c291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHNvdXJjZUZyYW1l
LT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOwogICAgIGVsc2UKICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJdGVtIGZhaWxl
ZCBiZWNhdXNlIHN0b3JhZ2UgbWFwIElEIGlzIGludmFsaWQiKTsKIH0KQEAgLTEyOSw3ICsxMzAs
NyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpjbGVhcihXZWJDb3JlOjpGcmFtZSogc291cmNlRnJh
bWUsIFN0b3JhZ2VBcmVhSW1wbCogc291cmNlQQogICAgIG1fbWFwID0gbWFrZVVuaXF1ZTxTdG9y
YWdlTWFwPihtX3F1b3RhSW5CeXRlcyk7CiAKICAgICBpZiAobV9tYXBJRCkKLSAgICAgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29u
bmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDbGVhcigqbV9tYXBJ
RCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVkLCBzb3VyY2VGcmFtZS0+
ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q2xlYXIoKm1fbWFwSUQsIHNvdXJj
ZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2VlZCwgc291cmNlRnJhbWUtPmRvY3VtZW50
KCktPnVybCgpLnN0cmluZygpKSwgMCk7CiAgICAgZWxzZQogICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihTdG9yYWdlLCAiU3RvcmFnZUFyZWFNYXA6OmNsZWFyIGZhaWxlZCBiZWNhdXNlIHN0b3Jh
Z2UgbWFwIElEIGlzIGludmFsaWQiKTsKIH0KQEAgLTE2MCw3ICsxNjEsNyBAQCBTdG9yYWdlTWFw
JiBTdG9yYWdlQXJlYU1hcDo6ZW5zdXJlTWFwKCkKICAgICAgICAgICAgIC8vIGZyb20gb3VyIFN0
b3JhZ2VNYW5hZ2VyU2V0OjpHZXRWYWx1ZXMoKSBJUEMuIFRoaXMgSVBDIG1heSBiZSB2ZXJ5IHNs
b3cgYmVjYXVzZSBpdCBtYXkgbmVlZCB0byBmZXRjaCB0aGUgdmFsdWVzIGZyb20gZGlzayBhbmQg
dGhlcmUgbWF5IGJlIGEgbG90IG9mIGRhdGEuCiAgICAgICAgICAgICBJUEM6OlVuYm91bmRlZFN5
bmNocm9ub3VzSVBDU2NvcGUgdW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29wZTsKICAgICAgICAg
ICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhbHVlczsKLSAgICAgICAgICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rp
b24oKS5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkdldFZhbHVlcygqbV9t
YXBJRCksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6R2V0VmFsdWVzOjpSZXBseSh2YWx1
ZXMpLCAwKTsKKyAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpHZXRWYWx1ZXMoKm1fbWFwSUQpLCBNZXNzYWdlczo6U3RvcmFn
ZU1hbmFnZXJTZXQ6OkdldFZhbHVlczo6UmVwbHkodmFsdWVzKSwgMCk7CiAgICAgICAgICAgICBt
X21hcC0+aW1wb3J0SXRlbXMoV1RGTW92ZSh2YWx1ZXMpKTsKICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU3RvcmFnZUFyZWFNYXA6OmVuc3Vy
ZU1hcCBmYWlsZWQgdG8gbG9hZCBmcm9tIG5ldHdvcmsgcHJvY2VzcyBiZWNhdXNlIHN0b3JhZ2Ug
bWFwIElEIGlzIGludmFsaWQiKTsKQEAgLTM0OCwyMCArMzQ5LDIzIEBAIHZvaWQgU3RvcmFnZUFy
ZWFNYXA6OmNvbm5lY3QoKQogICAgIGlmIChtX21hcElEKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgbWFwSUQ7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAg
ICBjYXNlIFN0b3JhZ2VUeXBlOjpMb2NhbDoKICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpUcmFuc2ll
bnRMb2NhbDoKICAgICAgICAgaWYgKFNlY3VyaXR5T3JpZ2luKiB0b3BMZXZlbE9yaWdpbiA9IG1f
bmFtZXNwYWNlLnRvcExldmVsT3JpZ2luKCkpCi0gICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2Vu
ZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9UcmFuc2llbnRMb2Nh
bFN0b3JhZ2VBcmVhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlc3Npb25JRCgpLCBtX25hbWVz
cGFjZS5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgdG9wTGV2ZWxPcmlnaW4tPmRhdGEoKSwgbV9zZWN1
cml0eU9yaWdpbi0+ZGF0YSgpKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0
VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhOjpSZXBseShtX21hcElEKSwgMCk7CisgICAgICAg
ICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6Q29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShtX25hbWVzcGFjZS5zdG9yYWdl
TmFtZXNwYWNlSUQoKSwgdG9wTGV2ZWxPcmlnaW4tPmRhdGEoKSwgbV9zZWN1cml0eU9yaWdpbi0+
ZGF0YSgpKSwgTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q29ubmVjdFRvVHJhbnNp
ZW50TG9jYWxTdG9yYWdlQXJlYTo6UmVwbHkobWFwSUQpLCAwKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNl
dDo6Q29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZXNz
aW9uSUQoKSwgbV9uYW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCksIG1fc2VjdXJpdHlPcmln
aW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29ubmVjdFRvTG9jYWxT
dG9yYWdlQXJlYTo6UmVwbHkobV9tYXBJRCksIDApOworICAgICAgICAgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigp
LnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5lY3RUb0xvY2Fs
U3RvcmFnZUFyZWEobV9uYW1lc3BhY2Uuc3RvcmFnZU5hbWVzcGFjZUlEKCksIG1fc2VjdXJpdHlP
cmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5lY3RU
b0xvY2FsU3RvcmFnZUFyZWE6OlJlcGx5KG1hcElEKSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgU3RvcmFnZVR5cGU6OlNlc3Npb246Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3lu
YyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJl
YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9uSUQoKSwgbV9uYW1lc3BhY2Uuc3RvcmFn
ZU5hbWVzcGFjZUlEKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpTdG9y
YWdlTWFuYWdlclNldDo6Q29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhOjpSZXBseShtX21hcElE
KSwgMCk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEobV9uYW1lc3BhY2Uuc3Rv
cmFnZU5hbWVzcGFjZUlEKCksIG1fc2VjdXJpdHlPcmlnaW4tPmRhdGEoKSksIE1lc3NhZ2VzOjpO
ZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYTo6UmVwbHko
bWFwSUQpLCAwKTsKICAgICB9CiAKLSAgICBpZiAobV9tYXBJRCkKKyAgICBpZiAobWFwSUQuaXNW
YWxpZCgpKSB7CisgICAgICAgIG1fbWFwSUQgPSBtYXBJRDsKICAgICAgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucmVnaXN0ZXJTdG9yYWdlQXJlYU1hcCgqdGhpcyk7CisgICAgfQogfQogCiB2
b2lkIFN0b3JhZ2VBcmVhTWFwOjpkaXNjb25uZWN0KCkKQEAgLTM3Myw3ICszNzcsNyBAQCB2b2lk
IFN0b3JhZ2VBcmVhTWFwOjpkaXNjb25uZWN0KCkKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS51bnJlZ2lzdGVyU3RvcmFnZUFyZWFNYXAoKnRoaXMpOwogCiAgICAgaWYgKGF1dG8qIG5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmV4aXN0aW5nTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bi0+Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpEaXNjb25u
ZWN0RnJvbVN0b3JhZ2VBcmVhKCptX21hcElEKSwgMCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFu
YWdlcjo6RGlzY29ubmVjdEZyb21TdG9yYWdlQXJlYSgqbV9tYXBJRCksIDApOwogCiAgICAgbV9t
YXBJRCA9IHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAppbmRleCBmODRkMDJmYzZmN2Uz
YmIxZTMxNDMzYzVmMDBlNjFlMGZkZWJmOTMyLi5kZWI2YTM0MzNjYWJhZmFmN2RjYWE1NjBjZGMz
YTE1ZTNhY2E3ZTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwCkBAIC0yNyw5ICsyNyw5IEBA
CiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZUltcGwuaCIKIAogI2luY2x1ZGUgIk5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlTWFuYWdlck1lc3Nh
Z2VzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFy
ZWFNYXAuaCIKLSNpbmNsdWRlICJTdG9yYWdlTWFuYWdlclNldE1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cFByb3h5LmgiCiAjaW5jbHVkZSAi
V2ViUHJvY2Vzcy5oIgpAQCAtMTE0LDcgKzExNCw3IEBAIFJlZjxTdG9yYWdlTmFtZXNwYWNlPiBT
dG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weShQYWdlJiBuZXdQYWdlKQogICAgIEFTU0VSVChtX3N0
b3JhZ2VUeXBlID09IFN0b3JhZ2VUeXBlOjpTZXNzaW9uKTsKIAogICAgIGlmIChhdXRvIG5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmV4aXN0aW5nTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkpCi0gICAgICAgIG5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bi0+Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDbG9uZVNl
c3Npb25TdG9yYWdlTmFtZXNwYWNlKHNlc3Npb25JRCgpLCBtX3N0b3JhZ2VOYW1lc3BhY2VJRCwg
V2ViUGFnZTo6ZnJvbUNvcmVQYWdlKG5ld1BhZ2UpLnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlSWRl
bnRpZmllcigpKSwgMCk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVj
dGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q2xvbmVTZXNzaW9u
U3RvcmFnZU5hbWVzcGFjZShtX3N0b3JhZ2VOYW1lc3BhY2VJRCwgV2ViUGFnZTo6ZnJvbUNvcmVQ
YWdlKG5ld1BhZ2UpLnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcigpKSwgMCk7CiAK
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdG9yYWdlTmFtZXNwYWNlSW1wbChtX3N0b3JhZ2VU
eXBlLCBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UobmV3UGFnZSkuc2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2VJZGVudGlmaWVyKCksIFdlYlBhZ2U6OmZyb21Db3JlUGFnZShuZXdQYWdlKS5pZGVudGlmaWVy
KCksIG1fdG9wTGV2ZWxPcmlnaW4uZ2V0KCksIG1fcXVvdGFJbkJ5dGVzKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446961</attachid>
            <date>2021-12-12 20:50:53 -0800</date>
            <delta_ts>2021-12-12 21:47:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234087-20211212205052.patch</filename>
            <type>text/plain</type>
            <size>169023</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2OTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGY2OWY2MzMyMDEzYWZk
MzcyMmZjYTk1OGJmNjc5NWNiNDNlMzkxMy4uNTgxNmFlMTNkNTUyOGQxNDE1ZDNhOGVjNGZjNDg2
MmM1MTZhY2NiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTEyLTEyICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIFN0b3JhZ2VNYW5h
Z2VyIHdpdGggTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIHRvIG1hbmFnZSBXZWJTdG9yYWdlIGJ5IG9y
aWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
RmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FM
aXRlRmlsZVN5c3RlbS5oOgorCiAyMDIxLTEyLTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6Om1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCBzaG91bGQgYmUgcHJpdmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA4ZWZkNDBkYWE5YzM1
M2MyYzU0OTA3Zjk4N2ZhYzI3YTdjMmE5ZWJlLi44NzQ2NDYyYWJkYzc2OTE2YjVmYzAwOTcyOTQ5
MzE5ZDY5ZjQ4ZWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNyBAQAorMjAyMS0xMi0xMiAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBNZXJnZSBTdG9yYWdlTWFu
YWdlciB3aXRoIE5ldHdvcmtTdG9yYWdlTWFuYWdlciB0byBtYW5hZ2UgV2ViU3RvcmFnZSBieSBv
cmlnaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
NDA4NworCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgIEluIG5l
dHdvcmsgcHJvY2VzcywgV2ViU3RvcmFnZSBkYXRhIGlzIG1hbmFnZWQgYnkgV2ViS2l0OjpTdG9y
YWdlTWFuYWdlciBjbGFzcy4gRWFjaCBTdG9yYWdlTWFuYWdlciBvd25zIG9uZSBvcgorICAgICAg
ICBtYW55IFN0b3JhZ2VOYW1lU3BhY2VzLCBhbmQgZWFjaCBTdG9yYWdlTmFtZXNwYWNlIG93bnMg
b25lIG9yIG1vcmUgU3RvcmFnZUFyZWFzLiBFYWNoIFN0b3JhZ2VBcmVhIGNvcnJlcG9uZHMKKyAg
ICAgICAgdG8gb25lIHN0b3JhZ2UgbWFwIChvbmUgbG9jYWxTdG9yYWdlIG9yIHNlc3Npb25TdG9y
YWdlIG9iamVjdCksIHVzaW5nIGVpdGhlciBhIFNRTGl0ZSBkYXRhYmFzZSBvciBhIGluLW1lbW9y
eQorICAgICAgICBtYXAgYXMgYmFja2VuZC4gTm93IHRoYXQgd2UgaGF2ZSBOZXR3b3JrU3RvcmFn
ZU1hbmFnZXIsIHdoaWNoIG1hbmFnZXMgc3RvcmFnZSBieSBvcmlnaW4uIFdlIGNhbiBtZXJnZQor
ICAgICAgICBTdG9yYWdlTWFuYWdlciB3aXRoIE5ldHdvcmtTdG9yYWdlTWFuYWdlciwgc2luY2Ug
bG9jYWxTdG9yYWdlIGFuZCBzZXNzaW9uU3RvcmFnZSBhcmUgbm90IHNoYXJlZCBiZXR3ZWVuIAor
ICAgICAgICBkaWZmZXJlbnQgb3JpZ2lucy4KKworICAgICAgICBUaGUgbmV3IHN0cnVjdHVyZSBp
czoKKyAgICAgICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIChtYW5hZ2Ugc3RvcmFnZSBmb3IgYSBz
ZXNzaW9uLCBvd25zIG9uZSBvciBtb3JlIE9yaWdpblN0b3JhZ2VNYW5hZ2VycykKKyAgICAgICAg
T3JpZ2luU3RvcmFnZU1hbmFnZXIgKG1hbmFnZSBzdG9yYWdlIGZvciBhbiBvcmlnaW4sIG93bnMg
b25lIExvY2FsU3RvcmFnZU1hbmFnZXIgYW5kIG9uZSBTZXNzaW9uU3RvcmFnZU1hbmFnZXIpCisg
ICAgICAgIExvY2FsU3RvcmFnZU1hbmFnZXIgLyBTZXNzaW9uU3RvcmFnZU1hbmFnZXIgKG1hbmFn
ZSBMb2NhbFN0b3JhZ2UgYW5kIFNlc3Npb25TdG9yYWdlLCBvd25zIG9uZSBvciBtb3JlIAorICAg
ICAgICBTdG9yYWdlQXJlYUJhc2VzKQorICAgICAgICBNZW1vcnlTdG9yYWdlQXJlYSAvIFNRTGl0
ZVN0b3JhZ2VBcmVhIChpbmhlcml0cyBTdG9yYWdlQXJlYUJhc2VzOyBtYW5hZ2Ugb25lIGxvY2Fs
IG9yIHNlc3Npb24gc3RvcmFnZSwgbGlrZSAKKyAgICAgICAgV2Via2l0OjpTdG9yYWdlQXJlYSkK
KworICAgICAgICBTdG9yYWdlTmFtZXNwYWNlIGxheWVyIGlzIHJlbW92ZWQuIEZvciBTZXNzaW9u
U3RvcmFnZSwgZGlmZmVyZW50IFN0b3JhZ2VOYW1lc3BhY2VzIG1lYW5zIGRpZmZlcmVudCB3ZWIg
cGFnZXMsIAorICAgICAgICBhbmQgc2FtZSBvcmlnaW4gY2FuIGhhdmUgZGlmZmVyZW50IHNlc3Np
b25TdG9yYWdlcyBvbiBkaWZmZXJlbnQgcGFnZXMsIHNvIHdlIGtlZXAgYSBTdG9yYWdlTmFtZXNw
YWNlIDw9PgorICAgICAgICBTdG9yYWdlQXJlYSBtYXAgaW4gU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
LiBGb3IgTG9jYWxTdG9yYWdlLCBkaWZmZXJudCBTdG9yYWdlTmFtZXNwYWNlcyBtZWFucyBkaWZm
ZXJlbnQgcGFnZSAKKyAgICAgICAgZ3JvdXBzLiBPdXIgb3JpZ2luYWwgcGxhbiB3YXMgdGhlIHNh
bWUgb3JpZ2luIGNhbiBoYXZlIGRpZmZlcmVudCBsb2NhbFN0b3JhZ2VzIGluIGRpZmZlcmVudCBw
YWdlIGdyb3VwcywgYnV0IG91cgorICAgICAgICBvbGQgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkg
bWFkZSBhbGwgcGFnZSBncm91cHMgcG9pbnQgdG8gdGhlIHNhbWUgZGF0YWJhc2UgZmlsZS4gVG8g
a2VlcCBleGlzdGluZyBiZWhhdmlvciAKKyAgICAgICAgdGhhdCBhbGwgcGFnZSBncm91cHMgd2l0
aCBzYW1lIG9yaWdpbiBzaGFyZSB0aGUgc3RvcmFnZSwgd2Ugbm93IGtlZXAgb25lIGxvY2FsIFN0
b3JhZ2VBcmVhIGFuZCBvbmUgdHJhbnNpZW50CisgICAgICAgIFN0b3JhZ2VBcmVhIHBlciBMb2Nh
bFN0b3JhZ2VNYW5hZ2VyLgorCisgICAgICAgIE1vc3RseSByZWZhY3RvcmluZyBhbmQgY292ZXJl
ZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6Omxvd01lbW9yeUhhbmRsZXIp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWRkV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRTdG9y
YWdlTWFuYWdlckZvclNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
ZGVzdHJveVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aGFzTG9j
YWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURh
dGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFG
b3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFuZFJl
c3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cHJlcGFyZVRvU3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpyZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZW5h
bWVPcmlnaW5JbldlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyk6IERlbGV0ZWQuCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6ZmlsZU5hbWVUb09yaWdpbik6CisgICAgICAgIChXZWJLaXQ6Om9yaWdpblRvRmlsZU5hbWUp
OgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpvcmlnaW5zT2ZMb2NhbFN0
b3JhZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6bG9jYWxT
dG9yYWdlRmlsZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpM
b2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdl
cjo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2Vy
OjpoYXNEYXRhSW5NZW1vcnkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VN
YW5hZ2VyOjpjbGVhckRhdGFJbk1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNsZWFyRGF0YU9uRGlzayk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6
aGFuZGxlTG93TWVtb3J5V2FybmluZyk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1h
bmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VN
YW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdl
TWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZEZvckxvY2FsU3RvcmFnZUFyZWEpOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkRm9yVHJhbnNpZW50
U3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25u
ZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFu
YWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpNZW1vcnlTdG9y
YWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKFdl
YktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmFsbEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6TWVt
b3J5U3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpNZW1vcnlTdG9yYWdl
QXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpj
bG9uZSBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9y
YWdlQXJlYS5oOiBBZGRlZC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpyZWFkT3JpZ2luRnJvbUZpbGUpOgorICAgICAgICAoV2ViS2l0Ojp3cml0ZU9yaWdpblRvRmls
ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6Ok5ldHdvcmtT
dG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Y2FuSGFuZGxlVHlwZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6b3JpZ2luRGlyZWN0b3J5UGF0aCk6CisgICAgICAg
IChXZWJLaXQ6Om9yaWdpbkZpbGVQYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2li
bGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZU9yaWdp
bkRpcmVjdG9yeUlmUG9zc2libGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1h
bmFnZXI6OmNsZWFyU3RvcmFnZUZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmZvckVhY2hPcmlnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmdldEFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YUZyb21EaXNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjptb3ZlRGF0YSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9UcmFuc2llbnRM
b2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
Ojpjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2Up
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c2V0SXRlbSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0Ojp0
b1dlYnNpdGVEYXRhVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OlN0b3JhZ2VCdWNrZXQp
OgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6
dG9XZWJzaXRlRGF0YVR5cGUpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6U3RvcmFnZUJ1Y2tldDo6dG9TdG9yYWdlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6
Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojpsb2NhbFN0b3JhZ2VNYW5hZ2Vy
KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6
OmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0
b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpzZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAg
ICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZXhpc3Rp
bmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6aXNFbXB0eSBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpmZXRj
aERhdGFUeXBlc0luTGlzdCk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpTdG9yYWdlQnVja2V0OjpkZWxldGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6Om1vdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6
T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmZldGNoRGF0YVR5cGVzSW5MaXN0
RnJvbU1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9y
YWdlQnVja2V0OjpmZXRjaERhdGFUeXBlc0luTGlzdEZyb21EaXNrKToKKyAgICAgICAgKFdlYktp
dDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0ZUxvY2FsU3RvcmFn
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1
Y2tldDo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2lu
U3RvcmFnZU1hbmFnZXI6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmRlZmF1bHRCdWNrZXQpOgorICAgICAgICAoV2ViS2l0OjpP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6bG9jYWxTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJL
aXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIpOgor
ICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6c2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmV4aXN0aW5nU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFn
ZXI6OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZmV0
Y2hEYXRhVHlwZXNJbkxpc3QpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6ZGVsZXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpt
b3ZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0Ojppc0FjdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U1FM
aXRlU3RvcmFnZUFyZWE6OnN0YXRlbWVudFN0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlNRTGl0ZVN0b3JhZ2VBcmVhOjpTUUxpdGVTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6
OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3Jh
Z2VBcmVhOjp+U1FMaXRlU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9y
YWdlQXJlYTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpj
bGVhcik6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjcmVhdGVUYWJsZUlm
TmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnByZXBhcmVE
YXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpzdGFydFRyYW5z
YWN0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6
Y2FjaGVkU3RhdGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6Omdl
dEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0SXRlbUZyb21E
YXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjphbGxJdGVtcyk6
CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtKToKKyAgICAgICAg
KFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpTUUxpdGVTdG9yYWdlQXJlYTo6Y29tbWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSk6CisgICAg
ICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmg6IEFk
ZGVkLgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L1Nlc3Npb25TdG9yYWdlTWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTZXNz
aW9uU3RvcmFnZU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJL
aXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y2xlYXJEYXRhKToKKyAgICAgICAg
KFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKToKKyAgICAg
ICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjphZGRTdG9yYWdlQXJlYSk6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvU2Vzc2lvblN0b3Jh
Z2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpkaXNjb25u
ZWN0RnJvbVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyOjpjbG9uZVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L1Nlc3Npb25TdG9yYWdlTWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHA6IEFkZGVkLiBTb21lIGNvZGUgaXMgbW92ZWQg
ZnJvbSBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yZWFnZS9TdG9yYWdlQXJlYS5jcHAuCisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZUFyZWFCYXNlKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZUFyZWFCYXNlOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhQmFzZTo6cmVtb3ZlTGlzdGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
QXJlYUJhc2U6Omhhc0xpc3RlbmVycyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VB
cmVhQmFzZTo6bm90aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhQmFzZTo6ZGlzcGF0Y2hFdmVudHMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmg6IEFkZGVkLiBTb21lIGNvZGUgaXMgbW92
ZWQgZnJvbSBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yZWFnZS9TdG9yYWdlQXJlYS5oLgorICAgICAg
ICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6Om9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VBcmVhQmFzZTo6cXVvdGEgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpyZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZUFyZWFSZWdpc3RyeTo6dW5yZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZUFyZWFSZWdpc3RyeTo6Z2V0U3RvcmFnZUFyZWEpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oOiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaDoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TG9j
YWxTdG9yYWdlRGV0YWlscyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZXhjbHVkZURpcmVjdG9yeUZyb21CYWNrdXApOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICogVW5p
ZmllZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VBcmVhTWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OnNldEl0ZW0p
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbSk6CisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3Jh
Z2VBcmVhTWFwOjplbnN1cmVNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6
Y29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpkaXNjb25uZWN0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weSk6CisKIDIwMjEt
MTItMTEgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
TW9tZW50dW0gRXZlbnQgRGlzcGF0Y2hlcjogVGFpbCBmcmFtZXMgYXJlIHRoZSB3cm9uZyB2ZWxv
Y2l0eSBpZiBtb21lbnR1bSBldmVudCBkaXNwYXRjaCByYXRlIGRvZXNuJ3QgbWF0Y2ggc2NyZWVu
IHJlZnJlc2ggcmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZUZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZp
bGVTeXN0ZW0uY3BwCmluZGV4IDc2ZTQ1YWYzNGVkMDkzZmQ5ZjI3NmRkNWQ0YjkyMmE0MTYzNGQ5
YWUuLmU3Y2RjYmY1YWJkMjA2OTY4NWUxZmFkMWQ3NDQxOWNhMTA4MWE5YmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKQEAgLTQzLDYg
KzQzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgY29uc3RleHByIHN0ZDo6
YXJyYXk8Y29uc3QgY2hhciAqLCAzPiBkYXRhYmFzZUZpbGVTdWZmaXhlcyB7ICIiLCAiLXNobSIs
ICItd2FsIiB9OworCiBTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKCkKIHsKIH0K
QEAgLTc3LDE4ICs3OSwyMiBAQCBib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0
YWJhc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiBGaWxlU3lzdGVt
OjpkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKIH0KIAotYm9vbCBTUUxpdGVGaWxlU3lzdGVt
OjpkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK2Jvb2wgU1FMaXRl
RmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCiB7
Ci0gICAgYXV0byB3YWxGaWxlTmFtZSA9IG1ha2VTdHJpbmcoZmlsZU5hbWUsICItd2FsIl9zKTsK
LSAgICBhdXRvIHNobUZpbGVOYW1lID0gbWFrZVN0cmluZyhmaWxlTmFtZSwgIi1zaG0iX3MpOwor
ICAgIGJvb2wgZmlsZUV4aXN0cyA9IGZhbHNlOworICAgIGZvciAoY29uc3QgYXV0byogc3VmZml4
IDogZGF0YWJhc2VGaWxlU3VmZml4ZXMpIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBmaWxlUGF0
aCArIHN1ZmZpeDsKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShwYXRoKTsKKyAgICAg
ICAgZmlsZUV4aXN0cyB8PSBGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHBhdGgpOworICAgIH0KIAot
ICAgIC8vIFRyeSB0byBkZWxldGUgYWxsIHRocmVlIGZpbGVzIHdoZXRoZXIgb3Igbm90IHRoZXkg
YXJlIHRoZXJlLgotICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZmlsZU5hbWUpOwotICAgIEZp
bGVTeXN0ZW06OmRlbGV0ZUZpbGUod2FsRmlsZU5hbWUpOwotICAgIEZpbGVTeXN0ZW06OmRlbGV0
ZUZpbGUoc2htRmlsZU5hbWUpOworICAgIHJldHVybiAhZmlsZUV4aXN0czsKK30KIAotICAgIC8v
IElmIGFueSBvZiB0aGUgd2FsIG9yIHNobSBmaWxlcyByZW1haW4gYWZ0ZXIgdGhlIGRlbGV0ZSBh
dHRlbXB0LCB0aGUgb3ZlcmFsbCBkZWxldGUgb3BlcmF0aW9uIGZhaWxlZC4KLSAgICByZXR1cm4g
IUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZU5hbWUpICYmICFGaWxlU3lzdGVtOjpmaWxlRXhp
c3RzKHdhbEZpbGVOYW1lKSAmJiAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzaG1GaWxlTmFtZSk7
Cit2b2lkIFNRTGl0ZUZpbGVTeXN0ZW06Om1vdmVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBv
bGRGaWxlUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdGaWxlUGF0aCkKK3sKKyAgICBmb3IgKGNvbnN0
IGF1dG8qIHN1ZmZpeCA6IGRhdGFiYXNlRmlsZVN1ZmZpeGVzKQorICAgICAgICBGaWxlU3lzdGVt
Ojptb3ZlRmlsZShtYWtlU3RyaW5nKG9sZEZpbGVQYXRoLCBzdWZmaXgpLCBtYWtlU3RyaW5nKG5l
d0ZpbGVQYXRoLCBzdWZmaXgpKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC05
OCwxOCArMTA0LDEzIEBAIGJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6dHJ1bmNhdGVEYXRhYmFzZUZp
bGUoc3FsaXRlMyogZGF0YWJhc2UpCiB9CiAjZW5kaWYKICAgICAKLXVpbnQ2NF90IFNRTGl0ZUZp
bGVTeXN0ZW06OmRhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKLXsgICAg
ICAgIAordWludDY0X3QgU1FMaXRlRmlsZVN5c3RlbTo6ZGF0YWJhc2VGaWxlU2l6ZShjb25zdCBT
dHJpbmcmIGZpbGVQYXRoKQorewogICAgIHVpbnQ2NF90IHRvdGFsU2l6ZSA9IDA7Ci0KLSAgICBp
ZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06OmZpbGVTaXplKGZpbGVOYW1lKSkKLSAgICAg
ICAgdG90YWxTaXplICs9ICpmaWxlU2l6ZTsKLQotICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmls
ZVN5c3RlbTo6ZmlsZVNpemUobWFrZVN0cmluZyhmaWxlTmFtZSwgIi13YWwiX3MpKSkKLSAgICAg
ICAgdG90YWxTaXplICs9ICpmaWxlU2l6ZTsKLQotICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmls
ZVN5c3RlbTo6ZmlsZVNpemUobWFrZVN0cmluZyhmaWxlTmFtZSwgIi1zaG0iX3MpKSkKLSAgICAg
ICAgdG90YWxTaXplICs9ICpmaWxlU2l6ZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8qIHN1ZmZpeCA6
IGRhdGFiYXNlRmlsZVN1ZmZpeGVzKSB7CisgICAgICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmls
ZVN5c3RlbTo6ZmlsZVNpemUoZmlsZVBhdGggKyBzdWZmaXgpKQorICAgICAgICAgICAgdG90YWxT
aXplICs9ICpmaWxlU2l6ZTsKKyAgICB9CiAKICAgICByZXR1cm4gdG90YWxTaXplOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKaW5kZXggYzY4
ZDljN2U3YWY5ODk3NmExZWQzZGNiNmYyYWNmZTRiNmNmNWMyZi4uOThlN2VhMGQwN2EyNTQxMWZh
NGY2MmFhNzIxNjU5M2Y2M2UzOWM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRmlsZVN5c3RlbS5oCkBAIC03OCw5ICs3OCwxMSBAQCBwdWJsaWM6CiAgICAgLy8g
RGVsZXRlcyBhIGRhdGFiYXNlIGZpbGUuCiAgICAgLy8KICAgICAvLyBmaWxlTmFtZSAtIFRoZSBm
aWxlIG5hbWUuCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZGVsZXRlRGF0YWJhc2VG
aWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBi
b29sIGRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKTsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUhhc2hGb3JGaWxlTmFtZShjb25zdCBT
dHJpbmcmIGZpbGVOYW1lKTsKKyAgICAvLyBNb3ZlcyBhIGRhdGFiYXNlIGZpbGUgdG8gYSBuZXcg
cGxhY2UuCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbW92ZURhdGFiYXNlRmlsZShj
b25zdCBTdHJpbmcmIG9sZEZpbGVQYXRoLCBjb25zdCBTdHJpbmcmIG5ld0ZpbGVQYXRoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVIYXNoRm9yRmlsZU5hbWUoY29u
c3QgU3RyaW5nJiBmaWxlUGF0aCk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8v
IFRydW5jYXRlcyBhIGRhdGFiYXNlIGZpbGUuIFVzZWQgd2hlbiBNb2JpbGVTYWZhcmlTZXR0aW5n
cyBkZWxldGVzIGEgZGF0YWJhc2UgZmlsZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMWVmMzNhNmU2MjczNzEwNDQ3NzUxYTU3M2My
NzQ4OTdlZDI5NDBhNi4uMjdhZjkxZTRmNTlmMzM0MTM3OGI2YWJhZmViODdhNWQ3NzdmOGQwNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
QEAgLTE1OCw3ICsxNTgsNiBAQCBzdGF0aWMgaW5saW5lIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lz
dHJ5IGNyZWF0ZU1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5KE5ldHdvcgogCiBOZXR3b3JrUHJv
Y2Vzczo6TmV0d29ya1Byb2Nlc3MoQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1l
dGVycyYmIHBhcmFtZXRlcnMpCiAgICAgOiBtX2Rvd25sb2FkTWFuYWdlcigqdGhpcykKLSAgICAs
IG1fc3RvcmFnZU1hbmFnZXJTZXQoU3RvcmFnZU1hbmFnZXJTZXQ6OmNyZWF0ZSgpKQogI2lmIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgLCBtX25ldHdvcmtDb250ZW50UnVsZUxpc3RN
YW5hZ2VyKCp0aGlzKQogI2VuZGlmCkBAIC0zMTQsMTIgKzMxMywxMyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpsb3dNZW1vcnlIYW5kbGVyKENyaXRpY2FsIGNyaXRpY2FsKQogICAgICAgICBuZXR3
b3JrU2Vzc2lvbi5jbGVhclByZWZldGNoQ2FjaGUoKTsKICAgICB9KTsKIAotICAgIG1fc3RvcmFn
ZU1hbmFnZXJTZXQtPmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKLQogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKICAgICBmb3IgKGF1dG8mIHN3U2VydmVyIDogbV9zd1NlcnZlcnMudmFsdWVz
KCkpCiAgICAgICAgIHN3U2VydmVyLT5oYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7CiAjZW5kaWYK
KworICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1fc3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKQor
ICAgICAgICBtYW5hZ2VyLT5oYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7CiB9CiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCkBAIC00MDIsNyArNDAyLDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6Y3JlYXRlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoUHJvY2Vzc0lk
ZW50aWZpZXIgaWRlbnQKIAogICAgIGNvbm5lY3Rpb24uc2V0T25MaW5lU3RhdGUoTmV0d29ya1N0
YXRlTm90aWZpZXI6OnNpbmdsZXRvbigpLm9uTGluZSgpKTsKIAotICAgIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPmFkZENvbm5lY3Rpb24oY29ubmVjdGlvbi5jb25uZWN0aW9uKCkpOwogICAgIHdlYklE
QlNlcnZlcihzZXNzaW9uSUQpLmFkZENvbm5lY3Rpb24oY29ubmVjdGlvbi5jb25uZWN0aW9uKCks
IGlkZW50aWZpZXIpOwogICAgIGlmIChhdXRvIG1hbmFnZXIgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5n
ZXQoc2Vzc2lvbklEKSkKICAgICAgICAgbWFuYWdlci0+c3RhcnRSZWNlaXZpbmdNZXNzYWdlRnJv
bUNvbm5lY3Rpb24oY29ubmVjdGlvbi5jb25uZWN0aW9uKCkpOwpAQCAtNDIxLDcgKzQyMCw3IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzCiB7CiAgICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CiAKLSAgICBhZGRTdG9yYWdl
TWFuYWdlckZvclNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxlKTsKKyAgICBh
ZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmdlbmVyYWxT
dG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxl
LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2VyKHNlc3Npb25JRCwgcGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFt
ZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKIAogICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBwYXJh
bWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwpAQCAtNDMwLDggKzQyOSw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMmJiBwYXJhbWV0ZXJzCiAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBw
YXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdU
Rk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKICNlbmRpZgogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgcGFy
YW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQogICAgIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0Ojpl
bnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbigqdGhpcywgV1RGTW92ZShwYXJhbWV0ZXJzKSk7
CiB9CiAKQEAgLTQ1NCwxMSArNDUxLDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbW92ZVNl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICBt
X3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5yZW1vdmUoc2Vzc2lvbklEKTsKIH0KIAotdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6YWRkU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBnZW5lcmFsU3RvcmFnZVBhdGgsIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSYgZ2VuZXJhbFN0b3JhZ2VQYXRoSGFuZGxlKQordm9pZCBOZXR3b3Jr
UHJvY2Vzczo6YWRkU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBnZW5lcmFsU3RvcmFnZVBhdGgsIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSYgZ2VuZXJhbFN0b3JhZ2VQYXRoSGFuZGxlLCBjb25zdCBTdHJpbmcmIGxvY2FsU3Rv
cmFnZVBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgbG9jYWxTdG9yYWdlUGF0aEhhbmRs
ZSkKIHsKICAgICBtX3N0b3JhZ2VNYW5hZ2Vycy5lbnN1cmUoc2Vzc2lvbklELCBbJl0gewogICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoZ2VuZXJhbFN0b3JhZ2VQ
YXRoSGFuZGxlKTsKLSAgICAgICAgcmV0dXJuIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y3JlYXRl
KHNlc3Npb25JRCwgZ2VuZXJhbFN0b3JhZ2VQYXRoKTsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y29uc3VtZVBlcm1hbmVudGx5KGxvY2FsU3RvcmFnZVBhdGhIYW5kbGUpOworICAgICAgICBy
ZXR1cm4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUoc2Vzc2lvbklELCBnZW5lcmFsU3Rv
cmFnZVBhdGgsIGxvY2FsU3RvcmFnZVBhdGgpOwogICAgIH0pOwogfQogCkBAIC01NzUsNyArNTcz
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQogICAgIG1fc2VydmljZVdvcmtlckluZm8ucmVtb3ZlKHNlc3Npb25JRCk7CiAj
ZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPnJlbW92ZShzZXNzaW9uSUQpOwogICAg
IGlmIChhdXRvIHNlcnZlciA9IG1fd2ViSURCU2VydmVycy50YWtlKHNlc3Npb25JRCkpCiAgICAg
ICAgIHNlcnZlci0+Y2xvc2UoKTsKICAgICByZW1vdmVTdG9yYWdlTWFuYWdlckZvclNlc3Npb24o
c2Vzc2lvbklEKTsKQEAgLTEwNjUsMTUgKzEwNjIsMTYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdp
c3QKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aGFzTG9jYWxTdG9yYWdlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAobV9zdG9y
YWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewotICAgICAgICBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW2RvbWFpbiwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIG9yaWdp
bnMpIG11dGFibGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjphbnlPZihv
cmlnaW5zLCBbJmRvbWFpbl0oYXV0byYgb3JpZ2luKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGRvbWFpbi5tYXRjaGVzKG9yaWdpbik7Ci0gICAgICAgICAgICB9KSk7Ci0gICAgICAgIH0pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOworICAg
IGlmIChpdGVyYXRvciA9PSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKworICAgIGF1dG8gdHlwZXMgPSBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiB7IFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlIH07CisgICAg
aXRlcmF0b3ItPnZhbHVlLT5mZXRjaERhdGEodHlwZXMsIFtkb21haW4sIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8gZW50cmllcykgbXV0YWJsZSB7
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6YW55T2YoZW50cmllcywgWyZkb21haW5d
KGF1dG8mIGVudHJ5KSB7CisgICAgICAgICAgICByZXR1cm4gZG9tYWluLm1hdGNoZXMoZW50cnku
b3JpZ2luKTsKKyAgICAgICAgfSkpOworICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ5MSwyMCArMTQ4OSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8
V2Vic2l0CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNv
bnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNl
dC0+Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0oYXV0byYmIG9yaWdpbnMpIHsKLSAgICAgICAgICAgIHdoaWxlICghb3JpZ2lucy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVu
dHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbnMudGFrZUFueSgpLCBXZWJz
aXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlLCAwIH0pOwotICAgICAgICB9KTsKLSAgICB9Ci0K
LSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2Fs
U3RvcmFnZSkgJiYgbV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewot
ICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKHNlc3Np
b25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIG9yaWdpbnMpIHsKLSAgICAgICAgICAg
IHdoaWxlICghb3JpZ2lucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7
IG9yaWdpbnMudGFrZUFueSgpLCBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSwgMCB9KTsK
LSAgICAgICAgfSk7Ci0gICAgfQotCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShTT1VQKQog
ICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SFNUU0Nh
Y2hlKSkKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmhvc3ROYW1l
c1dpdGhIU1RTQ2FjaGUgPSBob3N0TmFtZXNXaXRoSFNUU0NhY2hlKHNlc3Npb25JRCk7CkBAIC0x
NTU3LDEwICsxNTQxLDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0CiAgICAgfQogI2VuZGlm
CiAKLSAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lv
bklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpIHsKLSAgICAgICAgaXRl
cmF0b3ItPnZhbHVlLT5mZXRjaERhdGEod2Vic2l0ZURhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVn
YXRvcl0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNhbGxiYWNrQWdncmVn
YXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGVudHJpZXMp
KTsKLSAgICAgICAgfSk7CisgICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxl
VHlwZXMod2Vic2l0ZURhdGFUeXBlcykpIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBt
X3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1h
bmFnZXJzLmVuZCgpKSB7CisgICAgICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmZldGNoRGF0YSh3
ZWJzaXRlRGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvIGVudHJpZXMpIG11dGFi
bGUgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5l
bnRyaWVzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGVudHJpZXMpKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CiAgICAgfQogfQogCkBAIC0xNTg3LDEyICsxNTczLDYgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRp
b25TZXQ8V2Vic2kKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkRPTUNhY2hlKSkKICAgICAgICAgQ2FjaGVTdG9yYWdlOjpFbmdpbmU6OmNsZWFyQWxs
Q2FjaGVzKCp0aGlzLCBzZXNzaW9uSUQsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKIAotICAg
IGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0
b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAg
ICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRlbGV0ZVNlc3Npb25TdG9yYWdlKHNlc3Npb25JRCwg
W2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwotCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJT
ZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRl
bGV0ZUxvY2FsU3RvcmFnZU1vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBb
Y2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7Ci0KICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250
YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykgJiYgIXNlc3Npb25JRC5p
c0VwaGVtZXJhbCgpKQogICAgICAgICB3ZWJJREJTZXJ2ZXIoc2Vzc2lvbklEKS5jbG9zZUFuZERl
bGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2UobW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5k
bGVyXSB7IH0pOwogCkBAIC0xNjM3LDggKzE2MTcsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
ZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vi
c2kKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFu
YWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQo
KSkKLSAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhTW9kaWZpZWRTaW5jZSh3ZWJz
aXRlRGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7Cisg
ICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMod2Vic2l0ZURhdGFU
eXBlcykpIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5m
aW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKQorICAg
ICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhTW9kaWZpZWRTaW5jZSh3ZWJzaXRl
RGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CisgICAg
fQogfQogCiBzdGF0aWMgdm9pZCBjbGVhckRpc2tDYWNoZUVudHJpZXMoTmV0d29ya0NhY2hlOjpD
YWNoZSogY2FjaGUsIGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5zLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzAzLDEy
ICsxNjg1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmln
aW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICAgICAgICAgICAgIENhY2hlU3Rv
cmFnZTo6RW5naW5lOjpjbGVhckNhY2hlc0Zvck9yaWdpbigqdGhpcywgc2Vzc2lvbklELCBTZWN1
cml0eU9yaWdpbkRhdGEgeyBvcmlnaW5EYXRhIH0sIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsK
ICAgICB9CiAKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OlNlc3Npb25TdG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNz
aW9uSUQpKQotICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5kZWxldGVTZXNzaW9uU3RvcmFn
ZUZvck9yaWdpbnMoc2Vzc2lvbklELCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7
IH0pOwotCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpMb2NhbFN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25J
RCkpCi0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9y
aWdpbnMoc2Vzc2lvbklELCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwot
CiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRl
eGVkREJEYXRhYmFzZXMpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgd2Vi
SURCU2VydmVyKHNlc3Npb25JRCkuY2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKG9y
aWdpbkRhdGFzLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAKQEAgLTE3NDYsOCArMTcyMiwx
MCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpbwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGF1
dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9y
ICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKQotICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRl
bGV0ZURhdGEod2Vic2l0ZURhdGFUeXBlcywgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxl
cl0geyB9KTsKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3
ZWJzaXRlRGF0YVR5cGVzKSkgeworICAgICAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFn
ZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMu
ZW5kKCkpCisgICAgICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRlbGV0ZURhdGEod2Vic2l0ZURh
dGFUeXBlcywgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKKyAgICB9CiAK
ICAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0aGlzLT5uZXR3b3JrU2Vzc2lvbihzZXNz
aW9uSUQpKSB7CiAgICAgICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGRv
bWFpbnNUb0RlbGV0ZU5ldHdvcmtEYXRhRm9yOwpAQCAtMTkwNCwyOCArMTg4Miw2IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFuZFJlc3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJs
ZURvbWFpbnMoUEFMOjpTZXNzCiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIGlmIChtX3N0b3Jh
Z2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKSB7Ci0gICAgICAgIGlmICh3ZWJzaXRl
RGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpKSB7Ci0g
ICAgICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5nZXRTZXNzaW9uU3RvcmFnZU9yaWdpbnMo
c2Vzc2lvbklELCBbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRoaXMsIHNlc3Npb25J
RCwgY2FsbGJhY2tBZ2dyZWdhdG9yLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRl
RGF0YUZvcl0oYXV0byYmIG9yaWdpbnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3RvcmFn
ZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAgICAgICAgIGF1dG8gb3JpZ2luc1RvRGVsZXRlID0gZmlsdGVyRm9y
UmVnaXN0cmFibGVEb21haW5zKG9yaWdpbnMsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdl
YnNpdGVEYXRhRm9yLCBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fZG9tYWlucyk7Ci0gICAgICAgICAg
ICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2VGb3JPcmlnaW5z
KHNlc3Npb25JRCwgb3JpZ2luc1RvRGVsZXRlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2Vic2l0ZURhdGFUeXBl
cy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKLSAgICAgICAgICAg
IG1fc3RvcmFnZU1hbmFnZXJTZXQtPmdldExvY2FsU3RvcmFnZU9yaWdpbnMoc2Vzc2lvbklELCBb
cHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRoaXMsIHNlc3Npb25JRCwgY2FsbGJhY2tB
Z2dyZWdhdG9yLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvcl0oYXV0
byYmIG9yaWdpbnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3RvcmFnZU1hbmFnZXJTZXQt
PmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAgICAgICAgIGF1dG8gb3JpZ2luc1RvRGVsZXRlID0gZmlsdGVyRm9yUmVnaXN0cmFibGVE
b21haW5zKG9yaWdpbnMsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9y
LCBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fZG9tYWlucyk7Ci0gICAgICAgICAgICAgICAgbV9zdG9y
YWdlTWFuYWdlclNldC0+ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2lucyhzZXNzaW9uSUQsIG9y
aWdpbnNUb0RlbGV0ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9Ci0gICAgfQotCiAgICAgYXV0byBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhz
LmdldChzZXNzaW9uSUQpOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkgJiYgd2Vic2l0ZURhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykpIHsKICAg
ICAgICAgd2ViSURCU2VydmVyKHNlc3Npb25JRCkuZ2V0T3JpZ2lucyhbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IFJlZiB7ICp0aGlzIH0sIHNlc3Npb25JRCwgY2FsbGJhY2tBZ2dyZWdhdG9yLCBkb21h
aW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvcl0oYXV0byYmIG9yaWdpbnMpIHsK
QEAgLTE5NzIsMTEgKzE5MjgsMTMgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlQW5kUmVz
dHJpY3RXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6OlNlc3MKICAgICAgICAg
fSk7CiAgICAgfQogCi0gICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5m
aW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKSB7Ci0g
ICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyh3
ZWJzaXRlRGF0YVR5cGVzLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZv
ciwgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byBkZWxldGVkRG9tYWlucykgbXV0YWJsZSB7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8gZG9tYWluIDogZGVsZXRlZERvbWFpbnMpCi0gICAgICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX2RvbWFpbnMuYWRkKFdURk1vdmUoZG9tYWluKSk7
Ci0gICAgICAgIH0pOworICAgIGlmIChOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5
cGVzKHdlYnNpdGVEYXRhVHlwZXMpKSB7CisgICAgICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9z
dG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5h
Z2Vycy5lbmQoKSkgeworICAgICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhRm9y
UmVnaXN0cmFibGVEb21haW5zKHdlYnNpdGVEYXRhVHlwZXMsIGRvbWFpbnNUb0RlbGV0ZUFsbE5v
bkNvb2tpZVdlYnNpdGVEYXRhRm9yLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvJiYgZGVsZXRl
ZERvbWFpbnMpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byBkb21haW4gOiBk
ZWxldGVkRG9tYWlucykKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5t
X2RvbWFpbnMuYWRkKFdURk1vdmUoZG9tYWluKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQogICAgIH0KIAogICAgIGF1dG8gZGF0YVR5cGVzRm9yVUlQcm9jZXNzID0gV2Vic2l0ZURhdGE6
OmZpbHRlcih3ZWJzaXRlRGF0YVR5cGVzLCBXZWJzaXRlRGF0YVByb2Nlc3NUeXBlOjpVSSk7CkBA
IC0yMzA3LDcgKzIyNjUsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwcmVwYXJlVG9TdXNwZW5k
KGJvb2wgaXNTdXNwZW5zaW9uSW1taW5lbnQsIENvbXBsZXRpb25IYW5kbAogICAgIH0KICNlbmRp
ZgogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+c3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOworICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1fc3RvcmFnZU1hbmFnZXJzLnZhbHVl
cygpKQorICAgICAgICBtYW5hZ2VyLT5zdXNwZW5kKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5k
KCkKQEAgLTIzNDYsNyArMjMwNSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlc3VtZSgpCiAg
ICAgbV9zaG91bGRTdXNwZW5kSURCU2VydmVycyA9IGZhbHNlOwogI2VuZGlmCiAKLSAgICBtX3N0
b3JhZ2VNYW5hZ2VyU2V0LT5yZXN1bWUoKTsKKyAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX3N0
b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAgbWFuYWdlci0+cmVzdW1lKCk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUp
CkBAIC0yNDQyLDggKzI0MDIsOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKFBBTDo6U2Vzc2lvbklEIHNlcwogCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT53YWl0VW50
aWxTeW5jaW5nTG9jYWxTdG9yYWdlRmluaXNoZWQoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcigp
OworICAgIGF1dG8gYWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX3N0b3Jh
Z2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAgbWFuYWdlci0+c3luY0xvY2FsU3RvcmFnZShb
YWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90YShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTI0NzMsMTAgKzI0MzQsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpyZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgVQogICAgIGlmIChvbGRPcmlnaW4uaXNFbXB0eSgpIHx8IG5ld09yaWdpbi5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURh
dGFUeXBlOjpMb2NhbFN0b3JhZ2UpKSB7Ci0gICAgICAgIGlmIChtX3N0b3JhZ2VNYW5hZ2VyU2V0
LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+
cmVuYW1lT3JpZ2luKHNlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgW2FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmlu
ZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKKyAgICAg
ICAgaXRlcmF0b3ItPnZhbHVlLT5tb3ZlRGF0YShvbGRPcmlnaW4sIG5ld09yaWdpbiwgW2FnZ3Jl
Z2F0b3JdIHsgfSk7CiAKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6SW5kZXhlZERCRGF0YWJhc2VzKSkgewogICAgICAgICBhdXRvIHBhdGggPSBtX2lkYkRhdGFi
YXNlUGF0aHMuZ2V0KHNlc3Npb25JRCk7CkBAIC0yNzcxLDIxICsyNzMwLDggQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6cmVtb3ZlS2VwdEFsaXZlTG9hZChOZXR3b3JrUmVzb3VyY2VMb2FkZXImIGxv
YWRlcikKICAgICAgICAgc2Vzc2lvbi0+cmVtb3ZlS2VwdEFsaXZlTG9hZChsb2FkZXIpOwogfQog
Ci12b2lkIE5ldHdvcmtQcm9jZXNzOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8TG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKLXsKLSAgICBpZiAoIW1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25J
RCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDYW5ub3QgZ2V0IGxvY2FsIHN0b3JhZ2UgaW5mb3Jt
YXRpb24gZm9yIGFuIHVua25vd24gc2Vzc2lvbiIpOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cih7IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNl
dC0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29ubmVjdGlvblRvV2Vi
UHJvY2Vzc0Nsb3NlZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKIHsKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZW1vdmVDb25uZWN0aW9u
KGNvbm5lY3Rpb24pOwotCiAgICAgaWYgKGF1dG8qIHNlcnZlciA9IG1fd2ViSURCU2VydmVycy5n
ZXQoc2Vzc2lvbklEKSkKICAgICAgICAgc2VydmVyLT5yZW1vdmVDb25uZWN0aW9uKGNvbm5lY3Rp
b24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgK
aW5kZXggODgwMTdjNDRhMTA1ZjFjMGZkZTU1YjI0YzJmZTA5OWI3NjZmYWY4MS4uNWEyMGE3Y2Y5
NzAxNzBlOTRkZDdhYThlMzhmYmFkYjk1NDZhMDVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMTA3LDcgKzEwNyw2IEBAIGNsYXNzIE5l
dHdvcmtQcm94aW1pdHlNYW5hZ2VyOwogY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZGVyOwogY2xh
c3MgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOwogY2xhc3MgUHJvY2Vzc0Fzc2VydGlvbjsKLWNsYXNz
IFN0b3JhZ2VNYW5hZ2VyU2V0OwogY2xhc3MgV2ViUGFnZU5ldHdvcmtQYXJhbWV0ZXJzOwogY2xh
c3MgV2ViU1dTZXJ2ZXJDb25uZWN0aW9uOwogY2xhc3MgV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25u
ZWN0aW9uOwpAQCAtMjk2LDcgKzI5NSw2IEBAIHB1YmxpYzoKICAgICBib29sIHNlc3Npb25Jc0Nv
bnRyb2xsZWRCeUF1dG9tYXRpb24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwogCiAgICAgdm9pZCBj
b25uZWN0aW9uVG9XZWJQcm9jZXNzQ2xvc2VkKElQQzo6Q29ubmVjdGlvbiYsIFBBTDo6U2Vzc2lv
bklEKTsKLSAgICB2b2lkIGdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoUEFMOjpTZXNzaW9u
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYpOwogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKICAgICBOZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlciYgbmV0d29ya0NvbnRlbnRS
dWxlTGlzdE1hbmFnZXIoKSB7IHJldHVybiBtX25ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2Vy
OyB9CkBAIC01NTQsNyArNTUyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZFNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVp
bnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0
aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCk7CiAKLSAgICB2b2lkIGFkZFN0b3JhZ2VN
YW5hZ2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKKyAgICB2b2lkIGFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vz
c2lvbihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUmLCBjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZVBhdGgsIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEKTsKIAogICAgIC8vIENvbm5lY3Rpb25zIHRvIFdlYlByb2Nlc3Nlcy4KQEAg
LTU3Nyw4ICs1NzUsNiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0
ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7CiAKLSAgICBSZWY8U3RvcmFn
ZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7Ci0KICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggZjNj
MjNkMWMxODQ2ZDU0MzVkMGIxMzMxMzE4NDRmNDk1ZDIwNTM5MC4uMmVhNjQ1Yjc4MWFlNzNmZGYy
MjAzZjFlOTRkNDA1ZTM2MWZkOTZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0xNzMsNyArMTczLDYg
QEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogICAgIE1hcmtQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkgLT4gKCkgQXN5bmMKICAgICBTZXRQQ01GcmF1ZFByZXZlbnRpb25WYWx1ZXNG
b3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nIHNlY3JldFRva2VuLCBT
dHJpbmcgdW5saW5rYWJsZVRva2VuLCBTdHJpbmcgc2lnbmF0dXJlLCBTdHJpbmcga2V5SUQpIC0+
ICgpIEFzeW5jCiAgICAgU2V0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBcHBCdW5kbGVJREZvclRl
c3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcgYXBwQnVuZGxlSURGb3JUZXN0
aW5nKSAtPiAoKSBBc3luYwotICAgIEdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiAoVmVjdG9yPFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiBkZXRhaWxzKSBBc3luYwogCiAgICAgU2V0U2Vydmlj
ZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyBzZWNvbmRzKSAtPiAoKSBTeW5j
aHJvbm91cwogICAgIFJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSAt
PiAoKSBTeW5jaHJvbm91cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiZGRk
MmUzMDQ4ZDI4NzBhZTA3YTBhYWRmNGVkOTdiMzEwNDM2YzkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5j
cHAKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTG9jYWxTdG9yYWdlTWFuYWdlci5oIgorCisjaW5jbHVkZSAiTWVtb3J5U3RvcmFn
ZUFyZWEuaCIKKyNpbmNsdWRlICJTUUxpdGVTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3Jh
Z2VBcmVhUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gU3VnZ2VzdGVkIGJ5IGh0dHBzOi8vd3d3Lncz
Lm9yZy9UUi93ZWJzdG9yYWdlLyNkaXNrLXNwYWNlCitjb25zdGV4cHIgdW5zaWduZWQgbG9jYWxT
dG9yYWdlUXVvdGFJbkJ5dGVzID0gNSAqIE1COworY29uc3RleHByIGF1dG8gZmlsZVN1ZmZpeCA9
ICIubG9jYWxzdG9yYWdlIl9zOworCisvLyBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgZm9y
IGV4aXN0aW5nIGZpbGVzLgorLy8gV2Ugc2hvdWxkIG5vdCBpbmNsdWRlIG9yaWdpbiBpbiBmaWxl
IG5hbWUuCitzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
IGZpbGVOYW1lVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK3sKKyAgICBpZiAoIWZp
bGVOYW1lLmVuZHNXaXRoKGZpbGVTdWZmaXgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgYXV0byBzdWZmaXhMZW5ndGggPSBzdHJsZW4oZmlsZVN1ZmZpeCk7CisgICAgYXV0
byBmaWxlTmFtZUxlbmd0aCA9IGZpbGVOYW1lLmxlbmd0aCgpOworICAgIGlmIChmaWxlTmFtZUxl
bmd0aCA8PSBzdWZmaXhMZW5ndGgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBhdXRvIG9yaWdpbklkZW50aWZpZXIgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWVM
ZW5ndGggLSBzdWZmaXhMZW5ndGgpOworICAgIHJldHVybiBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcik7Cit9CisKK3N0
YXRpYyBTdHJpbmcgb3JpZ2luVG9GaWxlTmFtZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4m
IG9yaWdpbikKK3sKKyAgICByZXR1cm4gb3JpZ2luLmNsaWVudE9yaWdpbi5kYXRhYmFzZUlkZW50
aWZpZXIoKSArICIubG9jYWxzdG9yYWdlIjsKK30KKworVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YT4gTG9jYWxTdG9yYWdlTWFuYWdlcjo6b3JpZ2luc09mTG9jYWxTdG9yYWdlRGF0
YShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YT4gb3JpZ2luczsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBvcmlnaW5zOworCisgICAgZm9yIChhdXRvJiBmaWxlTmFtZSA6IEZpbGVTeXN0ZW06Omxpc3RE
aXJlY3RvcnkocGF0aCkpIHsKKyAgICAgICAgaWYgKGF1dG8gb3JpZ2luID0gZmlsZU5hbWVUb09y
aWdpbihmaWxlTmFtZSkpCisgICAgICAgICAgICBvcmlnaW5zLmFwcGVuZCgqb3JpZ2luKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gb3JpZ2luczsKK30KKworU3RyaW5nIExvY2FsU3RvcmFnZU1hbmFn
ZXI6OmxvY2FsU3RvcmFnZUZpbGVQYXRoKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBpZiAoZGlyZWN0b3J5LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyB7IH07CisKKyAgICByZXR1cm4gRmlsZVN5c3Rl
bTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRpcmVjdG9yeSwgb3JpZ2luVG9GaWxlTmFtZShv
cmlnaW4pKTsKK30KKworTG9jYWxTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTWFuYWdlcihj
b25zdCBTdHJpbmcmIHBhdGgsIFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQorICAgIDog
bV9wYXRoKHBhdGgpCisgICAgLCBtX3JlZ2lzdHJ5KHJlZ2lzdHJ5KQoreworfQorCitib29sIExv
Y2FsU3RvcmFnZU1hbmFnZXI6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fbG9j
YWxTdG9yYWdlQXJlYSAmJiBtX2xvY2FsU3RvcmFnZUFyZWEtPmhhc0xpc3RlbmVycygpKSB8fCAo
bV90cmFuc2llbnRTdG9yYWdlQXJlYSAmJiBtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5oYXNMaXN0
ZW5lcnMoKSk7Cit9CisKK2Jvb2wgTG9jYWxTdG9yYWdlTWFuYWdlcjo6aGFzRGF0YUluTWVtb3J5
KCkgY29uc3QKK3sKKyAgICBib29sIGhhc0RhdGFJbkxvY2FsU3RvcmFnZUFyZWEgPSBtX2xvY2Fs
U3RvcmFnZUFyZWEgJiYgaXM8TWVtb3J5U3RvcmFnZUFyZWE+KCptX2xvY2FsU3RvcmFnZUFyZWEp
ICYmICFtX2xvY2FsU3RvcmFnZUFyZWEtPmlzRW1wdHkoKTsKKyAgICByZXR1cm4gaGFzRGF0YUlu
TG9jYWxTdG9yYWdlQXJlYSB8fCAobV90cmFuc2llbnRTdG9yYWdlQXJlYSAmJiAhbV90cmFuc2ll
bnRTdG9yYWdlQXJlYS0+aXNFbXB0eSgpKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2Vy
OjpjbGVhckRhdGFJbk1lbW9yeSgpCit7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlQXJlYSAmJiBp
czxNZW1vcnlTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkpCisgICAgICAgIG1fbG9j
YWxTdG9yYWdlQXJlYS0+Y2xlYXIoKTsKKworICAgIGlmIChtX3RyYW5zaWVudFN0b3JhZ2VBcmVh
KQorICAgICAgICBtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5jbGVhcigpOworfQorCit2b2lkIExv
Y2FsU3RvcmFnZU1hbmFnZXI6OmNsZWFyRGF0YU9uRGlzaygpCit7CisgICAgaWYgKG1fbG9jYWxT
dG9yYWdlQXJlYSAmJiBpczxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkp
CisgICAgICAgIG1fbG9jYWxTdG9yYWdlQXJlYS0+Y2xlYXIoKTsKK30KKwordm9pZCBMb2NhbFN0
b3JhZ2VNYW5hZ2VyOjpjbG9zZSgpCit7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlQXJlYSAmJiBp
czxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkpCisgICAgICAgIGRvd25j
YXN0PFNRTGl0ZVN0b3JhZ2VBcmVhPigqbV9sb2NhbFN0b3JhZ2VBcmVhKS5jbG9zZSgpOworfQor
Cit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6OmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKQorewor
ICAgIGlmIChtX2xvY2FsU3RvcmFnZUFyZWEgJiYgaXM8U1FMaXRlU3RvcmFnZUFyZWE+KCptX2xv
Y2FsU3RvcmFnZUFyZWEpKQorICAgICAgICBkb3duY2FzdDxTUUxpdGVTdG9yYWdlQXJlYT4oKm1f
bG9jYWxTdG9yYWdlQXJlYSkuaGFuZGxlTG93TWVtb3J5V2FybmluZygpOworfQorCit2b2lkIExv
Y2FsU3RvcmFnZU1hbmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIGlmIChtX2xvY2Fs
U3RvcmFnZUFyZWEgJiYgaXM8U1FMaXRlU3RvcmFnZUFyZWE+KCptX2xvY2FsU3RvcmFnZUFyZWEp
KQorICAgICAgICBkb3duY2FzdDxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJl
YSkuY29tbWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworfQorCit2b2lkIExvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25u
ZWN0aW9uKQoreworICAgIGNvbm5lY3Rpb25DbG9zZWRGb3JMb2NhbFN0b3JhZ2VBcmVhKGNvbm5l
Y3Rpb24pOworICAgIGNvbm5lY3Rpb25DbG9zZWRGb3JUcmFuc2llbnRTdG9yYWdlQXJlYShjb25u
ZWN0aW9uKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2Vk
Rm9yTG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24p
Cit7CisgICAgaWYgKCFtX2xvY2FsU3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fbG9jYWxTdG9yYWdlQXJlYS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7CisgICAgaWYg
KG1fbG9jYWxTdG9yYWdlQXJlYS0+aGFzTGlzdGVuZXJzKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChpczxNZW1vcnlTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkgJiYgIW1f
bG9jYWxTdG9yYWdlQXJlYS0+aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jl
Z2lzdHJ5LnVucmVnaXN0ZXJTdG9yYWdlQXJlYShtX2xvY2FsU3RvcmFnZUFyZWEtPmlkZW50aWZp
ZXIoKSk7CisgICAgbV9sb2NhbFN0b3JhZ2VBcmVhID0gbnVsbHB0cjsKK30KKwordm9pZCBMb2Nh
bFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkRm9yVHJhbnNpZW50U3RvcmFnZUFyZWEo
SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uKQoreworICAgIGlmICghbV90cmFu
c2llbnRTdG9yYWdlQXJlYSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90cmFuc2llbnRTdG9y
YWdlQXJlYS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7CisgICAgaWYgKG1fdHJhbnNpZW50
U3RvcmFnZUFyZWEtPmhhc0xpc3RlbmVycygpIHx8ICFtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVnaXN0cnkudW5yZWdpc3RlclN0
b3JhZ2VBcmVhKG1fdHJhbnNpZW50U3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKSk7CisgICAgbV90
cmFuc2llbnRTdG9yYWdlQXJlYSA9IG51bGxwdHI7Cit9CisKK1N0b3JhZ2VBcmVhSWRlbnRpZmll
ciBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiBvcmlnaW4sIFJlZjxXb3JrUXVldWU+JiYgd29ya1F1ZXVlKQoreworICAgIGlmICghbV9sb2Nh
bFN0b3JhZ2VBcmVhKSB7CisgICAgICAgIGlmICghbV9wYXRoLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIG1fbG9jYWxTdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8U1FMaXRlU3RvcmFnZUFyZWE+KGxv
Y2FsU3RvcmFnZVF1b3RhSW5CeXRlcywgb3JpZ2luLCBtX3BhdGgsIFdURk1vdmUod29ya1F1ZXVl
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlQXJlYSA9IG1ha2VV
bmlxdWU8TWVtb3J5U3RvcmFnZUFyZWE+KG9yaWdpbiwgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdl
VHlwZTo6TG9jYWwpOworCisgICAgICAgIG1fcmVnaXN0cnkucmVnaXN0ZXJTdG9yYWdlQXJlYSht
X2xvY2FsU3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKSwgKm1fbG9jYWxTdG9yYWdlQXJlYSk7Cisg
ICAgfQorCisgICAgQVNTRVJUKG1fcGF0aC5pc0VtcHR5KCkgfHwgbV9sb2NhbFN0b3JhZ2VBcmVh
LT50eXBlKCkgPT0gU3RvcmFnZUFyZWFCYXNlOjpUeXBlOjpTUUxpdGUpOworICAgIG1fbG9jYWxT
dG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVjdGlvbik7CisgICAgcmV0dXJuIG1fbG9jYWxT
dG9yYWdlQXJlYS0+aWRlbnRpZmllcigpOworfQorCitTdG9yYWdlQXJlYUlkZW50aWZpZXIgTG9j
YWxTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9y
aWdpbiYgb3JpZ2luKQoreworICAgIGlmICghbV90cmFuc2llbnRTdG9yYWdlQXJlYSkgeworICAg
ICAgICBtX3RyYW5zaWVudFN0b3JhZ2VBcmVhID0gbWFrZVVuaXF1ZTxNZW1vcnlTdG9yYWdlQXJl
YT4ob3JpZ2luLCBTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlOjpMb2NhbCk7CisgICAgICAg
IG1fcmVnaXN0cnkucmVnaXN0ZXJTdG9yYWdlQXJlYShtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5p
ZGVudGlmaWVyKCksICptX3RyYW5zaWVudFN0b3JhZ2VBcmVhKTsKKyAgICB9CisKKyAgICBBU1NF
UlQobV90cmFuc2llbnRTdG9yYWdlQXJlYS0+dHlwZSgpID09IFN0b3JhZ2VBcmVhQmFzZTo6VHlw
ZTo6TWVtb3J5KTsKKyAgICBtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25u
ZWN0aW9uKTsKKyAgICByZXR1cm4gbV90cmFuc2llbnRTdG9yYWdlQXJlYS0+aWRlbnRpZmllcigp
OworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFy
ZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50
aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBpZiAobV9sb2NhbFN0b3JhZ2VBcmVhICYmIG1fbG9j
YWxTdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpID09IGlkZW50aWZpZXIpIHsKKyAgICAgICAgY29u
bmVjdGlvbkNsb3NlZEZvckxvY2FsU3RvcmFnZUFyZWEoY29ubmVjdGlvbik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAobV90cmFuc2llbnRTdG9yYWdlQXJlYSAmJiBtX3RyYW5z
aWVudFN0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcikKKyAgICAgICAgY29u
bmVjdGlvbkNsb3NlZEZvclRyYW5zaWVudFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24pOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2NmU2
ZDVlMmJlMTI4Y2E5NzhiN2UyNWVjN2FiNTA5NjNiOGUxZmQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5o
CkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IlN0b3JhZ2VBcmVhSWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3Qg
Q2xpZW50T3JpZ2luOworc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIE1lbW9yeVN0b3JhZ2VBcmVhOworY2xhc3MgU3RvcmFnZUFyZWFC
YXNlOworY2xhc3MgU3RvcmFnZUFyZWFSZWdpc3RyeTsKKworY2xhc3MgTG9jYWxTdG9yYWdlTWFu
YWdlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGlj
IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnNPZkxvY2FsU3RvcmFn
ZURhdGEoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGxvY2FsU3RvcmFn
ZUZpbGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
Jik7CisKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2VyKGNvbnN0IFN0cmluZyYgcGF0aCwgU3RvcmFn
ZUFyZWFSZWdpc3RyeSYpOworICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKKyAgICBib29sIGhh
c0RhdGFJbk1lbW9yeSgpIGNvbnN0OworICAgIHZvaWQgY2xlYXJEYXRhSW5NZW1vcnkoKTsKKyAg
ICB2b2lkIGNsZWFyRGF0YU9uRGlzaygpOworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2b2lkIGhh
bmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKKyAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoKTsKKyAg
ICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7CisKKyAg
ICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgY29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBSZWY8V29y
a1F1ZXVlPiYmKTsKKyAgICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgY29ubmVjdFRvVHJhbnNpZW50
TG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBjb25zdCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJZGVudGlmaWVyKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWRGb3JMb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQpOworICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZEZvclRyYW5zaWVu
dFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQpOworCisgICAgU3RyaW5nIG1f
cGF0aDsKKyAgICBTdG9yYWdlQXJlYVJlZ2lzdHJ5JiBtX3JlZ2lzdHJ5OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxNZW1vcnlTdG9yYWdlQXJlYT4gbV90cmFuc2llbnRTdG9yYWdlQXJlYTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZUFyZWFCYXNlPiBtX2xvY2FsU3RvcmFnZUFyZWE7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iYzVjMDY1ZGIxNzRkYzQzMWY4N2YyMDU2ZjBiMGM3ZDI3MmU5ZGYyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VB
cmVhLmNwcApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTWVtb3J5U3RvcmFnZUFyZWEuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK01lbW9yeVN0b3JhZ2VBcmVhOjpNZW1vcnlTdG9yYWdlQXJlYShjb25zdCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZSB0eXBl
KQorICAgIDogU3RvcmFnZUFyZWFCYXNlKFdlYkNvcmU6OlN0b3JhZ2VNYXA6Om5vUXVvdGEsIG9y
aWdpbikKKyAgICAsIG1fbWFwKFdlYkNvcmU6OlN0b3JhZ2VNYXAoV2ViQ29yZTo6U3RvcmFnZU1h
cDo6bm9RdW90YSkpCisgICAgLCBtX3N0b3JhZ2VUeXBlKHR5cGUpCit7Cit9CisKK2Jvb2wgTWVt
b3J5U3RvcmFnZUFyZWE6OmlzRW1wdHkoKQoreworICAgIHJldHVybiAhbV9tYXAubGVuZ3RoKCk7
Cit9CisKK3ZvaWQgTWVtb3J5U3RvcmFnZUFyZWE6OmNsZWFyKCkKK3sKKyAgICBtX21hcC5jbGVh
cigpOworICAgIG5vdGlmeUxpc3RlbmVyc0Fib3V0Q2xlYXIoKTsKK30KKworSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gTWVtb3J5U3RvcmFnZUFyZWE6OmFsbEl0ZW1zKCkKK3sKKyAgICByZXR1cm4g
bV9tYXAuaXRlbXMoKTsKK30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBNZW1vcnlT
dG9yYWdlQXJlYTo6c2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24s
IFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIFN0cmluZyYmIGtl
eSwgU3RyaW5nJiYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIFN0cmlu
ZyBvbGRWYWx1ZTsKKyAgICBib29sIGhhc1F1b3RhRXJyb3IgPSBmYWxzZTsKKyAgICBtX21hcC5z
ZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBoYXNRdW90YUVycm9yKTsKKyAgICBpZiAoaGFz
UXVvdGFFcnJvcikKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6
UXVvdGFFeGNlZWRlZCk7CisKKyAgICBkaXNwYXRjaEV2ZW50cyhjb25uZWN0aW9uLCBzdG9yYWdl
QXJlYUltcGxJRCwga2V5LCBvbGRWYWx1ZSwgdmFsdWUsIHVybFN0cmluZyk7CisKKyAgICByZXR1
cm4geyB9OworfQorCitFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IE1lbW9yeVN0b3JhZ2VB
cmVhOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3Rv
cmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAg
ICBtX21hcC5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOworICAgIGRpc3BhdGNoRXZlbnRzKGNv
bm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBrZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgdXJs
U3RyaW5nKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK0V4cGVjdGVkPHZvaWQsIFN0b3JhZ2VF
cnJvcj4gTWVtb3J5U3RvcmFnZUFyZWE6OmNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQg
Y29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgaWYgKCFtX21hcC5sZW5ndGgoKSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIG1fbWFwLmNsZWFyKCk7CisgICAgZGlzcGF0Y2hFdmVudHMo
Y29ubmVjdGlvbiwgaW1wbElkZW50aWZpZXIsIFN0cmluZygpLCBTdHJpbmcoKSwgU3RyaW5nKCks
IHVybFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8TWVt
b3J5U3RvcmFnZUFyZWE+IE1lbW9yeVN0b3JhZ2VBcmVhOjpjbG9uZSgpIGNvbnN0Cit7CisgICAg
YXV0byBzdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8TWVtb3J5U3RvcmFnZUFyZWE+KG9yaWdpbigp
LCBtX3N0b3JhZ2VUeXBlKTsKKyAgICBzdG9yYWdlQXJlYS0+bV9tYXAgPSBtX21hcDsKKworICAg
IHJldHVybiBzdG9yYWdlQXJlYTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFy
ZWEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdl
QXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjIzNzY4OTlkMjg5MTMzYjVlOTdmNDMwNWNiMmU1MWM3NDJlMWQ5
Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvTWVtb3J5U3RvcmFnZUFyZWEuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhQmFzZS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvU3RvcmFnZU1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTdG9y
YWdlTWFwOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTWVtb3J5U3RvcmFnZUFy
ZWEgZmluYWwgOiBwdWJsaWMgU3RvcmFnZUFyZWFCYXNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBNZW1vcnlTdG9yYWdlQXJlYShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBTdG9yYWdl
QXJlYUJhc2U6OlN0b3JhZ2VUeXBlID0gU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZTo6U2Vz
c2lvbik7CisKKyAgICBTdG9yYWdlQXJlYUJhc2U6OlR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIFN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6TWVtb3J5OyB9OworICAgIGJvb2wgaXNFbXB0
eSgpIGZpbmFsOworICAgIHZvaWQgY2xlYXIoKSBmaW5hbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWVtb3J5U3RvcmFnZUFyZWE+IGNsb25lKCkgY29uc3Q7CisgICAgCisKK3ByaXZhdGU6CisgICAg
Ly8gU3RvcmFnZUFyZWFCYXNlCisgICAgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZSBzdG9y
YWdlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3RvcmFnZVR5cGU7IH0KKyAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBhbGxJdGVtcygpIGZpbmFsOworICAgIEV4cGVjdGVkPHZvaWQs
IFN0b3JhZ2VFcnJvcj4gc2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdl
QXJlYUltcGxJZGVudGlmaWVyLCBTdHJpbmcmJiBrZXksIFN0cmluZyYmIHZhbHVlLCBjb25zdCBT
dHJpbmcmIHVybFN0cmluZykgZmluYWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9y
PiByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgZmlu
YWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBjbGVhcihJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVy
bFN0cmluZykgZmluYWw7CisKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlN0b3JhZ2VNYXAgbV9tYXA7
CisgICAgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZSBtX3N0b3JhZ2VUeXBlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2Vi
S2l0OjpNZW1vcnlTdG9yYWdlQXJlYSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
S2l0OjpTdG9yYWdlQXJlYUJhc2UmIGFyZWEpIHsgcmV0dXJuIGFyZWEudHlwZSgpID09IFdlYktp
dDo6U3RvcmFnZUFyZWFCYXNlOjpUeXBlOjpNZW1vcnk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggYzEwYWNiZGQ2NGZlMDRl
ZmYxNmExYzhiNzRkMmJmYzE5NTNkYmQ3My4uNTY0MTg1Y2E5MDc1Y2FkMDhmNzg0NzNlMTUyMDc1
ZDE3MjU3MDI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKQEAgLTI4LDEyICsyOCwx
OSBAQAogCiAjaW5jbHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5oIgogI2lu
Y2x1ZGUgIkZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFn
ZU1hbmFnZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJPcmlnaW5TdG9yYWdlTWFuYWdlci5oIgor
I2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVh
QmFzZS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJT
dG9yYWdlQXJlYVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDxwYWwvY3J5cHRv
L0NyeXB0b0RpZ2VzdC5oPgogI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9T
dXNwZW5kYWJsZVdvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0
ZW50Q29kZXJzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKQEAgLTQzLDcgKzUw
LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiByZWFkT3Jp
Z2luRnJvbUZpbGUoY29uc3QgU3RyaW5nJiBmaWwKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAotICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxlUGF0aCkpCisg
ICAgaWYgKGZpbGVQYXRoLmlzRW1wdHkoKSB8fCAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxl
UGF0aCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBhdXRvIG9yaWdpbkZp
bGVIYW5kbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShmaWxlUGF0aCwgRmlsZVN5c3RlbTo6Rmls
ZU9wZW5Nb2RlOjpSZWFkKTsKQEAgLTY2LDcgKzczLDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiByZWFkT3JpZ2luRnJvbUZpbGUoY29uc3QgU3RyaW5nJiBm
aWwKIAogc3RhdGljIHZvaWQgd3JpdGVPcmlnaW5Ub0ZpbGVJZk5lY2Vzc2FyeShjb25zdCBTdHJp
bmcmIGZpbGVQYXRoLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKLSAg
ICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxlUGF0aCkpCisgICAgaWYgKGZpbGVQYXRo
LmlzRW1wdHkoKSB8fCBGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGZpbGVQYXRoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKEZpbGVTeXN0ZW06
OnBhcmVudFBhdGgoZmlsZVBhdGgpKTsKQEAgLTc2LDcgKzgzLDcgQEAgc3RhdGljIHZvaWQgd3Jp
dGVPcmlnaW5Ub0ZpbGVJZk5lY2Vzc2FyeShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBjb25zdCBX
ZWJDb3JlOjoKICAgICB9KTsKIAogICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChv
cmlnaW5GaWxlSGFuZGxlKSkgewotICAgICAgICBMT0dfRVJST1IoIndyaXRlT3JpZ2luVG9GaWxl
SWZOZWNlc3Nhcnk6IEZhaWxlZCB0byBvcGVuIG9yaWdpbiBmaWxlIik7CisgICAgICAgIExPR19F
UlJPUigid3JpdGVPcmlnaW5Ub0ZpbGVJZk5lY2Vzc2FyeTogRmFpbGVkIHRvIG9wZW4gb3JpZ2lu
IGZpbGUgJyVzJyIsIGZpbGVQYXRoLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC05MywyMCArMTAwLDIyIEBAIHN0YXRpYyB2b2lkIGRlbGV0ZU9yaWdpbkZpbGVJ
Zk5lY2Vzc2FyeShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQogICAgICAgICBGaWxlU3lzdGVtOjpk
ZWxldGVGaWxlKGZpbGVQYXRoKTsKIH0KIAotUmVmPE5ldHdvcmtTdG9yYWdlTWFuYWdlcj4gTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBTdHJpbmcmIHBhdGgpCitSZWY8TmV0d29ya1N0b3JhZ2VNYW5hZ2VyPiBOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgU3RyaW5nJiBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKQogewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IE5ldHdvcmtTdG9yYWdlTWFuYWdlcihzZXNzaW9uSUQsIHBhdGgpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrU3RvcmFnZU1hbmFnZXIoc2Vzc2lvbklE
LCBwYXRoLCBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKSk7CiB9CiAKLU5ldHdvcmtTdG9yYWdlTWFu
YWdlcjo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgU3RyaW5nJiBwYXRoKQorTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpOZXR3b3JrU3RvcmFnZU1h
bmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IFN0cmluZyYgY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkKICAgICA6IG1fc2Vzc2lvbklEKHNlc3Np
b25JRCkKLSAgICAsIG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQu
U3RvcmFnZSIpKQorICAgICwgbV9xdWV1ZShTdXNwZW5kYWJsZVdvcmtRdWV1ZTo6Y3JlYXRlKCJj
b20uYXBwbGUuV2ViS2l0LlN0b3JhZ2UiKSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogCi0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYg
eyAqdGhpcyB9LCBwYXRoID0gcGF0aC5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKKyAgICBt
X3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHBh
dGggPSBwYXRoLmlzb2xhdGVkQ29weSgpLCBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoID0gY3Jvc3NU
aHJlYWRDb3B5KGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgpXSgpIG11dGFibGUgewogICAgICAgICBt
X2ZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkgPSBtYWtlVW5pcXVlPEZpbGVTeXN0ZW1T
dG9yYWdlSGFuZGxlUmVnaXN0cnk+KCk7CisgICAgICAgIG1fc3RvcmFnZUFyZWFSZWdpc3RyeSA9
IG1ha2VVbmlxdWU8U3RvcmFnZUFyZWFSZWdpc3RyeT4oKTsKICAgICAgICAgbV9wYXRoID0gcGF0
aDsKKyAgICAgICAgbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoID0gY3VzdG9tTG9jYWxTdG9yYWdl
UGF0aDsKICAgICAgICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhdXRv
IHNhbHRQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcGF0aCwg
InNhbHQiKTsKICAgICAgICAgICAgIG1fc2FsdCA9IEZpbGVTeXN0ZW06OnJlYWRPck1ha2VTYWx0
KHNhbHRQYXRoKS52YWx1ZV9vcihGaWxlU3lzdGVtOjpTYWx0KCkpOwpAQCAtMTIwLDYgKzEyOSwx
MSBAQCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6On5OZXR3b3JrU3RvcmFnZU1hbmFnZXIoKQogICAg
IEFTU0VSVChtX2Nsb3NlZCk7CiB9CiAKK2Jvb2wgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5I
YW5kbGVUeXBlcyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcykKK3sKKyAgICByZXR1
cm4gdHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpIHx8IHR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpIHx8IHR5cGVzLmNvbnRh
aW5zKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSk7Cit9CisKIHZvaWQgTmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpjbG9zZSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAg
LTEzMyw3ICsxNDcsNiBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xvc2UoKQogCiAg
ICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9
XSgpIG11dGFibGUgewogICAgICAgICBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmNsZWFy
KCk7Ci0gICAgICAgIG1fc2Vzc2lvbk9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5jbGVhcigpOwogICAg
ICAgICBtX2ZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkgPSBudWxscHRyOwogCiAgICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJv
dGVjdGVkVGhpcyldIHsgfSk7CkBAIC0xNzcsNyArMTkwLDcgQEAgc3RhdGljIFN0cmluZyBlbmNv
ZGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEZpbGVTeXN0ZW06OlNhbHQgc2FsdCkKIHN0YXRpYyBT
dHJpbmcgb3JpZ2luRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgRmlsZVN5c3RlbTo6U2FsdCBzYWx0KQogewog
ICAgIGlmIChyb290UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiByb290UGF0aDsKKyAg
ICAgICAgcmV0dXJuIFN0cmluZyB7IH07CiAKICAgICBhdXRvIGVuY29kZWRUb3BPcmlnaW4gPSBl
bmNvZGUob3JpZ2luLnRvcE9yaWdpbi50b1N0cmluZygpLCBzYWx0KTsKICAgICBhdXRvIGVuY29k
ZWRPcGVuaW5nT3JpZ2luID0gZW5jb2RlKG9yaWdpbi5jbGllbnRPcmlnaW4udG9TdHJpbmcoKSwg
c2FsdCk7CkBAIC0xODYsNiArMTk5LDggQEAgc3RhdGljIFN0cmluZyBvcmlnaW5EaXJlY3RvcnlQ
YXRoKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE8KIAogc3Rh
dGljIFN0cmluZyBvcmlnaW5GaWxlUGF0aChjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKIHsKKyAg
ICBpZiAoZGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyB7IH07CiAg
ICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChkaXJlY3Rvcnks
ICJvcmlnaW4iX3MpOwogfQogCkBAIC0xOTYsMTYgKzIxMSwzNCBAQCBPcmlnaW5TdG9yYWdlTWFu
YWdlciYgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKGNv
bnN0IFdlYgogICAgIHJldHVybiAqbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5lbnN1cmUo
b3JpZ2luLCBbJl0gewogICAgICAgICBhdXRvIG9yaWdpbkRpcmVjdG9yeSA9IG9yaWdpbkRpcmVj
dG9yeVBhdGgobV9wYXRoLCBvcmlnaW4sIG1fc2FsdCk7CiAgICAgICAgIHdyaXRlT3JpZ2luVG9G
aWxlSWZOZWNlc3Nhcnkob3JpZ2luRmlsZVBhdGgob3JpZ2luRGlyZWN0b3J5KSwgb3JpZ2luKTsK
LSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8T3JpZ2luU3RvcmFnZU1hbmFnZXI+KFdURk1vdmUo
b3JpZ2luRGlyZWN0b3J5KSk7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPE9yaWdpblN0b3Jh
Z2VNYW5hZ2VyPihXVEZNb3ZlKG9yaWdpbkRpcmVjdG9yeSksIExvY2FsU3RvcmFnZU1hbmFnZXI6
OmxvY2FsU3RvcmFnZUZpbGVQYXRoKG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgb3JpZ2luKSk7
CiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCi12b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6cmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxlKGNvbnN0IFdlYkNvcmU6OkNs
aWVudE9yaWdpbiYgb3JpZ2luKQorYm9vbCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnJlbW92ZU9y
aWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4m
IG9yaWdpbikKIHsKLSAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fbG9jYWxPcmlnaW5TdG9yYWdl
TWFuYWdlcnMuZmluZChvcmlnaW4pOyBpdGVyYXRvciAhPSBtX2xvY2FsT3JpZ2luU3RvcmFnZU1h
bmFnZXJzLmVuZCgpKSB7Ci0gICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLT5pc0FjdGl2ZSgp
KQotICAgICAgICAgICAgbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5yZW1vdmUoaXRlcmF0
b3IpOwotICAgIH0KKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5h
Z2Vycy5maW5kKG9yaWdpbik7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fbG9jYWxPcmlnaW5TdG9y
YWdlTWFuYWdlcnMuZW5kKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGl0ZXJh
dG9yLT52YWx1ZS0+aXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9s
b2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5yZW1vdmUoaXRlcmF0b3IpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlT3JpZ2luRGlyZWN0
b3J5SWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAg
ICBib29sIGlzRW1wdHkgPSBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbikuaXNFbXB0
eSgpOworICAgIGJvb2wgcmVtb3ZlZCA9IHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3Nz
aWJsZShvcmlnaW4pOworICAgIGlmICghcmVtb3ZlZCB8fCAhaXNFbXB0eSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byBvcmlnaW5EaXJlY3RvcnkgPSBvcmlnaW5EaXJlY3RvcnlQYXRoKG1f
cGF0aCwgb3JpZ2luLCBtX3NhbHQpOworICAgIGF1dG8gZmlsZVBhdGggPSBvcmlnaW5GaWxlUGF0
aChvcmlnaW5EaXJlY3RvcnkpOworICAgIGRlbGV0ZU9yaWdpbkZpbGVJZk5lY2Vzc2FyeShmaWxl
UGF0aCk7CisgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3Rvcnkob3JpZ2luRGlyZWN0
b3J5KTsKIH0KIAogdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnBlcnNpc3RlZChjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzMiw5ICsyNjUsNiBAQCB2b2lkIE5ldHdvcmtT
dG9yYWdlTWFuYWdlcjo6Y2xlYXJTdG9yYWdlRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgYwogICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2luU3Rv
cmFnZU1hbmFnZXJzLnZhbHVlcygpKQogICAgICAgICAgICAgbWFuYWdlci0+c2V0UGVyc2lzdGVk
KGZhbHNlKTsKIAotICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX3Nlc3Npb25PcmlnaW5T
dG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpCi0gICAgICAgICAgICBtYW5hZ2VyLT5zZXRQZXJzaXN0
ZWQoZmFsc2UpOwotCiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVk
VGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOwogICAgICAgICB9KTsKQEAgLTM4MiwxNCArNDEyLDYgQEAgdm9pZCBOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmdldEhhbmRsZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdl
YkNvcmU6OkZpbGUKICAgICBjb21wbGV0aW9uSGFuZGxlcihoYW5kbGUtPmdldEhhbmRsZShjb25u
ZWN0aW9uLnVuaXF1ZUlEKCksIFdURk1vdmUobmFtZSkpKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0
aW9uYWw8V2Vic2l0ZURhdGFUeXBlPiB0b1dlYnNpdGVEYXRhVHlwZShjb25zdCBTdHJpbmcmIHN0
b3JhZ2VUeXBlKQotewotICAgIGlmIChzdG9yYWdlVHlwZSA9PSAiRmlsZVN5c3RlbSIpCi0gICAg
ICAgIHJldHVybiBXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW07Ci0KLSAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotfQotCiB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Zm9yRWFjaE9yaWdp
bkRpcmVjdG9yeShjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYgYXBwbHkpCiB7
CiAgICAgZm9yIChhdXRvJiB0b3BPcmlnaW4gOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KG1f
cGF0aCkpIHsKQEAgLTQwMSwzMCArNDIzLDQzIEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
Ojpmb3JFYWNoT3JpZ2luRGlyZWN0b3J5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyCiAg
ICAgICAgIH0KIAogICAgICAgICBmb3IgKGF1dG8mIG9wZW5pbmdPcmlnaW4gOiBvcGVuaW5nT3Jp
Z2lucykgeworICAgICAgICAgICAgaWYgKG9wZW5pbmdPcmlnaW4uc3RhcnRzV2l0aCgnLicpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgICAgICBhdXRvIG9wZW5pbmdPcmln
aW5EaXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQodG9wT3Jp
Z2luRGlyZWN0b3J5LCBvcGVuaW5nT3JpZ2luKTsKICAgICAgICAgICAgIGFwcGx5KG9wZW5pbmdP
cmlnaW5EaXJlY3RvcnkpOwogICAgICAgICB9CiAgICAgfQogfQogCitIYXNoU2V0PFdlYkNvcmU6
OkNsaWVudE9yaWdpbj4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpnZXRBbGxPcmlnaW5zKCkKK3sK
KyAgICBIYXNoU2V0PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gYWxsT3JpZ2luczsKKyAgICBmb3Ig
KGF1dG8mIG9yaWdpbiA6IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMua2V5cygpKQorICAg
ICAgICBhbGxPcmlnaW5zLmFkZChvcmlnaW4pOworCisgICAgZm9yRWFjaE9yaWdpbkRpcmVjdG9y
eShbJl0oYXV0byBkaXJlY3RvcnkpIHsKKyAgICAgICAgaWYgKGF1dG8gb3JpZ2luID0gcmVhZE9y
aWdpbkZyb21GaWxlKG9yaWdpbkZpbGVQYXRoKGRpcmVjdG9yeSkpKQorICAgICAgICAgICAgYWxs
T3JpZ2lucy5hZGQoKm9yaWdpbik7CisgICAgfSk7CisKKyAgICBmb3IgKGF1dG8mIG9yaWdpbiA6
IExvY2FsU3RvcmFnZU1hbmFnZXI6Om9yaWdpbnNPZkxvY2FsU3RvcmFnZURhdGEobV9jdXN0b21M
b2NhbFN0b3JhZ2VQYXRoKSkKKyAgICAgICAgYWxsT3JpZ2lucy5hZGQoV2ViQ29yZTo6Q2xpZW50
T3JpZ2luIHsgb3JpZ2luLCBvcmlnaW4gfSk7CisKKyAgICByZXR1cm4gYWxsT3JpZ2luczsKK30K
KwogVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpmZXRj
aERhdGFGcm9tRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0YXJnZXRUeXBlcykKIHsK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIEhhc2hNYXA8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPj4gb3JpZ2luVHlw
ZXM7Ci0gICAgZm9yRWFjaE9yaWdpbkRpcmVjdG9yeShbJl0oYXV0byBkaXJlY3RvcnkpIG11dGFi
bGUgewotICAgICAgICBhdXRvIG9yaWdpbiA9IHJlYWRPcmlnaW5Gcm9tRmlsZShvcmlnaW5GaWxl
UGF0aChkaXJlY3RvcnkpKTsKLSAgICAgICAgaWYgKCFvcmlnaW4pCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgZm9yIChhdXRvJiBzdG9yYWdlVHlwZSA6IEZpbGVTeXN0ZW06Omxpc3RE
aXJlY3RvcnkoZGlyZWN0b3J5KSkgewotICAgICAgICAgICAgaWYgKGF1dG8gdHlwZSA9IHRvV2Vi
c2l0ZURhdGFUeXBlKHN0b3JhZ2VUeXBlKTsgdHlwZSAmJiB0YXJnZXRUeXBlcy5jb250YWlucygq
dHlwZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBSZXR1cm4gYm90aCB0b3Agb3JpZ2luIGFuZCBv
cGVuaW5nIG9yaWdpbiBmb3IgdGhpcyBkYXRhLgotICAgICAgICAgICAgICAgIG9yaWdpblR5cGVz
LmFkZChvcmlnaW4tPmNsaWVudE9yaWdpbiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4geyB9
KS5pdGVyYXRvci0+dmFsdWUuYWRkKCp0eXBlKTsKLSAgICAgICAgICAgICAgICBvcmlnaW5UeXBl
cy5hZGQob3JpZ2luLT50b3BPcmlnaW4sIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHsgfSku
aXRlcmF0b3ItPnZhbHVlLmFkZCgqdHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9KTsKKyAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IGdldEFsbE9yaWdpbnMoKSkgeworICAgICAg
ICBhdXRvIHR5cGVzID0gbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihvcmlnaW4pLmZldGNoRGF0
YVR5cGVzSW5MaXN0KHRhcmdldFR5cGVzKTsKKyAgICAgICAgb3JpZ2luVHlwZXMuYWRkKG9yaWdp
bi5jbGllbnRPcmlnaW4sIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHsgfSkuaXRlcmF0b3It
PnZhbHVlLmFkZCh0eXBlcyk7CisgICAgICAgIG9yaWdpblR5cGVzLmFkZChvcmlnaW4udG9wT3Jp
Z2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQo
dHlwZXMpOworICAgICAgICByZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUob3Jp
Z2luKTsKKyAgICB9CiAKICAgICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBlbnRyaWVzOwog
ICAgIGZvciAoYXV0byBbb3JpZ2luLCB0eXBlc10gOiBvcmlnaW5UeXBlcykgewpAQCAtNDQ4LDM1
ICs0ODMsMjIgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YShPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgQ29tcGxldGkKICAgICB9KTsKIH0KIAotVmVjdG9y
PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRh
T25EaXNrKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzLCBXYWxsVGltZSBtb2RpZmll
ZFNpbmNlVGltZSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mKT4mIGZpbHRlcikKK0hhc2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OmRlbGV0ZURhdGFPbkRpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
dHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2VUaW1lLCBjb25zdCBGdW5jdGlvbjxib29sKGNv
bnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpPiYgZmlsdGVyKQogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCi0gICAgVmVjdG9yPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gZGVs
ZXRlZE9yaWdpbnM7Ci0gICAgZm9yRWFjaE9yaWdpbkRpcmVjdG9yeShbJl0oYXV0byBkaXJlY3Rv
cnkpIG11dGFibGUgewotICAgICAgICBhdXRvIGZpbGVQYXRoID0gb3JpZ2luRmlsZVBhdGgoZGly
ZWN0b3J5KTsKLSAgICAgICAgYXV0byBvcmlnaW4gPSByZWFkT3JpZ2luRnJvbUZpbGUoZmlsZVBh
dGgpOwotICAgICAgICBpZiAoIW9yaWdpbikgewotICAgICAgICAgICAgLy8gSWYgb3JpZ2luIGNh
bm5vdCBiZSByZXRyaWV2ZWQsIGJ1dCB3ZSBhcmUgYXNrZWQgdG8gcmVtb3ZlIGRhdGEgZm9yIGFs
bCBvcmlnaW5zLCByZW1vdmUgaXQuCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9y
YWdlLCAiTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrIGZhaWxlZCB0byBy
ZWFkIG9yaWdpbiBmcm9tICclcyciLCBmaWxlUGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAg
ICAgIGlmIChmaWx0ZXIoV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgfSkpIHsKLSAgICAgICAgICAg
ICAgICBhdXRvIHRlbXBPcmlnaW5TdG9yYWdlTWFuYWdlciA9IG1ha2VVbmlxdWU8T3JpZ2luU3Rv
cmFnZU1hbmFnZXI+KFN0cmluZyB7IGRpcmVjdG9yeSB9KTsKLSAgICAgICAgICAgICAgICB0ZW1w
T3JpZ2luU3RvcmFnZU1hbmFnZXItPmRlbGV0ZURhdGEodHlwZXMsIG1vZGlmaWVkU2luY2VUaW1l
KTsKLSAgICAgICAgICAgICAgICBkZWxldGVPcmlnaW5GaWxlSWZOZWNlc3NhcnkoZmlsZVBhdGgp
OwotICAgICAgICAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KGRpcmVj
dG9yeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoIWZpbHRlcigqb3JpZ2luKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBI
YXNoU2V0PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gZGVsZXRlZE9yaWdpbnM7CisgICAgZm9yIChh
dXRvJiBvcmlnaW4gOiBnZXRBbGxPcmlnaW5zKCkpIHsKKyAgICAgICAgaWYgKCFmaWx0ZXIob3Jp
Z2luKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGRlbGV0ZWRPcmlnaW5zLmFw
cGVuZCgqb3JpZ2luKTsKLSAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcigqb3JpZ2lu
KS5kZWxldGVEYXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlVGltZSk7Ci0gICAgICAgIHJlbW92ZU9y
aWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZSgqb3JpZ2luKTsKLSAgICAgICAgZGVsZXRlT3Jp
Z2luRmlsZUlmTmVjZXNzYXJ5KGZpbGVQYXRoKTsKLSAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRl
RW1wdHlEaXJlY3RvcnkoZGlyZWN0b3J5KTsKLSAgICB9KTsKKyAgICAgICAgYXV0byBleGlzdGlu
Z0RhdGFUeXBlcyA9IGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5mZXRjaERhdGFU
eXBlc0luTGlzdCh0eXBlcyk7CisgICAgICAgIGlmICghZXhpc3RpbmdEYXRhVHlwZXMuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBkZWxldGVkT3JpZ2lucy5hZGQob3JpZ2luKTsKKyAgICAgICAg
ICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5kZWxldGVEYXRhKHR5cGVzLCBt
b2RpZmllZFNpbmNlVGltZSk7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlT3JpZ2luRGlyZWN0
b3J5SWZQb3NzaWJsZShvcmlnaW4pOworICAgIH0KIAogICAgIHJldHVybiBkZWxldGVkT3JpZ2lu
czsKIH0KQEAgLTU0MSw1ICs1NjMsMTYwIEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpk
ZWxldGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKE9wdGlvblNldDxXZWJzaXRlRGF0CiAgICAg
fSk7CiB9CiAKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjptb3ZlRGF0YShjb25zdCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIHNvdXJjZSwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhJiB0YXJnZXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVCgh
bV9jbG9zZWQpOworCisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBSZWYgeyAqdGhpcyB9LCBzb3VyY2UgPSBjcm9zc1RocmVhZENvcHkoc291cmNlKSwgdGFyZ2V0
ID0gY3Jvc3NUaHJlYWRDb3B5KHRhcmdldCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gc291cmNlT3JpZ2lu
ID0gV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgc291cmNlLCBzb3VyY2UgfTsKKyAgICAgICAgYXV0
byB0YXJnZXRPcmlnaW4gPSBXZWJDb3JlOjpDbGllbnRPcmlnaW4geyB0YXJnZXQsIHRhcmdldCB9
OworICAgICAgICAKKyAgICAgICAgLy8gQ2xlYXIgZXhpc3RpbmcgZGF0YSBvZiB0YXJnZXQgb3Jp
Z2luLgorICAgICAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcyA9IHsgV2Vic2l0
ZURhdGFUeXBlOjpGaWxlU3lzdGVtLCBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSwgV2Vi
c2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSAgfTsKKyAgICAgICAgbG9jYWxPcmlnaW5TdG9y
YWdlTWFuYWdlcih0YXJnZXRPcmlnaW4pLmRlbGV0ZURhdGEodHlwZXMsIC1XYWxsVGltZTo6aW5m
aW5pdHkoKSk7CisgICAgICAgIHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZSh0
YXJnZXRPcmlnaW4pOworCisgICAgICAgIC8vIE1vdmUgZGF0YSBmcm9tIHNvdXJjZSBvcmlnaW4g
dG8gdGFyZ2V0IG9yaWdpbi4KKyAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihzb3Vy
Y2VPcmlnaW4pLm1vdmVEYXRhKG9yaWdpbkRpcmVjdG9yeVBhdGgobV9wYXRoLCB0YXJnZXRPcmln
aW4sIG1fc2FsdCksIExvY2FsU3RvcmFnZU1hbmFnZXI6OmxvY2FsU3RvcmFnZUZpbGVQYXRoKG1f
Y3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgdGFyZ2V0T3JpZ2luKSk7CisgICAgICAgIHJlbW92ZU9y
aWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShzb3VyY2VPcmlnaW4pOworCisgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzdXNwZW5kKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgbV9xdWV1ZS0+c3VzcGVuZChbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IFJlZiB7ICp0aGlzIH1dIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9sb2Nh
bE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8g
bG9jYWxTdG9yYWdlTWFuYWdlciA9IG1hbmFnZXItPmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdl
cigpKQorICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZU1hbmFnZXItPnN5bmNMb2NhbFN0b3Jh
Z2UoKTsKKyAgICAgICAgfQorICAgIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30K
Kwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnJlc3VtZSgpCit7CisgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcXVldWUtPnJlc3VtZSgpOworfQorCit2b2lkIE5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6aGFuZGxlTG93TWVtb3J5V2FybmluZygpCit7CisgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfV0geworICAgICAgICBmb3IgKGF1dG8mIG1hbmFn
ZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byBsb2NhbFN0b3JhZ2VNYW5hZ2VyID0gbWFuYWdlci0+ZXhpc3RpbmdMb2NhbFN0
b3JhZ2VNYW5hZ2VyKCkpCisgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTWFuYWdlci0+aGFu
ZGxlTG93TWVtb3J5V2FybmluZygpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYg
eyAqdGhpcyB9LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgeworICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2lu
U3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBsb2NhbFN0
b3JhZ2VNYW5hZ2VyID0gbWFuYWdlci0+ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkpCisg
ICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTWFuYWdlci0+c3luY0xvY2FsU3RvcmFnZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OmNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
JiYgdG9wT3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBcmVhSWRlbnRpZmll
cik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luID0geyB0b3BPcmlnaW4sIHRv
cE9yaWdpbiB9OworICAgIGNvbXBsZXRpb25IYW5kbGVyKGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFn
ZXIob3JpZ2luKS5sb2NhbFN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VBcmVhUmVnaXN0cnkpLmNv
bm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBvcmlnaW4sIG1f
cXVldWUuY29weVJlZigpKSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25u
ZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYmIHRvcE9yaWdpbiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYgb3BlbmluZ09yaWdp
biwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQXJlYUlkZW50aWZpZXIpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIFdlYkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4gPSB7IHRv
cE9yaWdpbiwgb3BlbmluZ09yaWdpbiB9OworICAgIGNvbXBsZXRpb25IYW5kbGVyKGxvY2FsT3Jp
Z2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5sb2NhbFN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VB
cmVhUmVnaXN0cnkpLmNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEoY29ubmVjdGlv
bi51bmlxdWVJRCgpLCBvcmlnaW4pKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYmIHRvcE9yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQXJl
YUlkZW50aWZpZXIpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiBvcmlnaW4gPSB7IHRvcE9yaWdpbiwgdG9wT3JpZ2luIH07CisgICAgY29tcGxldGlv
bkhhbmRsZXIobG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihvcmlnaW4pLnNlc3Npb25TdG9yYWdl
TWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5KS5jb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFy
ZWEoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBvcmlnaW4sIGlkZW50aWZpZXIpKTsKK30KKwordm9p
ZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3RvcmFnZUFy
ZWEgPSBtX3N0b3JhZ2VBcmVhUmVnaXN0cnktPmdldFN0b3JhZ2VBcmVhKGlkZW50aWZpZXIpOwor
ICAgIGlmICghc3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzdG9yYWdl
QXJlYS0+c3RvcmFnZVR5cGUoKSA9PSBTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlOjpMb2Nh
bCkKKyAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihzdG9yYWdlQXJlYS0+b3JpZ2lu
KCkpLmxvY2FsU3RvcmFnZU1hbmFnZXIoKm1fc3RvcmFnZUFyZWFSZWdpc3RyeSkuZGlzY29ubmVj
dEZyb21TdG9yYWdlQXJlYShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIGlkZW50aWZpZXIpOworICAg
IGVsc2UKKyAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihzdG9yYWdlQXJlYS0+b3Jp
Z2luKCkpLnNlc3Npb25TdG9yYWdlTWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5KS5kaXNj
b25uZWN0RnJvbVN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaWRlbnRpZmllcik7
Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbG9uZVNlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50
aWZpZXIgZnJvbUlkZW50aWZpZXIsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHRvSWRlbnRp
ZmllcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGZvciAoYXV0
byYgbWFuYWdlciA6IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpIHsKKyAg
ICAgICAgaWYgKGF1dG8qIHNlc3Npb25TdG9yYWdlTWFuYWdlciA9IG1hbmFnZXItPmV4aXN0aW5n
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCkpCisgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZU1hbmFn
ZXItPmNsb25lU3RvcmFnZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBmcm9tSWRlbnRpZmll
ciwgdG9JZGVudGlmaWVyKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
OjpnZXRWYWx1ZXMoU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChh
dXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9yYWdlQXJlYShp
ZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VBcmVh
LT5hbGxJdGVtcygpKTsKKyAgICAKKyAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsK
K30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0oSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgU3RvcmFnZUFy
ZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQs
IFN0cmluZyYmIGtleSwgU3RyaW5nJiYgdmFsdWUsIFN0cmluZyYmIHVybFN0cmluZykKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGJvb2wgaGFzUXVvdGFFcnJvciA9
IGZhbHNlOworICAgIGlmIChhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5
LT5nZXRTdG9yYWdlQXJlYShpZGVudGlmaWVyKSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHN0
b3JhZ2VBcmVhLT5zZXRJdGVtKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaW1wbElkZW50aWZpZXIs
IFN0cmluZyB7IGtleSB9LCBXVEZNb3ZlKHZhbHVlKSwgV1RGTW92ZSh1cmxTdHJpbmcpKTsKKyAg
ICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBoYXNRdW90YUVycm9yID0gKHJlc3VsdC5l
cnJvcigpID09IFN0b3JhZ2VFcnJvcjo6UXVvdGFFeGNlZWRlZCk7CisgICAgfQorCisgICAgY29u
bmVjdGlvbi5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlkU2V0SXRlbShzdG9yYWdl
TWFwU2VlZCwga2V5LCBoYXNRdW90YUVycm9yKSwgaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50
aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcmJiBr
ZXksIFN0cmluZyYmIHVybFN0cmluZykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGlmIChhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5n
ZXRTdG9yYWdlQXJlYShpZGVudGlmaWVyKSkKKyAgICAgICAgc3RvcmFnZUFyZWEtPnJlbW92ZUl0
ZW0oY29ubmVjdGlvbi51bmlxdWVJRCgpLCBpbXBsSWRlbnRpZmllciwga2V5LCBXVEZNb3ZlKHVy
bFN0cmluZykpOworCisgICAgY29ubmVjdGlvbi5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1h
cDo6RGlkUmVtb3ZlSXRlbShzdG9yYWdlTWFwU2VlZCwgV1RGTW92ZShrZXkpKSwgaWRlbnRpZmll
cik7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbGVhcihJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBTdG9yYWdl
QXJlYUltcGxJZGVudGlmaWVyIGltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2Vl
ZCwgU3RyaW5nJiYgdXJsU3RyaW5nKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgaWYgKGF1dG8gc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhUmVnaXN0cnktPmdl
dFN0b3JhZ2VBcmVhKGlkZW50aWZpZXIpKQorICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoY29u
bmVjdGlvbi51bmlxdWVJRCgpLCBpbXBsSWRlbnRpZmllciwgV1RGTW92ZSh1cmxTdHJpbmcpKTsK
KworICAgIGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZENsZWFy
KHN0b3JhZ2VNYXBTZWVkKSwgaWRlbnRpZmllcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmgKaW5kZXggMmFkZGYyYjVlMjBhZDM2ZDI4ZTQ0NTk3
ZWE0MTNmZmU4OTYxYTQwZi4uYjgwOTcyNThmZGI5MmQxMGM1NzAwMzQwNWNmODNjZDEwOWUwMGZl
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdv
cmtTdG9yYWdlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaApAQCAtMjgsNiArMjgsOSBAQAogI2luY2x1ZGUg
IkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtU3RvcmFnZUVycm9yLmgiCiAjaW5j
bHVkZSAiT3JpZ2luU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50
aWZpZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLmgiCisjaW5jbHVk
ZSAiU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9G
aWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllci5oPgpAQCAtNDYsMTAgKzQ5LDEyIEBAIHN0cnVjdCBD
bGllbnRPcmlnaW47CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRmlsZVN5c3RlbVN0b3Jh
Z2VIYW5kbGVSZWdpc3RyeTsKK2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnk7CiAKIGNsYXNzIE5l
dHdvcmtTdG9yYWdlTWFuYWdlciBmaW5hbCA6IHB1YmxpYyBJUEM6OkNvbm5lY3Rpb246OldvcmtR
dWV1ZU1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoKTsK
KyAgICBzdGF0aWMgUmVmPE5ldHdvcmtTdG9yYWdlTWFuYWdlcj4gY3JlYXRlKFBBTDo6U2Vzc2lv
bklELCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY3VzdG9tTG9jYWxTdG9yYWdl
UGF0aCk7CisgICAgc3RhdGljIGJvb2wgY2FuSGFuZGxlVHlwZXMoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4pOwogCiAgICAgdm9pZCBzdGFydFJlY2VpdmluZ01lc3NhZ2VGcm9tQ29ubmVjdGlv
bihJUEM6OkNvbm5lY3Rpb24mKTsKICAgICB2b2lkIHN0b3BSZWNlaXZpbmdNZXNzYWdlRnJvbUNv
bm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uJik7CkBAIC02MSwyMiArNjYsMzAgQEAgcHVibGljOgog
ICAgIHZvaWQgZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwogICAgIHZvaWQgZGVsZXRlRGF0YU1vZGlmaWVkU2luY2UoT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4sIFdhbGxUaW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAg
IHZvaWQgZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik+
JiYpOworICAgIHZvaWQgbW92ZURhdGEoY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdGFyZ2V0LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc3VzcGVuZChDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgcmVzdW1lKCk7CisgICAgdm9pZCBoYW5kbGVMb3dN
ZW1vcnlXYXJuaW5nKCk7CisgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CiAKIHByaXZhdGU6Ci0gICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyKFBB
TDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIE5ldHdvcmtTdG9yYWdlTWFu
YWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGN1
c3RvbUxvY2FsU3RvcmFnZVBhdGgpOwogICAgIH5OZXR3b3JrU3RvcmFnZU1hbmFnZXIoKTsKICAg
ICBPcmlnaW5TdG9yYWdlTWFuYWdlciYgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKLSAgICB2b2lkIHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5h
Z2VySWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICBib29sIHJl
bW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGllbnRP
cmlnaW4mKTsKKyAgICB2b2lkIGRlbGV0ZU9yaWdpbkRpcmVjdG9yeUlmUG9zc2libGUoY29uc3Qg
V2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CiAgICAgRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdp
c3RyeSYgZmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSgpOwogCiAgICAgdm9pZCBmb3JF
YWNoT3JpZ2luRGlyZWN0b3J5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+Jik7
CisgICAgSGFzaFNldDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IGdldEFsbE9yaWdpbnMoKTsKICAg
ICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBmZXRjaERhdGFGcm9tRGlzayhPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPik7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gZGVs
ZXRlRGF0YU9uRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUsIGNvbnN0
IEZ1bmN0aW9uPGJvb2woY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik+Jik7CisgICAgSGFz
aFNldDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IGRlbGV0ZURhdGFPbkRpc2soT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IFdlYkNv
cmU6OkNsaWVudE9yaWdpbiYpPiYpOwogCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIgKGlt
cGxlbWVudGVkIGJ5IGdlbmVyYXRlZCBjb2RlKQogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBkaWRSZWNlaXZlU3lu
Y01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6
RW5jb2Rlcj4mIHJlcGx5RW5jb2Rlcik7CiAKLSAgICAvLyBNZXNzYWdlIGhhbmRsZXJzCisgICAg
Ly8gTWVzc2FnZSBoYW5kbGVycyBmb3IgRmlsZVN5c3RlbS4KICAgICB2b2lkIHBlcnNpc3RlZChj
b25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmKTsKICAgICB2b2lkIHBlcnNpc3QoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCBmaWxlU3lzdGVtR2V0RGly
ZWN0b3J5KElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwZWN0ZWQ8V2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlk
ZW50aWZpZXIsIEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CkBAIC04OCwyMiArMTAxLDMz
IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVFbnRyeShXZWJDb3JlOjpGaWxlU3lzdGVtSGFu
ZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGRlbGV0ZVJlY3Vyc2l2ZWx5
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8RmlsZVN5c3RlbVN0b3JhZ2VF
cnJvcj4pPiYmKTsKICAgICB2b2lkIHJlc29sdmUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlk
ZW50aWZpZXIsIFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBGaWxlU3lzdGVtU3RvcmFnZUVy
cm9yPik+JiYpOwogICAgIHZvaWQgZ2V0RmlsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRl
bnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeHBlY3RlZDxTdHJpbmcsIEZpbGVTeXN0
ZW1TdG9yYWdlRXJyb3I+KT4mJik7Ci0KICAgICB1c2luZyBBY2Nlc3NIYW5kbGVJbmZvID0gc3Rk
OjpwYWlyPFdlYkNvcmU6OkZpbGVTeXN0ZW1TeW5jQWNjZXNzSGFuZGxlSWRlbnRpZmllciwgSVBD
OjpTaGFyZWRGaWxlSGFuZGxlPjsKICAgICB2b2lkIGNyZWF0ZVN5bmNBY2Nlc3NIYW5kbGUoV2Vi
Q29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
RXhwZWN0ZWQ8QWNjZXNzSGFuZGxlSW5mbywgRmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsK
ICAgICB2b2lkIGNsb3NlQWNjZXNzSGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVu
dGlmaWVyLCBXZWJDb3JlOjpGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50aWZpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxGaWxlU3lzdGVtU3RvcmFnZUVycm9y
Pik+JiYpOwogICAgIHZvaWQgZ2V0SGFuZGxlTmFtZXMoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRs
ZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwZWN0ZWQ8VmVjdG9yPFN0cmlu
Zz4sIEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCBnZXRIYW5kbGUoSVBD
OjpDb25uZWN0aW9uJiwgV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIFN0cmlu
ZyYmIG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwZWN0ZWQ8c3RkOjpwYWlyPFdlYkNv
cmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBib29sPiwgRmlsZVN5c3RlbVN0b3JhZ2VF
cnJvcj4pPiYmKTsKKyAgICAKKyAgICAvLyBNZXNzYWdlIGhhbmRsZXJzIGZvciBXZWJTdG9yYWdl
LgorICAgIHZvaWQgY29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mLCBT
dG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFyZWFJZGVudGlmaWVyKT4mJik7CisgICAg
dm9pZCBjb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYs
IFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEm
JiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
U3RvcmFnZUFyZWFJZGVudGlmaWVyKT4mJik7CisgICAgdm9pZCBjb25uZWN0VG9TZXNzaW9uU3Rv
cmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3Jh
Z2VBcmVhSWRlbnRpZmllcik+JiYpOworICAgIHZvaWQgZGlzY29ubmVjdEZyb21TdG9yYWdlQXJl
YShJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIpOworICAgIHZvaWQgY2xv
bmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlTmFtZXNw
YWNlSWRlbnRpZmllciwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZ2V0
VmFsdWVzKFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpPiYmKTsKKyAgICB2b2lkIHNldEl0ZW0oSVBDOjpD
b25uZWN0aW9uJiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyLCBTdG9yYWdlQXJlYUltcGxJZGVudGlm
aWVyLCB1aW50NjRfdCBzZWVkLCBTdHJpbmcmJiBrZXksIFN0cmluZyYmIHZhbHVlLCBTdHJpbmcm
JiB1cmxTdHJpbmcpOworICAgIHZvaWQgcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb24mLCBTdG9y
YWdlQXJlYUlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHNl
ZWQsIFN0cmluZyYmIGtleSwgU3RyaW5nJiYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIGNsZWFyKElQ
Qzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgU3RvcmFnZUFyZWFJbXBsSWRl
bnRpZmllciwgdWludDY0X3Qgc2VlZCwgU3RyaW5nJiYgdXJsU3RyaW5nKTsKIAogICAgIFBBTDo6
U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwotICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7CisgICAg
UmVmPFN1c3BlbmRhYmxlV29ya1F1ZXVlPiBtX3F1ZXVlOwogICAgIFN0cmluZyBtX3BhdGg7CiAg
ICAgRmlsZVN5c3RlbTo6U2FsdCBtX3NhbHQ7CiAgICAgYm9vbCBtX2Nsb3NlZCB7IGZhbHNlIH07
CiAgICAgSGFzaE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxPcmln
aW5TdG9yYWdlTWFuYWdlcj4+IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnM7Ci0gICAgSGFz
aE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxPcmlnaW5TdG9yYWdl
TWFuYWdlcj4+IG1fc2Vzc2lvbk9yaWdpblN0b3JhZ2VNYW5hZ2VyczsKICAgICBXZWFrSGFzaFNl
dDxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbnM7IC8vIE1haW4gdGhyZWFkIG9ubHkuCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnk+IG1fZmls
ZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFn
ZUFyZWFSZWdpc3RyeT4gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5OworICAgIFN0cmluZyBtX2N1c3Rv
bUxvY2FsU3RvcmFnZVBhdGg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1h
bmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluCmluZGV4IDRlNDA1YzZlZWFkMzI2ZTI1
YjQzMTY0MjA3MDgwOTVmYTYwZGM4MzguLjA0MjJiNjM0NzUxZDAzODVmODRlMDFmNjRhYzYxZGFm
MzFjMTVlODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbgpA
QCAtMzUsOSArMzUsMTggQEAKICAgICBSZXNvbHZlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVy
IHRhcmdldElkZW50aWZpZXIpIC0+IChFeHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgV2ViS2l0OjpG
aWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5jCiAgICAgTW92ZShXZWJDb3JlOjpG
aWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGaWxlU3lzdGVt
SGFuZGxlSWRlbnRpZmllciBkZXN0aW5hdGlvbklkZW50aWZpZXIsIFN0cmluZyBuZXdOYW1lKSAt
PiAoc3RkOjpvcHRpb25hbDxXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkg
QXN5bmMKICAgICBHZXRGaWxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIGlk
ZW50aWZpZXIpIC0+IChFeHBlY3RlZDxTdHJpbmcsIFdlYktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VF
cnJvcj4gcmVzdWx0KSBBc3luYwotCiAgICAgQ3JlYXRlU3luY0FjY2Vzc0hhbmRsZShXZWJDb3Jl
OjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAoRXhwZWN0ZWQ8c3Rk
OjpwYWlyPFdlYkNvcmU6OkZpbGVTeXN0ZW1TeW5jQWNjZXNzSGFuZGxlSWRlbnRpZmllciwgSVBD
OjpTaGFyZWRGaWxlSGFuZGxlPiwgV2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1
bHQpIEFzeW5jCiAgICAgQ2xvc2VBY2Nlc3NIYW5kbGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRs
ZUlkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6RmlsZVN5c3RlbVN5bmNBY2Nlc3NIYW5k
bGVJZGVudGlmaWVyIGFjY2Vzc0hhbmRsZUlkZW50aWZpZXIpIC0+IChzdGQ6Om9wdGlvbmFsPFdl
YktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYwogICAgIEdldEhhbmRs
ZU5hbWVzKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+
IChFeHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgV2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9y
PiByZXN1bHQpIEFzeW5jCiAgICAgR2V0SGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0cmluZyBuYW1lKSAtPiAoRXhwZWN0ZWQ8c3RkOjpwYWly
PFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBib29sPiwgV2ViS2l0OjpGaWxl
U3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5jIFdhbnRzQ29ubmVjdGlvbgorCisgICAg
Q29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlm
aWVyIHN0b3JhZ2VOYW1lc3BhY2VJRCwgc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSBzZWN1cml0eU9yaWdpbkRhdGEpIC0+IChXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBp
ZGVudGlmaWVyKSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KKyAgICBDb25uZWN0VG9UcmFu
c2llbnRMb2NhbFN0b3JhZ2VBcmVhKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIg
c3RvcmFnZU5hbWVzcGFjZUlELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHRv
cExldmVsU2VjdXJpdHlPcmlnaW5EYXRhLCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhIHNlY3VyaXR5T3JpZ2luRGF0YSkgLT4gKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVy
IGlkZW50aWZpZXIpIFN5bmNocm9ub3VzIFdhbnRzQ29ubmVjdGlvbgorICAgIENvbm5lY3RUb1Nl
c3Npb25TdG9yYWdlQXJlYShXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHN0b3Jh
Z2VOYW1lc3BhY2VJRCwgc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBzZWN1cml0
eU9yaWdpbkRhdGEpIC0+IChXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVy
KSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KKyAgICBEaXNjb25uZWN0RnJvbVN0b3JhZ2VB
cmVhKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpIFdhbnRzQ29ubmVj
dGlvbgorICAgIENsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoV2ViS2l0OjpTdG9yYWdlTmFt
ZXNwYWNlSWRlbnRpZmllciBmcm9tU3RvcmFnZU5hbWVzcGFjZUlELCBXZWJLaXQ6OlN0b3JhZ2VO
YW1lc3BhY2VJZGVudGlmaWVyIHRvU3RvcmFnZU5hbWVzcGFjZUlEKSBXYW50c0Nvbm5lY3Rpb24K
KyAgICBHZXRWYWx1ZXMoV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikg
LT4gKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhbHVlcykgU3luY2hyb25vdXMKKyAgICBTZXRJ
dGVtKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6U3Rv
cmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3RvcmFnZU1h
cFNlZWQsIFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSwgU3RyaW5nIHVybFN0cmluZykgV2FudHND
b25uZWN0aW9uCisgICAgUmVtb3ZlSXRlbShXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZp
ZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcga2V5LCBTdHJpbmcgdXJsU3RyaW5n
KSBXYW50c0Nvbm5lY3Rpb24KKyAgICBDbGVhcihXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmll
ciBpZGVudGlmaWVyLCBXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50
aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50c0Nv
bm5lY3Rpb24KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IDI1NGRmZTNiZmY0YTU2
ZDJlOTU5MjI2YmZjZmJmZWQ1NWEyMTU2NmMuLmMxN2ExMGE1ZjQ0ZDAxNDFmZjk0OWYzZmMyMDNh
YWE3MWU1M2EwZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMjgsMTkgKzI4LDI1
IEBACiAKICNpbmNsdWRlICJGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5LmgiCiAjaW5j
bHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdl
TWFuYWdlci5oIgorI2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUg
IlN0b3JhZ2VBcmVhUmVnaXN0cnkuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVR5cGUuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL1NRTGl0ZUZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvRmlsZVN5
c3RlbS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorc3RhdGljIGNvbnN0ZXhwciBhdXRvIG9y
aWdpbkZpbGVOYW1lID0gIm9yaWdpbiJfczsKIGVudW0gY2xhc3MgT3JpZ2luU3RvcmFnZU1hbmFn
ZXI6OlN0b3JhZ2VCdWNrZXRNb2RlIDogYm9vbCB7IEJlc3RFZmZvcnQsIFBlcnNpc3RlbnQgfTsK
IAogY2xhc3MgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFN0b3JhZ2VCdWNrZXQoY29uc3QgU3Ry
aW5nJiByb290UGF0aCwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQorICAgIFN0b3JhZ2VCdWNr
ZXQoY29uc3QgU3RyaW5nJiByb290UGF0aCwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIGxvY2FsU3RvcmFnZVBhdGgpCiAgICAgICAgIDogbV9yb290UGF0aChyb290UGF0
aCkKICAgICAgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAgICAgLCBtX2xvY2Fs
U3RvcmFnZVBhdGgobG9jYWxTdG9yYWdlUGF0aCkKICAgICB7CiAgICAgfQogCkBAIC01NSwxMyAr
NjEsMzEgQEAgcHVibGljOgogCiAgICAgZW51bSBjbGFzcyBTdG9yYWdlVHlwZSA6IHVpbnQ4X3Qg
ewogICAgICAgICBGaWxlU3lzdGVtLAorICAgICAgICBMb2NhbFN0b3JhZ2UsCisgICAgICAgIFNl
c3Npb25TdG9yYWdlLAogICAgIH07CiAKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJzaXRl
RGF0YVR5cGU+IHRvV2Vic2l0ZURhdGFUeXBlKGNvbnN0IFN0cmluZyYgc3RvcmFnZUlkZW50aWZp
ZXIpCisgICAgeworICAgICAgICBpZiAoc3RvcmFnZUlkZW50aWZpZXIgPT0gIkZpbGVTeXN0ZW0i
X3MpCisgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtOworICAg
ICAgICBpZiAoc3RvcmFnZUlkZW50aWZpZXIgPT0gIkxvY2FsU3RvcmFnZSJfcykKKyAgICAgICAg
ICAgIHJldHVybiBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZTsKKyAgICAgICAgaWYgKHN0
b3JhZ2VJZGVudGlmaWVyID09ICJTZXNzaW9uU3RvcmFnZSJfcykKKyAgICAgICAgICAgIHJldHVy
biBXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlOworCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgfQorCiAgICAgc3RhdGljIFN0cmluZyB0b1N0b3JhZ2VJZGVudGlmaWVy
KFN0b3JhZ2VUeXBlIHR5cGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAg
ICAgY2FzZSBTdG9yYWdlVHlwZTo6RmlsZVN5c3RlbToKICAgICAgICAgICAgIHJldHVybiAiRmls
ZVN5c3RlbSJfczsKKyAgICAgICAgY2FzZSBTdG9yYWdlVHlwZTo6TG9jYWxTdG9yYWdlOgorICAg
ICAgICAgICAgcmV0dXJuICJMb2NhbFN0b3JhZ2UiX3M7CisgICAgICAgIGNhc2UgU3RvcmFnZVR5
cGU6OlNlc3Npb25TdG9yYWdlOgorICAgICAgICAgICAgcmV0dXJuICJTZXNzaW9uU3RvcmFnZSJf
czsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04
NiwxOCArMTEwLDEyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9maWxlU3lzdGVtU3Rv
cmFnZU1hbmFnZXI7CiAgICAgfQogCi0gICAgYm9vbCBpc0FjdGl2ZSgpCisgICAgTG9jYWxTdG9y
YWdlTWFuYWdlciYgbG9jYWxTdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdp
c3RyeSkKKyAgICB7CisgICAgICAgIGlmICghbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKQorICAgICAg
ICAgICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyID0gbWFrZVVuaXF1ZTxMb2NhbFN0b3JhZ2VNYW5h
Z2VyPihtX2xvY2FsU3RvcmFnZVBhdGgsIHJlZ2lzdHJ5KTsKKworICAgICAgICByZXR1cm4gKm1f
bG9jYWxTdG9yYWdlTWFuYWdlcjsKKyAgICB9CisKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2VyKiBl
eGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbG9j
YWxTdG9yYWdlTWFuYWdlci5nZXQoKTsKKyAgICB9CisKKyAgICBTZXNzaW9uU3RvcmFnZU1hbmFn
ZXImIHNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAhIW1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOworICAg
ICAgICBpZiAoIW1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICAgICAgbV9zZXNzaW9u
U3RvcmFnZU1hbmFnZXIgPSBtYWtlVW5pcXVlPFNlc3Npb25TdG9yYWdlTWFuYWdlcj4ocmVnaXN0
cnkpOworCisgICAgICAgIHJldHVybiAqbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXI7CisgICAgfQor
CisgICAgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdl
cigpCisgICAgeworICAgICAgICByZXR1cm4gbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIuZ2V0KCk7
CisgICAgfQorCisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIgfHwgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyIHx8
IG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOworICAgIH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0CisgICAgeworICAgICAgICBhdXRvIGZpbGVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9y
eShtX3Jvb3RQYXRoKTsKKyAgICAgICAgYXV0byBoYXNWYWxpZEZpbGUgPSBXVEY6OmFueU9mKGZp
bGVzLCBbJl0oYXV0byBmaWxlKSB7CisgICAgICAgICAgICBib29sIGlzSW52YWxpZEZpbGUgPSAo
ZmlsZSA9PSBvcmlnaW5GaWxlTmFtZSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgICAg
ICBpc0ludmFsaWRGaWxlIHw9IChmaWxlID09ICIuRFNfU3RvcmUiKTsKKyNlbmRpZgorICAgICAg
ICAgICAgcmV0dXJuICFpc0ludmFsaWRGaWxlOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKGhh
c1ZhbGlkRmlsZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4g
IUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobV9sb2NhbFN0b3JhZ2VQYXRoKTsKKyAgICB9CisKKyAg
ICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGFUeXBlc0luTGlzdChPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcykKKyAgICB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
ZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9tTWVtb3J5KHR5cGVzKTsKKyAgICAgICAgcmVzdWx0LmFk
ZChmZXRjaERhdGFUeXBlc0luTGlzdEZyb21EaXNrKHR5cGVzKSk7CisKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKICAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2VUaW1lKQogICAgIHsKICAgICAg
ICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSkpCiAgICAg
ICAgICAgICBkZWxldGVGaWxlU3lzdGVtU3RvcmFnZURhdGEobW9kaWZpZWRTaW5jZVRpbWUpOwor
CisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFn
ZSkpCisgICAgICAgICAgICBkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKG1vZGlmaWVkU2luY2VUaW1l
KTsKKworICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9u
U3RvcmFnZSkgJiYgbW9kaWZpZWRTaW5jZVRpbWUgPT0gLVdhbGxUaW1lOjppbmZpbml0eSgpKQor
ICAgICAgICAgICAgZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKCk7CisgICAgfQorCisgICAgdm9p
ZCBtb3ZlRGF0YShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdl
UGF0aCkKKyAgICB7CisgICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0
cjsKKyAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdlcikKKyAgICAgICAgICAgIG1fbG9j
YWxTdG9yYWdlTWFuYWdlci0+Y2xvc2UoKTsKKworICAgICAgICBGaWxlU3lzdGVtOjptYWtlQWxs
RGlyZWN0b3JpZXMoRmlsZVN5c3RlbTo6cGFyZW50UGF0aChwYXRoKSk7CisgICAgICAgIEZpbGVT
eXN0ZW06Om1vdmVGaWxlKG1fcm9vdFBhdGgsIHBhdGgpOworCisgICAgICAgIGlmICghbV9sb2Nh
bFN0b3JhZ2VQYXRoLmlzRW1wdHkoKSAmJiAhbG9jYWxTdG9yYWdlUGF0aC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpw
YXJlbnRQYXRoKGxvY2FsU3RvcmFnZVBhdGgpKTsKKyAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0
ZUZpbGVTeXN0ZW06Om1vdmVEYXRhYmFzZUZpbGUobV9sb2NhbFN0b3JhZ2VQYXRoLCBsb2NhbFN0
b3JhZ2VQYXRoKTsKKyAgICAgICAgfQogICAgIH0KIAogcHJpdmF0ZToKKyAgICBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGFUeXBlc0luTGlzdEZyb21NZW1vcnkoT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCisgICAgeworICAgICAgICBPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiByZXN1bHQ7CisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZU1h
bmFnZXIgJiYgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSkKKyAgICAg
ICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNl
c3Npb25TdG9yYWdlKSkgeworICAgICAgICAgICAgaWYgKG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
ICYmIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSkKKyAgICAgICAg
ICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGFUeXBlc0luTGlzdEZyb21EaXNrKE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IHR5cGVzKQorICAgIHsKKyAgICAgICAgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gcmVzdWx0OworICAgICAgICBmb3IgKGF1dG8mIHN0b3JhZ2VUeXBlIDogRmlsZVN5
c3RlbTo6bGlzdERpcmVjdG9yeShtX3Jvb3RQYXRoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8g
dHlwZSA9IHRvV2Vic2l0ZURhdGFUeXBlKHN0b3JhZ2VUeXBlKTsgdHlwZSAmJiB0eXBlcy5jb250
YWlucygqdHlwZSkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZCgqdHlwZSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0
b3JhZ2UpICYmICFyZXN1bHQuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2Up
KSB7CisgICAgICAgICAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhtX2xvY2FsU3RvcmFn
ZVBhdGgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpMb2Nh
bFN0b3JhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
ICAgICB2b2lkIGRlbGV0ZUZpbGVTeXN0ZW1TdG9yYWdlRGF0YShXYWxsVGltZSBtb2RpZmllZFNp
bmNlVGltZSkKICAgICB7CiAgICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyID0gbnVs
bHB0cjsKQEAgLTEwNiwxNCArMjMzLDQ0IEBAIHByaXZhdGU6CiAgICAgICAgIEZpbGVTeXN0ZW06
OmRlbGV0ZUFsbEZpbGVzTW9kaWZpZWRTaW5jZShmaWxlU3lzdGVtU3RvcmFnZVBhdGgsIG1vZGlm
aWVkU2luY2VUaW1lKTsKICAgICB9CiAKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZURhdGEo
V2FsbFRpbWUgdGltZSkKKyAgICB7CisgICAgICAgIGlmIChhdXRvIG1vZGlmaWNhdGlvblRpbWUg
PSBGaWxlU3lzdGVtOjpmaWxlTW9kaWZpY2F0aW9uVGltZShtX2xvY2FsU3RvcmFnZVBhdGgpOyAq
bW9kaWZpY2F0aW9uVGltZSA+PSB0aW1lKSB7CisgICAgICAgICAgICBpZiAobV9sb2NhbFN0b3Jh
Z2VNYW5hZ2VyKQorICAgICAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+Y2xlYXJE
YXRhT25EaXNrKCk7CisgICAgICAgICAgICBXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpkZWxl
dGVEYXRhYmFzZUZpbGUobV9sb2NhbFN0b3JhZ2VQYXRoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+Y2xlYXJEYXRhSW5NZW1vcnkoKTsKKyAgICAgICAg
aWYgKCFtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX2xv
Y2FsU3RvcmFnZU1hbmFnZXIgPSBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgZGVsZXRlU2Vz
c2lvblN0b3JhZ2VEYXRhKCkKKyAgICB7CisgICAgICAgIGlmICghbV9zZXNzaW9uU3RvcmFnZU1h
bmFnZXIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1h
bmFnZXItPmNsZWFyRGF0YSgpOworICAgICAgICBpZiAoIW1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
LT5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIgPSBudWxs
cHRyOworICAgIH0KKyAgICAKICAgICBTdHJpbmcgbV9yb290UGF0aDsKICAgICBTdHJpbmcgbV9p
ZGVudGlmaWVyOwogICAgIFN0b3JhZ2VCdWNrZXRNb2RlIG1fbW9kZSB7IFN0b3JhZ2VCdWNrZXRN
b2RlOjpCZXN0RWZmb3J0IH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbGVTeXN0ZW1TdG9yYWdl
TWFuYWdlcj4gbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI7CisgICAgc3RkOjp1bmlxdWVfcHRy
PExvY2FsU3RvcmFnZU1hbmFnZXI+IG1fbG9jYWxTdG9yYWdlTWFuYWdlcjsKKyAgICBTdHJpbmcg
bV9sb2NhbFN0b3JhZ2VQYXRoOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTZXNzaW9uU3RvcmFnZU1h
bmFnZXI+IG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOwogfTsKIAotT3JpZ2luU3RvcmFnZU1hbmFn
ZXI6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyKFN0cmluZyYmIHBhdGgpCitPcmlnaW5TdG9yYWdlTWFu
YWdlcjo6T3JpZ2luU3RvcmFnZU1hbmFnZXIoU3RyaW5nJiYgcGF0aCwgU3RyaW5nJiYgbG9jYWxT
dG9yYWdlUGF0aCkKICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQorICAgICwgbV9sb2NhbFN0
b3JhZ2VQYXRoKFdURk1vdmUobG9jYWxTdG9yYWdlUGF0aCkpCiB7CiAgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CiB9CkBAIC0xMjksNyArMjg2LDcgQEAgdm9pZCBPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5l
Y3Rpb24KIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0JiBPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6ZGVmYXVsdEJ1Y2tldCgpCiB7CiAgICAgaWYgKCFtX2RlZmF1bHRCdWNrZXQpCi0g
ICAgICAgIG1fZGVmYXVsdEJ1Y2tldCA9IG1ha2VVbmlxdWU8U3RvcmFnZUJ1Y2tldD4obV9wYXRo
LCAiZGVmYXVsdCJfcyk7CisgICAgICAgIG1fZGVmYXVsdEJ1Y2tldCA9IG1ha2VVbmlxdWU8U3Rv
cmFnZUJ1Y2tldD4obV9wYXRoLCAiZGVmYXVsdCJfcywgbV9sb2NhbFN0b3JhZ2VQYXRoKTsKIAog
ICAgIHJldHVybiAqbV9kZWZhdWx0QnVja2V0OwogfQpAQCAtMTM5LDE1ICsyOTYsMzQgQEAgRmls
ZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyJiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZmlsZVN5c3RlbVN0
b3JhZ2VNYW5hZ2VyKEZpbGVTeXMKICAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmZpbGVTeXN0
ZW1TdG9yYWdlTWFuYWdlcihyZWdpc3RyeSk7CiB9CiAKK0xvY2FsU3RvcmFnZU1hbmFnZXImIE9y
aWdpblN0b3JhZ2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0
cnkmIHJlZ2lzdHJ5KQoreworICAgIHJldHVybiBkZWZhdWx0QnVja2V0KCkubG9jYWxTdG9yYWdl
TWFuYWdlcihyZWdpc3RyeSk7Cit9CisKK0xvY2FsU3RvcmFnZU1hbmFnZXIqIE9yaWdpblN0b3Jh
Z2VNYW5hZ2VyOjpleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKQoreworICAgIHJldHVybiBk
ZWZhdWx0QnVja2V0KCkuZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCk7Cit9CisKK1Nlc3Np
b25TdG9yYWdlTWFuYWdlciYgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OnNlc3Npb25TdG9yYWdlTWFu
YWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKK3sKKyAgICByZXR1cm4gZGVmYXVs
dEJ1Y2tldCgpLnNlc3Npb25TdG9yYWdlTWFuYWdlcihyZWdpc3RyeSk7Cit9CisKK1Nlc3Npb25T
dG9yYWdlTWFuYWdlciogT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmV4aXN0aW5nU2Vzc2lvblN0b3Jh
Z2VNYW5hZ2VyKCkKK3sKKyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmV4aXN0aW5nU2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyKCk7Cit9CisKIGJvb2wgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmlzQWN0
aXZlKCkKIHsKICAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmlzQWN0aXZlKCk7CiB9CiAKLXZv
aWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpCitib29sIE9yaWdpblN0b3JhZ2VN
YW5hZ2VyOjppc0VtcHR5KCkKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAg
ICBkZWZhdWx0QnVja2V0KCkuZGVsZXRlRGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZSk7CisgICAg
cmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5pc0VtcHR5KCk7CiB9CiAKIHZvaWQgT3JpZ2luU3RvcmFn
ZU1hbmFnZXI6OnNldFBlcnNpc3RlZChib29sIHZhbHVlKQpAQCAtMTU4LDUgKzMzNCwyNiBAQCB2
b2lkIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpzZXRQZXJzaXN0ZWQoYm9vbCB2YWx1ZSkKICAgICBk
ZWZhdWx0QnVja2V0KCkuc2V0TW9kZSh2YWx1ZSA/IFN0b3JhZ2VCdWNrZXRNb2RlOjpQZXJzaXN0
ZW50IDogU3RvcmFnZUJ1Y2tldE1vZGU6OkJlc3RFZmZvcnQpOwogfQogCitPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZmV0Y2hEYXRhVHlwZXNJbkxpc3Qo
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmZldGNoRGF0YVR5cGVz
SW5MaXN0KHR5cGVzKTsKK30KKwordm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0
YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgV2FsbFRpbWUgbW9kaWZpZWRTaW5j
ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGRlZmF1bHRCdWNr
ZXQoKS5kZWxldGVEYXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlKTsKK30KKwordm9pZCBPcmlnaW5T
dG9yYWdlTWFuYWdlcjo6bW92ZURhdGEoY29uc3QgU3RyaW5nJiBuZXdQYXRoLCBjb25zdCBTdHJp
bmcmIGxvY2FsU3RvcmFnZVBhdGgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBkZWZhdWx0QnVja2V0KCkubW92ZURhdGEobmV3UGF0aCwgbG9jYWxTdG9yYWdlUGF0
aCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oCmlu
ZGV4IDdhZGZhNWIwM2I2YmE2ZTNmODY5ODBiMTJkMmY4YTQ0ZDllNGU2NGIuLjVlNzY2OTk4NmU0
NjY4NWYzODliN2E1MjcxZTY2ZDBlNjNjMmQxOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oCkBA
IC0zNiwyMCArMzYsMzAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEZpbGVTeXN0ZW1T
dG9yYWdlSGFuZGxlUmVnaXN0cnk7CiBjbGFzcyBGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI7Citj
bGFzcyBMb2NhbFN0b3JhZ2VNYW5hZ2VyOworY2xhc3MgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOwor
Y2xhc3MgU3RvcmFnZUFyZWFSZWdpc3RyeTsKIGVudW0gY2xhc3MgV2Vic2l0ZURhdGFUeXBlIDog
dWludDMyX3Q7CiAKIGNsYXNzIE9yaWdpblN0b3JhZ2VNYW5hZ2VyIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBPcmlnaW5TdG9yYWdlTWFuYWdl
cihTdHJpbmcmJiBwYXRoKTsKKyAgICBPcmlnaW5TdG9yYWdlTWFuYWdlcihTdHJpbmcmJiBwYXRo
LCBTdHJpbmcmJiBsb2NhbFN0b3JhZ2VQYXRoKTsKICAgICB+T3JpZ2luU3RvcmFnZU1hbmFnZXIo
KTsKIAogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlE
KTsKICAgICBib29sIHBlcnNpc3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGVyc2lzdGVkOyB9CiAg
ICAgdm9pZCBzZXRQZXJzaXN0ZWQoYm9vbCB2YWx1ZSk7CiAgICAgRmlsZVN5c3RlbVN0b3JhZ2VN
YW5hZ2VyJiBmaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIoRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVS
ZWdpc3RyeSYpOworICAgIExvY2FsU3RvcmFnZU1hbmFnZXImIGxvY2FsU3RvcmFnZU1hbmFnZXIo
U3RvcmFnZUFyZWFSZWdpc3RyeSYpOworICAgIExvY2FsU3RvcmFnZU1hbmFnZXIqIGV4aXN0aW5n
TG9jYWxTdG9yYWdlTWFuYWdlcigpOworICAgIFNlc3Npb25TdG9yYWdlTWFuYWdlciYgc2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmKTsKKyAgICBTZXNzaW9uU3RvcmFn
ZU1hbmFnZXIqIGV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCk7CiAgICAgYm9vbCBpc0Fj
dGl2ZSgpOworICAgIGJvb2wgaXNFbXB0eSgpOworICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IGZldGNoRGF0YVR5cGVzSW5MaXN0KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+KTsKICAg
ICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lKTsK
KyAgICB2b2lkIG1vdmVEYXRhKGNvbnN0IFN0cmluZyYgbmV3UGF0aCwgY29uc3QgU3RyaW5nJiBs
b2NhbFN0b3JhZ2VQYXRoKTsKIAogcHJpdmF0ZToKICAgICBlbnVtIGNsYXNzIFN0b3JhZ2VCdWNr
ZXRNb2RlIDogYm9vbDsKQEAgLTYyLDYgKzcyLDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U3RvcmFnZUJ1Y2tldD4gbV9kZWZhdWx0QnVja2V0OwogICAgIFN0cmluZyBtX3BhdGg7
CiAgICAgYm9vbCBtX3BlcnNpc3RlZCB7IGZhbHNlIH07CisgICAgU3RyaW5nIG1fbG9jYWxTdG9y
YWdlUGF0aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMGE0OWY1MGI2MTM1ZmUzOWUxZTA1NWEwNWIzMmYyYjk0MTJmMTZjNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxp
dGVTdG9yYWdlQXJlYS5jcHAKQEAgLTAsMCArMSw0MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTUUxpdGVTdG9yYWdlQXJlYS5oIgorCisjaW5j
bHVkZSA8V2ViQ29yZS9TUUxpdGVGaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxp
dGVTdGF0ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVRyYW5zYWN0aW9uLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlTWFwLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
b25zdGV4cHIgU2Vjb25kcyB0cmFuc2FjdGlvbkR1cmF0aW9uIHsgNTAwX21zIH07Citjb25zdGV4
cHIgdW5zaWduZWQgbWF4aW11bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1vcnkgeyAxICogS0IgfTsK
K2NvbnN0ZXhwciBhdXRvIGNyZWF0ZUl0ZW1UYWJsZVN0YXRlbWVudEFsdGVybmF0aXZlID0gIkNS
RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENP
TkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiX3M7
Citjb25zdGV4cHIgYXV0byBjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnQgPSAiQ1JFQVRFIFRBQkxF
IEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJM
T0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiX3M7CisKK0FTQ0lJTGl0ZXJhbCBTUUxpdGVT
dG9yYWdlQXJlYTo6c3RhdGVtZW50U3RyaW5nKFN0YXRlbWVudFR5cGUgdHlwZSkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OkNvdW50SXRlbXM6
CisgICAgICAgIHJldHVybiAiU0VMRUNUIENPVU5UKCopIEZST00gSXRlbVRhYmxlIl9zOworICAg
IGNhc2UgU3RhdGVtZW50VHlwZTo6RGVsZXRlSXRlbToKKyAgICAgICAgcmV0dXJuICJERUxFVEUg
RlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iX3M7CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpE
ZWxldGVBbGxJdGVtczoKKyAgICAgICAgcmV0dXJuICJERUxFVEUgRlJPTSBJdGVtVGFibGUiX3M7
CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpHZXRJdGVtOgorICAgICAgICByZXR1cm4gIlNFTEVD
VCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyJfczsKKyAgICBjYXNlIFN0YXRlbWVu
dFR5cGU6OkdldEFsbEl0ZW1zOgorICAgICAgICByZXR1cm4gIlNFTEVDVCBrZXksIHZhbHVlIEZS
T00gSXRlbVRhYmxlIl9zOworICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6U2V0SXRlbToKKyAgICAg
ICAgcmV0dXJuICJJTlNFUlQgSU5UTyBJdGVtVGFibGUgVkFMVUVTICg/LCA/KSJfczsKKyAgICBj
YXNlIFN0YXRlbWVudFR5cGU6OkludmFsaWQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAiIl9zOworfQorCitTUUxpdGVTdG9y
YWdlQXJlYTo6U1FMaXRlU3RvcmFnZUFyZWEodW5zaWduZWQgcXVvdGEsIGNvbnN0IFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGgsIFJlZjxXb3JrUXVldWU+
JiYgd29ya1F1ZXVlKQorICAgIDogU3RvcmFnZUFyZWFCYXNlKHF1b3RhLCBvcmlnaW4pCisgICAg
LCBtX3BhdGgocGF0aCkKKyAgICAsIG1fcXVldWUoV1RGTW92ZSh3b3JrUXVldWUpKQoreworICAg
IEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKTsgKytpKQorICAgICAg
ICBtX2NhY2hlZFN0YXRlbWVudHMuYXBwZW5kKG51bGxwdHIpOworfQorCit2b2lkIFNRTGl0ZVN0
b3JhZ2VBcmVhOjpjbG9zZSgpCit7CisgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOworCisg
ICAgbV9jYWNoZSA9IHN0ZDo6bnVsbG9wdDsKKyAgICBjb21taXRUcmFuc2FjdGlvbklmTmVjZXNz
YXJ5KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KFN0
YXRlbWVudFR5cGU6OkludmFsaWQpOyArK2kpCisgICAgICAgIG1fY2FjaGVkU3RhdGVtZW50c1tp
XSA9IG51bGxwdHI7CisgICAgbV9kYXRhYmFzZSA9IG51bGxwdHI7Cit9CisKK1NRTGl0ZVN0b3Jh
Z2VBcmVhOjp+U1FMaXRlU3RvcmFnZUFyZWEoKQoreworICAgIEFTU0VSVCghaXNNYWluUnVuTG9v
cCgpKTsKKworICAgIGJvb2wgZGF0YWJhc2VJc0VtcHR5ID0gaXNFbXB0eSgpOworICAgIGNsb3Nl
KCk7CisgICAgaWYgKGRhdGFiYXNlSXNFbXB0eSkKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlRmls
ZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKG1fcGF0aCk7Cit9CisKK2Jvb2wgU1FMaXRlU3Rv
cmFnZUFyZWE6OmlzRW1wdHkoKQoreworICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKKwor
ICAgIGlmIChtX2NhY2hlKQorICAgICAgICByZXR1cm4gbV9jYWNoZS0+aXNFbXB0eSgpOworCisg
ICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBh
dXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlOjpDb3VudEl0ZW1z
KTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJl
YTo6aXNFbXB0eSBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2Rh
dGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gIXN0YXRlbWVudC0+Y29sdW1uSW50
KDApOworfQorCit2b2lkIFNRTGl0ZVN0b3JhZ2VBcmVhOjpjbGVhcigpCit7CisgICAgQVNTRVJU
KCFpc01haW5SdW5Mb29wKCkpOworCisgICAgY2xvc2UoKTsKKyAgICBXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUobV9wYXRoKTsKKyAgICBub3RpZnlMaXN0ZW5l
cnNBYm91dENsZWFyKCk7Cit9CisKK2Jvb2wgU1FMaXRlU3RvcmFnZUFyZWE6OmNyZWF0ZVRhYmxl
SWZOZWNlc3NhcnkoKQoreworICAgIGlmICghbV9kYXRhYmFzZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgU3RyaW5nIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnRhYmxlU1FMKCJJdGVt
VGFibGUiX3MpOworICAgIGlmIChzdGF0ZW1lbnQgPT0gY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50
IHx8IHN0YXRlbWVudCA9PSBjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnRBbHRlcm5hdGl2ZSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBUYWJsZSBleGlzdHMgYnV0IHN0YXRlbWVudCBp
cyB3cm9uZzsgZHJvcCBpdC4KKyAgICBpZiAoIXN0YXRlbWVudC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgaWYgKCFtX2RhdGFiYXNlLT5leGVjdXRlQ29tbWFuZCgiRFJPUCBUQUJMRSBJdGVtVGFibGUi
X3MpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3Rv
cmFnZUFyZWE6OmNyZWF0ZVRhYmxlSWZOZWNlc3NhcnkgZmFpbGVkIHRvIGRyb3AgZXhpc3Rpbmcg
aXRlbSB0YWJsZSAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFz
ZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gVGFibGUgZG9lcyBub3QgZXhpc3QuCisgICAgaWYgKCFtX2RhdGFi
YXNlLT5leGVjdXRlQ29tbWFuZChjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnQpKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Y3JlYXRlVGFi
bGVJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gY3JlYXRlIGl0ZW0gdGFibGUgKCVkKSAtICVzIiwgbV9k
YXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNR
TGl0ZVN0b3JhZ2VBcmVhOjpwcmVwYXJlRGF0YWJhc2UoKQoreworICAgIGlmIChtX2RhdGFiYXNl
ICYmIG1fZGF0YWJhc2UtPmlzT3BlbigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1f
ZGF0YWJhc2UgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPigpOworICAgIEZp
bGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKG1fcGF0
aCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbihtX3BhdGgpKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6cHJlcGFyZURhdGFiYXNl
IGZhaWxlZCB0byBvcGVuIGRhdGFiYXNlIGF0ICclcyciLCBtX3BhdGgudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIG1fZGF0YWJhc2UgPSBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgICAgICAKKyAgICAvLyBTaW5jZSBhIFdvcmtRdWV1ZSBpc24ndCBib3VuZCB0byBh
IHNwZWNpZmljIHRocmVhZCwgd2UgbmVlZCB0byBkaXNhYmxlIHRocmVhZGluZyBjaGVjay4KKyAg
ICAvLyBXZSB3aWxsIG5ldmVyIGFjY2VzcyB0aGUgZGF0YWJhc2UgZnJvbSBkaWZmZXJlbnQgdGhy
ZWFkcyBzaW11bHRhbmVvdXNseS4KKyAgICBtX2RhdGFiYXNlLT5kaXNhYmxlVGhyZWFkaW5nQ2hl
Y2tzKCk7CisKKyAgICBpZiAoIWNyZWF0ZVRhYmxlSWZOZWNlc3NhcnkoKSkgeworICAgICAgICBt
X2RhdGFiYXNlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmIChxdW90YSgpICE9IFdlYkNvcmU6OlN0b3JhZ2VNYXA6Om5vUXVvdGEpCisgICAgICAgIG1f
ZGF0YWJhc2UtPnNldE1heGltdW1TaXplKHF1b3RhKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgU1FMaXRlU3RvcmFnZUFyZWE6OnN0YXJ0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgp
Cit7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uKQorICAgICAgICBtX3RyYW5zYWN0aW9uID0gbWFr
ZVVuaXF1ZTxXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbj4oKm1fZGF0YWJhc2UpOworCisgICAg
aWYgKG1fdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV90cmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaEFmdGVyKHRyYW5z
YWN0aW9uRHVyYXRpb24sIFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9XSB7CisgICAgICAg
IGlmICghd2Vha1RoaXMgfHwgIXdlYWtUaGlzLT5tX3RyYW5zYWN0aW9uKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIAorICAgICAgICBhdXRvIHRyYW5zYWN0aW9uID0gc3RkOjpleGNoYW5nZSh3
ZWFrVGhpcy0+bV90cmFuc2FjdGlvbiwgbnVsbHB0cik7CisgICAgICAgIHRyYW5zYWN0aW9uLT5j
b21taXQoKTsKKyAgICB9KTsKK30KKworV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0
U2NvcGUgU1FMaXRlU3RvcmFnZUFyZWE6OmNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlIHR5
cGUpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIEFTU0VSVCh0eXBlIDwgU3RhdGVt
ZW50VHlwZTo6SW52YWxpZCk7CisKKyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4odHlwZSk7CisgICAgaWYgKCFtX2NhY2hlZFN0YXRlbWVudHNbaW5kZXhdKSB7CisgICAgICAg
IGlmIChhdXRvIHJlc3VsdCA9IG1fZGF0YWJhc2UtPnByZXBhcmVIZWFwU3RhdGVtZW50KHN0YXRl
bWVudFN0cmluZyh0eXBlKSkpCisgICAgICAgICAgICBtX2NhY2hlZFN0YXRlbWVudHNbaW5kZXhd
ID0gcmVzdWx0LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgfQorCisgICAgcmV0dXJu
IFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgbV9jYWNoZWRTdGF0ZW1l
bnRzW2luZGV4XS5nZXQoKSB9OworfQorCitFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJvcj4g
U1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgaWYg
KG1fY2FjaGUpIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fY2FjaGUtPmZpbmQoa2V5KTsK
KyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fY2FjaGUtPmVuZCgpKQorICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4g
Z2V0SXRlbUZyb21EYXRhYmFzZShrZXkpOworfQorCitFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VF
cnJvcj4gU1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBrZXkpCit7CisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworCisgICAgYXV0byBzdGF0ZW1l
bnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZTo6R2V0SXRlbSk7CisgICAgaWYgKCFz
dGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBrZXkpKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0SXRlbUZyb21EYXRh
YmFzZSBmYWlsZWQgb24gY3JlYXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2Ut
Pmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9CisKKyAgICBp
bnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVf
Uk9XKQorICAgICAgICByZXR1cm4gc3RhdGVtZW50LT5jb2x1bW5CbG9iQXNTdHJpbmcoMCk7Cisg
ICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2UgZmFpbGVk
IG9uIHN0ZXBwaW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3Io
KSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6SXRlbU5vdEZvdW5kKTsKK30KKworSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gU1FMaXRlU3RvcmFnZUFyZWE6OmFsbEl0ZW1zKCkKK3sKKyAgICBBU1NFUlQo
IWlzTWFpblJ1bkxvb3AoKSk7CisKKyAgICBpZiAoIXByZXBhcmVEYXRhYmFzZSgpKQorICAgICAg
ICByZXR1cm4gSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4geyB9OworCisgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gaXRlbXM7CisgICAgaWYgKG1fY2FjaGUpIHsKKyAgICAgICAgaXRlbXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NhY2hlLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8m
IFtrZXksIHZhbHVlXSA6ICptX2NhY2hlKSB7CisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVs
bCgpKSB7CisgICAgICAgICAgICAgICAgaXRlbXMuYWRkKGtleSwgdmFsdWUpOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXV0byBy
ZXN1bHQgPSBnZXRJdGVtRnJvbURhdGFiYXNlKGtleSkpCisgICAgICAgICAgICAgICAgaXRlbXMu
YWRkKGtleSwgcmVzdWx0LnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpdGVt
czsKKyAgICB9CisKKyAgICAvLyBJbXBvcnQgZnJvbSBkYXRhYmFzZS4KKyAgICBhdXRvIHN0YXRl
bWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlOjpHZXRBbGxJdGVtcyk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNR
TGl0ZVN0b3JhZ2VBcmVhOjpnZXRBbGxJdGVtcyBmYWlsZWQgb24gY3JlYXRpbmcgc3RhdGVtZW50
ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgbV9jYWNoZSA9IEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsgfTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5z
dGVwKCk7CisgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFN0cmlu
ZyBrZXkgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMCk7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9
IHN0YXRlbWVudC0+Y29sdW1uQmxvYkFzU3RyaW5nKDEpOworICAgICAgICBpZiAoIWtleS5pc051
bGwoKSAmJiAhdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1fY2FjaGUtPmFkZChrZXks
IHZhbHVlLnNpemVJbkJ5dGVzKCkgPiBtYXhpbXVtU2l6ZUZvclZhbHVlc0tlcHRJbk1lbW9yeSA/
IFN0cmluZygpIDogdmFsdWUpOworICAgICAgICAgICAgaXRlbXMuYWRkKFdURk1vdmUoa2V5KSwg
V1RGTW92ZSh2YWx1ZSkpOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50
LT5zdGVwKCk7CisgICAgfQorCisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKKyAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRBbGxJ
dGVtcyBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNl
LT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworCisgICAgcmV0dXJu
IGl0ZW1zOworfQorCitFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IFNRTGl0ZVN0b3JhZ2VB
cmVhOjpzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFn
ZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUltcGxJRCwgU3RyaW5nJiYga2V5LCBTdHJp
bmcmJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgQVNTRVJUKCFpc01h
aW5SdW5Mb29wKCkpOworCisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworCisgICAgc3RhcnRU
cmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgaWYg
KGF1dG8gdmFsdWVPckVycm9yID0gZ2V0SXRlbShrZXkpKQorICAgICAgICBvbGRWYWx1ZSA9IHZh
bHVlT3JFcnJvci52YWx1ZSgpOworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1l
bnQoU3RhdGVtZW50VHlwZTo6U2V0SXRlbSk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBrZXkpIHx8IHN0YXRlbWVudC0+YmluZEJsb2IoMiwgdmFsdWUpKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6
c2V0SXRlbSBmYWlsZWQgb24gY3JlYXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJh
c2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9CisKKyAg
ICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxJ
VEVfRlVMTCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6UXVv
dGFFeGNlZWRlZCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OnNldEl0ZW0gZmFp
bGVkIG9uIHN0ZXBwaW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgZGlzcGF0Y2hF
dmVudHMoY29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIGtleSwgb2xkVmFsdWUsIHZhbHVl
LCB1cmxTdHJpbmcpOworCisgICAgaWYgKG1fY2FjaGUpCisgICAgICAgIG1fY2FjaGUtPnNldChX
VEZNb3ZlKGtleSksIHZhbHVlLnNpemVJbkJ5dGVzKCkgPiBtYXhpbXVtU2l6ZUZvclZhbHVlc0tl
cHRJbk1lbW9yeSA/IFN0cmluZygpIDogV1RGTW92ZSh2YWx1ZSkpOworCisgICAgcmV0dXJuIHsg
fTsKK30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBTUUxpdGVTdG9yYWdlQXJlYTo6
cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VB
cmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7
CisKKyAgICBpZiAoIXByZXBhcmVEYXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisKKyAgICBzdGFydFRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKKyAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgaWYgKGF1dG8gdmFsdWVPckVy
cm9yID0gZ2V0SXRlbShrZXkpKQorICAgICAgICBvbGRWYWx1ZSA9IHZhbHVlT3JFcnJvci52YWx1
ZSgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJv
cjo6SXRlbU5vdEZvdW5kKTsKKworICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50
KFN0YXRlbWVudFR5cGU6OkRlbGV0ZUl0ZW0pOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRl
bWVudC0+YmluZFRleHQoMSwga2V5KSB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFy
ZWE6OnJlbW92ZUl0ZW0gZmFpbGVkIG9uIGV4ZWN1dGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwg
bV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworICAg
IH0KKworICAgIGRpc3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBr
ZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsKKworICAgIGlmIChtX2NhY2hlKQor
ICAgICAgICBtX2NhY2hlLT5yZW1vdmUoa2V5KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK0V4
cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gU1FMaXRlU3RvcmFnZUFyZWE6OmNsZWFyKElQQzo6
Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmll
ciBzdG9yYWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgQVNT
RVJUKCFpc01haW5SdW5Mb29wKCkpOworCisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworCisg
ICAgaWYgKG1fY2FjaGUgJiYgbV9jYWNoZS0+aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpJdGVtTm90Rm91bmQpOworCisgICAgaWYgKG1fY2Fj
aGUpCisgICAgICAgIG1fY2FjaGUtPmNsZWFyKCk7CisKKyAgICBzdGFydFRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0ZW1l
bnRUeXBlOjpEZWxldGVBbGxJdGVtcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3Rv
cmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpjbGVhciBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRl
bWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFz
dEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9y
OjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgaWYgKG1fZGF0YWJhc2UtPmxhc3RDaGFuZ2VzKCkg
PD0gMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6SXRlbU5v
dEZvdW5kKTsKKworICAgIGRpc3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1w
bElELCBTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCB1cmxTdHJpbmcpOworCisgICAgcmV0
dXJuIHsgfTsKK30KKwordm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y29tbWl0VHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKGF1dG8gdHJhbnNhY3Rpb24gPSBzdGQ6OmV4Y2hhbmdl
KG1fdHJhbnNhY3Rpb24sIG51bGxwdHIpKQorICAgICAgICB0cmFuc2FjdGlvbi0+Y29tbWl0KCk7
Cit9CisKK3ZvaWQgU1FMaXRlU3RvcmFnZUFyZWE6OmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKQor
eworICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKKworICAgIGlmIChtX2RhdGFiYXNlICYm
IG1fZGF0YWJhc2UtPmlzT3BlbigpKQorICAgICAgICBtX2RhdGFiYXNlLT5yZWxlYXNlTWVtb3J5
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuaCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmU5MDU2YTEzNWFiYzAzMzFiMDNkNDg5OWRhNzcyMWNlNmZiNjM0OTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFn
ZUFyZWEuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhQmFzZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRl
RGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTUUxpdGVTdG9yYWdlQXJlYSBm
aW5hbCA6IHB1YmxpYyBTdG9yYWdlQXJlYUJhc2UgeworcHVibGljOgorICAgIFNRTGl0ZVN0b3Jh
Z2VBcmVhKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBjb25z
dCBTdHJpbmcmIHBhdGgsIFJlZjxXb3JrUXVldWU+JiYpOworICAgIH5TUUxpdGVTdG9yYWdlQXJl
YSgpOworCisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgaGFuZGxlTG93TWVtb3J5V2Fybmlu
ZygpOworICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCitwcml2YXRl
OgorICAgIC8vIFN0b3JhZ2VBcmVhQmFzZQorICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIFN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6U1FMaXRlOyB9OworICAgIFN0b3JhZ2VUeXBl
IHN0b3JhZ2VUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU3RvcmFnZUFyZWFCYXNlOjpTdG9y
YWdlVHlwZTo6TG9jYWw7IH07CisgICAgYm9vbCBpc0VtcHR5KCkgZmluYWw7CisgICAgdm9pZCBj
bGVhcigpIGZpbmFsOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGFsbEl0ZW1zKCkgZmlu
YWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBzZXRJdGVtKElQQzo6Q29ubmVj
dGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIFN0cmluZyYmIGtleSwg
U3RyaW5nJiYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKyAgICBFeHBl
Y3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IHJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJy
b3I+IGNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKworICAgIGJvb2wgY3JlYXRl
VGFibGVJZk5lY2Vzc2FyeSgpOworICAgIGJvb2wgcHJlcGFyZURhdGFiYXNlKCk7CisgICAgdm9p
ZCBzdGFydFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGVudW0gY2xhc3MgU3RhdGVt
ZW50VHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBDb3VudEl0ZW1zLAorICAgICAgICBEZWxldGVJ
dGVtLAorICAgICAgICBEZWxldGVBbGxJdGVtcywKKyAgICAgICAgR2V0SXRlbSwKKyAgICAgICAg
R2V0QWxsSXRlbXMsCisgICAgICAgIFNldEl0ZW0sCisgICAgICAgIEludmFsaWQKKyAgICB9Owor
ICAgIEFTQ0lJTGl0ZXJhbCBzdGF0ZW1lbnRTdHJpbmcoU3RhdGVtZW50VHlwZSkgY29uc3Q7Cisg
ICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgY2FjaGVkU3RhdGVtZW50
KFN0YXRlbWVudFR5cGUpOworICAgIEV4cGVjdGVkPFN0cmluZywgU3RvcmFnZUVycm9yPiBnZXRJ
dGVtKGNvbnN0IFN0cmluZyYga2V5KTsKKyAgICBFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJv
cj4gZ2V0SXRlbUZyb21EYXRhYmFzZShjb25zdCBTdHJpbmcmIGtleSk7CisKKyAgICBTdHJpbmcg
bV9wYXRoOworICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiBtX2RhdGFiYXNlOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4+IG1fY2FjaGVkU3RhdGVt
ZW50czsKKyAgICBzdGQ6Om9wdGlvbmFsPEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+PiBtX2NhY2hl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2UmIGFyZWEpIHsgcmV0dXJuIGFyZWEudHlwZSgp
ID09IFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlOjpUeXBlOjpTUUxpdGU7IH0KK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDBmZDc5NjBhYzVkYjY3NjU5ZTJkNzM5MTdkZjI2YjRjMDczZmQzMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1h
bmFnZXIuY3BwCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlTWFuYWdlci5oIgorCisjaW5jbHVkZSAiTWVt
b3J5U3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVJlZ2lzdHJ5LmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OlNlc3Npb25TdG9yYWdl
TWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKKyAgICA6IG1fcmVnaXN0cnko
cmVnaXN0cnkpCit7Cit9CisKK2Jvb2wgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6YW55T2YobV9zdG9yYWdlQXJlYXMudmFsdWVzKCks
IFsmXSAoYXV0byYgc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLT5o
YXNMaXN0ZW5lcnMoKTsKKyAgICB9KTsKK30KKworYm9vbCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6
Omhhc0RhdGFJbk1lbW9yeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6YW55T2YobV9zdG9y
YWdlQXJlYXMudmFsdWVzKCksIFsmXSAoYXV0byYgc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgcmV0
dXJuICFzdG9yYWdlQXJlYS0+aXNFbXB0eSgpOworICAgIH0pOworfQorCit2b2lkIFNlc3Npb25T
dG9yYWdlTWFuYWdlcjo6Y2xlYXJEYXRhKCkKK3sKKyAgICBmb3IgKGF1dG8mIHN0b3JhZ2VBcmVh
IDogbV9zdG9yYWdlQXJlYXMudmFsdWVzKCkpCisgICAgICAgIHN0b3JhZ2VBcmVhLT5jbGVhcigp
OworfQorCit2b2lkIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZChJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24pCit7CisgICAgZm9yIChhdXRvJiBzdG9y
YWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpKQorICAgICAgICBzdG9yYWdlQXJlYS0+
cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7Cit9CisKK1N0b3JhZ2VBcmVhSWRlbnRpZmllciBT
ZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmFkZFN0b3JhZ2VBcmVhKHN0ZDo6dW5pcXVlX3B0cjxNZW1v
cnlTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEsIElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29u
bmVjdGlvbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgbmFtZXNwYWNlSWRlbnRpZmllcikK
K3sKKyAgICBhdXRvIGlkZW50aWZpZXIgPSBzdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpOworICAg
IG1fcmVnaXN0cnkucmVnaXN0ZXJTdG9yYWdlQXJlYShpZGVudGlmaWVyLCAqc3RvcmFnZUFyZWEp
OworICAgIHN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25uZWN0aW9uKTsKKyAgICBtX3N0b3Jh
Z2VBcmVhc0J5TmFtZXNwYWNlLmFkZChuYW1lc3BhY2VJZGVudGlmaWVyLCBpZGVudGlmaWVyKTsK
KyAgICBtX3N0b3JhZ2VBcmVhcy5hZGQoaWRlbnRpZmllciwgV1RGTW92ZShzdG9yYWdlQXJlYSkp
OworCisgICAgcmV0dXJuIGlkZW50aWZpZXI7Cit9CisKK1N0b3JhZ2VBcmVhSWRlbnRpZmllciBT
ZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYShJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdp
biYgb3JpZ2luLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBuYW1lc3BhY2VJZGVudGlmaWVy
KQoreworICAgIGF1dG8gaWRlbnRpZmllciA9IG1fc3RvcmFnZUFyZWFzQnlOYW1lc3BhY2UuZ2V0
KG5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIGlmIChpZGVudGlmaWVyLmlzVmFsaWQoKSkgewor
ICAgICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYXMuY29udGFpbnMoaWRlbnRpZmllcikpOworICAg
ICAgICByZXR1cm4gaWRlbnRpZmllcjsKKyAgICB9CisKKyAgICBhdXRvIG5ld1N0b3JhZ2VBcmVh
ID0gbWFrZVVuaXF1ZTxNZW1vcnlTdG9yYWdlQXJlYT4ob3JpZ2luKTsKKyAgICByZXR1cm4gYWRk
U3RvcmFnZUFyZWEoV1RGTW92ZShuZXdTdG9yYWdlQXJlYSksIGNvbm5lY3Rpb24sIG5hbWVzcGFj
ZUlkZW50aWZpZXIpOworfQorCit2b2lkIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6ZGlzY29ubmVj
dEZyb21TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0
b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvKiBzdG9yYWdl
QXJlYSA9IG1fc3RvcmFnZUFyZWFzLmdldChpZGVudGlmaWVyKSkKKyAgICAgICAgc3RvcmFnZUFy
ZWEtPnJlbW92ZUxpc3RlbmVyKGNvbm5lY3Rpb24pOworfQorCit2b2lkIFNlc3Npb25TdG9yYWdl
TWFuYWdlcjo6Y2xvbmVTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5l
Y3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHNvdXJjZU5hbWVzcGFjZUlkZW50aWZp
ZXIsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHRhcmdldE5hbWVzcGFjZUlkZW50aWZpZXIp
Cit7CisgICAgYXV0byBpZGVudGlmaWVyID0gbV9zdG9yYWdlQXJlYXNCeU5hbWVzcGFjZS5nZXQo
c291cmNlTmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAgaWYgKCFpZGVudGlmaWVyLmlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VB
cmVhcy5maW5kKGlkZW50aWZpZXIpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VBcmVhcy5lbmQoKSkg
eworICAgICAgICBhdXRvIG5ld1N0b3JhZ2VBcmVhID0gaXRlcmF0b3ItPnZhbHVlLT5jbG9uZSgp
OworICAgICAgICBhZGRTdG9yYWdlQXJlYShXVEZNb3ZlKG5ld1N0b3JhZ2VBcmVhKSwgY29ubmVj
dGlvbiwgdGFyZ2V0TmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAgfQorfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzdjYmQ4OTdh
MTUwZWVlMjJlYjcyODBlZTUyZDAyNGRkYzU1NWZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlTWFuYWdlci5oCkBA
IC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlm
aWVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBNZW1vcnlTdG9yYWdlQXJlYTsK
K2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnk7CisKK2NsYXNzIFNlc3Npb25TdG9yYWdlTWFuYWdl
ciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmKTsKKyAgICBib29sIGlz
QWN0aXZlKCkgY29uc3Q7CisgICAgYm9vbCBoYXNEYXRhSW5NZW1vcnkoKSBjb25zdDsKKyAgICB2
b2lkIGNsZWFyRGF0YSgpOworICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlEKTsKKworICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBjb25uZWN0VG9TZXNz
aW9uU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZGlz
Y29ubmVjdEZyb21TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdl
QXJlYUlkZW50aWZpZXIpOworICAgIHZvaWQgY2xvbmVTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlELCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgU3RvcmFnZU5hbWVzcGFj
ZUlkZW50aWZpZXIpOworCitwcml2YXRlOgorICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBhZGRT
dG9yYWdlQXJlYShzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+LCBJUEM6OkNvbm5l
Y3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcik7CisKKyAgICBTdG9y
YWdlQXJlYVJlZ2lzdHJ5JiBtX3JlZ2lzdHJ5OworICAgIEhhc2hNYXA8U3RvcmFnZUFyZWFJZGVu
dGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+PiBtX3N0b3JhZ2VBcmVh
czsKKyAgICBIYXNoTWFwPFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBTdG9yYWdlQXJlYUlk
ZW50aWZpZXI+IG1fc3RvcmFnZUFyZWFzQnlOYW1lc3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9TdG9yYWdlQXJlYUJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTQ0YmEwMTM1YTY0M2MwMWE1Yjkw
MGM3NjMxYmExNDk5OGY4ZjNjMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuY3BwCkBAIC0wLDAgKzEsNzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdG9yYWdl
QXJlYUJhc2UuaCIKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1N0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZUFyZWFCYXNlKHVuc2ln
bmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKKyAgICA6IG1f
aWRlbnRpZmllcihTdG9yYWdlQXJlYUlkZW50aWZpZXI6OmdlbmVyYXRlKCkpCisgICAgLCBtX3F1
b3RhKHF1b3RhKQorICAgICwgbV9vcmlnaW4ob3JpZ2luKQoreworfQorCitTdG9yYWdlQXJlYUJh
c2U6On5TdG9yYWdlQXJlYUJhc2UoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgU3RvcmFnZUFyZWFCYXNl
OjphZGRMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24pCit7Cisg
ICAgQVNTRVJUKCFtX2xpc3RlbmVycy5jb250YWlucyhjb25uZWN0aW9uKSk7CisKKyAgICBtX2xp
c3RlbmVycy5hZGQoY29ubmVjdGlvbik7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFCYXNlOjpyZW1v
dmVMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24pCit7CisgICAg
bV9saXN0ZW5lcnMucmVtb3ZlKGNvbm5lY3Rpb24pOworfQorCitib29sIFN0b3JhZ2VBcmVhQmFz
ZTo6aGFzTGlzdGVuZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fbGlzdGVuZXJzLmlzRW1w
dHkoKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYUJhc2U6Om5vdGlmeUxpc3RlbmVyc0Fib3V0Q2xl
YXIoKQoreworICAgIGZvciAoYXV0byYgY29ubmVjdGlvbiA6IG1fbGlzdGVuZXJzKQorICAgICAg
ICBJUEM6OkNvbm5lY3Rpb246OnNlbmQoY29ubmVjdGlvbiwgTWVzc2FnZXM6OlN0b3JhZ2VBcmVh
TWFwOjpDbGVhckNhY2hlKCksIG1faWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKwordm9pZCBT
dG9yYWdlQXJlYUJhc2U6OmRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQg
c291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzb3VyY2VJbXBsSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0
IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdAoreworICAg
IEFTU0VSVChzb3VyY2VJbXBsSWRlbnRpZmllcik7CisKKyAgICBmb3IgKGF1dG8mIGNvbm5lY3Rp
b24gOiBtX2xpc3RlbmVycykgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFN0b3JhZ2VBcmVhSW1w
bElkZW50aWZpZXI+IGltcGxJZGVudGlmaWVyOworICAgICAgICBpZiAoY29ubmVjdGlvbiA9PSBz
b3VyY2VDb25uZWN0aW9uKQorICAgICAgICAgICAgaW1wbElkZW50aWZpZXIgPSBzb3VyY2VJbXBs
SWRlbnRpZmllcjsKKyAgICAgICAgSVBDOjpDb25uZWN0aW9uOjpzZW5kKGNvbm5lY3Rpb24sIE1l
c3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlzcGF0Y2hTdG9yYWdlRXZlbnQoaW1wbElkZW50aWZp
ZXIsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCB1cmxTdHJpbmcpLCBtX2lkZW50aWZpZXIudG9V
SW50NjQoKSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuaCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lZDNlZDE0MjA2ZTE3NWRjYWNjOGMxZjk5NDkwNzUwNTQ1ZTM0ZTk4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3Jh
Z2VBcmVhQmFzZS5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSWRl
bnRpZmllci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBDbGllbnRPcmlnaW47Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitlbnVtIGNsYXNzIFN0b3JhZ2VFcnJvciA6IHVpbnQ4X3QgeworICAgIERh
dGFiYXNlLAorICAgIEl0ZW1Ob3RGb3VuZCwKKyAgICBRdW90YUV4Y2VlZGVkLAorfTsKKworY2xh
c3MgU3RvcmFnZUFyZWFCYXNlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFN0b3JhZ2VBcmVhQmFz
ZT4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0b3JhZ2VBcmVhQmFzZSk7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U3RvcmFnZUFyZWFC
YXNlKCk7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiBib29sIHsgU1FMaXRlLCBNZW1vcnkgfTsK
KyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKKyAgICBlbnVtIGNsYXNzIFN0b3Jh
Z2VUeXBlIDogYm9vbCB7IFNlc3Npb24sIExvY2FsIH07CisgICAgdmlydHVhbCBTdG9yYWdlVHlw
ZSBzdG9yYWdlVHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CisKKyAgICBTdG9yYWdlQXJlYUlkZW50
aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIFdl
YkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQor
ICAgIHVuc2lnbmVkIHF1b3RhKCkgY29uc3QgeyByZXR1cm4gbV9xdW90YTsgfQorICAgIHZvaWQg
YWRkTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7CisgICAgdm9pZCByZW1vdmVM
aXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKKyAgICBib29sIGhhc0xpc3RlbmVy
cygpIGNvbnN0OworICAgIHZvaWQgbm90aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcigpOworCisgICAg
dmlydHVhbCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBhbGxJdGVtcygpID0gMDsKKyAgICB2aXJ0
dWFsIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gc2V0SXRlbShJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBTdHJpbmcmJiBrZXksIFN0cmlu
ZyYmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgPSAwOworICAgIHZpcnR1YWwgRXhw
ZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHVybFN0cmluZykgPSAwOworICAgIHZpcnR1YWwgRXhwZWN0ZWQ8dm9pZCwgU3Rv
cmFnZUVycm9yPiBjbGVhcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUlt
cGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgPSAwOworCitwcm90ZWN0ZWQ6
CisgICAgU3RvcmFnZUFyZWFCYXNlKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGll
bnRPcmlnaW4mKTsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZykgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVy
IG1faWRlbnRpZmllcjsKKyAgICB1bnNpZ25lZCBtX3F1b3RhOworICAgIFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiBtX29yaWdpbjsKKyAgICBIYXNoU2V0PElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQ+
IG1fbGlzdGVuZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdp
c3RyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMWRkMTRjNmY1MGM5NDZhNGNlNGQ4NTAwMzk2MWQzZmZjNmI5
Y2I0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9TdG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhUmVnaXN0cnkuaCIK
KworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhQmFzZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
U3RvcmFnZUFyZWFSZWdpc3RyeTo6U3RvcmFnZUFyZWFSZWdpc3RyeSgpID0gZGVmYXVsdDsKKwor
dm9pZCBTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpyZWdpc3RlclN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVh
SWRlbnRpZmllciBpZGVudGlmaWVyLCBTdG9yYWdlQXJlYUJhc2UmIHN0b3JhZ2VBcmVhKQorewor
ICAgIEFTU0VSVCghbV9zdG9yYWdlQXJlYXMuY29udGFpbnMoaWRlbnRpZmllcikpOworCisgICAg
bV9zdG9yYWdlQXJlYXMuYWRkKGlkZW50aWZpZXIsIHN0b3JhZ2VBcmVhKTsKK30KKwordm9pZCBT
dG9yYWdlQXJlYVJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyU3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVu
dGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFzLmNvbnRhaW5z
KGlkZW50aWZpZXIpKTsKKworICAgIG1fc3RvcmFnZUFyZWFzLnJlbW92ZShpZGVudGlmaWVyKTsK
K30KKworU3RvcmFnZUFyZWFCYXNlKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpnZXRTdG9yYWdlQXJl
YShTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4gbV9zdG9y
YWdlQXJlYXMuZ2V0KGlkZW50aWZpZXIpLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9y
YWdlQXJlYVJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
U3RvcmFnZUFyZWFSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwY2M3NDIzNzY1MmY1YzE2N2M2OGJl
MWY2YTJiNmNjNGVlZTQzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSWRlbnRp
Zmllci5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBTdG9yYWdlQXJlYUJhc2U7CisKK2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnkgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFN0b3JhZ2VBcmVhUmVn
aXN0cnkoKTsKKyAgICB2b2lkIHJlZ2lzdGVyU3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlm
aWVyLCBTdG9yYWdlQXJlYUJhc2UmKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTdG9yYWdlQXJlYShT
dG9yYWdlQXJlYUlkZW50aWZpZXIpOworICAgIFN0b3JhZ2VBcmVhQmFzZSogZ2V0U3RvcmFnZUFy
ZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICBIYXNoTWFwPFN0b3Jh
Z2VBcmVhSWRlbnRpZmllciwgV2Vha1B0cjxTdG9yYWdlQXJlYUJhc2U+PiBtX3N0b3JhZ2VBcmVh
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaCBiL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy9nZW5lcmF0ZS11bmlmaWVkLXNvdXJjZXMuc2gKaW5kZXggYjZkNDBhZDllOTU0N2JkNDBk
ZTg1YzljODVhMzVjMWUyNWNkZjE5MS4uNGYxYWM4M2NiM2EyMjZlY2NkMDc4Mzk4Mzc5MjNjYmM0
NGJhYjkyMyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL2dlbmVyYXRlLXVuaWZp
ZWQtc291cmNlcy5zaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtdW5pZmll
ZC1zb3VyY2VzLnNoCkBAIC0xNCw3ICsxNCw3IEBAIGlmIFsgLXogIiR7QlVJTERfU0NSSVBUU19E
SVJ9IiBdOyB0aGVuCiAgICAgZmkKIGZpCiAKLVVuaWZpZWRTb3VyY2VDcHBGaWxlQ291bnQ9MTEx
CitVbmlmaWVkU291cmNlQ3BwRmlsZUNvdW50PTExMgogVW5pZmllZFNvdXJjZU1tRmlsZUNvdW50
PTgwCiAKIGlmIFsgJCMgLWVxIDAgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggMDVhODViMDE5NjA0
MjAxNmFiNjg1ZjIwZDRiZWY3M2M0NjI2NTYwNy4uNDJmYjYxYjE3NzUxZTExOTczMmZhYWIyNmUx
NThhNTI2MzU1MzUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0xNDMsOCArMTQzLDE0IEBAIE5ldHdvcmtQ
cm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmNwcCBA
bm8tdW5pZnkKIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2Vy
LmNwcAogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9GaWxlU3lzdGVtU3RvcmFnZUhhbmRsZS5jcHAK
IE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5j
cHAKK05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5jcHAKK05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuY3BwCiBOZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
T3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0
b3JhZ2VBcmVhLmNwcAorTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFn
ZXIuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHAKK05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAKIAogTmV0d29ya1Byb2Nl
c3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKIE5ldHdvcmtQcm9jZXNzL1dl
YlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5k
ZXggZjQwMDBhNmI3MTkxMzVjMzQzYjRjZDA5YzAyM2E2OGYyYzVlNzg1ZS4uYjExZjJkNTNjZmZh
ODVmOTZmMjc0MTFkOWQyZGIwN2Q5NmEwN2MzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0xNTcyLDE2
ICsxNTcyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVTeW1MaW5rRm9yRmls
ZVVwZ3JhZGUoY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0YWIKICAgICAgICAgRmlsZVN5c3RlbTo6
Y3JlYXRlU3ltYm9saWNMaW5rKGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgb2xkVmVyc2lvbkRp
cmVjdG9yeSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TG9jYWxTdG9yYWdl
RGV0YWlscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFjYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpHZXRMb2NhbFN0
b3JhZ2VPcmlnaW5EZXRhaWxzKHNlc3Npb25JRCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpwcmVjb25uZWN0VG8oUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlELCBX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllciB3ZWJQYWdlSUQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIHVzZXJBZ2VudCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIHN0ZDo6b3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21h
aW4+IGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4sIExhc3ROYXZpZ2F0aW9uV2FzQXBwSW5p
dGlhdGVkIGxhc3ROYXZpZ2F0aW9uV2FzQXBwSW5pdGlhdGVkKQogewogICAgIGlmICghdXJsLmlz
VmFsaWQoKSB8fCAhdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVD
b2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNp
dGVEYXRhU3RvcmVDb2NvYS5tbQppbmRleCAwY2NiNjYyYmExYjM5NzNlNDNkNmY3NWMyMTRkNWU3
NWM0ZjlhZWU1Li5jMTZlZGFkYTBiMGE1ZTYxMDFjZDg0NTk0NzQ1NTRjMzY1OWMzNzQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCkBAIC02NDQsNCArNjQ0LDE1IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb0FsbFBy
b2Nlc3NlcygpCiAjZW5kaWYKIH0KIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKK3ZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6ZXhjbHVkZURpcmVjdG9yeUZyb21CYWNrdXAoY29uc3QgU3RyaW5n
JiBkaXJlY3RvcnkpCit7CisgICAgTlNTdHJpbmcgKnVybCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5n
OihOU1N0cmluZyAqKWRpcmVjdG9yeV07CisgICAgaWYgKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0
TWFuYWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRVUkw6dXJsIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3Rv
cmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bnVsbHB0cl0pCisgICAgICAgIFtbTlNVUkwg
ZmlsZVVSTFdpdGhQYXRoOihOU1N0cmluZyAqKWRpcmVjdG9yeSBpc0RpcmVjdG9yeTpZRVNdIHNl
dFJlc291cmNlVmFsdWU6QFlFUyBmb3JLZXk6TlNVUkxJc0V4Y2x1ZGVkRnJvbUJhY2t1cEtleSBl
cnJvcjpuaWxdOworfQorCisjZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCA5MDk3OTNl
Mzc1NjhjMDQyYjEwMDJhMjZhYTAyNzQ3ODRhOTFlNGNhLi4yNTZiODg3NDAzZGFmNjVkNGJhMWJl
NWExOGY0NWVlZGVjYjc4N2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMTkwMyw2ICsxOTAzLDkg
QEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVy
cygpCiAgICAgYXV0byBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSByZXNvbHZlZExvY2FsU3RvcmFn
ZURpcmVjdG9yeSgpOwogICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkg
ewogICAgICAgICBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFn
ZURpcmVjdG9yeTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBleGNsdWRlRGly
ZWN0b3J5RnJvbUJhY2t1cChsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOworI2VuZGlmCiAgICAgICAg
IC8vIEZJWE1FOiBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJl
Y3RvcnkgcmVzb2x2ZXMgdGhlIGRpcmVjdG9yeSwgYnV0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBk
b25lLiBSZW1vdmUgdGhpcyBkdXBsaWNhdGUgd29yay4KICAgICAgICAgaWYgKGF1dG8gaGFuZGxl
ID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxv
Y2FsU3RvcmFnZURpcmVjdG9yeSkpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmhhbmRsZSk7CkBAIC0xOTY5LDE4
ICsxOTcyLDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tp
ZVN0b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQotewotICAgIGlmICghaXNQZXJzaXN0ZW50KCkpIHsKLSAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG5ldHdvcmtQcm9j
ZXNzKCkuZ2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOwotICAgIH0pOwotfQotCiB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5oCmluZGV4IDFkZTI1YTY2MDU3ZjJkNjZjNjI5OWU1ZWJiYjgxNDZiZWU5YjgxZTMu
LjE0N2EwYjliYTc4ZDg3MWI3YTc2YTc0OWE3MjQxNzU1ZjNkNzc0NGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgK
QEAgLTE2Nyw3ICsxNjcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVEYXRhKE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBGdW5jdGlvbjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiYsIEZ1bmN0
aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICB2b2lkIGdldExvY2FsU3Rv
cmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFj
a2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJik7CiAgICAgdm9pZCBzZXRDYWNoZU1vZGVsU3luY2hy
b25vdXNseUZvclRlc3RpbmcoQ2FjaGVNb2RlbCk7CiAgICAgdm9pZCBzZXRTZXJ2aWNlV29ya2Vy
VGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyk7CiAgICAgdm9pZCByZXNldFNlcnZpY2VXb3JrZXJU
aW1lb3V0Rm9yVGVzdGluZygpOwpAQCAtMzcyLDYgKzM3MSwxMCBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGNvdW50Tm9uRGVmYXVsdFNlc3Npb25TZXRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc2l6
ZV90KT4mJik7CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHZvaWQgZXhjbHVkZURp
cmVjdG9yeUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpOworI2VuZGlmCisKIHBy
aXZhdGU6CiAgICAgZW51bSBjbGFzcyBGb3JjZVJlaW5pdGlhbGl6YXRpb24gOiBib29sIHsgTm8s
IFllcyB9OwogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVW5pZmllZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0
L1VuaWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDUwODk4ZTQ2MzAxNzMxOTRh
ZTRlZjdjY2U0M2FlOGViNDY3M2E4NmIuLjJhZDc5NjQ1ZDZlZjY4M2RhZDRlYjA3NmY1ZGQ3MjQ3
MmJmODYwYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVW5pZmllZFNvdXJjZXMtb3V0cHV0
LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1vdXRwdXQueGNm
aWxlbGlzdApAQCAtMTcsNiArMTcsNyBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTEtbW0ubQogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5p
ZmllZFNvdXJjZTExLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTExMC5jcHAKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3Vy
Y2UxMTEuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3Vu
aWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTEyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTEyLW1t
Lm1tCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQt
c291cmNlcy9VbmlmaWVkU291cmNlMTIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTMtbW0ubW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE0
NWQ0ZDM2OTMxNzg0NDcwNGQ0NzE4MGZjNGRhZDZmMWI5NjYyMzYuLmRkOTg2OTk5ODViNDZmYmZk
MDI1MjM3OGI1ODJlNDI0NDQ1NTRlOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTUxNCw2ICsxNTE0LDEzIEBACiAJCTkzRTc5OTg1
Mjc1NkZBNTUwMDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNFNzk5ODIyNzU2RkE1NDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVj
dGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTkzRTc5OTg3Mjc1NkZBQjQwMDc0MDA4
QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlc1JlcGxpZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OTgzMjc1NkZB
NTQwMDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlc1JlcGxp
ZXMuaCAqLzsgfTsKIAkJOTNFNzk5ODgyNzU2RkFDMjAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1T
dG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTk4MTI3NTZGQTUzMDA3NDAwOEEgLyogV2ViRmlsZVN5c3Rl
bVN0b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXMuaCAqLzsgfTsKKwkJOTNFNzk5QzcyNzYwMjc0NjAw
NzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUM2Mjc2MDI3MzcwMDc0MDA4QSAvKiBTdG9yYWdl
QXJlYVJlZ2lzdHJ5LmggKi87IH07CisJCTkzRTc5OUNFMjc2MDQ5N0IwMDc0MDA4QSAvKiBTZXNz
aW9uU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzRTc5OUNBMjc2MDQ5N0EwMDc0MDA4QSAvKiBTZXNzaW9uU3RvcmFnZU1hbmFn
ZXIuaCAqLzsgfTsKKwkJOTNFNzk5Q0YyNzYwNDk3QjAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1h
bmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
RTc5OUNCMjc2MDQ5N0EwMDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmggKi87IH07CisJ
CTkzRTc5OUQyMjc2MEFBNUIwMDc0MDA4QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUQxMjc2MEFBNUEw
MDc0MDA4QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCAqLzsgfTsKKwkJOTNFNzk5REEyNzYxMjEw
ODAwNzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTlENDI3NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRl
U3RvcmFnZUFyZWEuaCAqLzsgfTsKKwkJOTNFNzk5REIyNzYxMjEwODAwNzQwMDhBIC8qIE1lbW9y
eVN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0U3OTlENTI3NjEyMTA3MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuaCAqLzsg
fTsKKwkJOTNFNzk5REMyNzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5RDYyNzYxMjEw
ODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5oICovOyB9OwogCQk5M0Y1NDlCNDFFMzE3NEI3
MDAwRTcyMzkgLyogV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjU0OUIzMUUzMTc0QjcwMDBFNzIzOSAvKiBX
S1NuYXBzaG90Q29uZmlndXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1
YmxpYywgKTsgfTsgfTsKIAkJOTUwRjI4ODAyNTI0MTRFQTAwQjc0RjFDIC8qIFdLTW91c2VEZXZp
Y2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTUwRjI4N0UyNTI0MTRFOTAwQjc0RjFDIC8qIFdLTW91c2VEZXZpY2VPYnNlcnZlci5oICov
OyB9OwogCQk5NTY1MDgzOTI2RDg3QTJCMDBFMTVDQjcgLyogQXBwbGVNZWRpYVNlcnZpY2VzU1BJ
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NTY1MDgz
NzI2RDg3QTJCMDBFMTVDQjcgLyogQXBwbGVNZWRpYVNlcnZpY2VzU1BJLmggKi87IH07CkBAIC01
MzUzLDYgKzUzNjAsMTkgQEAKIAkJOTNFNzk5ODEyNzU2RkE1MzAwNzQwMDhBIC8qIFdlYkZpbGVT
eXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRTc5OTgyMjc1NkZBNTQwMDc0MDA4QSAvKiBXZWJG
aWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9u
TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFNzk5
ODMyNzU2RkE1NDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3Nh
Z2VzUmVwbGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGaWxlU3lz
dGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlc1JlcGxpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTNFNzk5QzUyNzYwMjczNjAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0
cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZUFyZWFS
ZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUM2Mjc2MDI3
MzcwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0b3JhZ2VBcmVhUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTNFNzk5QzkyNzYwNDk3QTAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFnZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9jYWxTdG9yYWdlTWFu
YWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUNBMjc2MDQ5N0Ew
MDc0MDA4QSAvKiBTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTkzRTc5OUNCMjc2MDQ5N0EwMDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2FsU3RvcmFnZU1hbmFnZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5Q0MyNzYwNDk3QjAwNzQwMDhB
IC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5M0U3OTlEMTI3NjBBQTVBMDA3NDAwOEEgLyogVW5pZmllZFNvdXJjZTExMi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlmaWVkU291cmNlMTEy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDMyNzYxMjEwNzAwNzQw
MDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNRTGl0ZVN0b3JhZ2VBcmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTNFNzk5RDQyNzYxMjEwNzAwNzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTGl0ZVN0b3JhZ2VBcmVhLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQ1Mjc2MTIxMDcwMDc0MDA4QSAvKiBNZW1v
cnlTdG9yYWdlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlT
dG9yYWdlQXJlYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlENjI3NjEy
MTA4MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0b3JhZ2VBcmVhQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5M0U3OTlENzI3NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VBcmVhQmFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQ4Mjc2MTIxMDgwMDc0MDA4QSAvKiBNZW1v
cnlTdG9yYWdlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
ZW1vcnlTdG9yYWdlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjU0
OUIzMUUzMTc0QjcwMDBFNzIzOSAvKiBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y1NDlCNTFFMzE3NERBMDAwRTcyMzkgLyogV0tT
bmFwc2hvdENvbmZpZ3VyYXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTUwRjI4N0UyNTI0MTRFOTAwQjc0RjFDIC8qIFdLTW91c2VEZXZpY2VPYnNlcnZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS01vdXNlRGV2aWNlT2JzZXJ2
ZXIuaDsgcGF0aCA9IGlvcy9XS01vdXNlRGV2aWNlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTgyMzQsNiArODI1NCw3IEBACiAJCQkJMUNBRUNCNUQyNzQ2NUFFMzAw
QUI3OEQwIC8qIFVuaWZpZWRTb3VyY2UxMDkuY3BwICovLAogCQkJCTFDQUVDQjYwMjc0NjVBRTMw
MEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTEwLmNwcCAqLywKIAkJCQkxQ0FFQ0I1RTI3NDY1QUUz
MDBBQjc4RDAgLyogVW5pZmllZFNvdXJjZTExMS5jcHAgKi8sCisJCQkJOTNFNzk5RDEyNzYwQUE1
QTAwNzQwMDhBIC8qIFVuaWZpZWRTb3VyY2UxMTIuY3BwICovLAogCQkJKTsKIAkJCW5hbWUgPSAi
dW5pZmllZC1zb3VyY2VzIjsKIAkJCXBhdGggPSAiRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZp
ZWQtc291cmNlcyI7CkBAIC0xMDMxNCwxMSArMTAzMzUsMjMgQEAKIAkJCQk5MzVCNTc5ODI2RjUx
MjcwMDA4QjQ4QUMgLyogRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5oICovLAogCQkJ
CTkzMUEwNzUxMjZGMDYzMTAwMDQ0NzRDRCAvKiBGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIuY3Bw
ICovLAogCQkJCTkzMUEwNzUwMjZGMDYzMTAwMDQ0NzRDRCAvKiBGaWxlU3lzdGVtU3RvcmFnZU1h
bmFnZXIuaCAqLywKKwkJCQk5M0U3OTlDOTI3NjA0OTdBMDA3NDAwOEEgLyogTG9jYWxTdG9yYWdl
TWFuYWdlci5jcHAgKi8sCisJCQkJOTNFNzk5Q0IyNzYwNDk3QTAwNzQwMDhBIC8qIExvY2FsU3Rv
cmFnZU1hbmFnZXIuaCAqLywKKwkJCQk5M0U3OTlEODI3NjEyMTA4MDA3NDAwOEEgLyogTWVtb3J5
U3RvcmFnZUFyZWEuY3BwICovLAorCQkJCTkzRTc5OUQ1Mjc2MTIxMDcwMDc0MDA4QSAvKiBNZW1v
cnlTdG9yYWdlQXJlYS5oICovLAogCQkJCTkzMDg1REMzMjZFMUJCQkQwMDBFQzZBNyAvKiBOZXR3
b3JrU3RvcmFnZU1hbmFnZXIuY3BwICovLAogCQkJCTkzMDg1REM0MjZFMUJCQkQwMDBFQzZBNyAv
KiBOZXR3b3JrU3RvcmFnZU1hbmFnZXIuaCAqLywKIAkJCQk5MzA4NURDNzI2RTFDNkVFMDAwRUM2
QTcgLyogTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluICovLAogCQkJCTkzMDg1REM1
MjZFMUM2Q0YwMDBFQzZBNyAvKiBPcmlnaW5TdG9yYWdlTWFuYWdlci5jcHAgKi8sCiAJCQkJOTMw
ODVEQzYyNkUxQzZDRjAwMEVDNkE3IC8qIE9yaWdpblN0b3JhZ2VNYW5hZ2VyLmggKi8sCisJCQkJ
OTNFNzk5Q0MyNzYwNDk3QjAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5jcHAgKi8s
CisJCQkJOTNFNzk5Q0EyNzYwNDk3QTAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5o
ICovLAorCQkJCTkzRTc5OUQzMjc2MTIxMDcwMDc0MDA4QSAvKiBTUUxpdGVTdG9yYWdlQXJlYS5j
cHAgKi8sCisJCQkJOTNFNzk5RDQyNzYxMjEwNzAwNzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVh
LmggKi8sCisJCQkJOTNFNzk5RDcyNzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5j
cHAgKi8sCisJCQkJOTNFNzk5RDYyNzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5o
ICovLAorCQkJCTkzRTc5OUM1Mjc2MDI3MzYwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5
LmNwcCAqLywKKwkJCQk5M0U3OTlDNjI3NjAyNzM3MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdp
c3RyeS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBzdG9yYWdlOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKQEAgLTEyOTczLDYgKzEzMDA2LDcgQEAKIAkJCQk1N0RDRURBRTIxNEM2MDMzMDAx
NkI4NDcgLyogTG9jYWxTZXJ2aWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0IyNjE0RTIyN0Qx
NEIxMDBCOTdBNzYgLyogTG9jYWxTdG9yYWdlRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzQjI2MTRGMjI3RDE0QjEwMEI5N0E3NiAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTc5OUNGMjc2MDQ5N0IwMDc0MDA4QSAvKiBMb2NhbFN0
b3JhZ2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkJFQjZEQjIyRkI5RDQ4MDAyNjk4
NjcgLyogTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUE3RjJG
MzEyNUJGODIwMDA4QUVCMUQgLyogTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQ0Q3
RjcxRDQ3RTkyQTAwOUYwOEJDIC8qIExvZ0luaXRpYWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywK
QEAgLTEyOTkxLDYgKzEzMDI1LDcgQEAKIAkJCQlBMTU3OTlCRDI1ODQ0MzMyMDA1MjgyMzYgLyog
TWVkaWFTYW1wbGVDdXJzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3NUE5Q0YzMjYxNjlCQUIw
MDZERkEzQSAvKiBNZWRpYVNlc3Npb25Db29yZGluYXRvclByb3h5UHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTE1Nzk5QjcyNTg0NDMzMjAwNTI4MjM2IC8qIE1lZGlhVHJhY2tSZWFkZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTkzRTc5OURCMjc2MTIxMDgwMDc0MDA4QSAvKiBNZW1vcnlT
dG9yYWdlQXJlYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE5MzNERUYxOTY1RUIzMTAwOEFDM0VB
IC8qIE1lbnVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTlCNDc5MDhEMjUzMTREODMw
MEVDMTFBQiAvKiBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBQzRDODI5MTZCODc2QTkwMDY5RENDRCAvKiBNZXNzYWdlRmxhZ3MuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTMwMzksNyArMTMwNzQsNiBAQAogCQkJCTUzMjE1OTU2MURCQUU3MkQwMDU0QUEz
QyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM5OTAyMDMx
QkU5QTAyQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0Q0
NTRENzFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCTUxN0I1Rjk3Mjc1RUM1RTUwMDJEQzIyRCAvKiBXZWJQdXNoTWVzc2FnZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODM5MTQ5NjUxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFy
YW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3RkM4QTAyNUI4MzMxQzAwNTQ5NUZDIC8q
IE5ldHdvcmtMb2FkU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTQ1MjZFRDI3MUUx
NjQ3MDAwNDY3QjYgLyogTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICov
LApAQCAtMTMxMjcsNiArMTMxNjEsNyBAQAogCQkJCTJEMjc5RTE5MjY5NTU3NjgwMDRCM0VFQiAv
KiBQcm90b3R5cGVUb29sc1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGODEyNzVFOTdC
NjAwMkRDMjJEIC8qIFB1c2hBcHBCdW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0I1RjdE
Mjc1RTk3QjYwMDJEQzIyRCAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTE3QjVGOTUyNzVFQkE2MzAwMkRDMjJEIC8qIFB1c2hNZXNzYWdlRm9yVGVzdGluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTFFNjg4NzAxRjZFMkJBQjAwNzAwNkE2IC8qIFF1YXJhbnRp
bmVTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMEMyMjdFMjQ1MTEzMEEwMEVENjE0RCAvKiBR
dWlja0xvb2tUaHVtYm5haWxpbmdTb2Z0TGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFRTU3
MjUyNDA5RjE0MjAwMjAwNUQ2IC8qIFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xMzIxMSw2ICsxMzI0Niw3IEBACiAJCQkJNTE0RDlGNTcxOTExOUQzNTAwMDA2
M0E3IC8qIFNlcnZpY2VzQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGREU2NUEx
OTU0QTQyQjAwQzQ4RkZBIC8qIFNlc3Npb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEw
MDJENDkxOTZCMzQ1RDAwQjlBRDQ0IC8qIFNlc3Npb25TdGF0ZUNvZGluZy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJOTNFNzk5Q0UyNzYwNDk3QjAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZCRUI2REYyMkZCQjE2QjAwMjY5ODY3IC8qIFNlc3Np
b25TdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY0MjBFNTEyRENFMkZG
MDBDQUFFMkMgLyogU2hhcmVhYmxlQml0bWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDNBOUNF
MDI1RDcyRjFDMDA5OTBFMjYgLyogU2hhcmVhYmxlQml0bWFwVXRpbGl0aWVzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTEzMjM5LDExICsxMzI3NSwxNCBAQAogCQkJCTkzRDZCNzcyMjU0QkI1MTkwMDU4
REQzQSAvKiBTcGVlY2hSZWNvZ25pdGlvblNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNE
NkI3ODQyNTRDQ0QwRTAwNThERDNBIC8qIFNwZWVjaFJlY29nbml0aW9uU2VydmVyTWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzRDZCNzg1MjU0Q0NENDMwMDU4REQzQSAvKiBTcGVlY2hS
ZWNvZ25pdGlvblNlcnZlck1lc3NhZ2VzUmVwbGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNF
Nzk5REEyNzYxMjEwODAwNzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3QTNGRUNBMjIxRjdDMDk3MDBGMjY3Q0QgLyogU3RvcmFnZUFjY2Vzc1N0YXR1cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDZCRUI2RDcyMkZCOUJENzAwMjY5ODY3IC8qIFN0b3JhZ2VB
cmVhLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3OTlEQzI3NjEyMTA4MDA3NDAwOEEgLyogU3Rv
cmFnZUFyZWFCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUQzMzA2RjE2QjFEOTkxMDA0RjYw
RTcgLyogU3RvcmFnZUFyZWFJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUNFQ0QyNTE3MTYy
REIxMDAxRkM5RUYgLyogU3RvcmFnZUFyZWFNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMzM0
REVFMTZERThGODgwMDZBOEUzOCAvKiBTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5M0U3OTlDNzI3NjAyNzQ2MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3Ry
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNCMjYxNEQyMjdEMTQ5RTAwQjk3QTc2IC8qIFN0b3Jh
Z2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzZCMDU5ODIzMDM5MDk3MDAyRkMwNkIg
LyogU3RvcmFnZU1hbmFnZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNjhFRURGMjMwM0E5
RUQwMEJEQjExQSAvKiBTdG9yYWdlTWFuYWdlclNldE1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
QEAgLTEzNTEzLDYgKzEzNTUyLDcgQEAKIAkJCQk1MTdCNUYyRTI3NTczODJBMDAyREMyMkQgLyog
V2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTJDRDY5QTI3MjFGMEE5MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGNzMyNzVFOTYwOTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVt
b25NYWluLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTdCNUY5NzI3NUVDNUU1MDAyREMyMkQgLyog
V2ViUHVzaE1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2MUNDQ0E2MjMxNDg1QUEwMEI2
NTlCOSAvKiBXZWJSZW1vdGVPYmplY3RSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4
NjBFNzEyMzBGNjdGQzAwNDYxQUFFIC8qIFdlYlJlc291cmNlSW50ZXJjZXB0Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwQUZGQkExNjU0MjA0ODAwMUJBMDVFIC8qIFdlYlJlc291
cmNlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTEzNTQ3LDcgKzEzNTg3LDYgQEAKIAkJCQk5
MzU2RjJEQzIxNTJCNkI1MDBFNkQ1REYgLyogV2ViU1dDbGllbnRDb25uZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTdBNTMxMDFGNDdBODYyMDBEQ0RDMEEgLyogV2ViU1dDbGllbnRDb25u
ZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2NkJDMDNDMUZBMjY2REEwMDJG
QTlDMSAvKiBXZWJTV0NvbnRleHRNYW5hZ2VyQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNTE3QjVGOTUyNzVFQkE2MzAwMkRDMjJEIC8qIFB1c2hNZXNzYWdlRm9yVGVzdGluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDYwRjQ4OTAxRjk5NkY3MTAwQ0Y0Qjg3IC8qIFdlYlNXQ29udGV4
dE1hbmFnZXJDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMxMUE5RUND
MjE0MDM1RjgwMENGQjIwQSAvKiBXZWJTd2l0Y2hpbmdHUFVDbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzNTZGMkRFMjE1MkI3MTAwMEU2RDVERiAvKiBXZWJTV09yaWdpblN0b3JlLmggaW4g
SGVhZGVycyAqLywKQEAgLTE1MTE2LDkgKzE1MTU1LDkgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQk1MTdCNUY5QTI3NUYzQTg2MDAyREMyMkQg
LyogQXJndW1lbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3QjVGNjgyNzVBOUE3
ODAwMkRDMjJEIC8qIFdlYlB1c2hUb29sQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAotCQkJ
CTUxN0I1RjlCMjc1RjNBOTgwMDJEQzIyRCAvKiBEYWVtb25VdGlsaXRpZXMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk1MTdCNUY5QzI3NUYzQzM3MDAyREMyMkQgLyogRGFlbW9uRW5jb2Rlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1MTdCNUY5QjI3NUYzQTk4MDAyREMyMkQgLyogRGFlbW9uVXRp
bGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE3QjVGNjgyNzVBOUE3ODAwMkRDMjJEIC8q
IFdlYlB1c2hUb29sQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxN0I1RjY1Mjc1
QThEN0YwMDJEQzIyRCAvKiBXZWJQdXNoVG9vbE1haW4ubW0gaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTE1MjE0LDcg
KzE1MjUzLDYgQEAKIAkJCQlDREE5M0RCMTIyRjhCQ0Y0MDA0OTBBNjkgLyogRnVsbHNjcmVlblRv
dWNoU2VjaGV1cmlzdGljUGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMUExNTJE
NzI0RTVBMjlBMDA5NzhDOEIgLyogSGFuZGxlWFBDRW5kcG9pbnRNZXNzYWdlcy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTI3NDlGNjQ0MjE0NjU2MUIwMDgzODBCRiAvKiBJbmplY3RlZEJ1bmRsZU5v
ZGVIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3QjVGOTkyNzVFQzYwMTAwMkRDMjJE
IC8qIFdlYlB1c2hNZXNzYWdlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQkyNzQ5RjY0NTIx
NDY1NjFFMDA4MzgwQkYgLyogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5QkY1RUM2NDI1NDExNDU2MDA5ODRFNzcgLyogSlNJUENCaW5kaW5nLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUMxNEQzN0ZFMjRBQ0UwODYwMDdGRjAxNCAvKiBMYXVuY2hTZXJ2
aWNlc0RhdGFiYXNlTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLApAQCAtMTU1MDMsNiArMTU1NDEs
NyBAQAogCQkJCTFDQUVDQjY1Mjc0NjVBRTQwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTA5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFDQUVDQjY4Mjc0NjVBRTQwMEFCNzhEMCAvKiBVbmlmaWVk
U291cmNlMTEwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDQUVDQjY2Mjc0NjVBRTQwMEFCNzhE
MCAvKiBVbmlmaWVkU291cmNlMTExLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzRTc5OUQyMjc2
MEFBNUIwMDc0MDA4QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUUzOEExRkMwMjNBNTUxQkYwMEQyMzc0RiAvKiBVc2VySW50ZXJmYWNlSWRpb20ubW0gaW4gU291
cmNlcyAqLywKIAkJCQlDRDQ5MUIwRDFFNzMyRTREMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q0OTFCMTcx
RTczNTI1NTAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNTU3NCw2ICsxNTYxMyw3IEBACiAJCQkJQkNF
RTdBRDAxMjgxNzk4ODAwOTgyN0RBIC8qIFdlYlByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTdCNUY3QTI3NUU5N0E0MDAyREMyMkQgLyogV2ViUHVz
aERhZW1vbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxN0I1Rjc5Mjc1RTk3QTEwMDJEQzIyRCAv
KiBXZWJQdXNoRGFlbW9uTWFpbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUxN0I1Rjk5Mjc1RUM2
MDEwMDJEQzIyRCAvKiBXZWJQdXNoTWVzc2FnZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFGMDYwRTExNjU0MzE4NTAwRjMyODFCIC8qIFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjA2MEUxMTY1NDMxODUwMEYzMjgxRiAvKiBX
ZWJSVENNb25pdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjA2
MEUxMTY1NDMxODUwMEYzMjgyQyAvKiBXZWJSVENSZXNvbHZlck1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAppbmRleCAwZmE2YWMxOGZkOTQ3MDU5MGNmMTA3ZDZh
NDQwNjZkOTJkOWE0MzZkLi4yY2Y3YTZkNGI2MDA1YzFkN2VjMjU2YmQ2Mzg4NzYyOTRlOWU0Y2Yy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
QXJlYU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3Rv
cmFnZUFyZWFNYXAuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTmV0d29y
a1N0b3JhZ2VNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGwuaCIK
ICNpbmNsdWRlICJTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1h
bmFnZXJTZXRNZXNzYWdlcy5oIgpAQCAtOTUsNyArOTYsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFw
OjpzZXRJdGVtKEZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBcmVh
LCBjbwogICAgIG1fcGVuZGluZ1ZhbHVlQ2hhbmdlcy5hZGQoa2V5KTsKIAogICAgIGlmIChtX21h
cElEKQotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJT
ZXQ6OlNldEl0ZW0oKm1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50
U2VlZCwga2V5LCB2YWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygp
KSwgMCk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OlNldEl0ZW0oKm1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9j
dXJyZW50U2VlZCwga2V5LCB2YWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0
cmluZygpKSwgMCk7CiAgICAgZWxzZQogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdl
LCAiU3RvcmFnZUFyZWFNYXA6OnNldEl0ZW0gZmFpbGVkIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQg
aXMgaW52YWxpZCIpOwogfQpAQCAtMTE0LDcgKzExNSw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6
OnJlbW92ZUl0ZW0oV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwq
IHNvCiAgICAgbV9wZW5kaW5nVmFsdWVDaGFuZ2VzLmFkZChrZXkpOwogCiAgICAgaWYgKG1fbWFw
SUQpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNl
dDo6UmVtb3ZlSXRlbSgqbV9tYXBJRCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJl
bnRTZWVkLCBrZXksIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDAp
OworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5h
Z2VyOjpSZW1vdmVJdGVtKCptX21hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3Vy
cmVudFNlZWQsIGtleSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwg
MCk7CiAgICAgZWxzZQogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU3RvcmFn
ZUFyZWFNYXA6OnJlbW92ZUl0ZW0gZmFpbGVkIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52
YWxpZCIpOwogfQpAQCAtMTI5LDcgKzEzMCw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmNsZWFy
KFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBCiAg
ICAgbV9tYXAgPSBtYWtlVW5pcXVlPFN0b3JhZ2VNYXA+KG1fcXVvdGFJbkJ5dGVzKTsKIAogICAg
IGlmIChtX21hcElEKQotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3RvcmFn
ZU1hbmFnZXJTZXQ6OkNsZWFyKCptX21hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1f
Y3VycmVudFNlZWQsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDAp
OworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5h
Z2VyOjpDbGVhcigqbV9tYXBJRCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRT
ZWVkLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKICAgICBl
bHNlCiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTdG9yYWdlQXJlYU1hcDo6
Y2xlYXIgZmFpbGVkIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52YWxpZCIpOwogfQpAQCAt
MTYwLDcgKzE2MSw3IEBAIFN0b3JhZ2VNYXAmIFN0b3JhZ2VBcmVhTWFwOjplbnN1cmVNYXAoKQog
ICAgICAgICAgICAgLy8gZnJvbSBvdXIgU3RvcmFnZU1hbmFnZXJTZXQ6OkdldFZhbHVlcygpIElQ
Qy4gVGhpcyBJUEMgbWF5IGJlIHZlcnkgc2xvdyBiZWNhdXNlIGl0IG1heSBuZWVkIHRvIGZldGNo
IHRoZSB2YWx1ZXMgZnJvbSBkaXNrIGFuZCB0aGVyZSBtYXkgYmUgYSBsb3Qgb2YgZGF0YS4KICAg
ICAgICAgICAgIElQQzo6VW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29wZSB1bmJvdW5kZWRTeW5j
aHJvbm91c0lQQ1Njb3BlOwogICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFs
dWVzOwotICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdl
TWFuYWdlclNldDo6R2V0VmFsdWVzKCptX21hcElEKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2Vy
U2V0OjpHZXRWYWx1ZXM6OlJlcGx5KHZhbHVlcyksIDApOworICAgICAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlv
bigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkdldFZhbHVlcygq
bV9tYXBJRCksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6R2V0VmFsdWVzOjpSZXBseSh2
YWx1ZXMpLCAwKTsKICAgICAgICAgICAgIG1fbWFwLT5pbXBvcnRJdGVtcyhXVEZNb3ZlKHZhbHVl
cykpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3Jh
Z2UsICJTdG9yYWdlQXJlYU1hcDo6ZW5zdXJlTWFwIGZhaWxlZCB0byBsb2FkIGZyb20gbmV0d29y
ayBwcm9jZXNzIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52YWxpZCIpOwpAQCAtMzQ4LDIw
ICszNDksMjMgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6Y29ubmVjdCgpCiAgICAgaWYgKG1fbWFw
SUQpCiAgICAgICAgIHJldHVybjsKIAorICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBtYXBJRDsK
ICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgU3RvcmFnZVR5cGU6OkxvY2FsOgogICAg
IGNhc2UgU3RvcmFnZVR5cGU6OlRyYW5zaWVudExvY2FsOgogICAgICAgICBpZiAoU2VjdXJpdHlP
cmlnaW4qIHRvcExldmVsT3JpZ2luID0gbV9uYW1lc3BhY2UudG9wTGV2ZWxPcmlnaW4oKSkKLSAg
ICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJT
ZXQ6OkNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEoV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuc2Vzc2lvbklEKCksIG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCB0b3BM
ZXZlbE9yaWdpbi0+ZGF0YSgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6
U3RvcmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWE6OlJl
cGx5KG1fbWFwSUQpLCAwKTsKKyAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVu
c3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNz
YWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3Jh
Z2VBcmVhKG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCB0b3BMZXZlbE9yaWdpbi0+
ZGF0YSgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6TmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpDb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhOjpSZXBseShtYXBJ
RCksIDApOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMo
TWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlc3Npb25JRCgpLCBtX25hbWVzcGFjZS5zdG9yYWdlTmFt
ZXNwYWNlSUQoKSwgbV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwgTWVzc2FnZXM6OlN0b3JhZ2VN
YW5hZ2VyU2V0OjpDb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhOjpSZXBseShtX21hcElEKSwgMCk7
CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtTdG9y
YWdlTWFuYWdlcjo6Q29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShtX25hbWVzcGFjZS5zdG9yYWdl
TmFtZXNwYWNlSUQoKSwgbV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwgTWVzc2FnZXM6Ok5ldHdv
cmtTdG9yYWdlTWFuYWdlcjo6Q29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYTo6UmVwbHkobWFwSUQp
LCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdG9yYWdlVHlwZTo6U2Vzc2lvbjoKLSAg
ICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6
Q29ubmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlc3Np
b25JRCgpLCBtX25hbWVzcGFjZS5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgbV9zZWN1cml0eU9yaWdp
bi0+ZGF0YSgpKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9TZXNzaW9u
U3RvcmFnZUFyZWE6OlJlcGx5KG1fbWFwSUQpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNl
bmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5lY3RUb1Nlc3Npb25T
dG9yYWdlQXJlYShtX25hbWVzcGFjZS5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgbV9zZWN1cml0eU9y
aWdpbi0+ZGF0YSgpKSwgTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q29ubmVjdFRv
U2Vzc2lvblN0b3JhZ2VBcmVhOjpSZXBseShtYXBJRCksIDApOwogICAgIH0KIAotICAgIGlmICht
X21hcElEKQorICAgIGlmIChtYXBJRC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgbV9tYXBJRCA9IG1h
cElEOwogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZWdpc3RlclN0b3JhZ2VBcmVh
TWFwKCp0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmRpc2Nvbm5lY3Qo
KQpAQCAtMzczLDcgKzM3Nyw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmRpc2Nvbm5lY3QoKQog
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVucmVnaXN0ZXJTdG9yYWdlQXJlYU1hcCgqdGhp
cyk7CiAKICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uID0gV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuZXhpc3RpbmdOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKSkKLSAgICAg
ICAgbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6
U3RvcmFnZU1hbmFnZXJTZXQ6OkRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoKm1fbWFwSUQpLCAw
KTsKKyAgICAgICAgbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpEaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVh
KCptX21hcElEKSwgMCk7CiAKICAgICBtX21hcElEID0geyB9OwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUlt
cGwuY3BwCmluZGV4IGY4NGQwMmZjNmY3ZTNiYjFlMzE0MzNjNWYwMGU2MWUwZmRlYmY5MzIuLmRl
YjZhMzQzM2NhYmFmYWY3ZGNhYTU2MGNkYzNhMTVlM2FjYTdlNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNl
SW1wbC5jcHAKQEAgLTI3LDkgKzI3LDkgQEAKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlSW1w
bC5oIgogCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAi
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYUlt
cGwuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYU1hcC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VNYW5h
Z2VyU2V0TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZUdyb3VwUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCkBAIC0xMTQsNyArMTE0LDcg
QEAgUmVmPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjb3B5KFBhZ2Um
IG5ld1BhZ2UpCiAgICAgQVNTRVJUKG1fc3RvcmFnZVR5cGUgPT0gU3RvcmFnZVR5cGU6OlNlc3Np
b24pOwogCiAgICAgaWYgKGF1dG8gbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uID0gV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuZXhpc3RpbmdOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKSkKLSAgICAg
ICAgbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6
U3RvcmFnZU1hbmFnZXJTZXQ6OkNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2Uoc2Vzc2lvbklE
KCksIG1fc3RvcmFnZU5hbWVzcGFjZUlELCBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UobmV3UGFnZSku
c2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyKCkpLCAwKTsKKyAgICAgICAgbmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpDbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKG1fc3RvcmFnZU5hbWVz
cGFjZUlELCBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UobmV3UGFnZSkuc2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2VJZGVudGlmaWVyKCkpLCAwKTsKIAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3Jh
Z2VOYW1lc3BhY2VJbXBsKG1fc3RvcmFnZVR5cGUsIFdlYlBhZ2U6OmZyb21Db3JlUGFnZShuZXdQ
YWdlKS5zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIoKSwgV2ViUGFnZTo6ZnJvbUNv
cmVQYWdlKG5ld1BhZ2UpLmlkZW50aWZpZXIoKSwgbV90b3BMZXZlbE9yaWdpbi5nZXQoKSwgbV9x
dW90YUluQnl0ZXMpKTsKIH0K
</data>
<flag name="commit-queue"
          id="472484"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446963</attachid>
            <date>2021-12-12 21:35:09 -0800</date>
            <delta_ts>2021-12-12 23:41:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234087-20211212213508.patch</filename>
            <type>text/plain</type>
            <size>169020</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2OTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGY2OWY2MzMyMDEzYWZk
MzcyMmZjYTk1OGJmNjc5NWNiNDNlMzkxMy4uNTgxNmFlMTNkNTUyOGQxNDE1ZDNhOGVjNGZjNDg2
MmM1MTZhY2NiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTEyLTEyICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIFN0b3JhZ2VNYW5h
Z2VyIHdpdGggTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIHRvIG1hbmFnZSBXZWJTdG9yYWdlIGJ5IG9y
aWdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0
MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRl
RmlsZVN5c3RlbTo6bW92ZURhdGFiYXNlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjpkYXRhYmFzZUZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FM
aXRlRmlsZVN5c3RlbS5oOgorCiAyMDIxLTEyLTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6Om1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCBzaG91bGQgYmUgcHJpdmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA4ZWZkNDBkYWE5YzM1
M2MyYzU0OTA3Zjk4N2ZhYzI3YTdjMmE5ZWJlLi44NzQ2NDYyYWJkYzc2OTE2YjVmYzAwOTcyOTQ5
MzE5ZDY5ZjQ4ZWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNyBAQAorMjAyMS0xMi0xMiAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBNZXJnZSBTdG9yYWdlTWFu
YWdlciB3aXRoIE5ldHdvcmtTdG9yYWdlTWFuYWdlciB0byBtYW5hZ2UgV2ViU3RvcmFnZSBieSBv
cmlnaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
NDA4NworCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgIEluIG5l
dHdvcmsgcHJvY2VzcywgV2ViU3RvcmFnZSBkYXRhIGlzIG1hbmFnZWQgYnkgV2ViS2l0OjpTdG9y
YWdlTWFuYWdlciBjbGFzcy4gRWFjaCBTdG9yYWdlTWFuYWdlciBvd25zIG9uZSBvcgorICAgICAg
ICBtYW55IFN0b3JhZ2VOYW1lU3BhY2VzLCBhbmQgZWFjaCBTdG9yYWdlTmFtZXNwYWNlIG93bnMg
b25lIG9yIG1vcmUgU3RvcmFnZUFyZWFzLiBFYWNoIFN0b3JhZ2VBcmVhIGNvcnJlcG9uZHMKKyAg
ICAgICAgdG8gb25lIHN0b3JhZ2UgbWFwIChvbmUgbG9jYWxTdG9yYWdlIG9yIHNlc3Npb25TdG9y
YWdlIG9iamVjdCksIHVzaW5nIGVpdGhlciBhIFNRTGl0ZSBkYXRhYmFzZSBvciBhIGluLW1lbW9y
eQorICAgICAgICBtYXAgYXMgYmFja2VuZC4gTm93IHRoYXQgd2UgaGF2ZSBOZXR3b3JrU3RvcmFn
ZU1hbmFnZXIsIHdoaWNoIG1hbmFnZXMgc3RvcmFnZSBieSBvcmlnaW4uIFdlIGNhbiBtZXJnZQor
ICAgICAgICBTdG9yYWdlTWFuYWdlciB3aXRoIE5ldHdvcmtTdG9yYWdlTWFuYWdlciwgc2luY2Ug
bG9jYWxTdG9yYWdlIGFuZCBzZXNzaW9uU3RvcmFnZSBhcmUgbm90IHNoYXJlZCBiZXR3ZWVuIAor
ICAgICAgICBkaWZmZXJlbnQgb3JpZ2lucy4KKworICAgICAgICBUaGUgbmV3IHN0cnVjdHVyZSBp
czoKKyAgICAgICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIChtYW5hZ2Ugc3RvcmFnZSBmb3IgYSBz
ZXNzaW9uLCBvd25zIG9uZSBvciBtb3JlIE9yaWdpblN0b3JhZ2VNYW5hZ2VycykKKyAgICAgICAg
T3JpZ2luU3RvcmFnZU1hbmFnZXIgKG1hbmFnZSBzdG9yYWdlIGZvciBhbiBvcmlnaW4sIG93bnMg
b25lIExvY2FsU3RvcmFnZU1hbmFnZXIgYW5kIG9uZSBTZXNzaW9uU3RvcmFnZU1hbmFnZXIpCisg
ICAgICAgIExvY2FsU3RvcmFnZU1hbmFnZXIgLyBTZXNzaW9uU3RvcmFnZU1hbmFnZXIgKG1hbmFn
ZSBMb2NhbFN0b3JhZ2UgYW5kIFNlc3Npb25TdG9yYWdlLCBvd25zIG9uZSBvciBtb3JlIAorICAg
ICAgICBTdG9yYWdlQXJlYUJhc2VzKQorICAgICAgICBNZW1vcnlTdG9yYWdlQXJlYSAvIFNRTGl0
ZVN0b3JhZ2VBcmVhIChpbmhlcml0cyBTdG9yYWdlQXJlYUJhc2VzOyBtYW5hZ2Ugb25lIGxvY2Fs
IG9yIHNlc3Npb24gc3RvcmFnZSwgbGlrZSAKKyAgICAgICAgV2Via2l0OjpTdG9yYWdlQXJlYSkK
KworICAgICAgICBTdG9yYWdlTmFtZXNwYWNlIGxheWVyIGlzIHJlbW92ZWQuIEZvciBTZXNzaW9u
U3RvcmFnZSwgZGlmZmVyZW50IFN0b3JhZ2VOYW1lc3BhY2VzIG1lYW5zIGRpZmZlcmVudCB3ZWIg
cGFnZXMsIAorICAgICAgICBhbmQgc2FtZSBvcmlnaW4gY2FuIGhhdmUgZGlmZmVyZW50IHNlc3Np
b25TdG9yYWdlcyBvbiBkaWZmZXJlbnQgcGFnZXMsIHNvIHdlIGtlZXAgYSBTdG9yYWdlTmFtZXNw
YWNlIDw9PgorICAgICAgICBTdG9yYWdlQXJlYSBtYXAgaW4gU2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
LiBGb3IgTG9jYWxTdG9yYWdlLCBkaWZmZXJudCBTdG9yYWdlTmFtZXNwYWNlcyBtZWFucyBkaWZm
ZXJlbnQgcGFnZSAKKyAgICAgICAgZ3JvdXBzLiBPdXIgb3JpZ2luYWwgcGxhbiB3YXMgdGhlIHNh
bWUgb3JpZ2luIGNhbiBoYXZlIGRpZmZlcmVudCBsb2NhbFN0b3JhZ2VzIGluIGRpZmZlcmVudCBw
YWdlIGdyb3VwcywgYnV0IG91cgorICAgICAgICBvbGQgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkg
bWFkZSBhbGwgcGFnZSBncm91cHMgcG9pbnQgdG8gdGhlIHNhbWUgZGF0YWJhc2UgZmlsZS4gVG8g
a2VlcCBleGlzdGluZyBiZWhhdmlvciAKKyAgICAgICAgdGhhdCBhbGwgcGFnZSBncm91cHMgd2l0
aCBzYW1lIG9yaWdpbiBzaGFyZSB0aGUgc3RvcmFnZSwgd2Ugbm93IGtlZXAgb25lIGxvY2FsIFN0
b3JhZ2VBcmVhIGFuZCBvbmUgdHJhbnNpZW50CisgICAgICAgIFN0b3JhZ2VBcmVhIHBlciBMb2Nh
bFN0b3JhZ2VNYW5hZ2VyLgorCisgICAgICAgIE1vc3RseSByZWZhY3RvcmluZyBhbmQgY292ZXJl
ZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6Omxvd01lbW9yeUhhbmRsZXIp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWRkV2Vi
c2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRTdG9y
YWdlTWFuYWdlckZvclNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
ZGVzdHJveVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aGFzTG9j
YWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURh
dGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFG
b3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFuZFJl
c3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6cHJlcGFyZVRvU3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpyZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZW5h
bWVPcmlnaW5JbldlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyk6IERlbGV0ZWQuCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6ZmlsZU5hbWVUb09yaWdpbik6CisgICAgICAgIChXZWJLaXQ6Om9yaWdpblRvRmlsZU5hbWUp
OgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpvcmlnaW5zT2ZMb2NhbFN0
b3JhZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6bG9jYWxT
dG9yYWdlRmlsZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpM
b2NhbFN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdl
cjo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2Vy
OjpoYXNEYXRhSW5NZW1vcnkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VN
YW5hZ2VyOjpjbGVhckRhdGFJbk1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNsZWFyRGF0YU9uRGlzayk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFuYWdlcjo6
aGFuZGxlTG93TWVtb3J5V2FybmluZyk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU1h
bmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VN
YW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdl
TWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZEZvckxvY2FsU3RvcmFnZUFyZWEpOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkRm9yVHJhbnNpZW50
U3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25u
ZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTWFu
YWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJL
aXQ6OkxvY2FsU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpNZW1vcnlTdG9y
YWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKFdl
YktpdDo6TWVtb3J5U3RvcmFnZUFyZWE6OmFsbEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6TWVt
b3J5U3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpNZW1vcnlTdG9yYWdl
QXJlYTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6Ok1lbW9yeVN0b3JhZ2VBcmVhOjpj
bG9uZSBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9y
YWdlQXJlYS5oOiBBZGRlZC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpyZWFkT3JpZ2luRnJvbUZpbGUpOgorICAgICAgICAoV2ViS2l0Ojp3cml0ZU9yaWdpblRvRmls
ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6Ok5ldHdvcmtT
dG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6
Y2FuSGFuZGxlVHlwZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6b3JpZ2luRGlyZWN0b3J5UGF0aCk6CisgICAgICAg
IChXZWJLaXQ6Om9yaWdpbkZpbGVQYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2li
bGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZU9yaWdp
bkRpcmVjdG9yeUlmUG9zc2libGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1h
bmFnZXI6OmNsZWFyU3RvcmFnZUZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmZvckVhY2hPcmlnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmdldEFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YUZyb21EaXNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjptb3ZlRGF0YSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9UcmFuc2llbnRM
b2NhbFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
Ojpjb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2Up
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6c2V0SXRlbSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0Ojp0
b1dlYnNpdGVEYXRhVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OlN0b3JhZ2VCdWNrZXQp
OgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6
dG9XZWJzaXRlRGF0YVR5cGUpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6U3RvcmFnZUJ1Y2tldDo6dG9TdG9yYWdlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6
Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0Ojpsb2NhbFN0b3JhZ2VNYW5hZ2Vy
KToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6
OmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0
b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpzZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAg
ICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6ZXhpc3Rp
bmdTZXNzaW9uU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1Y2tldDo6aXNFbXB0eSBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0OjpmZXRj
aERhdGFUeXBlc0luTGlzdCk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2Vy
OjpTdG9yYWdlQnVja2V0OjpkZWxldGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3Rv
cmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6Om1vdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6
T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmZldGNoRGF0YVR5cGVzSW5MaXN0
RnJvbU1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9y
YWdlQnVja2V0OjpmZXRjaERhdGFUeXBlc0luTGlzdEZyb21EaXNrKToKKyAgICAgICAgKFdlYktp
dDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQ6OmRlbGV0ZUxvY2FsU3RvcmFn
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUJ1
Y2tldDo6ZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2lu
U3RvcmFnZU1hbmFnZXI6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmRlZmF1bHRCdWNrZXQpOgorICAgICAgICAoV2ViS2l0OjpP
cmlnaW5TdG9yYWdlTWFuYWdlcjo6bG9jYWxTdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJL
aXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIpOgor
ICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6c2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFnZXI6OmV4aXN0aW5nU2Vz
c2lvblN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6T3JpZ2luU3RvcmFnZU1hbmFn
ZXI6OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZmV0
Y2hEYXRhVHlwZXNJbkxpc3QpOgorICAgICAgICAoV2ViS2l0OjpPcmlnaW5TdG9yYWdlTWFuYWdl
cjo6ZGVsZXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpt
b3ZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdl
QnVja2V0Ojppc0FjdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U1FM
aXRlU3RvcmFnZUFyZWE6OnN0YXRlbWVudFN0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlNRTGl0ZVN0b3JhZ2VBcmVhOjpTUUxpdGVTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6
OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3Jh
Z2VBcmVhOjp+U1FMaXRlU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9y
YWdlQXJlYTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpj
bGVhcik6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpjcmVhdGVUYWJsZUlm
TmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnByZXBhcmVE
YXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpzdGFydFRyYW5z
YWN0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6
Y2FjaGVkU3RhdGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6Omdl
dEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0SXRlbUZyb21E
YXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjphbGxJdGVtcyk6
CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpzZXRJdGVtKToKKyAgICAgICAg
KFdlYktpdDo6U1FMaXRlU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpTUUxpdGVTdG9yYWdlQXJlYTo6Y29tbWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSk6CisgICAg
ICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpoYW5kbGVMb3dNZW1vcnlXYXJuaW5nKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmg6IEFk
ZGVkLgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L1Nlc3Npb25TdG9yYWdlTWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTZXNz
aW9uU3RvcmFnZU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlTWFuYWdlcik6CisgICAgICAgIChXZWJL
aXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpTZXNzaW9uU3RvcmFnZU1hbmFnZXI6Omhhc0RhdGFJbk1lbW9yeSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y2xlYXJEYXRhKToKKyAgICAgICAg
KFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkKToKKyAgICAg
ICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjphZGRTdG9yYWdlQXJlYSk6CisgICAg
ICAgIChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvU2Vzc2lvblN0b3Jh
Z2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjpkaXNjb25u
ZWN0RnJvbVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VNYW5h
Z2VyOjpjbG9uZVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L1Nlc3Npb25TdG9yYWdlTWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHA6IEFkZGVkLiBTb21lIGNvZGUgaXMgbW92ZWQg
ZnJvbSBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yZWFnZS9TdG9yYWdlQXJlYS5jcHAuCisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZUFyZWFCYXNlKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZUFyZWFCYXNlOjphZGRMaXN0ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhQmFzZTo6cmVtb3ZlTGlzdGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
QXJlYUJhc2U6Omhhc0xpc3RlbmVycyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VB
cmVhQmFzZTo6bm90aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhQmFzZTo6ZGlzcGF0Y2hFdmVudHMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFCYXNlLmg6IEFkZGVkLiBTb21lIGNvZGUgaXMgbW92
ZWQgZnJvbSBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yZWFnZS9TdG9yYWdlQXJlYS5oLgorICAgICAg
ICAoV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpTdG9yYWdlQXJlYUJhc2U6Om9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VBcmVhQmFzZTo6cXVvdGEgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpyZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZUFyZWFSZWdpc3RyeTo6dW5yZWdpc3RlclN0b3JhZ2VBcmVhKToKKyAgICAg
ICAgKFdlYktpdDo6U3RvcmFnZUFyZWFSZWdpc3RyeTo6Z2V0U3RvcmFnZUFyZWEpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oOiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaDoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TG9j
YWxTdG9yYWdlRGV0YWlscyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZXhjbHVkZURpcmVjdG9yeUZyb21CYWNrdXApOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICogVW5p
ZmllZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VBcmVhTWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OnNldEl0ZW0p
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbSk6CisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3Jh
Z2VBcmVhTWFwOjplbnN1cmVNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6
Y29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpkaXNjb25uZWN0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSW1wbDo6Y29weSk6CisKIDIwMjEt
MTItMTEgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
TW9tZW50dW0gRXZlbnQgRGlzcGF0Y2hlcjogVGFpbCBmcmFtZXMgYXJlIHRoZSB3cm9uZyB2ZWxv
Y2l0eSBpZiBtb21lbnR1bSBldmVudCBkaXNwYXRjaCByYXRlIGRvZXNuJ3QgbWF0Y2ggc2NyZWVu
IHJlZnJlc2ggcmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZUZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZp
bGVTeXN0ZW0uY3BwCmluZGV4IDc2ZTQ1YWYzNGVkMDkzZmQ5ZjI3NmRkNWQ0YjkyMmE0MTYzNGQ5
YWUuLmU3Y2RjYmY1YWJkMjA2OTY4NWUxZmFkMWQ3NDQxOWNhMTA4MWE5YmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKQEAgLTQzLDYg
KzQzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgY29uc3RleHByIHN0ZDo6
YXJyYXk8Y29uc3QgY2hhciAqLCAzPiBkYXRhYmFzZUZpbGVTdWZmaXhlcyB7ICIiLCAiLXNobSIs
ICItd2FsIiB9OworCiBTUUxpdGVGaWxlU3lzdGVtOjpTUUxpdGVGaWxlU3lzdGVtKCkKIHsKIH0K
QEAgLTc3LDE4ICs3OSwyMiBAQCBib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0
YWJhc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiBGaWxlU3lzdGVt
OjpkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKIH0KIAotYm9vbCBTUUxpdGVGaWxlU3lzdGVt
OjpkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK2Jvb2wgU1FMaXRl
RmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCiB7
Ci0gICAgYXV0byB3YWxGaWxlTmFtZSA9IG1ha2VTdHJpbmcoZmlsZU5hbWUsICItd2FsIl9zKTsK
LSAgICBhdXRvIHNobUZpbGVOYW1lID0gbWFrZVN0cmluZyhmaWxlTmFtZSwgIi1zaG0iX3MpOwor
ICAgIGJvb2wgZmlsZUV4aXN0cyA9IGZhbHNlOworICAgIGZvciAoY29uc3QgYXV0byogc3VmZml4
IDogZGF0YWJhc2VGaWxlU3VmZml4ZXMpIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBmaWxlUGF0
aCArIHN1ZmZpeDsKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShwYXRoKTsKKyAgICAg
ICAgZmlsZUV4aXN0cyB8PSBGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKHBhdGgpOworICAgIH0KIAot
ICAgIC8vIFRyeSB0byBkZWxldGUgYWxsIHRocmVlIGZpbGVzIHdoZXRoZXIgb3Igbm90IHRoZXkg
YXJlIHRoZXJlLgotICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZmlsZU5hbWUpOwotICAgIEZp
bGVTeXN0ZW06OmRlbGV0ZUZpbGUod2FsRmlsZU5hbWUpOwotICAgIEZpbGVTeXN0ZW06OmRlbGV0
ZUZpbGUoc2htRmlsZU5hbWUpOworICAgIHJldHVybiAhZmlsZUV4aXN0czsKK30KIAotICAgIC8v
IElmIGFueSBvZiB0aGUgd2FsIG9yIHNobSBmaWxlcyByZW1haW4gYWZ0ZXIgdGhlIGRlbGV0ZSBh
dHRlbXB0LCB0aGUgb3ZlcmFsbCBkZWxldGUgb3BlcmF0aW9uIGZhaWxlZC4KLSAgICByZXR1cm4g
IUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZU5hbWUpICYmICFGaWxlU3lzdGVtOjpmaWxlRXhp
c3RzKHdhbEZpbGVOYW1lKSAmJiAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhzaG1GaWxlTmFtZSk7
Cit2b2lkIFNRTGl0ZUZpbGVTeXN0ZW06Om1vdmVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBv
bGRGaWxlUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdGaWxlUGF0aCkKK3sKKyAgICBmb3IgKGNvbnN0
IGF1dG8qIHN1ZmZpeCA6IGRhdGFiYXNlRmlsZVN1ZmZpeGVzKQorICAgICAgICBGaWxlU3lzdGVt
Ojptb3ZlRmlsZShtYWtlU3RyaW5nKG9sZEZpbGVQYXRoLCBzdWZmaXgpLCBtYWtlU3RyaW5nKG5l
d0ZpbGVQYXRoLCBzdWZmaXgpKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC05
OCwxOCArMTA0LDEzIEBAIGJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6dHJ1bmNhdGVEYXRhYmFzZUZp
bGUoc3FsaXRlMyogZGF0YWJhc2UpCiB9CiAjZW5kaWYKICAgICAKLXVpbnQ2NF90IFNRTGl0ZUZp
bGVTeXN0ZW06OmRhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKLXsgICAg
ICAgIAordWludDY0X3QgU1FMaXRlRmlsZVN5c3RlbTo6ZGF0YWJhc2VGaWxlU2l6ZShjb25zdCBT
dHJpbmcmIGZpbGVQYXRoKQorewogICAgIHVpbnQ2NF90IHRvdGFsU2l6ZSA9IDA7Ci0KLSAgICBp
ZiAoYXV0byBmaWxlU2l6ZSA9IEZpbGVTeXN0ZW06OmZpbGVTaXplKGZpbGVOYW1lKSkKLSAgICAg
ICAgdG90YWxTaXplICs9ICpmaWxlU2l6ZTsKLQotICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmls
ZVN5c3RlbTo6ZmlsZVNpemUobWFrZVN0cmluZyhmaWxlTmFtZSwgIi13YWwiX3MpKSkKLSAgICAg
ICAgdG90YWxTaXplICs9ICpmaWxlU2l6ZTsKLQotICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmls
ZVN5c3RlbTo6ZmlsZVNpemUobWFrZVN0cmluZyhmaWxlTmFtZSwgIi1zaG0iX3MpKSkKLSAgICAg
ICAgdG90YWxTaXplICs9ICpmaWxlU2l6ZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8qIHN1ZmZpeCA6
IGRhdGFiYXNlRmlsZVN1ZmZpeGVzKSB7CisgICAgICAgIGlmIChhdXRvIGZpbGVTaXplID0gRmls
ZVN5c3RlbTo6ZmlsZVNpemUoZmlsZVBhdGggKyBzdWZmaXgpKQorICAgICAgICAgICAgdG90YWxT
aXplICs9ICpmaWxlU2l6ZTsKKyAgICB9CiAKICAgICByZXR1cm4gdG90YWxTaXplOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmgKaW5kZXggYzY4
ZDljN2U3YWY5ODk3NmExZWQzZGNiNmYyYWNmZTRiNmNmNWMyZi4uOThlN2VhMGQwN2EyNTQxMWZh
NGY2MmFhNzIxNjU5M2Y2M2UzOWM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRmlsZVN5c3RlbS5oCkBAIC03OCw5ICs3OCwxMSBAQCBwdWJsaWM6CiAgICAgLy8g
RGVsZXRlcyBhIGRhdGFiYXNlIGZpbGUuCiAgICAgLy8KICAgICAvLyBmaWxlTmFtZSAtIFRoZSBm
aWxlIG5hbWUuCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZGVsZXRlRGF0YWJhc2VG
aWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBi
b29sIGRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKTsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUhhc2hGb3JGaWxlTmFtZShjb25zdCBT
dHJpbmcmIGZpbGVOYW1lKTsKKyAgICAvLyBNb3ZlcyBhIGRhdGFiYXNlIGZpbGUgdG8gYSBuZXcg
cGxhY2UuCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbW92ZURhdGFiYXNlRmlsZShj
b25zdCBTdHJpbmcmIG9sZEZpbGVQYXRoLCBjb25zdCBTdHJpbmcmIG5ld0ZpbGVQYXRoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVIYXNoRm9yRmlsZU5hbWUoY29u
c3QgU3RyaW5nJiBmaWxlUGF0aCk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8v
IFRydW5jYXRlcyBhIGRhdGFiYXNlIGZpbGUuIFVzZWQgd2hlbiBNb2JpbGVTYWZhcmlTZXR0aW5n
cyBkZWxldGVzIGEgZGF0YWJhc2UgZmlsZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMWVmMzNhNmU2MjczNzEwNDQ3NzUxYTU3M2My
NzQ4OTdlZDI5NDBhNi4uMjdhZjkxZTRmNTlmMzM0MTM3OGI2YWJhZmViODdhNWQ3NzdmOGQwNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
QEAgLTE1OCw3ICsxNTgsNiBAQCBzdGF0aWMgaW5saW5lIE1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lz
dHJ5IGNyZWF0ZU1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5KE5ldHdvcgogCiBOZXR3b3JrUHJv
Y2Vzczo6TmV0d29ya1Byb2Nlc3MoQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1l
dGVycyYmIHBhcmFtZXRlcnMpCiAgICAgOiBtX2Rvd25sb2FkTWFuYWdlcigqdGhpcykKLSAgICAs
IG1fc3RvcmFnZU1hbmFnZXJTZXQoU3RvcmFnZU1hbmFnZXJTZXQ6OmNyZWF0ZSgpKQogI2lmIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgLCBtX25ldHdvcmtDb250ZW50UnVsZUxpc3RN
YW5hZ2VyKCp0aGlzKQogI2VuZGlmCkBAIC0zMTQsMTIgKzMxMywxMyBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpsb3dNZW1vcnlIYW5kbGVyKENyaXRpY2FsIGNyaXRpY2FsKQogICAgICAgICBuZXR3
b3JrU2Vzc2lvbi5jbGVhclByZWZldGNoQ2FjaGUoKTsKICAgICB9KTsKIAotICAgIG1fc3RvcmFn
ZU1hbmFnZXJTZXQtPmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKLQogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKICAgICBmb3IgKGF1dG8mIHN3U2VydmVyIDogbV9zd1NlcnZlcnMudmFsdWVz
KCkpCiAgICAgICAgIHN3U2VydmVyLT5oYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7CiAjZW5kaWYK
KworICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1fc3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKQor
ICAgICAgICBtYW5hZ2VyLT5oYW5kbGVMb3dNZW1vcnlXYXJuaW5nKCk7CiB9CiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCkBAIC00MDIsNyArNDAyLDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6Y3JlYXRlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoUHJvY2Vzc0lk
ZW50aWZpZXIgaWRlbnQKIAogICAgIGNvbm5lY3Rpb24uc2V0T25MaW5lU3RhdGUoTmV0d29ya1N0
YXRlTm90aWZpZXI6OnNpbmdsZXRvbigpLm9uTGluZSgpKTsKIAotICAgIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPmFkZENvbm5lY3Rpb24oY29ubmVjdGlvbi5jb25uZWN0aW9uKCkpOwogICAgIHdlYklE
QlNlcnZlcihzZXNzaW9uSUQpLmFkZENvbm5lY3Rpb24oY29ubmVjdGlvbi5jb25uZWN0aW9uKCks
IGlkZW50aWZpZXIpOwogICAgIGlmIChhdXRvIG1hbmFnZXIgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5n
ZXQoc2Vzc2lvbklEKSkKICAgICAgICAgbWFuYWdlci0+c3RhcnRSZWNlaXZpbmdNZXNzYWdlRnJv
bUNvbm5lY3Rpb24oY29ubmVjdGlvbi5jb25uZWN0aW9uKCkpOwpAQCAtNDIxLDcgKzQyMCw3IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzCiB7CiAgICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CiAKLSAgICBhZGRTdG9yYWdl
TWFuYWdlckZvclNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxlKTsKKyAgICBh
ZGRTdG9yYWdlTWFuYWdlckZvclNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmdlbmVyYWxT
dG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxl
LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2VyKHNlc3Npb25JRCwgcGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFt
ZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKIAogICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBwYXJh
bWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwpAQCAtNDMwLDggKzQyOSw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMmJiBwYXJhbWV0ZXJzCiAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBw
YXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdU
Rk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKICNlbmRpZgogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgcGFy
YW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQogICAgIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0Ojpl
bnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbigqdGhpcywgV1RGTW92ZShwYXJhbWV0ZXJzKSk7
CiB9CiAKQEAgLTQ1NCwxMSArNDUxLDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbW92ZVNl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICBt
X3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5yZW1vdmUoc2Vzc2lvbklEKTsKIH0KIAotdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6YWRkU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBnZW5lcmFsU3RvcmFnZVBhdGgsIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSYgZ2VuZXJhbFN0b3JhZ2VQYXRoSGFuZGxlKQordm9pZCBOZXR3b3Jr
UHJvY2Vzczo6YWRkU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBnZW5lcmFsU3RvcmFnZVBhdGgsIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSYgZ2VuZXJhbFN0b3JhZ2VQYXRoSGFuZGxlLCBjb25zdCBTdHJpbmcmIGxvY2FsU3Rv
cmFnZVBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgbG9jYWxTdG9yYWdlUGF0aEhhbmRs
ZSkKIHsKICAgICBtX3N0b3JhZ2VNYW5hZ2Vycy5lbnN1cmUoc2Vzc2lvbklELCBbJl0gewogICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoZ2VuZXJhbFN0b3JhZ2VQ
YXRoSGFuZGxlKTsKLSAgICAgICAgcmV0dXJuIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y3JlYXRl
KHNlc3Npb25JRCwgZ2VuZXJhbFN0b3JhZ2VQYXRoKTsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y29uc3VtZVBlcm1hbmVudGx5KGxvY2FsU3RvcmFnZVBhdGhIYW5kbGUpOworICAgICAgICBy
ZXR1cm4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUoc2Vzc2lvbklELCBnZW5lcmFsU3Rv
cmFnZVBhdGgsIGxvY2FsU3RvcmFnZVBhdGgpOwogICAgIH0pOwogfQogCkBAIC01NzUsNyArNTcz
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQogICAgIG1fc2VydmljZVdvcmtlckluZm8ucmVtb3ZlKHNlc3Npb25JRCk7CiAj
ZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPnJlbW92ZShzZXNzaW9uSUQpOwogICAg
IGlmIChhdXRvIHNlcnZlciA9IG1fd2ViSURCU2VydmVycy50YWtlKHNlc3Npb25JRCkpCiAgICAg
ICAgIHNlcnZlci0+Y2xvc2UoKTsKICAgICByZW1vdmVTdG9yYWdlTWFuYWdlckZvclNlc3Npb24o
c2Vzc2lvbklEKTsKQEAgLTEwNjUsMTUgKzEwNjIsMTYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
Y2xlYXJVc2VySW50ZXJhY3Rpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdp
c3QKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aGFzTG9jYWxTdG9yYWdlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAobV9zdG9y
YWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewotICAgICAgICBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW2RvbWFpbiwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIG9yaWdp
bnMpIG11dGFibGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjphbnlPZihv
cmlnaW5zLCBbJmRvbWFpbl0oYXV0byYgb3JpZ2luKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGRvbWFpbi5tYXRjaGVzKG9yaWdpbik7Ci0gICAgICAgICAgICB9KSk7Ci0gICAgICAgIH0pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOworICAg
IGlmIChpdGVyYXRvciA9PSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKworICAgIGF1dG8gdHlwZXMgPSBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiB7IFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlIH07CisgICAg
aXRlcmF0b3ItPnZhbHVlLT5mZXRjaERhdGEodHlwZXMsIFtkb21haW4sIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8gZW50cmllcykgbXV0YWJsZSB7
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6YW55T2YoZW50cmllcywgWyZkb21haW5d
KGF1dG8mIGVudHJ5KSB7CisgICAgICAgICAgICByZXR1cm4gZG9tYWluLm1hdGNoZXMoZW50cnku
b3JpZ2luKTsKKyAgICAgICAgfSkpOworICAgIH0pOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpzZXRDYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTQ5MSwyMCArMTQ4OSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmZldGNoV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8
V2Vic2l0CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNv
bnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpIHsKLSAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNl
dC0+Z2V0U2Vzc2lvblN0b3JhZ2VPcmlnaW5zKHNlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRv
cl0oYXV0byYmIG9yaWdpbnMpIHsKLSAgICAgICAgICAgIHdoaWxlICghb3JpZ2lucy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVu
dHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbnMudGFrZUFueSgpLCBXZWJz
aXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlLCAwIH0pOwotICAgICAgICB9KTsKLSAgICB9Ci0K
LSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2Fs
U3RvcmFnZSkgJiYgbV9zdG9yYWdlTWFuYWdlclNldC0+Y29udGFpbnMoc2Vzc2lvbklEKSkgewot
ICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5nZXRMb2NhbFN0b3JhZ2VPcmlnaW5zKHNlc3Np
b25JRCwgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIG9yaWdpbnMpIHsKLSAgICAgICAgICAg
IHdoaWxlICghb3JpZ2lucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dy
ZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7
IG9yaWdpbnMudGFrZUFueSgpLCBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSwgMCB9KTsK
LSAgICAgICAgfSk7Ci0gICAgfQotCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShTT1VQKQog
ICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SFNUU0Nh
Y2hlKSkKICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dlYnNpdGVEYXRhLmhvc3ROYW1l
c1dpdGhIU1RTQ2FjaGUgPSBob3N0TmFtZXNXaXRoSFNUU0NhY2hlKHNlc3Npb25JRCk7CkBAIC0x
NTU3LDEwICsxNTQxLDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0CiAgICAgfQogI2VuZGlm
CiAKLSAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZU1hbmFnZXJzLmZpbmQoc2Vzc2lv
bklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMuZW5kKCkpIHsKLSAgICAgICAgaXRl
cmF0b3ItPnZhbHVlLT5mZXRjaERhdGEod2Vic2l0ZURhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVn
YXRvcl0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNhbGxiYWNrQWdncmVn
YXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGVudHJpZXMp
KTsKLSAgICAgICAgfSk7CisgICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxl
VHlwZXMod2Vic2l0ZURhdGFUeXBlcykpIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBt
X3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1h
bmFnZXJzLmVuZCgpKSB7CisgICAgICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmZldGNoRGF0YSh3
ZWJzaXRlRGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvIGVudHJpZXMpIG11dGFi
bGUgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5l
bnRyaWVzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGVudHJpZXMpKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CiAgICAgfQogfQogCkBAIC0xNTg3LDEyICsxNTczLDYgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRp
b25TZXQ8V2Vic2kKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkRPTUNhY2hlKSkKICAgICAgICAgQ2FjaGVTdG9yYWdlOjpFbmdpbmU6OmNsZWFyQWxs
Q2FjaGVzKCp0aGlzLCBzZXNzaW9uSUQsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKIAotICAg
IGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0
b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAg
ICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRlbGV0ZVNlc3Npb25TdG9yYWdlKHNlc3Npb25JRCwg
W2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwotCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29u
dGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJT
ZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRl
bGV0ZUxvY2FsU3RvcmFnZU1vZGlmaWVkU2luY2Uoc2Vzc2lvbklELCBtb2RpZmllZFNpbmNlLCBb
Y2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7Ci0KICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250
YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykgJiYgIXNlc3Npb25JRC5p
c0VwaGVtZXJhbCgpKQogICAgICAgICB3ZWJJREJTZXJ2ZXIoc2Vzc2lvbklEKS5jbG9zZUFuZERl
bGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2UobW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5k
bGVyXSB7IH0pOwogCkBAIC0xNjM3LDggKzE2MTcsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
ZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vi
c2kKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFu
YWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQo
KSkKLSAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhTW9kaWZpZWRTaW5jZSh3ZWJz
aXRlRGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7Cisg
ICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMod2Vic2l0ZURhdGFU
eXBlcykpIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5m
aW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKQorICAg
ICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhTW9kaWZpZWRTaW5jZSh3ZWJzaXRl
RGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CisgICAg
fQogfQogCiBzdGF0aWMgdm9pZCBjbGVhckRpc2tDYWNoZUVudHJpZXMoTmV0d29ya0NhY2hlOjpD
YWNoZSogY2FjaGUsIGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5zLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzAzLDEy
ICsxNjg1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmln
aW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICAgICAgICAgICAgIENhY2hlU3Rv
cmFnZTo6RW5naW5lOjpjbGVhckNhY2hlc0Zvck9yaWdpbigqdGhpcywgc2Vzc2lvbklELCBTZWN1
cml0eU9yaWdpbkRhdGEgeyBvcmlnaW5EYXRhIH0sIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsK
ICAgICB9CiAKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OlNlc3Npb25TdG9yYWdlKSAmJiBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNz
aW9uSUQpKQotICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5kZWxldGVTZXNzaW9uU3RvcmFn
ZUZvck9yaWdpbnMoc2Vzc2lvbklELCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7
IH0pOwotCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpMb2NhbFN0b3JhZ2UpICYmIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25J
RCkpCi0gICAgICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmRlbGV0ZUxvY2FsU3RvcmFnZUZvck9y
aWdpbnMoc2Vzc2lvbklELCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwot
CiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRl
eGVkREJEYXRhYmFzZXMpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgd2Vi
SURCU2VydmVyKHNlc3Npb25JRCkuY2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKG9y
aWdpbkRhdGFzLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiAKQEAgLTE3NDYsOCArMTcyMiwx
MCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpbwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGF1
dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9y
ICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKQotICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRl
bGV0ZURhdGEod2Vic2l0ZURhdGFUeXBlcywgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxl
cl0geyB9KTsKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3
ZWJzaXRlRGF0YVR5cGVzKSkgeworICAgICAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fc3RvcmFn
ZU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsgaXRlcmF0b3IgIT0gbV9zdG9yYWdlTWFuYWdlcnMu
ZW5kKCkpCisgICAgICAgICAgICBpdGVyYXRvci0+dmFsdWUtPmRlbGV0ZURhdGEod2Vic2l0ZURh
dGFUeXBlcywgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKKyAgICB9CiAK
ICAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0aGlzLT5uZXR3b3JrU2Vzc2lvbihzZXNz
aW9uSUQpKSB7CiAgICAgICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGRv
bWFpbnNUb0RlbGV0ZU5ldHdvcmtEYXRhRm9yOwpAQCAtMTkwNCwyOCArMTg4Miw2IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFuZFJlc3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJs
ZURvbWFpbnMoUEFMOjpTZXNzCiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIGlmIChtX3N0b3Jh
Z2VNYW5hZ2VyU2V0LT5jb250YWlucyhzZXNzaW9uSUQpKSB7Ci0gICAgICAgIGlmICh3ZWJzaXRl
RGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpKSB7Ci0g
ICAgICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5nZXRTZXNzaW9uU3RvcmFnZU9yaWdpbnMo
c2Vzc2lvbklELCBbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRoaXMsIHNlc3Npb25J
RCwgY2FsbGJhY2tBZ2dyZWdhdG9yLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRl
RGF0YUZvcl0oYXV0byYmIG9yaWdpbnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3RvcmFn
ZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAgICAgICAgIGF1dG8gb3JpZ2luc1RvRGVsZXRlID0gZmlsdGVyRm9y
UmVnaXN0cmFibGVEb21haW5zKG9yaWdpbnMsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdl
YnNpdGVEYXRhRm9yLCBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fZG9tYWlucyk7Ci0gICAgICAgICAg
ICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+ZGVsZXRlU2Vzc2lvblN0b3JhZ2VGb3JPcmlnaW5z
KHNlc3Npb25JRCwgb3JpZ2luc1RvRGVsZXRlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2Vic2l0ZURhdGFUeXBl
cy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKLSAgICAgICAgICAg
IG1fc3RvcmFnZU1hbmFnZXJTZXQtPmdldExvY2FsU3RvcmFnZU9yaWdpbnMoc2Vzc2lvbklELCBb
cHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRoaXMsIHNlc3Npb25JRCwgY2FsbGJhY2tB
Z2dyZWdhdG9yLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvcl0oYXV0
byYmIG9yaWdpbnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3RvcmFnZU1hbmFnZXJTZXQt
PmNvbnRhaW5zKHNlc3Npb25JRCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAgICAgICAgIGF1dG8gb3JpZ2luc1RvRGVsZXRlID0gZmlsdGVyRm9yUmVnaXN0cmFibGVE
b21haW5zKG9yaWdpbnMsIGRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9y
LCBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fZG9tYWlucyk7Ci0gICAgICAgICAgICAgICAgbV9zdG9y
YWdlTWFuYWdlclNldC0+ZGVsZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2lucyhzZXNzaW9uSUQsIG9y
aWdpbnNUb0RlbGV0ZSwgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9Ci0gICAgfQotCiAgICAgYXV0byBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhz
LmdldChzZXNzaW9uSUQpOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkgJiYgd2Vic2l0ZURhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykpIHsKICAg
ICAgICAgd2ViSURCU2VydmVyKHNlc3Npb25JRCkuZ2V0T3JpZ2lucyhbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IFJlZiB7ICp0aGlzIH0sIHNlc3Npb25JRCwgY2FsbGJhY2tBZ2dyZWdhdG9yLCBkb21h
aW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvcl0oYXV0byYmIG9yaWdpbnMpIHsK
QEAgLTE5NzIsMTEgKzE5MjgsMTMgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlQW5kUmVz
dHJpY3RXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6OlNlc3MKICAgICAgICAg
fSk7CiAgICAgfQogCi0gICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VNYW5hZ2Vycy5m
aW5kKHNlc3Npb25JRCk7IGl0ZXJhdG9yICE9IG1fc3RvcmFnZU1hbmFnZXJzLmVuZCgpKSB7Ci0g
ICAgICAgIGl0ZXJhdG9yLT52YWx1ZS0+ZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyh3
ZWJzaXRlRGF0YVR5cGVzLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZv
ciwgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byBkZWxldGVkRG9tYWlucykgbXV0YWJsZSB7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8gZG9tYWluIDogZGVsZXRlZERvbWFpbnMpCi0gICAgICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX2RvbWFpbnMuYWRkKFdURk1vdmUoZG9tYWluKSk7
Ci0gICAgICAgIH0pOworICAgIGlmIChOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5
cGVzKHdlYnNpdGVEYXRhVHlwZXMpKSB7CisgICAgICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9z
dG9yYWdlTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5h
Z2Vycy5lbmQoKSkgeworICAgICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLT5kZWxldGVEYXRhRm9y
UmVnaXN0cmFibGVEb21haW5zKHdlYnNpdGVEYXRhVHlwZXMsIGRvbWFpbnNUb0RlbGV0ZUFsbE5v
bkNvb2tpZVdlYnNpdGVEYXRhRm9yLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvJiYgZGVsZXRl
ZERvbWFpbnMpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byBkb21haW4gOiBk
ZWxldGVkRG9tYWlucykKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5t
X2RvbWFpbnMuYWRkKFdURk1vdmUoZG9tYWluKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQogICAgIH0KIAogICAgIGF1dG8gZGF0YVR5cGVzRm9yVUlQcm9jZXNzID0gV2Vic2l0ZURhdGE6
OmZpbHRlcih3ZWJzaXRlRGF0YVR5cGVzLCBXZWJzaXRlRGF0YVByb2Nlc3NUeXBlOjpVSSk7CkBA
IC0yMzA3LDcgKzIyNjUsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwcmVwYXJlVG9TdXNwZW5k
KGJvb2wgaXNTdXNwZW5zaW9uSW1taW5lbnQsIENvbXBsZXRpb25IYW5kbAogICAgIH0KICNlbmRp
ZgogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+c3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOworICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1fc3RvcmFnZU1hbmFnZXJzLnZhbHVl
cygpKQorICAgICAgICBtYW5hZ2VyLT5zdXNwZW5kKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7
CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5k
KCkKQEAgLTIzNDYsNyArMjMwNSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlc3VtZSgpCiAg
ICAgbV9zaG91bGRTdXNwZW5kSURCU2VydmVycyA9IGZhbHNlOwogI2VuZGlmCiAKLSAgICBtX3N0
b3JhZ2VNYW5hZ2VyU2V0LT5yZXN1bWUoKTsKKyAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX3N0
b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAgbWFuYWdlci0+cmVzdW1lKCk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUp
CkBAIC0yNDQyLDggKzI0MDIsOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKFBBTDo6U2Vzc2lvbklEIHNlcwogCiB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT53YWl0VW50
aWxTeW5jaW5nTG9jYWxTdG9yYWdlRmluaXNoZWQoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcigp
OworICAgIGF1dG8gYWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX3N0b3Jh
Z2VNYW5hZ2Vycy52YWx1ZXMoKSkKKyAgICAgICAgbWFuYWdlci0+c3luY0xvY2FsU3RvcmFnZShb
YWdncmVnYXRvcl0geyB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90YShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKQEAgLTI0NzMsMTAgKzI0MzQsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
OjpyZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgVQogICAgIGlmIChvbGRPcmlnaW4uaXNFbXB0eSgpIHx8IG5ld09yaWdpbi5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURh
dGFUeXBlOjpMb2NhbFN0b3JhZ2UpKSB7Ci0gICAgICAgIGlmIChtX3N0b3JhZ2VNYW5hZ2VyU2V0
LT5jb250YWlucyhzZXNzaW9uSUQpKQotICAgICAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+
cmVuYW1lT3JpZ2luKHNlc3Npb25JRCwgb2xkTmFtZSwgbmV3TmFtZSwgW2FnZ3JlZ2F0b3JdIHsg
fSk7Ci0gICAgfQorICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlTWFuYWdlcnMuZmlu
ZChzZXNzaW9uSUQpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VNYW5hZ2Vycy5lbmQoKSkKKyAgICAg
ICAgaXRlcmF0b3ItPnZhbHVlLT5tb3ZlRGF0YShvbGRPcmlnaW4sIG5ld09yaWdpbiwgW2FnZ3Jl
Z2F0b3JdIHsgfSk7CiAKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6SW5kZXhlZERCRGF0YWJhc2VzKSkgewogICAgICAgICBhdXRvIHBhdGggPSBtX2lkYkRhdGFi
YXNlUGF0aHMuZ2V0KHNlc3Npb25JRCk7CkBAIC0yNzcxLDIxICsyNzMwLDggQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6cmVtb3ZlS2VwdEFsaXZlTG9hZChOZXR3b3JrUmVzb3VyY2VMb2FkZXImIGxv
YWRlcikKICAgICAgICAgc2Vzc2lvbi0+cmVtb3ZlS2VwdEFsaXZlTG9hZChsb2FkZXIpOwogfQog
Ci12b2lkIE5ldHdvcmtQcm9jZXNzOjpnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8TG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKLXsKLSAgICBpZiAoIW1fc3RvcmFnZU1hbmFnZXJTZXQtPmNvbnRhaW5zKHNlc3Npb25J
RCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDYW5ub3QgZ2V0IGxvY2FsIHN0b3JhZ2UgaW5mb3Jt
YXRpb24gZm9yIGFuIHVua25vd24gc2Vzc2lvbiIpOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cih7IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zdG9yYWdlTWFuYWdlclNl
dC0+Z2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29ubmVjdGlvblRvV2Vi
UHJvY2Vzc0Nsb3NlZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKIHsKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZW1vdmVDb25uZWN0aW9u
KGNvbm5lY3Rpb24pOwotCiAgICAgaWYgKGF1dG8qIHNlcnZlciA9IG1fd2ViSURCU2VydmVycy5n
ZXQoc2Vzc2lvbklEKSkKICAgICAgICAgc2VydmVyLT5yZW1vdmVDb25uZWN0aW9uKGNvbm5lY3Rp
b24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgK
aW5kZXggODgwMTdjNDRhMTA1ZjFjMGZkZTU1YjI0YzJmZTA5OWI3NjZmYWY4MS4uNWEyMGE3Y2Y5
NzAxNzBlOTRkZDdhYThlMzhmYmFkYjk1NDZhMDVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMTA3LDcgKzEwNyw2IEBAIGNsYXNzIE5l
dHdvcmtQcm94aW1pdHlNYW5hZ2VyOwogY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZGVyOwogY2xh
c3MgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOwogY2xhc3MgUHJvY2Vzc0Fzc2VydGlvbjsKLWNsYXNz
IFN0b3JhZ2VNYW5hZ2VyU2V0OwogY2xhc3MgV2ViUGFnZU5ldHdvcmtQYXJhbWV0ZXJzOwogY2xh
c3MgV2ViU1dTZXJ2ZXJDb25uZWN0aW9uOwogY2xhc3MgV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25u
ZWN0aW9uOwpAQCAtMjk2LDcgKzI5NSw2IEBAIHB1YmxpYzoKICAgICBib29sIHNlc3Npb25Jc0Nv
bnRyb2xsZWRCeUF1dG9tYXRpb24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwogCiAgICAgdm9pZCBj
b25uZWN0aW9uVG9XZWJQcm9jZXNzQ2xvc2VkKElQQzo6Q29ubmVjdGlvbiYsIFBBTDo6U2Vzc2lv
bklEKTsKLSAgICB2b2lkIGdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoUEFMOjpTZXNzaW9u
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYpOwogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKICAgICBOZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlciYgbmV0d29ya0NvbnRlbnRS
dWxlTGlzdE1hbmFnZXIoKSB7IHJldHVybiBtX25ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2Vy
OyB9CkBAIC01NTQsNyArNTUyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZFNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVp
bnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0
aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCk7CiAKLSAgICB2b2lkIGFkZFN0b3JhZ2VN
YW5hZ2VyRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKKyAgICB2b2lkIGFkZFN0b3JhZ2VNYW5hZ2VyRm9yU2Vz
c2lvbihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUmLCBjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZVBhdGgsIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlU3RvcmFnZU1hbmFnZXJGb3JTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEKTsKIAogICAgIC8vIENvbm5lY3Rpb25zIHRvIFdlYlByb2Nlc3Nlcy4KQEAg
LTU3Nyw4ICs1NzUsNiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0
ZDo6dW5pcXVlX3B0cjxOZXR3b3JrU2Vzc2lvbj4+IG1fbmV0d29ya1Nlc3Npb25zOwogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24+PiBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnM7CiAKLSAgICBSZWY8U3RvcmFn
ZU1hbmFnZXJTZXQ+IG1fc3RvcmFnZU1hbmFnZXJTZXQ7Ci0KICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggZjNj
MjNkMWMxODQ2ZDU0MzVkMGIxMzMxMzE4NDRmNDk1ZDIwNTM5MC4uMmVhNjQ1Yjc4MWFlNzNmZGYy
MjAzZjFlOTRkNDA1ZTM2MWZkOTZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0xNzMsNyArMTczLDYg
QEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogICAgIE1hcmtQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkgLT4gKCkgQXN5bmMKICAgICBTZXRQQ01GcmF1ZFByZXZlbnRpb25WYWx1ZXNG
b3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nIHNlY3JldFRva2VuLCBT
dHJpbmcgdW5saW5rYWJsZVRva2VuLCBTdHJpbmcgc2lnbmF0dXJlLCBTdHJpbmcga2V5SUQpIC0+
ICgpIEFzeW5jCiAgICAgU2V0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBcHBCdW5kbGVJREZvclRl
c3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcgYXBwQnVuZGxlSURGb3JUZXN0
aW5nKSAtPiAoKSBBc3luYwotICAgIEdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiAoVmVjdG9yPFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJh
c2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiBkZXRhaWxzKSBBc3luYwogCiAgICAgU2V0U2Vydmlj
ZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyBzZWNvbmRzKSAtPiAoKSBTeW5j
aHJvbm91cwogICAgIFJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSAt
PiAoKSBTeW5jaHJvbm91cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL0xvY2FsU3RvcmFnZU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiZGRk
MmUzMDQ4ZDI4NzBhZTA3YTBhYWRmNGVkOTdiMzEwNDM2YzkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5j
cHAKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTG9jYWxTdG9yYWdlTWFuYWdlci5oIgorCisjaW5jbHVkZSAiTWVtb3J5U3RvcmFn
ZUFyZWEuaCIKKyNpbmNsdWRlICJTUUxpdGVTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3Jh
Z2VBcmVhUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gU3VnZ2VzdGVkIGJ5IGh0dHBzOi8vd3d3Lncz
Lm9yZy9UUi93ZWJzdG9yYWdlLyNkaXNrLXNwYWNlCitjb25zdGV4cHIgdW5zaWduZWQgbG9jYWxT
dG9yYWdlUXVvdGFJbkJ5dGVzID0gNSAqIE1COworY29uc3RleHByIGF1dG8gZmlsZVN1ZmZpeCA9
ICIubG9jYWxzdG9yYWdlIl9zOworCisvLyBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgZm9y
IGV4aXN0aW5nIGZpbGVzLgorLy8gV2Ugc2hvdWxkIG5vdCBpbmNsdWRlIG9yaWdpbiBpbiBmaWxl
IG5hbWUuCitzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+
IGZpbGVOYW1lVG9PcmlnaW4oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK3sKKyAgICBpZiAoIWZp
bGVOYW1lLmVuZHNXaXRoKGZpbGVTdWZmaXgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgYXV0byBzdWZmaXhMZW5ndGggPSBzdHJsZW4oZmlsZVN1ZmZpeCk7CisgICAgYXV0
byBmaWxlTmFtZUxlbmd0aCA9IGZpbGVOYW1lLmxlbmd0aCgpOworICAgIGlmIChmaWxlTmFtZUxl
bmd0aCA8PSBzdWZmaXhMZW5ndGgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBhdXRvIG9yaWdpbklkZW50aWZpZXIgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWVM
ZW5ndGggLSBzdWZmaXhMZW5ndGgpOworICAgIHJldHVybiBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIob3JpZ2luSWRlbnRpZmllcik7Cit9CisKK3N0
YXRpYyBTdHJpbmcgb3JpZ2luVG9GaWxlTmFtZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4m
IG9yaWdpbikKK3sKKyAgICByZXR1cm4gb3JpZ2luLmNsaWVudE9yaWdpbi5kYXRhYmFzZUlkZW50
aWZpZXIoKSArICIubG9jYWxzdG9yYWdlIjsKK30KKworVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YT4gTG9jYWxTdG9yYWdlTWFuYWdlcjo6b3JpZ2luc09mTG9jYWxTdG9yYWdlRGF0
YShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YT4gb3JpZ2luczsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBvcmlnaW5zOworCisgICAgZm9yIChhdXRvJiBmaWxlTmFtZSA6IEZpbGVTeXN0ZW06Omxpc3RE
aXJlY3RvcnkocGF0aCkpIHsKKyAgICAgICAgaWYgKGF1dG8gb3JpZ2luID0gZmlsZU5hbWVUb09y
aWdpbihmaWxlTmFtZSkpCisgICAgICAgICAgICBvcmlnaW5zLmFwcGVuZCgqb3JpZ2luKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gb3JpZ2luczsKK30KKworU3RyaW5nIExvY2FsU3RvcmFnZU1hbmFn
ZXI6OmxvY2FsU3RvcmFnZUZpbGVQYXRoKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBpZiAoZGlyZWN0b3J5LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyB7IH07CisKKyAgICByZXR1cm4gRmlsZVN5c3Rl
bTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRpcmVjdG9yeSwgb3JpZ2luVG9GaWxlTmFtZShv
cmlnaW4pKTsKK30KKworTG9jYWxTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTWFuYWdlcihj
b25zdCBTdHJpbmcmIHBhdGgsIFN0b3JhZ2VBcmVhUmVnaXN0cnkmIHJlZ2lzdHJ5KQorICAgIDog
bV9wYXRoKHBhdGgpCisgICAgLCBtX3JlZ2lzdHJ5KHJlZ2lzdHJ5KQoreworfQorCitib29sIExv
Y2FsU3RvcmFnZU1hbmFnZXI6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fbG9j
YWxTdG9yYWdlQXJlYSAmJiBtX2xvY2FsU3RvcmFnZUFyZWEtPmhhc0xpc3RlbmVycygpKSB8fCAo
bV90cmFuc2llbnRTdG9yYWdlQXJlYSAmJiBtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5oYXNMaXN0
ZW5lcnMoKSk7Cit9CisKK2Jvb2wgTG9jYWxTdG9yYWdlTWFuYWdlcjo6aGFzRGF0YUluTWVtb3J5
KCkgY29uc3QKK3sKKyAgICBib29sIGhhc0RhdGFJbkxvY2FsU3RvcmFnZUFyZWEgPSBtX2xvY2Fs
U3RvcmFnZUFyZWEgJiYgaXM8TWVtb3J5U3RvcmFnZUFyZWE+KCptX2xvY2FsU3RvcmFnZUFyZWEp
ICYmICFtX2xvY2FsU3RvcmFnZUFyZWEtPmlzRW1wdHkoKTsKKyAgICByZXR1cm4gaGFzRGF0YUlu
TG9jYWxTdG9yYWdlQXJlYSB8fCAobV90cmFuc2llbnRTdG9yYWdlQXJlYSAmJiAhbV90cmFuc2ll
bnRTdG9yYWdlQXJlYS0+aXNFbXB0eSgpKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2Vy
OjpjbGVhckRhdGFJbk1lbW9yeSgpCit7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlQXJlYSAmJiBp
czxNZW1vcnlTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkpCisgICAgICAgIG1fbG9j
YWxTdG9yYWdlQXJlYS0+Y2xlYXIoKTsKKworICAgIGlmIChtX3RyYW5zaWVudFN0b3JhZ2VBcmVh
KQorICAgICAgICBtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5jbGVhcigpOworfQorCit2b2lkIExv
Y2FsU3RvcmFnZU1hbmFnZXI6OmNsZWFyRGF0YU9uRGlzaygpCit7CisgICAgaWYgKG1fbG9jYWxT
dG9yYWdlQXJlYSAmJiBpczxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkp
CisgICAgICAgIG1fbG9jYWxTdG9yYWdlQXJlYS0+Y2xlYXIoKTsKK30KKwordm9pZCBMb2NhbFN0
b3JhZ2VNYW5hZ2VyOjpjbG9zZSgpCit7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlQXJlYSAmJiBp
czxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkpCisgICAgICAgIGRvd25j
YXN0PFNRTGl0ZVN0b3JhZ2VBcmVhPigqbV9sb2NhbFN0b3JhZ2VBcmVhKS5jbG9zZSgpOworfQor
Cit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6OmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKQorewor
ICAgIGlmIChtX2xvY2FsU3RvcmFnZUFyZWEgJiYgaXM8U1FMaXRlU3RvcmFnZUFyZWE+KCptX2xv
Y2FsU3RvcmFnZUFyZWEpKQorICAgICAgICBkb3duY2FzdDxTUUxpdGVTdG9yYWdlQXJlYT4oKm1f
bG9jYWxTdG9yYWdlQXJlYSkuaGFuZGxlTG93TWVtb3J5V2FybmluZygpOworfQorCit2b2lkIExv
Y2FsU3RvcmFnZU1hbmFnZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIGlmIChtX2xvY2Fs
U3RvcmFnZUFyZWEgJiYgaXM8U1FMaXRlU3RvcmFnZUFyZWE+KCptX2xvY2FsU3RvcmFnZUFyZWEp
KQorICAgICAgICBkb3duY2FzdDxTUUxpdGVTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJl
YSkuY29tbWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworfQorCit2b2lkIExvY2FsU3RvcmFn
ZU1hbmFnZXI6OmNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25u
ZWN0aW9uKQoreworICAgIGNvbm5lY3Rpb25DbG9zZWRGb3JMb2NhbFN0b3JhZ2VBcmVhKGNvbm5l
Y3Rpb24pOworICAgIGNvbm5lY3Rpb25DbG9zZWRGb3JUcmFuc2llbnRTdG9yYWdlQXJlYShjb25u
ZWN0aW9uKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2Vk
Rm9yTG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24p
Cit7CisgICAgaWYgKCFtX2xvY2FsU3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fbG9jYWxTdG9yYWdlQXJlYS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7CisgICAgaWYg
KG1fbG9jYWxTdG9yYWdlQXJlYS0+aGFzTGlzdGVuZXJzKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChpczxNZW1vcnlTdG9yYWdlQXJlYT4oKm1fbG9jYWxTdG9yYWdlQXJlYSkgJiYgIW1f
bG9jYWxTdG9yYWdlQXJlYS0+aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jl
Z2lzdHJ5LnVucmVnaXN0ZXJTdG9yYWdlQXJlYShtX2xvY2FsU3RvcmFnZUFyZWEtPmlkZW50aWZp
ZXIoKSk7CisgICAgbV9sb2NhbFN0b3JhZ2VBcmVhID0gbnVsbHB0cjsKK30KKwordm9pZCBMb2Nh
bFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0aW9uQ2xvc2VkRm9yVHJhbnNpZW50U3RvcmFnZUFyZWEo
SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uKQoreworICAgIGlmICghbV90cmFu
c2llbnRTdG9yYWdlQXJlYSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90cmFuc2llbnRTdG9y
YWdlQXJlYS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7CisgICAgaWYgKG1fdHJhbnNpZW50
U3RvcmFnZUFyZWEtPmhhc0xpc3RlbmVycygpIHx8ICFtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVnaXN0cnkudW5yZWdpc3RlclN0
b3JhZ2VBcmVhKG1fdHJhbnNpZW50U3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKSk7CisgICAgbV90
cmFuc2llbnRTdG9yYWdlQXJlYSA9IG51bGxwdHI7Cit9CisKK1N0b3JhZ2VBcmVhSWRlbnRpZmll
ciBMb2NhbFN0b3JhZ2VNYW5hZ2VyOjpjb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiBvcmlnaW4sIFJlZjxXb3JrUXVldWU+JiYgd29ya1F1ZXVlKQoreworICAgIGlmICghbV9sb2Nh
bFN0b3JhZ2VBcmVhKSB7CisgICAgICAgIGlmICghbV9wYXRoLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIG1fbG9jYWxTdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8U1FMaXRlU3RvcmFnZUFyZWE+KGxv
Y2FsU3RvcmFnZVF1b3RhSW5CeXRlcywgb3JpZ2luLCBtX3BhdGgsIFdURk1vdmUod29ya1F1ZXVl
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlQXJlYSA9IG1ha2VV
bmlxdWU8TWVtb3J5U3RvcmFnZUFyZWE+KG9yaWdpbiwgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdl
VHlwZTo6TG9jYWwpOworCisgICAgICAgIG1fcmVnaXN0cnkucmVnaXN0ZXJTdG9yYWdlQXJlYSht
X2xvY2FsU3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKSwgKm1fbG9jYWxTdG9yYWdlQXJlYSk7Cisg
ICAgfQorCisgICAgQVNTRVJUKG1fcGF0aC5pc0VtcHR5KCkgfHwgbV9sb2NhbFN0b3JhZ2VBcmVh
LT50eXBlKCkgPT0gU3RvcmFnZUFyZWFCYXNlOjpUeXBlOjpTUUxpdGUpOworICAgIG1fbG9jYWxT
dG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVjdGlvbik7CisgICAgcmV0dXJuIG1fbG9jYWxT
dG9yYWdlQXJlYS0+aWRlbnRpZmllcigpOworfQorCitTdG9yYWdlQXJlYUlkZW50aWZpZXIgTG9j
YWxTdG9yYWdlTWFuYWdlcjo6Y29ubmVjdFRvVHJhbnNpZW50TG9jYWxTdG9yYWdlQXJlYShJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9y
aWdpbiYgb3JpZ2luKQoreworICAgIGlmICghbV90cmFuc2llbnRTdG9yYWdlQXJlYSkgeworICAg
ICAgICBtX3RyYW5zaWVudFN0b3JhZ2VBcmVhID0gbWFrZVVuaXF1ZTxNZW1vcnlTdG9yYWdlQXJl
YT4ob3JpZ2luLCBTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlOjpMb2NhbCk7CisgICAgICAg
IG1fcmVnaXN0cnkucmVnaXN0ZXJTdG9yYWdlQXJlYShtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5p
ZGVudGlmaWVyKCksICptX3RyYW5zaWVudFN0b3JhZ2VBcmVhKTsKKyAgICB9CisKKyAgICBBU1NF
UlQobV90cmFuc2llbnRTdG9yYWdlQXJlYS0+dHlwZSgpID09IFN0b3JhZ2VBcmVhQmFzZTo6VHlw
ZTo6TWVtb3J5KTsKKyAgICBtX3RyYW5zaWVudFN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25u
ZWN0aW9uKTsKKyAgICByZXR1cm4gbV90cmFuc2llbnRTdG9yYWdlQXJlYS0+aWRlbnRpZmllcigp
OworfQorCit2b2lkIExvY2FsU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFy
ZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50
aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBpZiAobV9sb2NhbFN0b3JhZ2VBcmVhICYmIG1fbG9j
YWxTdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpID09IGlkZW50aWZpZXIpIHsKKyAgICAgICAgY29u
bmVjdGlvbkNsb3NlZEZvckxvY2FsU3RvcmFnZUFyZWEoY29ubmVjdGlvbik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAobV90cmFuc2llbnRTdG9yYWdlQXJlYSAmJiBtX3RyYW5z
aWVudFN0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcikKKyAgICAgICAgY29u
bmVjdGlvbkNsb3NlZEZvclRyYW5zaWVudFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24pOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2NmU2
ZDVlMmJlMTI4Y2E5NzhiN2UyNWVjN2FiNTA5NjNiOGUxZmQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5o
CkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IlN0b3JhZ2VBcmVhSWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3Qg
Q2xpZW50T3JpZ2luOworc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIE1lbW9yeVN0b3JhZ2VBcmVhOworY2xhc3MgU3RvcmFnZUFyZWFC
YXNlOworY2xhc3MgU3RvcmFnZUFyZWFSZWdpc3RyeTsKKworY2xhc3MgTG9jYWxTdG9yYWdlTWFu
YWdlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGlj
IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnNPZkxvY2FsU3RvcmFn
ZURhdGEoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGxvY2FsU3RvcmFn
ZUZpbGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
Jik7CisKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2VyKGNvbnN0IFN0cmluZyYgcGF0aCwgU3RvcmFn
ZUFyZWFSZWdpc3RyeSYpOworICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKKyAgICBib29sIGhh
c0RhdGFJbk1lbW9yeSgpIGNvbnN0OworICAgIHZvaWQgY2xlYXJEYXRhSW5NZW1vcnkoKTsKKyAg
ICB2b2lkIGNsZWFyRGF0YU9uRGlzaygpOworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2b2lkIGhh
bmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKKyAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoKTsKKyAg
ICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7CisKKyAg
ICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgY29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBSZWY8V29y
a1F1ZXVlPiYmKTsKKyAgICBTdG9yYWdlQXJlYUlkZW50aWZpZXIgY29ubmVjdFRvVHJhbnNpZW50
TG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBjb25zdCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgU3RvcmFnZUFyZWFJZGVudGlmaWVyKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWRGb3JMb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQpOworICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZEZvclRyYW5zaWVu
dFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQpOworCisgICAgU3RyaW5nIG1f
cGF0aDsKKyAgICBTdG9yYWdlQXJlYVJlZ2lzdHJ5JiBtX3JlZ2lzdHJ5OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxNZW1vcnlTdG9yYWdlQXJlYT4gbV90cmFuc2llbnRTdG9yYWdlQXJlYTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZUFyZWFCYXNlPiBtX2xvY2FsU3RvcmFnZUFyZWE7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VBcmVhLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iYzVjMDY1ZGIxNzRkYzQzMWY4N2YyMDU2ZjBiMGM3ZDI3MmU5ZGYyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL01lbW9yeVN0b3JhZ2VB
cmVhLmNwcApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTWVtb3J5U3RvcmFnZUFyZWEuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK01lbW9yeVN0b3JhZ2VBcmVhOjpNZW1vcnlTdG9yYWdlQXJlYShjb25zdCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZSB0eXBl
KQorICAgIDogU3RvcmFnZUFyZWFCYXNlKFdlYkNvcmU6OlN0b3JhZ2VNYXA6Om5vUXVvdGEsIG9y
aWdpbikKKyAgICAsIG1fbWFwKFdlYkNvcmU6OlN0b3JhZ2VNYXAoV2ViQ29yZTo6U3RvcmFnZU1h
cDo6bm9RdW90YSkpCisgICAgLCBtX3N0b3JhZ2VUeXBlKHR5cGUpCit7Cit9CisKK2Jvb2wgTWVt
b3J5U3RvcmFnZUFyZWE6OmlzRW1wdHkoKQoreworICAgIHJldHVybiAhbV9tYXAubGVuZ3RoKCk7
Cit9CisKK3ZvaWQgTWVtb3J5U3RvcmFnZUFyZWE6OmNsZWFyKCkKK3sKKyAgICBtX21hcC5jbGVh
cigpOworICAgIG5vdGlmeUxpc3RlbmVyc0Fib3V0Q2xlYXIoKTsKK30KKworSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gTWVtb3J5U3RvcmFnZUFyZWE6OmFsbEl0ZW1zKCkKK3sKKyAgICByZXR1cm4g
bV9tYXAuaXRlbXMoKTsKK30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBNZW1vcnlT
dG9yYWdlQXJlYTo6c2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24s
IFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIFN0cmluZyYmIGtl
eSwgU3RyaW5nJiYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIFN0cmlu
ZyBvbGRWYWx1ZTsKKyAgICBib29sIGhhc1F1b3RhRXJyb3IgPSBmYWxzZTsKKyAgICBtX21hcC5z
ZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBoYXNRdW90YUVycm9yKTsKKyAgICBpZiAoaGFz
UXVvdGFFcnJvcikKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6
UXVvdGFFeGNlZWRlZCk7CisKKyAgICBkaXNwYXRjaEV2ZW50cyhjb25uZWN0aW9uLCBzdG9yYWdl
QXJlYUltcGxJRCwga2V5LCBvbGRWYWx1ZSwgdmFsdWUsIHVybFN0cmluZyk7CisKKyAgICByZXR1
cm4geyB9OworfQorCitFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IE1lbW9yeVN0b3JhZ2VB
cmVhOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3Rv
cmFnZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAg
ICBtX21hcC5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOworICAgIGRpc3BhdGNoRXZlbnRzKGNv
bm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBrZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgdXJs
U3RyaW5nKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK0V4cGVjdGVkPHZvaWQsIFN0b3JhZ2VF
cnJvcj4gTWVtb3J5U3RvcmFnZUFyZWE6OmNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQg
Y29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgaWYgKCFtX21hcC5sZW5ndGgoKSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIG1fbWFwLmNsZWFyKCk7CisgICAgZGlzcGF0Y2hFdmVudHMo
Y29ubmVjdGlvbiwgaW1wbElkZW50aWZpZXIsIFN0cmluZygpLCBTdHJpbmcoKSwgU3RyaW5nKCks
IHVybFN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8TWVt
b3J5U3RvcmFnZUFyZWE+IE1lbW9yeVN0b3JhZ2VBcmVhOjpjbG9uZSgpIGNvbnN0Cit7CisgICAg
YXV0byBzdG9yYWdlQXJlYSA9IG1ha2VVbmlxdWU8TWVtb3J5U3RvcmFnZUFyZWE+KG9yaWdpbigp
LCBtX3N0b3JhZ2VUeXBlKTsKKyAgICBzdG9yYWdlQXJlYS0+bV9tYXAgPSBtX21hcDsKKworICAg
IHJldHVybiBzdG9yYWdlQXJlYTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFy
ZWEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9NZW1vcnlTdG9yYWdl
QXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjIzNzY4OTlkMjg5MTMzYjVlOTdmNDMwNWNiMmU1MWM3NDJlMWQ5
Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvTWVtb3J5U3RvcmFnZUFyZWEuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhQmFzZS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvU3RvcmFnZU1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTdG9y
YWdlTWFwOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTWVtb3J5U3RvcmFnZUFy
ZWEgZmluYWwgOiBwdWJsaWMgU3RvcmFnZUFyZWFCYXNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBNZW1vcnlTdG9yYWdlQXJlYShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBTdG9yYWdl
QXJlYUJhc2U6OlN0b3JhZ2VUeXBlID0gU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZTo6U2Vz
c2lvbik7CisKKyAgICBTdG9yYWdlQXJlYUJhc2U6OlR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIFN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6TWVtb3J5OyB9OworICAgIGJvb2wgaXNFbXB0
eSgpIGZpbmFsOworICAgIHZvaWQgY2xlYXIoKSBmaW5hbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWVtb3J5U3RvcmFnZUFyZWE+IGNsb25lKCkgY29uc3Q7CisgICAgCisKK3ByaXZhdGU6CisgICAg
Ly8gU3RvcmFnZUFyZWFCYXNlCisgICAgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZSBzdG9y
YWdlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3RvcmFnZVR5cGU7IH0KKyAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBhbGxJdGVtcygpIGZpbmFsOworICAgIEV4cGVjdGVkPHZvaWQs
IFN0b3JhZ2VFcnJvcj4gc2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdl
QXJlYUltcGxJZGVudGlmaWVyLCBTdHJpbmcmJiBrZXksIFN0cmluZyYmIHZhbHVlLCBjb25zdCBT
dHJpbmcmIHVybFN0cmluZykgZmluYWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9y
PiByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgZmlu
YWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBjbGVhcihJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVy
bFN0cmluZykgZmluYWw7CisKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlN0b3JhZ2VNYXAgbV9tYXA7
CisgICAgU3RvcmFnZUFyZWFCYXNlOjpTdG9yYWdlVHlwZSBtX3N0b3JhZ2VUeXBlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2Vi
S2l0OjpNZW1vcnlTdG9yYWdlQXJlYSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
S2l0OjpTdG9yYWdlQXJlYUJhc2UmIGFyZWEpIHsgcmV0dXJuIGFyZWEudHlwZSgpID09IFdlYktp
dDo6U3RvcmFnZUFyZWFCYXNlOjpUeXBlOjpNZW1vcnk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggYzEwYWNiZGQ2NGZlMDRl
ZmYxNmExYzhiNzRkMmJmYzE5NTNkYmQ3My4uNTY0MTg1Y2E5MDc1Y2FkMDhmNzg0NzNlMTUyMDc1
ZDE3MjU3MDI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKQEAgLTI4LDEyICsyOCwx
OSBAQAogCiAjaW5jbHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5oIgogI2lu
Y2x1ZGUgIkZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFn
ZU1hbmFnZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJPcmlnaW5TdG9yYWdlTWFuYWdlci5oIgor
I2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVh
QmFzZS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJT
dG9yYWdlQXJlYVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDxwYWwvY3J5cHRv
L0NyeXB0b0RpZ2VzdC5oPgogI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9T
dXNwZW5kYWJsZVdvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0
ZW50Q29kZXJzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKQEAgLTQzLDcgKzUw
LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiByZWFkT3Jp
Z2luRnJvbUZpbGUoY29uc3QgU3RyaW5nJiBmaWwKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAotICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxlUGF0aCkpCisg
ICAgaWYgKGZpbGVQYXRoLmlzRW1wdHkoKSB8fCAhRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxl
UGF0aCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBhdXRvIG9yaWdpbkZp
bGVIYW5kbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShmaWxlUGF0aCwgRmlsZVN5c3RlbTo6Rmls
ZU9wZW5Nb2RlOjpSZWFkKTsKQEAgLTY2LDcgKzczLDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiByZWFkT3JpZ2luRnJvbUZpbGUoY29uc3QgU3RyaW5nJiBm
aWwKIAogc3RhdGljIHZvaWQgd3JpdGVPcmlnaW5Ub0ZpbGVJZk5lY2Vzc2FyeShjb25zdCBTdHJp
bmcmIGZpbGVQYXRoLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKLSAg
ICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxlUGF0aCkpCisgICAgaWYgKGZpbGVQYXRo
LmlzRW1wdHkoKSB8fCBGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGZpbGVQYXRoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKEZpbGVTeXN0ZW06
OnBhcmVudFBhdGgoZmlsZVBhdGgpKTsKQEAgLTc2LDcgKzgzLDcgQEAgc3RhdGljIHZvaWQgd3Jp
dGVPcmlnaW5Ub0ZpbGVJZk5lY2Vzc2FyeShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBjb25zdCBX
ZWJDb3JlOjoKICAgICB9KTsKIAogICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChv
cmlnaW5GaWxlSGFuZGxlKSkgewotICAgICAgICBMT0dfRVJST1IoIndyaXRlT3JpZ2luVG9GaWxl
SWZOZWNlc3Nhcnk6IEZhaWxlZCB0byBvcGVuIG9yaWdpbiBmaWxlIik7CisgICAgICAgIExPR19F
UlJPUigid3JpdGVPcmlnaW5Ub0ZpbGVJZk5lY2Vzc2FyeTogRmFpbGVkIHRvIG9wZW4gb3JpZ2lu
IGZpbGUgJyVzJyIsIGZpbGVQYXRoLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC05MywyMCArMTAwLDIyIEBAIHN0YXRpYyB2b2lkIGRlbGV0ZU9yaWdpbkZpbGVJ
Zk5lY2Vzc2FyeShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQogICAgICAgICBGaWxlU3lzdGVtOjpk
ZWxldGVGaWxlKGZpbGVQYXRoKTsKIH0KIAotUmVmPE5ldHdvcmtTdG9yYWdlTWFuYWdlcj4gTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBTdHJpbmcmIHBhdGgpCitSZWY8TmV0d29ya1N0b3JhZ2VNYW5hZ2VyPiBOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgU3RyaW5nJiBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKQogewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IE5ldHdvcmtTdG9yYWdlTWFuYWdlcihzZXNzaW9uSUQsIHBhdGgpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrU3RvcmFnZU1hbmFnZXIoc2Vzc2lvbklE
LCBwYXRoLCBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoKSk7CiB9CiAKLU5ldHdvcmtTdG9yYWdlTWFu
YWdlcjo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgU3RyaW5nJiBwYXRoKQorTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpOZXR3b3JrU3RvcmFnZU1h
bmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IFN0cmluZyYgY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCkKICAgICA6IG1fc2Vzc2lvbklEKHNlc3Np
b25JRCkKLSAgICAsIG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQu
U3RvcmFnZSIpKQorICAgICwgbV9xdWV1ZShTdXNwZW5kYWJsZVdvcmtRdWV1ZTo6Y3JlYXRlKCJj
b20uYXBwbGUuV2ViS2l0LlN0b3JhZ2UiKSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogCi0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYg
eyAqdGhpcyB9LCBwYXRoID0gcGF0aC5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKKyAgICBt
X3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHBh
dGggPSBwYXRoLmlzb2xhdGVkQ29weSgpLCBjdXN0b21Mb2NhbFN0b3JhZ2VQYXRoID0gY3Jvc3NU
aHJlYWRDb3B5KGN1c3RvbUxvY2FsU3RvcmFnZVBhdGgpXSgpIG11dGFibGUgewogICAgICAgICBt
X2ZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkgPSBtYWtlVW5pcXVlPEZpbGVTeXN0ZW1T
dG9yYWdlSGFuZGxlUmVnaXN0cnk+KCk7CisgICAgICAgIG1fc3RvcmFnZUFyZWFSZWdpc3RyeSA9
IG1ha2VVbmlxdWU8U3RvcmFnZUFyZWFSZWdpc3RyeT4oKTsKICAgICAgICAgbV9wYXRoID0gcGF0
aDsKKyAgICAgICAgbV9jdXN0b21Mb2NhbFN0b3JhZ2VQYXRoID0gY3VzdG9tTG9jYWxTdG9yYWdl
UGF0aDsKICAgICAgICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhdXRv
IHNhbHRQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcGF0aCwg
InNhbHQiKTsKICAgICAgICAgICAgIG1fc2FsdCA9IEZpbGVTeXN0ZW06OnJlYWRPck1ha2VTYWx0
KHNhbHRQYXRoKS52YWx1ZV9vcihGaWxlU3lzdGVtOjpTYWx0KCkpOwpAQCAtMTIwLDYgKzEyOSwx
MSBAQCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6On5OZXR3b3JrU3RvcmFnZU1hbmFnZXIoKQogICAg
IEFTU0VSVChtX2Nsb3NlZCk7CiB9CiAKK2Jvb2wgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5I
YW5kbGVUeXBlcyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcykKK3sKKyAgICByZXR1
cm4gdHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UpIHx8IHR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpIHx8IHR5cGVzLmNvbnRh
aW5zKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSk7Cit9CisKIHZvaWQgTmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpjbG9zZSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKQEAg
LTEzMyw3ICsxNDcsNiBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2xvc2UoKQogCiAg
ICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9
XSgpIG11dGFibGUgewogICAgICAgICBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLmNsZWFy
KCk7Ci0gICAgICAgIG1fc2Vzc2lvbk9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5jbGVhcigpOwogICAg
ICAgICBtX2ZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkgPSBudWxscHRyOwogCiAgICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJv
dGVjdGVkVGhpcyldIHsgfSk7CkBAIC0xNzcsNyArMTkwLDcgQEAgc3RhdGljIFN0cmluZyBlbmNv
ZGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEZpbGVTeXN0ZW06OlNhbHQgc2FsdCkKIHN0YXRpYyBT
dHJpbmcgb3JpZ2luRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgRmlsZVN5c3RlbTo6U2FsdCBzYWx0KQogewog
ICAgIGlmIChyb290UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiByb290UGF0aDsKKyAg
ICAgICAgcmV0dXJuIFN0cmluZyB7IH07CiAKICAgICBhdXRvIGVuY29kZWRUb3BPcmlnaW4gPSBl
bmNvZGUob3JpZ2luLnRvcE9yaWdpbi50b1N0cmluZygpLCBzYWx0KTsKICAgICBhdXRvIGVuY29k
ZWRPcGVuaW5nT3JpZ2luID0gZW5jb2RlKG9yaWdpbi5jbGllbnRPcmlnaW4udG9TdHJpbmcoKSwg
c2FsdCk7CkBAIC0xODYsNiArMTk5LDggQEAgc3RhdGljIFN0cmluZyBvcmlnaW5EaXJlY3RvcnlQ
YXRoKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE8KIAogc3Rh
dGljIFN0cmluZyBvcmlnaW5GaWxlUGF0aChjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKIHsKKyAg
ICBpZiAoZGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyB7IH07CiAg
ICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChkaXJlY3Rvcnks
ICJvcmlnaW4iX3MpOwogfQogCkBAIC0xOTYsMTYgKzIxMSwzNCBAQCBPcmlnaW5TdG9yYWdlTWFu
YWdlciYgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKGNv
bnN0IFdlYgogICAgIHJldHVybiAqbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5lbnN1cmUo
b3JpZ2luLCBbJl0gewogICAgICAgICBhdXRvIG9yaWdpbkRpcmVjdG9yeSA9IG9yaWdpbkRpcmVj
dG9yeVBhdGgobV9wYXRoLCBvcmlnaW4sIG1fc2FsdCk7CiAgICAgICAgIHdyaXRlT3JpZ2luVG9G
aWxlSWZOZWNlc3Nhcnkob3JpZ2luRmlsZVBhdGgob3JpZ2luRGlyZWN0b3J5KSwgb3JpZ2luKTsK
LSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8T3JpZ2luU3RvcmFnZU1hbmFnZXI+KFdURk1vdmUo
b3JpZ2luRGlyZWN0b3J5KSk7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPE9yaWdpblN0b3Jh
Z2VNYW5hZ2VyPihXVEZNb3ZlKG9yaWdpbkRpcmVjdG9yeSksIExvY2FsU3RvcmFnZU1hbmFnZXI6
OmxvY2FsU3RvcmFnZUZpbGVQYXRoKG1fY3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgb3JpZ2luKSk7
CiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCi12b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6cmVtb3ZlT3JpZ2luU3RvcmFnZU1hbmFnZXJJZlBvc3NpYmxlKGNvbnN0IFdlYkNvcmU6OkNs
aWVudE9yaWdpbiYgb3JpZ2luKQorYm9vbCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnJlbW92ZU9y
aWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4m
IG9yaWdpbikKIHsKLSAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fbG9jYWxPcmlnaW5TdG9yYWdl
TWFuYWdlcnMuZmluZChvcmlnaW4pOyBpdGVyYXRvciAhPSBtX2xvY2FsT3JpZ2luU3RvcmFnZU1h
bmFnZXJzLmVuZCgpKSB7Ci0gICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLT5pc0FjdGl2ZSgp
KQotICAgICAgICAgICAgbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5yZW1vdmUoaXRlcmF0
b3IpOwotICAgIH0KKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9sb2NhbE9yaWdpblN0b3JhZ2VNYW5h
Z2Vycy5maW5kKG9yaWdpbik7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fbG9jYWxPcmlnaW5TdG9y
YWdlTWFuYWdlcnMuZW5kKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGl0ZXJh
dG9yLT52YWx1ZS0+aXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9s
b2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy5yZW1vdmUoaXRlcmF0b3IpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6ZGVsZXRlT3JpZ2luRGlyZWN0
b3J5SWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAg
ICBib29sIGlzRW1wdHkgPSBsb2NhbE9yaWdpblN0b3JhZ2VNYW5hZ2VyKG9yaWdpbikuaXNFbXB0
eSgpOworICAgIGJvb2wgcmVtb3ZlZCA9IHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3Nz
aWJsZShvcmlnaW4pOworICAgIGlmICghcmVtb3ZlZCB8fCAhaXNFbXB0eSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byBvcmlnaW5EaXJlY3RvcnkgPSBvcmlnaW5EaXJlY3RvcnlQYXRoKG1f
cGF0aCwgb3JpZ2luLCBtX3NhbHQpOworICAgIGF1dG8gZmlsZVBhdGggPSBvcmlnaW5GaWxlUGF0
aChvcmlnaW5EaXJlY3RvcnkpOworICAgIGRlbGV0ZU9yaWdpbkZpbGVJZk5lY2Vzc2FyeShmaWxl
UGF0aCk7CisgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEaXJlY3Rvcnkob3JpZ2luRGlyZWN0
b3J5KTsKIH0KIAogdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnBlcnNpc3RlZChjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzMiw5ICsyNjUsNiBAQCB2b2lkIE5ldHdvcmtT
dG9yYWdlTWFuYWdlcjo6Y2xlYXJTdG9yYWdlRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgYwogICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2luU3Rv
cmFnZU1hbmFnZXJzLnZhbHVlcygpKQogICAgICAgICAgICAgbWFuYWdlci0+c2V0UGVyc2lzdGVk
KGZhbHNlKTsKIAotICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX3Nlc3Npb25PcmlnaW5T
dG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpCi0gICAgICAgICAgICBtYW5hZ2VyLT5zZXRQZXJzaXN0
ZWQoZmFsc2UpOwotCiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVk
VGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOwogICAgICAgICB9KTsKQEAgLTM4MiwxNCArNDEyLDYgQEAgdm9pZCBOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OmdldEhhbmRsZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdl
YkNvcmU6OkZpbGUKICAgICBjb21wbGV0aW9uSGFuZGxlcihoYW5kbGUtPmdldEhhbmRsZShjb25u
ZWN0aW9uLnVuaXF1ZUlEKCksIFdURk1vdmUobmFtZSkpKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0
aW9uYWw8V2Vic2l0ZURhdGFUeXBlPiB0b1dlYnNpdGVEYXRhVHlwZShjb25zdCBTdHJpbmcmIHN0
b3JhZ2VUeXBlKQotewotICAgIGlmIChzdG9yYWdlVHlwZSA9PSAiRmlsZVN5c3RlbSIpCi0gICAg
ICAgIHJldHVybiBXZWJzaXRlRGF0YVR5cGU6OkZpbGVTeXN0ZW07Ci0KLSAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotfQotCiB2b2lkIE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Zm9yRWFjaE9yaWdp
bkRpcmVjdG9yeShjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYgYXBwbHkpCiB7
CiAgICAgZm9yIChhdXRvJiB0b3BPcmlnaW4gOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KG1f
cGF0aCkpIHsKQEAgLTQwMSwzMCArNDIzLDQzIEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
Ojpmb3JFYWNoT3JpZ2luRGlyZWN0b3J5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyCiAg
ICAgICAgIH0KIAogICAgICAgICBmb3IgKGF1dG8mIG9wZW5pbmdPcmlnaW4gOiBvcGVuaW5nT3Jp
Z2lucykgeworICAgICAgICAgICAgaWYgKG9wZW5pbmdPcmlnaW4uc3RhcnRzV2l0aCgnLicpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgICAgICBhdXRvIG9wZW5pbmdPcmln
aW5EaXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQodG9wT3Jp
Z2luRGlyZWN0b3J5LCBvcGVuaW5nT3JpZ2luKTsKICAgICAgICAgICAgIGFwcGx5KG9wZW5pbmdP
cmlnaW5EaXJlY3RvcnkpOwogICAgICAgICB9CiAgICAgfQogfQogCitIYXNoU2V0PFdlYkNvcmU6
OkNsaWVudE9yaWdpbj4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpnZXRBbGxPcmlnaW5zKCkKK3sK
KyAgICBIYXNoU2V0PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gYWxsT3JpZ2luczsKKyAgICBmb3Ig
KGF1dG8mIG9yaWdpbiA6IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMua2V5cygpKQorICAg
ICAgICBhbGxPcmlnaW5zLmFkZChvcmlnaW4pOworCisgICAgZm9yRWFjaE9yaWdpbkRpcmVjdG9y
eShbJl0oYXV0byBkaXJlY3RvcnkpIHsKKyAgICAgICAgaWYgKGF1dG8gb3JpZ2luID0gcmVhZE9y
aWdpbkZyb21GaWxlKG9yaWdpbkZpbGVQYXRoKGRpcmVjdG9yeSkpKQorICAgICAgICAgICAgYWxs
T3JpZ2lucy5hZGQoKm9yaWdpbik7CisgICAgfSk7CisKKyAgICBmb3IgKGF1dG8mIG9yaWdpbiA6
IExvY2FsU3RvcmFnZU1hbmFnZXI6Om9yaWdpbnNPZkxvY2FsU3RvcmFnZURhdGEobV9jdXN0b21M
b2NhbFN0b3JhZ2VQYXRoKSkKKyAgICAgICAgYWxsT3JpZ2lucy5hZGQoV2ViQ29yZTo6Q2xpZW50
T3JpZ2luIHsgb3JpZ2luLCBvcmlnaW4gfSk7CisKKyAgICByZXR1cm4gYWxsT3JpZ2luczsKK30K
KwogVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpmZXRj
aERhdGFGcm9tRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0YXJnZXRUeXBlcykKIHsK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIEhhc2hNYXA8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPj4gb3JpZ2luVHlw
ZXM7Ci0gICAgZm9yRWFjaE9yaWdpbkRpcmVjdG9yeShbJl0oYXV0byBkaXJlY3RvcnkpIG11dGFi
bGUgewotICAgICAgICBhdXRvIG9yaWdpbiA9IHJlYWRPcmlnaW5Gcm9tRmlsZShvcmlnaW5GaWxl
UGF0aChkaXJlY3RvcnkpKTsKLSAgICAgICAgaWYgKCFvcmlnaW4pCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgZm9yIChhdXRvJiBzdG9yYWdlVHlwZSA6IEZpbGVTeXN0ZW06Omxpc3RE
aXJlY3RvcnkoZGlyZWN0b3J5KSkgewotICAgICAgICAgICAgaWYgKGF1dG8gdHlwZSA9IHRvV2Vi
c2l0ZURhdGFUeXBlKHN0b3JhZ2VUeXBlKTsgdHlwZSAmJiB0YXJnZXRUeXBlcy5jb250YWlucygq
dHlwZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBSZXR1cm4gYm90aCB0b3Agb3JpZ2luIGFuZCBv
cGVuaW5nIG9yaWdpbiBmb3IgdGhpcyBkYXRhLgotICAgICAgICAgICAgICAgIG9yaWdpblR5cGVz
LmFkZChvcmlnaW4tPmNsaWVudE9yaWdpbiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4geyB9
KS5pdGVyYXRvci0+dmFsdWUuYWRkKCp0eXBlKTsKLSAgICAgICAgICAgICAgICBvcmlnaW5UeXBl
cy5hZGQob3JpZ2luLT50b3BPcmlnaW4sIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHsgfSku
aXRlcmF0b3ItPnZhbHVlLmFkZCgqdHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9KTsKKyAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IGdldEFsbE9yaWdpbnMoKSkgeworICAgICAg
ICBhdXRvIHR5cGVzID0gbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihvcmlnaW4pLmZldGNoRGF0
YVR5cGVzSW5MaXN0KHRhcmdldFR5cGVzKTsKKyAgICAgICAgb3JpZ2luVHlwZXMuYWRkKG9yaWdp
bi5jbGllbnRPcmlnaW4sIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHsgfSkuaXRlcmF0b3It
PnZhbHVlLmFkZCh0eXBlcyk7CisgICAgICAgIG9yaWdpblR5cGVzLmFkZChvcmlnaW4udG9wT3Jp
Z2luLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQo
dHlwZXMpOworICAgICAgICByZW1vdmVPcmlnaW5TdG9yYWdlTWFuYWdlcklmUG9zc2libGUob3Jp
Z2luKTsKKyAgICB9CiAKICAgICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBlbnRyaWVzOwog
ICAgIGZvciAoYXV0byBbb3JpZ2luLCB0eXBlc10gOiBvcmlnaW5UeXBlcykgewpAQCAtNDQ4LDM1
ICs0ODMsMjIgQEAgdm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmZldGNoRGF0YShPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgQ29tcGxldGkKICAgICB9KTsKIH0KIAotVmVjdG9y
PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRh
T25EaXNrKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHR5cGVzLCBXYWxsVGltZSBtb2RpZmll
ZFNpbmNlVGltZSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mKT4mIGZpbHRlcikKK0hhc2hTZXQ8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiBOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OmRlbGV0ZURhdGFPbkRpc2soT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4g
dHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2VUaW1lLCBjb25zdCBGdW5jdGlvbjxib29sKGNv
bnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpPiYgZmlsdGVyKQogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCi0gICAgVmVjdG9yPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gZGVs
ZXRlZE9yaWdpbnM7Ci0gICAgZm9yRWFjaE9yaWdpbkRpcmVjdG9yeShbJl0oYXV0byBkaXJlY3Rv
cnkpIG11dGFibGUgewotICAgICAgICBhdXRvIGZpbGVQYXRoID0gb3JpZ2luRmlsZVBhdGgoZGly
ZWN0b3J5KTsKLSAgICAgICAgYXV0byBvcmlnaW4gPSByZWFkT3JpZ2luRnJvbUZpbGUoZmlsZVBh
dGgpOwotICAgICAgICBpZiAoIW9yaWdpbikgewotICAgICAgICAgICAgLy8gSWYgb3JpZ2luIGNh
bm5vdCBiZSByZXRyaWV2ZWQsIGJ1dCB3ZSBhcmUgYXNrZWQgdG8gcmVtb3ZlIGRhdGEgZm9yIGFs
bCBvcmlnaW5zLCByZW1vdmUgaXQuCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9y
YWdlLCAiTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpkZWxldGVEYXRhT25EaXNrIGZhaWxlZCB0byBy
ZWFkIG9yaWdpbiBmcm9tICclcyciLCBmaWxlUGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAg
ICAgIGlmIChmaWx0ZXIoV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgfSkpIHsKLSAgICAgICAgICAg
ICAgICBhdXRvIHRlbXBPcmlnaW5TdG9yYWdlTWFuYWdlciA9IG1ha2VVbmlxdWU8T3JpZ2luU3Rv
cmFnZU1hbmFnZXI+KFN0cmluZyB7IGRpcmVjdG9yeSB9KTsKLSAgICAgICAgICAgICAgICB0ZW1w
T3JpZ2luU3RvcmFnZU1hbmFnZXItPmRlbGV0ZURhdGEodHlwZXMsIG1vZGlmaWVkU2luY2VUaW1l
KTsKLSAgICAgICAgICAgICAgICBkZWxldGVPcmlnaW5GaWxlSWZOZWNlc3NhcnkoZmlsZVBhdGgp
OwotICAgICAgICAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KGRpcmVj
dG9yeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoIWZpbHRlcigqb3JpZ2luKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBI
YXNoU2V0PFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gZGVsZXRlZE9yaWdpbnM7CisgICAgZm9yIChh
dXRvJiBvcmlnaW4gOiBnZXRBbGxPcmlnaW5zKCkpIHsKKyAgICAgICAgaWYgKCFmaWx0ZXIob3Jp
Z2luKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGRlbGV0ZWRPcmlnaW5zLmFw
cGVuZCgqb3JpZ2luKTsKLSAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcigqb3JpZ2lu
KS5kZWxldGVEYXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlVGltZSk7Ci0gICAgICAgIHJlbW92ZU9y
aWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZSgqb3JpZ2luKTsKLSAgICAgICAgZGVsZXRlT3Jp
Z2luRmlsZUlmTmVjZXNzYXJ5KGZpbGVQYXRoKTsKLSAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRl
RW1wdHlEaXJlY3RvcnkoZGlyZWN0b3J5KTsKLSAgICB9KTsKKyAgICAgICAgYXV0byBleGlzdGlu
Z0RhdGFUeXBlcyA9IGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5mZXRjaERhdGFU
eXBlc0luTGlzdCh0eXBlcyk7CisgICAgICAgIGlmICghZXhpc3RpbmdEYXRhVHlwZXMuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBkZWxldGVkT3JpZ2lucy5hZGQob3JpZ2luKTsKKyAgICAgICAg
ICAgIGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5kZWxldGVEYXRhKHR5cGVzLCBt
b2RpZmllZFNpbmNlVGltZSk7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlT3JpZ2luRGlyZWN0
b3J5SWZQb3NzaWJsZShvcmlnaW4pOworICAgIH0KIAogICAgIHJldHVybiBkZWxldGVkT3JpZ2lu
czsKIH0KQEAgLTU0MSw1ICs1NjMsMTYwIEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpk
ZWxldGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zKE9wdGlvblNldDxXZWJzaXRlRGF0CiAgICAg
fSk7CiB9CiAKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjptb3ZlRGF0YShjb25zdCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIHNvdXJjZSwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhJiB0YXJnZXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVCgh
bV9jbG9zZWQpOworCisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBSZWYgeyAqdGhpcyB9LCBzb3VyY2UgPSBjcm9zc1RocmVhZENvcHkoc291cmNlKSwgdGFyZ2V0
ID0gY3Jvc3NUaHJlYWRDb3B5KHRhcmdldCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gc291cmNlT3JpZ2lu
ID0gV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgc291cmNlLCBzb3VyY2UgfTsKKyAgICAgICAgYXV0
byB0YXJnZXRPcmlnaW4gPSBXZWJDb3JlOjpDbGllbnRPcmlnaW4geyB0YXJnZXQsIHRhcmdldCB9
OworICAgICAgICAKKyAgICAgICAgLy8gQ2xlYXIgZXhpc3RpbmcgZGF0YSBvZiB0YXJnZXQgb3Jp
Z2luLgorICAgICAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcyA9IHsgV2Vic2l0
ZURhdGFUeXBlOjpGaWxlU3lzdGVtLCBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSwgV2Vi
c2l0ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZSAgfTsKKyAgICAgICAgbG9jYWxPcmlnaW5TdG9y
YWdlTWFuYWdlcih0YXJnZXRPcmlnaW4pLmRlbGV0ZURhdGEodHlwZXMsIC1XYWxsVGltZTo6aW5m
aW5pdHkoKSk7CisgICAgICAgIHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZSh0
YXJnZXRPcmlnaW4pOworCisgICAgICAgIC8vIE1vdmUgZGF0YSBmcm9tIHNvdXJjZSBvcmlnaW4g
dG8gdGFyZ2V0IG9yaWdpbi4KKyAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihzb3Vy
Y2VPcmlnaW4pLm1vdmVEYXRhKG9yaWdpbkRpcmVjdG9yeVBhdGgobV9wYXRoLCB0YXJnZXRPcmln
aW4sIG1fc2FsdCksIExvY2FsU3RvcmFnZU1hbmFnZXI6OmxvY2FsU3RvcmFnZUZpbGVQYXRoKG1f
Y3VzdG9tTG9jYWxTdG9yYWdlUGF0aCwgdGFyZ2V0T3JpZ2luKSk7CisgICAgICAgIHJlbW92ZU9y
aWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShzb3VyY2VPcmlnaW4pOworCisgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpzdXNwZW5kKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgbV9xdWV1ZS0+c3VzcGVuZChbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IFJlZiB7ICp0aGlzIH1dIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbV9sb2Nh
bE9yaWdpblN0b3JhZ2VNYW5hZ2Vycy52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8g
bG9jYWxTdG9yYWdlTWFuYWdlciA9IG1hbmFnZXItPmV4aXN0aW5nTG9jYWxTdG9yYWdlTWFuYWdl
cigpKQorICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZU1hbmFnZXItPnN5bmNMb2NhbFN0b3Jh
Z2UoKTsKKyAgICAgICAgfQorICAgIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30K
Kwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnJlc3VtZSgpCit7CisgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcXVldWUtPnJlc3VtZSgpOworfQorCit2b2lkIE5l
dHdvcmtTdG9yYWdlTWFuYWdlcjo6aGFuZGxlTG93TWVtb3J5V2FybmluZygpCit7CisgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfV0geworICAgICAgICBmb3IgKGF1dG8mIG1hbmFn
ZXIgOiBtX2xvY2FsT3JpZ2luU3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byBsb2NhbFN0b3JhZ2VNYW5hZ2VyID0gbWFuYWdlci0+ZXhpc3RpbmdMb2NhbFN0
b3JhZ2VNYW5hZ2VyKCkpCisgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTWFuYWdlci0+aGFu
ZGxlTG93TWVtb3J5V2FybmluZygpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYg
eyAqdGhpcyB9LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgeworICAgICAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtX2xvY2FsT3JpZ2lu
U3RvcmFnZU1hbmFnZXJzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBsb2NhbFN0
b3JhZ2VNYW5hZ2VyID0gbWFuYWdlci0+ZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCkpCisg
ICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlTWFuYWdlci0+c3luY0xvY2FsU3RvcmFnZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OmNvbm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
JiYgdG9wT3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBcmVhSWRlbnRpZmll
cik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luID0geyB0b3BPcmlnaW4sIHRv
cE9yaWdpbiB9OworICAgIGNvbXBsZXRpb25IYW5kbGVyKGxvY2FsT3JpZ2luU3RvcmFnZU1hbmFn
ZXIob3JpZ2luKS5sb2NhbFN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VBcmVhUmVnaXN0cnkpLmNv
bm5lY3RUb0xvY2FsU3RvcmFnZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBvcmlnaW4sIG1f
cXVldWUuY29weVJlZigpKSk7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjb25u
ZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYmIHRvcE9yaWdpbiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYgb3BlbmluZ09yaWdp
biwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQXJlYUlkZW50aWZpZXIpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIFdlYkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4gPSB7IHRv
cE9yaWdpbiwgb3BlbmluZ09yaWdpbiB9OworICAgIGNvbXBsZXRpb25IYW5kbGVyKGxvY2FsT3Jp
Z2luU3RvcmFnZU1hbmFnZXIob3JpZ2luKS5sb2NhbFN0b3JhZ2VNYW5hZ2VyKCptX3N0b3JhZ2VB
cmVhUmVnaXN0cnkpLmNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEoY29ubmVjdGlv
bi51bmlxdWVJRCgpLCBvcmlnaW4pKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6
OmNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYmIHRvcE9yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQXJl
YUlkZW50aWZpZXIpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiBvcmlnaW4gPSB7IHRvcE9yaWdpbiwgdG9wT3JpZ2luIH07CisgICAgY29tcGxldGlv
bkhhbmRsZXIobG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihvcmlnaW4pLnNlc3Npb25TdG9yYWdl
TWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5KS5jb25uZWN0VG9TZXNzaW9uU3RvcmFnZUFy
ZWEoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBvcmlnaW4sIGlkZW50aWZpZXIpKTsKK30KKwordm9p
ZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3RvcmFnZUFy
ZWEgPSBtX3N0b3JhZ2VBcmVhUmVnaXN0cnktPmdldFN0b3JhZ2VBcmVhKGlkZW50aWZpZXIpOwor
ICAgIGlmICghc3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzdG9yYWdl
QXJlYS0+c3RvcmFnZVR5cGUoKSA9PSBTdG9yYWdlQXJlYUJhc2U6OlN0b3JhZ2VUeXBlOjpMb2Nh
bCkKKyAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihzdG9yYWdlQXJlYS0+b3JpZ2lu
KCkpLmxvY2FsU3RvcmFnZU1hbmFnZXIoKm1fc3RvcmFnZUFyZWFSZWdpc3RyeSkuZGlzY29ubmVj
dEZyb21TdG9yYWdlQXJlYShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIGlkZW50aWZpZXIpOworICAg
IGVsc2UKKyAgICAgICAgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihzdG9yYWdlQXJlYS0+b3Jp
Z2luKCkpLnNlc3Npb25TdG9yYWdlTWFuYWdlcigqbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5KS5kaXNj
b25uZWN0RnJvbVN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaWRlbnRpZmllcik7
Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbG9uZVNlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50
aWZpZXIgZnJvbUlkZW50aWZpZXIsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHRvSWRlbnRp
ZmllcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGZvciAoYXV0
byYgbWFuYWdlciA6IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnMudmFsdWVzKCkpIHsKKyAg
ICAgICAgaWYgKGF1dG8qIHNlc3Npb25TdG9yYWdlTWFuYWdlciA9IG1hbmFnZXItPmV4aXN0aW5n
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCkpCisgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZU1hbmFn
ZXItPmNsb25lU3RvcmFnZUFyZWEoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBmcm9tSWRlbnRpZmll
ciwgdG9JZGVudGlmaWVyKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
OjpnZXRWYWx1ZXMoU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChh
dXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5nZXRTdG9yYWdlQXJlYShp
ZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VBcmVh
LT5hbGxJdGVtcygpKTsKKyAgICAKKyAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsK
K30KKwordm9pZCBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0oSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgU3RvcmFnZUFy
ZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQs
IFN0cmluZyYmIGtleSwgU3RyaW5nJiYgdmFsdWUsIFN0cmluZyYmIHVybFN0cmluZykKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGJvb2wgaGFzUXVvdGFFcnJvciA9
IGZhbHNlOworICAgIGlmIChhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5
LT5nZXRTdG9yYWdlQXJlYShpZGVudGlmaWVyKSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHN0
b3JhZ2VBcmVhLT5zZXRJdGVtKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaW1wbElkZW50aWZpZXIs
IFN0cmluZyB7IGtleSB9LCBXVEZNb3ZlKHZhbHVlKSwgV1RGTW92ZSh1cmxTdHJpbmcpKTsKKyAg
ICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBoYXNRdW90YUVycm9yID0gKHJlc3VsdC5l
cnJvcigpID09IFN0b3JhZ2VFcnJvcjo6UXVvdGFFeGNlZWRlZCk7CisgICAgfQorCisgICAgY29u
bmVjdGlvbi5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlkU2V0SXRlbShzdG9yYWdl
TWFwU2VlZCwga2V5LCBoYXNRdW90YUVycm9yKSwgaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgU3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50
aWZpZXIgaW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcmJiBr
ZXksIFN0cmluZyYmIHVybFN0cmluZykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGlmIChhdXRvIHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5LT5n
ZXRTdG9yYWdlQXJlYShpZGVudGlmaWVyKSkKKyAgICAgICAgc3RvcmFnZUFyZWEtPnJlbW92ZUl0
ZW0oY29ubmVjdGlvbi51bmlxdWVJRCgpLCBpbXBsSWRlbnRpZmllciwga2V5LCBXVEZNb3ZlKHVy
bFN0cmluZykpOworCisgICAgY29ubmVjdGlvbi5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1h
cDo6RGlkUmVtb3ZlSXRlbShzdG9yYWdlTWFwU2VlZCwgV1RGTW92ZShrZXkpKSwgaWRlbnRpZmll
cik7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjbGVhcihJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBTdG9yYWdl
QXJlYUltcGxJZGVudGlmaWVyIGltcGxJZGVudGlmaWVyLCB1aW50NjRfdCBzdG9yYWdlTWFwU2Vl
ZCwgU3RyaW5nJiYgdXJsU3RyaW5nKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgaWYgKGF1dG8gc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhUmVnaXN0cnktPmdl
dFN0b3JhZ2VBcmVhKGlkZW50aWZpZXIpKQorICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoY29u
bmVjdGlvbi51bmlxdWVJRCgpLCBpbXBsSWRlbnRpZmllciwgV1RGTW92ZSh1cmxTdHJpbmcpKTsK
KworICAgIGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZENsZWFy
KHN0b3JhZ2VNYXBTZWVkKSwgaWRlbnRpZmllcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLmgKaW5kZXggMmFkZGYyYjVlMjBhZDM2ZDI4ZTQ0NTk3
ZWE0MTNmZmU4OTYxYTQwZi4uYjgwOTcyNThmZGI5MmQxMGM1NzAwMzQwNWNmODNjZDEwOWUwMGZl
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdv
cmtTdG9yYWdlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIuaApAQCAtMjgsNiArMjgsOSBAQAogI2luY2x1ZGUg
IkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtU3RvcmFnZUVycm9yLmgiCiAjaW5j
bHVkZSAiT3JpZ2luU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUlkZW50
aWZpZXIuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLmgiCisjaW5jbHVk
ZSAiU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9G
aWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllci5oPgpAQCAtNDYsMTAgKzQ5LDEyIEBAIHN0cnVjdCBD
bGllbnRPcmlnaW47CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRmlsZVN5c3RlbVN0b3Jh
Z2VIYW5kbGVSZWdpc3RyeTsKK2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnk7CiAKIGNsYXNzIE5l
dHdvcmtTdG9yYWdlTWFuYWdlciBmaW5hbCA6IHB1YmxpYyBJUEM6OkNvbm5lY3Rpb246OldvcmtR
dWV1ZU1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoKTsK
KyAgICBzdGF0aWMgUmVmPE5ldHdvcmtTdG9yYWdlTWFuYWdlcj4gY3JlYXRlKFBBTDo6U2Vzc2lv
bklELCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY3VzdG9tTG9jYWxTdG9yYWdl
UGF0aCk7CisgICAgc3RhdGljIGJvb2wgY2FuSGFuZGxlVHlwZXMoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4pOwogCiAgICAgdm9pZCBzdGFydFJlY2VpdmluZ01lc3NhZ2VGcm9tQ29ubmVjdGlv
bihJUEM6OkNvbm5lY3Rpb24mKTsKICAgICB2b2lkIHN0b3BSZWNlaXZpbmdNZXNzYWdlRnJvbUNv
bm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uJik7CkBAIC02MSwyMiArNjYsMzAgQEAgcHVibGljOgog
ICAgIHZvaWQgZGVsZXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwogICAgIHZvaWQgZGVsZXRlRGF0YU1vZGlmaWVkU2luY2UoT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4sIFdhbGxUaW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAg
IHZvaWQgZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mJik+
JiYpOworICAgIHZvaWQgbW92ZURhdGEoY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgdGFyZ2V0LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc3VzcGVuZChDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgcmVzdW1lKCk7CisgICAgdm9pZCBoYW5kbGVMb3dN
ZW1vcnlXYXJuaW5nKCk7CisgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CiAKIHByaXZhdGU6Ci0gICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyKFBB
TDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIE5ldHdvcmtTdG9yYWdlTWFu
YWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGN1
c3RvbUxvY2FsU3RvcmFnZVBhdGgpOwogICAgIH5OZXR3b3JrU3RvcmFnZU1hbmFnZXIoKTsKICAg
ICBPcmlnaW5TdG9yYWdlTWFuYWdlciYgbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcihjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKLSAgICB2b2lkIHJlbW92ZU9yaWdpblN0b3JhZ2VNYW5h
Z2VySWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICBib29sIHJl
bW92ZU9yaWdpblN0b3JhZ2VNYW5hZ2VySWZQb3NzaWJsZShjb25zdCBXZWJDb3JlOjpDbGllbnRP
cmlnaW4mKTsKKyAgICB2b2lkIGRlbGV0ZU9yaWdpbkRpcmVjdG9yeUlmUG9zc2libGUoY29uc3Qg
V2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CiAgICAgRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdp
c3RyeSYgZmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeSgpOwogCiAgICAgdm9pZCBmb3JF
YWNoT3JpZ2luRGlyZWN0b3J5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+Jik7
CisgICAgSGFzaFNldDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IGdldEFsbE9yaWdpbnMoKTsKICAg
ICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBmZXRjaERhdGFGcm9tRGlzayhPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPik7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gZGVs
ZXRlRGF0YU9uRGlzayhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgV2FsbFRpbWUsIGNvbnN0
IEZ1bmN0aW9uPGJvb2woY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik+Jik7CisgICAgSGFz
aFNldDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IGRlbGV0ZURhdGFPbkRpc2soT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IFdlYkNv
cmU6OkNsaWVudE9yaWdpbiYpPiYpOwogCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIgKGlt
cGxlbWVudGVkIGJ5IGdlbmVyYXRlZCBjb2RlKQogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBkaWRSZWNlaXZlU3lu
Y01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgVW5pcXVlUmVmPElQQzo6
RW5jb2Rlcj4mIHJlcGx5RW5jb2Rlcik7CiAKLSAgICAvLyBNZXNzYWdlIGhhbmRsZXJzCisgICAg
Ly8gTWVzc2FnZSBoYW5kbGVycyBmb3IgRmlsZVN5c3RlbS4KICAgICB2b2lkIHBlcnNpc3RlZChj
b25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmKTsKICAgICB2b2lkIHBlcnNpc3QoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCBmaWxlU3lzdGVtR2V0RGly
ZWN0b3J5KElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwZWN0ZWQ8V2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlk
ZW50aWZpZXIsIEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CkBAIC04OCwyMiArMTAxLDMz
IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVFbnRyeShXZWJDb3JlOjpGaWxlU3lzdGVtSGFu
ZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGRlbGV0ZVJlY3Vyc2l2ZWx5
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8RmlsZVN5c3RlbVN0b3JhZ2VF
cnJvcj4pPiYmKTsKICAgICB2b2lkIHJlc29sdmUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlk
ZW50aWZpZXIsIFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBGaWxlU3lzdGVtU3RvcmFnZUVy
cm9yPik+JiYpOwogICAgIHZvaWQgZ2V0RmlsZShXZWJDb3JlOjpGaWxlU3lzdGVtSGFuZGxlSWRl
bnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeHBlY3RlZDxTdHJpbmcsIEZpbGVTeXN0
ZW1TdG9yYWdlRXJyb3I+KT4mJik7Ci0KICAgICB1c2luZyBBY2Nlc3NIYW5kbGVJbmZvID0gc3Rk
OjpwYWlyPFdlYkNvcmU6OkZpbGVTeXN0ZW1TeW5jQWNjZXNzSGFuZGxlSWRlbnRpZmllciwgSVBD
OjpTaGFyZWRGaWxlSGFuZGxlPjsKICAgICB2b2lkIGNyZWF0ZVN5bmNBY2Nlc3NIYW5kbGUoV2Vi
Q29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
RXhwZWN0ZWQ8QWNjZXNzSGFuZGxlSW5mbywgRmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4pPiYmKTsK
ICAgICB2b2lkIGNsb3NlQWNjZXNzSGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVu
dGlmaWVyLCBXZWJDb3JlOjpGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50aWZpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxGaWxlU3lzdGVtU3RvcmFnZUVycm9y
Pik+JiYpOwogICAgIHZvaWQgZ2V0SGFuZGxlTmFtZXMoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRs
ZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwZWN0ZWQ8VmVjdG9yPFN0cmlu
Zz4sIEZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+KT4mJik7CiAgICAgdm9pZCBnZXRIYW5kbGUoSVBD
OjpDb25uZWN0aW9uJiwgV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRsZUlkZW50aWZpZXIsIFN0cmlu
ZyYmIG5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhwZWN0ZWQ8c3RkOjpwYWlyPFdlYkNv
cmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBib29sPiwgRmlsZVN5c3RlbVN0b3JhZ2VF
cnJvcj4pPiYmKTsKKyAgICAKKyAgICAvLyBNZXNzYWdlIGhhbmRsZXJzIGZvciBXZWJTdG9yYWdl
LgorICAgIHZvaWQgY29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mLCBT
dG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFyZWFJZGVudGlmaWVyKT4mJik7CisgICAg
dm9pZCBjb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhKElQQzo6Q29ubmVjdGlvbiYs
IFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEm
JiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
U3RvcmFnZUFyZWFJZGVudGlmaWVyKT4mJik7CisgICAgdm9pZCBjb25uZWN0VG9TZXNzaW9uU3Rv
cmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIsIFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3Jh
Z2VBcmVhSWRlbnRpZmllcik+JiYpOworICAgIHZvaWQgZGlzY29ubmVjdEZyb21TdG9yYWdlQXJl
YShJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlQXJlYUlkZW50aWZpZXIpOworICAgIHZvaWQgY2xv
bmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShJUEM6OkNvbm5lY3Rpb24mLCBTdG9yYWdlTmFtZXNw
YWNlSWRlbnRpZmllciwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZ2V0
VmFsdWVzKFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpPiYmKTsKKyAgICB2b2lkIHNldEl0ZW0oSVBDOjpD
b25uZWN0aW9uJiwgU3RvcmFnZUFyZWFJZGVudGlmaWVyLCBTdG9yYWdlQXJlYUltcGxJZGVudGlm
aWVyLCB1aW50NjRfdCBzZWVkLCBTdHJpbmcmJiBrZXksIFN0cmluZyYmIHZhbHVlLCBTdHJpbmcm
JiB1cmxTdHJpbmcpOworICAgIHZvaWQgcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb24mLCBTdG9y
YWdlQXJlYUlkZW50aWZpZXIsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIHVpbnQ2NF90IHNl
ZWQsIFN0cmluZyYmIGtleSwgU3RyaW5nJiYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIGNsZWFyKElQ
Qzo6Q29ubmVjdGlvbiYsIFN0b3JhZ2VBcmVhSWRlbnRpZmllciwgU3RvcmFnZUFyZWFJbXBsSWRl
bnRpZmllciwgdWludDY0X3Qgc2VlZCwgU3RyaW5nJiYgdXJsU3RyaW5nKTsKIAogICAgIFBBTDo6
U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwotICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7CisgICAg
UmVmPFN1c3BlbmRhYmxlV29ya1F1ZXVlPiBtX3F1ZXVlOwogICAgIFN0cmluZyBtX3BhdGg7CiAg
ICAgRmlsZVN5c3RlbTo6U2FsdCBtX3NhbHQ7CiAgICAgYm9vbCBtX2Nsb3NlZCB7IGZhbHNlIH07
CiAgICAgSGFzaE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxPcmln
aW5TdG9yYWdlTWFuYWdlcj4+IG1fbG9jYWxPcmlnaW5TdG9yYWdlTWFuYWdlcnM7Ci0gICAgSGFz
aE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxPcmlnaW5TdG9yYWdl
TWFuYWdlcj4+IG1fc2Vzc2lvbk9yaWdpblN0b3JhZ2VNYW5hZ2VyczsKICAgICBXZWFrSGFzaFNl
dDxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbnM7IC8vIE1haW4gdGhyZWFkIG9ubHkuCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnk+IG1fZmls
ZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFn
ZUFyZWFSZWdpc3RyeT4gbV9zdG9yYWdlQXJlYVJlZ2lzdHJ5OworICAgIFN0cmluZyBtX2N1c3Rv
bUxvY2FsU3RvcmFnZVBhdGg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9OZXR3b3JrU3RvcmFnZU1h
bmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
TmV0d29ya1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluCmluZGV4IDRlNDA1YzZlZWFkMzI2ZTI1
YjQzMTY0MjA3MDgwOTVmYTYwZGM4MzguLjA0MjJiNjM0NzUxZDAzODVmODRlMDFmNjRhYzYxZGFm
MzFjMTVlODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9OZXR3b3JrU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5tZXNzYWdlcy5pbgpA
QCAtMzUsOSArMzUsMTggQEAKICAgICBSZXNvbHZlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVy
IHRhcmdldElkZW50aWZpZXIpIC0+IChFeHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgV2ViS2l0OjpG
aWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5jCiAgICAgTW92ZShXZWJDb3JlOjpG
aWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGaWxlU3lzdGVt
SGFuZGxlSWRlbnRpZmllciBkZXN0aW5hdGlvbklkZW50aWZpZXIsIFN0cmluZyBuZXdOYW1lKSAt
PiAoc3RkOjpvcHRpb25hbDxXZWJLaXQ6OkZpbGVTeXN0ZW1TdG9yYWdlRXJyb3I+IHJlc3VsdCkg
QXN5bmMKICAgICBHZXRGaWxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIGlk
ZW50aWZpZXIpIC0+IChFeHBlY3RlZDxTdHJpbmcsIFdlYktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VF
cnJvcj4gcmVzdWx0KSBBc3luYwotCiAgICAgQ3JlYXRlU3luY0FjY2Vzc0hhbmRsZShXZWJDb3Jl
OjpGaWxlU3lzdGVtSGFuZGxlSWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiAoRXhwZWN0ZWQ8c3Rk
OjpwYWlyPFdlYkNvcmU6OkZpbGVTeXN0ZW1TeW5jQWNjZXNzSGFuZGxlSWRlbnRpZmllciwgSVBD
OjpTaGFyZWRGaWxlSGFuZGxlPiwgV2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9yPiByZXN1
bHQpIEFzeW5jCiAgICAgQ2xvc2VBY2Nlc3NIYW5kbGUoV2ViQ29yZTo6RmlsZVN5c3RlbUhhbmRs
ZUlkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6RmlsZVN5c3RlbVN5bmNBY2Nlc3NIYW5k
bGVJZGVudGlmaWVyIGFjY2Vzc0hhbmRsZUlkZW50aWZpZXIpIC0+IChzdGQ6Om9wdGlvbmFsPFdl
YktpdDo6RmlsZVN5c3RlbVN0b3JhZ2VFcnJvcj4gcmVzdWx0KSBBc3luYwogICAgIEdldEhhbmRs
ZU5hbWVzKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+
IChFeHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgV2ViS2l0OjpGaWxlU3lzdGVtU3RvcmFnZUVycm9y
PiByZXN1bHQpIEFzeW5jCiAgICAgR2V0SGFuZGxlKFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIFN0cmluZyBuYW1lKSAtPiAoRXhwZWN0ZWQ8c3RkOjpwYWly
PFdlYkNvcmU6OkZpbGVTeXN0ZW1IYW5kbGVJZGVudGlmaWVyLCBib29sPiwgV2ViS2l0OjpGaWxl
U3lzdGVtU3RvcmFnZUVycm9yPiByZXN1bHQpIEFzeW5jIFdhbnRzQ29ubmVjdGlvbgorCisgICAg
Q29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlm
aWVyIHN0b3JhZ2VOYW1lc3BhY2VJRCwgc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSBzZWN1cml0eU9yaWdpbkRhdGEpIC0+IChXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBp
ZGVudGlmaWVyKSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KKyAgICBDb25uZWN0VG9UcmFu
c2llbnRMb2NhbFN0b3JhZ2VBcmVhKFdlYktpdDo6U3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIg
c3RvcmFnZU5hbWVzcGFjZUlELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIHRv
cExldmVsU2VjdXJpdHlPcmlnaW5EYXRhLCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhIHNlY3VyaXR5T3JpZ2luRGF0YSkgLT4gKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVy
IGlkZW50aWZpZXIpIFN5bmNocm9ub3VzIFdhbnRzQ29ubmVjdGlvbgorICAgIENvbm5lY3RUb1Nl
c3Npb25TdG9yYWdlQXJlYShXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHN0b3Jh
Z2VOYW1lc3BhY2VJRCwgc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBzZWN1cml0
eU9yaWdpbkRhdGEpIC0+IChXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVy
KSBTeW5jaHJvbm91cyBXYW50c0Nvbm5lY3Rpb24KKyAgICBEaXNjb25uZWN0RnJvbVN0b3JhZ2VB
cmVhKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIpIFdhbnRzQ29ubmVj
dGlvbgorICAgIENsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoV2ViS2l0OjpTdG9yYWdlTmFt
ZXNwYWNlSWRlbnRpZmllciBmcm9tU3RvcmFnZU5hbWVzcGFjZUlELCBXZWJLaXQ6OlN0b3JhZ2VO
YW1lc3BhY2VJZGVudGlmaWVyIHRvU3RvcmFnZU5hbWVzcGFjZUlEKSBXYW50c0Nvbm5lY3Rpb24K
KyAgICBHZXRWYWx1ZXMoV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikg
LT4gKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhbHVlcykgU3luY2hyb25vdXMKKyAgICBTZXRJ
dGVtKFdlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6U3Rv
cmFnZUFyZWFJbXBsSWRlbnRpZmllciBpbXBsSWRlbnRpZmllciwgdWludDY0X3Qgc3RvcmFnZU1h
cFNlZWQsIFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSwgU3RyaW5nIHVybFN0cmluZykgV2FudHND
b25uZWN0aW9uCisgICAgUmVtb3ZlSXRlbShXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50aWZp
ZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcga2V5LCBTdHJpbmcgdXJsU3RyaW5n
KSBXYW50c0Nvbm5lY3Rpb24KKyAgICBDbGVhcihXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmll
ciBpZGVudGlmaWVyLCBXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIgaW1wbElkZW50
aWZpZXIsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBTdHJpbmcgdXJsU3RyaW5nKSBXYW50c0Nv
bm5lY3Rpb24KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IDI1NGRmZTNiZmY0YTU2
ZDJlOTU5MjI2YmZjZmJmZWQ1NWEyMTU2NmMuLmMxN2ExMGE1ZjQ0ZDAxNDFmZjk0OWYzZmMyMDNh
YWE3MWU1M2EwZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL09yaWdpblN0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMjgsMTkgKzI4LDI1
IEBACiAKICNpbmNsdWRlICJGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5LmgiCiAjaW5j
bHVkZSAiRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdl
TWFuYWdlci5oIgorI2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUg
IlN0b3JhZ2VBcmVhUmVnaXN0cnkuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVR5cGUuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL1NRTGl0ZUZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvRmlsZVN5
c3RlbS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorc3RhdGljIGNvbnN0ZXhwciBhdXRvIG9y
aWdpbkZpbGVOYW1lID0gIm9yaWdpbiJfczsKIGVudW0gY2xhc3MgT3JpZ2luU3RvcmFnZU1hbmFn
ZXI6OlN0b3JhZ2VCdWNrZXRNb2RlIDogYm9vbCB7IEJlc3RFZmZvcnQsIFBlcnNpc3RlbnQgfTsK
IAogY2xhc3MgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VCdWNrZXQgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFN0b3JhZ2VCdWNrZXQoY29uc3QgU3Ry
aW5nJiByb290UGF0aCwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQorICAgIFN0b3JhZ2VCdWNr
ZXQoY29uc3QgU3RyaW5nJiByb290UGF0aCwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIGxvY2FsU3RvcmFnZVBhdGgpCiAgICAgICAgIDogbV9yb290UGF0aChyb290UGF0
aCkKICAgICAgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAgICAgLCBtX2xvY2Fs
U3RvcmFnZVBhdGgobG9jYWxTdG9yYWdlUGF0aCkKICAgICB7CiAgICAgfQogCkBAIC01NSwxMyAr
NjEsMzEgQEAgcHVibGljOgogCiAgICAgZW51bSBjbGFzcyBTdG9yYWdlVHlwZSA6IHVpbnQ4X3Qg
ewogICAgICAgICBGaWxlU3lzdGVtLAorICAgICAgICBMb2NhbFN0b3JhZ2UsCisgICAgICAgIFNl
c3Npb25TdG9yYWdlLAogICAgIH07CiAKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJzaXRl
RGF0YVR5cGU+IHRvV2Vic2l0ZURhdGFUeXBlKGNvbnN0IFN0cmluZyYgc3RvcmFnZUlkZW50aWZp
ZXIpCisgICAgeworICAgICAgICBpZiAoc3RvcmFnZUlkZW50aWZpZXIgPT0gIkZpbGVTeXN0ZW0i
X3MpCisgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGFUeXBlOjpGaWxlU3lzdGVtOworICAg
ICAgICBpZiAoc3RvcmFnZUlkZW50aWZpZXIgPT0gIkxvY2FsU3RvcmFnZSJfcykKKyAgICAgICAg
ICAgIHJldHVybiBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZTsKKyAgICAgICAgaWYgKHN0
b3JhZ2VJZGVudGlmaWVyID09ICJTZXNzaW9uU3RvcmFnZSJfcykKKyAgICAgICAgICAgIHJldHVy
biBXZWJzaXRlRGF0YVR5cGU6OlNlc3Npb25TdG9yYWdlOworCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgfQorCiAgICAgc3RhdGljIFN0cmluZyB0b1N0b3JhZ2VJZGVudGlmaWVy
KFN0b3JhZ2VUeXBlIHR5cGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAg
ICAgY2FzZSBTdG9yYWdlVHlwZTo6RmlsZVN5c3RlbToKICAgICAgICAgICAgIHJldHVybiAiRmls
ZVN5c3RlbSJfczsKKyAgICAgICAgY2FzZSBTdG9yYWdlVHlwZTo6TG9jYWxTdG9yYWdlOgorICAg
ICAgICAgICAgcmV0dXJuICJMb2NhbFN0b3JhZ2UiX3M7CisgICAgICAgIGNhc2UgU3RvcmFnZVR5
cGU6OlNlc3Npb25TdG9yYWdlOgorICAgICAgICAgICAgcmV0dXJuICJTZXNzaW9uU3RvcmFnZSJf
czsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04
NiwxOCArMTEwLDEyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9maWxlU3lzdGVtU3Rv
cmFnZU1hbmFnZXI7CiAgICAgfQogCi0gICAgYm9vbCBpc0FjdGl2ZSgpCisgICAgTG9jYWxTdG9y
YWdlTWFuYWdlciYgbG9jYWxTdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdp
c3RyeSkKKyAgICB7CisgICAgICAgIGlmICghbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKQorICAgICAg
ICAgICAgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyID0gbWFrZVVuaXF1ZTxMb2NhbFN0b3JhZ2VNYW5h
Z2VyPihtX2xvY2FsU3RvcmFnZVBhdGgsIHJlZ2lzdHJ5KTsKKworICAgICAgICByZXR1cm4gKm1f
bG9jYWxTdG9yYWdlTWFuYWdlcjsKKyAgICB9CisKKyAgICBMb2NhbFN0b3JhZ2VNYW5hZ2VyKiBl
eGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbG9j
YWxTdG9yYWdlTWFuYWdlci5nZXQoKTsKKyAgICB9CisKKyAgICBTZXNzaW9uU3RvcmFnZU1hbmFn
ZXImIHNlc3Npb25TdG9yYWdlTWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAhIW1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyOworICAg
ICAgICBpZiAoIW1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICAgICAgbV9zZXNzaW9u
U3RvcmFnZU1hbmFnZXIgPSBtYWtlVW5pcXVlPFNlc3Npb25TdG9yYWdlTWFuYWdlcj4ocmVnaXN0
cnkpOworCisgICAgICAgIHJldHVybiAqbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXI7CisgICAgfQor
CisgICAgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKiBleGlzdGluZ1Nlc3Npb25TdG9yYWdlTWFuYWdl
cigpCisgICAgeworICAgICAgICByZXR1cm4gbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIuZ2V0KCk7
CisgICAgfQorCisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIgfHwgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyIHx8
IG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOworICAgIH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0CisgICAgeworICAgICAgICBhdXRvIGZpbGVzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9y
eShtX3Jvb3RQYXRoKTsKKyAgICAgICAgYXV0byBoYXNWYWxpZEZpbGUgPSBXVEY6OmFueU9mKGZp
bGVzLCBbJl0oYXV0byBmaWxlKSB7CisgICAgICAgICAgICBib29sIGlzSW52YWxpZEZpbGUgPSAo
ZmlsZSA9PSBvcmlnaW5GaWxlTmFtZSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgICAg
ICBpc0ludmFsaWRGaWxlIHw9IChmaWxlID09ICIuRFNfU3RvcmUiKTsKKyNlbmRpZgorICAgICAg
ICAgICAgcmV0dXJuICFpc0ludmFsaWRGaWxlOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKGhh
c1ZhbGlkRmlsZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4g
IUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobV9sb2NhbFN0b3JhZ2VQYXRoKTsKKyAgICB9CisKKyAg
ICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGFUeXBlc0luTGlzdChPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcykKKyAgICB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
ZmV0Y2hEYXRhVHlwZXNJbkxpc3RGcm9tTWVtb3J5KHR5cGVzKTsKKyAgICAgICAgcmVzdWx0LmFk
ZChmZXRjaERhdGFUeXBlc0luTGlzdEZyb21EaXNrKHR5cGVzKSk7CisKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKICAgICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2VUaW1lKQogICAgIHsKICAgICAg
ICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RmlsZVN5c3RlbSkpCiAgICAg
ICAgICAgICBkZWxldGVGaWxlU3lzdGVtU3RvcmFnZURhdGEobW9kaWZpZWRTaW5jZVRpbWUpOwor
CisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFn
ZSkpCisgICAgICAgICAgICBkZWxldGVMb2NhbFN0b3JhZ2VEYXRhKG1vZGlmaWVkU2luY2VUaW1l
KTsKKworICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpTZXNzaW9u
U3RvcmFnZSkgJiYgbW9kaWZpZWRTaW5jZVRpbWUgPT0gLVdhbGxUaW1lOjppbmZpbml0eSgpKQor
ICAgICAgICAgICAgZGVsZXRlU2Vzc2lvblN0b3JhZ2VEYXRhKCk7CisgICAgfQorCisgICAgdm9p
ZCBtb3ZlRGF0YShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdl
UGF0aCkKKyAgICB7CisgICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyID0gbnVsbHB0
cjsKKyAgICAgICAgaWYgKG1fbG9jYWxTdG9yYWdlTWFuYWdlcikKKyAgICAgICAgICAgIG1fbG9j
YWxTdG9yYWdlTWFuYWdlci0+Y2xvc2UoKTsKKworICAgICAgICBGaWxlU3lzdGVtOjptYWtlQWxs
RGlyZWN0b3JpZXMoRmlsZVN5c3RlbTo6cGFyZW50UGF0aChwYXRoKSk7CisgICAgICAgIEZpbGVT
eXN0ZW06Om1vdmVGaWxlKG1fcm9vdFBhdGgsIHBhdGgpOworCisgICAgICAgIGlmICghbV9sb2Nh
bFN0b3JhZ2VQYXRoLmlzRW1wdHkoKSAmJiAhbG9jYWxTdG9yYWdlUGF0aC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpw
YXJlbnRQYXRoKGxvY2FsU3RvcmFnZVBhdGgpKTsKKyAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0
ZUZpbGVTeXN0ZW06Om1vdmVEYXRhYmFzZUZpbGUobV9sb2NhbFN0b3JhZ2VQYXRoLCBsb2NhbFN0
b3JhZ2VQYXRoKTsKKyAgICAgICAgfQogICAgIH0KIAogcHJpdmF0ZToKKyAgICBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGFUeXBlc0luTGlzdEZyb21NZW1vcnkoT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCisgICAgeworICAgICAgICBPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiByZXN1bHQ7CisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkxvY2FsU3RvcmFnZSkpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZU1h
bmFnZXIgJiYgbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSkKKyAgICAg
ICAgICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlNl
c3Npb25TdG9yYWdlKSkgeworICAgICAgICAgICAgaWYgKG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
ICYmIG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLT5oYXNEYXRhSW5NZW1vcnkoKSkKKyAgICAgICAg
ICAgICAgICByZXN1bHQuYWRkKFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2UpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiBmZXRjaERhdGFUeXBlc0luTGlzdEZyb21EaXNrKE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IHR5cGVzKQorICAgIHsKKyAgICAgICAgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gcmVzdWx0OworICAgICAgICBmb3IgKGF1dG8mIHN0b3JhZ2VUeXBlIDogRmlsZVN5
c3RlbTo6bGlzdERpcmVjdG9yeShtX3Jvb3RQYXRoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8g
dHlwZSA9IHRvV2Vic2l0ZURhdGFUeXBlKHN0b3JhZ2VUeXBlKTsgdHlwZSAmJiB0eXBlcy5jb250
YWlucygqdHlwZSkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZCgqdHlwZSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0
b3JhZ2UpICYmICFyZXN1bHQuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2Up
KSB7CisgICAgICAgICAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhtX2xvY2FsU3RvcmFn
ZVBhdGgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpMb2Nh
bFN0b3JhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
ICAgICB2b2lkIGRlbGV0ZUZpbGVTeXN0ZW1TdG9yYWdlRGF0YShXYWxsVGltZSBtb2RpZmllZFNp
bmNlVGltZSkKICAgICB7CiAgICAgICAgIG1fZmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyID0gbnVs
bHB0cjsKQEAgLTEwNiwxNCArMjMzLDQ0IEBAIHByaXZhdGU6CiAgICAgICAgIEZpbGVTeXN0ZW06
OmRlbGV0ZUFsbEZpbGVzTW9kaWZpZWRTaW5jZShmaWxlU3lzdGVtU3RvcmFnZVBhdGgsIG1vZGlm
aWVkU2luY2VUaW1lKTsKICAgICB9CiAKKyAgICB2b2lkIGRlbGV0ZUxvY2FsU3RvcmFnZURhdGEo
V2FsbFRpbWUgdGltZSkKKyAgICB7CisgICAgICAgIGlmIChhdXRvIG1vZGlmaWNhdGlvblRpbWUg
PSBGaWxlU3lzdGVtOjpmaWxlTW9kaWZpY2F0aW9uVGltZShtX2xvY2FsU3RvcmFnZVBhdGgpOyAq
bW9kaWZpY2F0aW9uVGltZSA+PSB0aW1lKSB7CisgICAgICAgICAgICBpZiAobV9sb2NhbFN0b3Jh
Z2VNYW5hZ2VyKQorICAgICAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+Y2xlYXJE
YXRhT25EaXNrKCk7CisgICAgICAgICAgICBXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpkZWxl
dGVEYXRhYmFzZUZpbGUobV9sb2NhbFN0b3JhZ2VQYXRoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghbV9sb2NhbFN0b3JhZ2VNYW5hZ2VyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIG1fbG9jYWxTdG9yYWdlTWFuYWdlci0+Y2xlYXJEYXRhSW5NZW1vcnkoKTsKKyAgICAgICAg
aWYgKCFtX2xvY2FsU3RvcmFnZU1hbmFnZXItPmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX2xv
Y2FsU3RvcmFnZU1hbmFnZXIgPSBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgZGVsZXRlU2Vz
c2lvblN0b3JhZ2VEYXRhKCkKKyAgICB7CisgICAgICAgIGlmICghbV9zZXNzaW9uU3RvcmFnZU1h
bmFnZXIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1h
bmFnZXItPmNsZWFyRGF0YSgpOworICAgICAgICBpZiAoIW1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2Vy
LT5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgbV9zZXNzaW9uU3RvcmFnZU1hbmFnZXIgPSBudWxs
cHRyOworICAgIH0KKyAgICAKICAgICBTdHJpbmcgbV9yb290UGF0aDsKICAgICBTdHJpbmcgbV9p
ZGVudGlmaWVyOwogICAgIFN0b3JhZ2VCdWNrZXRNb2RlIG1fbW9kZSB7IFN0b3JhZ2VCdWNrZXRN
b2RlOjpCZXN0RWZmb3J0IH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbGVTeXN0ZW1TdG9yYWdl
TWFuYWdlcj4gbV9maWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI7CisgICAgc3RkOjp1bmlxdWVfcHRy
PExvY2FsU3RvcmFnZU1hbmFnZXI+IG1fbG9jYWxTdG9yYWdlTWFuYWdlcjsKKyAgICBTdHJpbmcg
bV9sb2NhbFN0b3JhZ2VQYXRoOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTZXNzaW9uU3RvcmFnZU1h
bmFnZXI+IG1fc2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOwogfTsKIAotT3JpZ2luU3RvcmFnZU1hbmFn
ZXI6Ok9yaWdpblN0b3JhZ2VNYW5hZ2VyKFN0cmluZyYmIHBhdGgpCitPcmlnaW5TdG9yYWdlTWFu
YWdlcjo6T3JpZ2luU3RvcmFnZU1hbmFnZXIoU3RyaW5nJiYgcGF0aCwgU3RyaW5nJiYgbG9jYWxT
dG9yYWdlUGF0aCkKICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQorICAgICwgbV9sb2NhbFN0
b3JhZ2VQYXRoKFdURk1vdmUobG9jYWxTdG9yYWdlUGF0aCkpCiB7CiAgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CiB9CkBAIC0xMjksNyArMjg2LDcgQEAgdm9pZCBPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5l
Y3Rpb24KIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQnVja2V0JiBPcmlnaW5TdG9yYWdl
TWFuYWdlcjo6ZGVmYXVsdEJ1Y2tldCgpCiB7CiAgICAgaWYgKCFtX2RlZmF1bHRCdWNrZXQpCi0g
ICAgICAgIG1fZGVmYXVsdEJ1Y2tldCA9IG1ha2VVbmlxdWU8U3RvcmFnZUJ1Y2tldD4obV9wYXRo
LCAiZGVmYXVsdCJfcyk7CisgICAgICAgIG1fZGVmYXVsdEJ1Y2tldCA9IG1ha2VVbmlxdWU8U3Rv
cmFnZUJ1Y2tldD4obV9wYXRoLCAiZGVmYXVsdCJfcywgbV9sb2NhbFN0b3JhZ2VQYXRoKTsKIAog
ICAgIHJldHVybiAqbV9kZWZhdWx0QnVja2V0OwogfQpAQCAtMTM5LDE1ICsyOTYsMzQgQEAgRmls
ZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyJiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZmlsZVN5c3RlbVN0
b3JhZ2VNYW5hZ2VyKEZpbGVTeXMKICAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmZpbGVTeXN0
ZW1TdG9yYWdlTWFuYWdlcihyZWdpc3RyeSk7CiB9CiAKK0xvY2FsU3RvcmFnZU1hbmFnZXImIE9y
aWdpblN0b3JhZ2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0
cnkmIHJlZ2lzdHJ5KQoreworICAgIHJldHVybiBkZWZhdWx0QnVja2V0KCkubG9jYWxTdG9yYWdl
TWFuYWdlcihyZWdpc3RyeSk7Cit9CisKK0xvY2FsU3RvcmFnZU1hbmFnZXIqIE9yaWdpblN0b3Jh
Z2VNYW5hZ2VyOjpleGlzdGluZ0xvY2FsU3RvcmFnZU1hbmFnZXIoKQoreworICAgIHJldHVybiBk
ZWZhdWx0QnVja2V0KCkuZXhpc3RpbmdMb2NhbFN0b3JhZ2VNYW5hZ2VyKCk7Cit9CisKK1Nlc3Np
b25TdG9yYWdlTWFuYWdlciYgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OnNlc3Npb25TdG9yYWdlTWFu
YWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKK3sKKyAgICByZXR1cm4gZGVmYXVs
dEJ1Y2tldCgpLnNlc3Npb25TdG9yYWdlTWFuYWdlcihyZWdpc3RyeSk7Cit9CisKK1Nlc3Npb25T
dG9yYWdlTWFuYWdlciogT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmV4aXN0aW5nU2Vzc2lvblN0b3Jh
Z2VNYW5hZ2VyKCkKK3sKKyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmV4aXN0aW5nU2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyKCk7Cit9CisKIGJvb2wgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmlzQWN0
aXZlKCkKIHsKICAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmlzQWN0aXZlKCk7CiB9CiAKLXZv
aWQgT3JpZ2luU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gdHlwZXMsIFdhbGxUaW1lIG1vZGlmaWVkU2luY2UpCitib29sIE9yaWdpblN0b3JhZ2VN
YW5hZ2VyOjppc0VtcHR5KCkKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAg
ICBkZWZhdWx0QnVja2V0KCkuZGVsZXRlRGF0YSh0eXBlcywgbW9kaWZpZWRTaW5jZSk7CisgICAg
cmV0dXJuIGRlZmF1bHRCdWNrZXQoKS5pc0VtcHR5KCk7CiB9CiAKIHZvaWQgT3JpZ2luU3RvcmFn
ZU1hbmFnZXI6OnNldFBlcnNpc3RlZChib29sIHZhbHVlKQpAQCAtMTU4LDUgKzMzNCwyNiBAQCB2
b2lkIE9yaWdpblN0b3JhZ2VNYW5hZ2VyOjpzZXRQZXJzaXN0ZWQoYm9vbCB2YWx1ZSkKICAgICBk
ZWZhdWx0QnVja2V0KCkuc2V0TW9kZSh2YWx1ZSA/IFN0b3JhZ2VCdWNrZXRNb2RlOjpQZXJzaXN0
ZW50IDogU3RvcmFnZUJ1Y2tldE1vZGU6OkJlc3RFZmZvcnQpOwogfQogCitPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZmV0Y2hEYXRhVHlwZXNJbkxpc3Qo
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdHlwZXMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICByZXR1cm4gZGVmYXVsdEJ1Y2tldCgpLmZldGNoRGF0YVR5cGVz
SW5MaXN0KHR5cGVzKTsKK30KKwordm9pZCBPcmlnaW5TdG9yYWdlTWFuYWdlcjo6ZGVsZXRlRGF0
YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB0eXBlcywgV2FsbFRpbWUgbW9kaWZpZWRTaW5j
ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGRlZmF1bHRCdWNr
ZXQoKS5kZWxldGVEYXRhKHR5cGVzLCBtb2RpZmllZFNpbmNlKTsKK30KKwordm9pZCBPcmlnaW5T
dG9yYWdlTWFuYWdlcjo6bW92ZURhdGEoY29uc3QgU3RyaW5nJiBuZXdQYXRoLCBjb25zdCBTdHJp
bmcmIGxvY2FsU3RvcmFnZVBhdGgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBkZWZhdWx0QnVja2V0KCkubW92ZURhdGEobmV3UGF0aCwgbG9jYWxTdG9yYWdlUGF0
aCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvT3JpZ2luU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oCmlu
ZGV4IDdhZGZhNWIwM2I2YmE2ZTNmODY5ODBiMTJkMmY4YTQ0ZDllNGU2NGIuLjVlNzY2OTk4NmU0
NjY4NWYzODliN2E1MjcxZTY2ZDBlNjNjMmQxOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9PcmlnaW5TdG9yYWdlTWFuYWdlci5oCkBA
IC0zNiwyMCArMzYsMzAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEZpbGVTeXN0ZW1T
dG9yYWdlSGFuZGxlUmVnaXN0cnk7CiBjbGFzcyBGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXI7Citj
bGFzcyBMb2NhbFN0b3JhZ2VNYW5hZ2VyOworY2xhc3MgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOwor
Y2xhc3MgU3RvcmFnZUFyZWFSZWdpc3RyeTsKIGVudW0gY2xhc3MgV2Vic2l0ZURhdGFUeXBlIDog
dWludDMyX3Q7CiAKIGNsYXNzIE9yaWdpblN0b3JhZ2VNYW5hZ2VyIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBPcmlnaW5TdG9yYWdlTWFuYWdl
cihTdHJpbmcmJiBwYXRoKTsKKyAgICBPcmlnaW5TdG9yYWdlTWFuYWdlcihTdHJpbmcmJiBwYXRo
LCBTdHJpbmcmJiBsb2NhbFN0b3JhZ2VQYXRoKTsKICAgICB+T3JpZ2luU3RvcmFnZU1hbmFnZXIo
KTsKIAogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlE
KTsKICAgICBib29sIHBlcnNpc3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGVyc2lzdGVkOyB9CiAg
ICAgdm9pZCBzZXRQZXJzaXN0ZWQoYm9vbCB2YWx1ZSk7CiAgICAgRmlsZVN5c3RlbVN0b3JhZ2VN
YW5hZ2VyJiBmaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIoRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVS
ZWdpc3RyeSYpOworICAgIExvY2FsU3RvcmFnZU1hbmFnZXImIGxvY2FsU3RvcmFnZU1hbmFnZXIo
U3RvcmFnZUFyZWFSZWdpc3RyeSYpOworICAgIExvY2FsU3RvcmFnZU1hbmFnZXIqIGV4aXN0aW5n
TG9jYWxTdG9yYWdlTWFuYWdlcigpOworICAgIFNlc3Npb25TdG9yYWdlTWFuYWdlciYgc2Vzc2lv
blN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmKTsKKyAgICBTZXNzaW9uU3RvcmFn
ZU1hbmFnZXIqIGV4aXN0aW5nU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKCk7CiAgICAgYm9vbCBpc0Fj
dGl2ZSgpOworICAgIGJvb2wgaXNFbXB0eSgpOworICAgIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IGZldGNoRGF0YVR5cGVzSW5MaXN0KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+KTsKICAg
ICB2b2lkIGRlbGV0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1lKTsK
KyAgICB2b2lkIG1vdmVEYXRhKGNvbnN0IFN0cmluZyYgbmV3UGF0aCwgY29uc3QgU3RyaW5nJiBs
b2NhbFN0b3JhZ2VQYXRoKTsKIAogcHJpdmF0ZToKICAgICBlbnVtIGNsYXNzIFN0b3JhZ2VCdWNr
ZXRNb2RlIDogYm9vbDsKQEAgLTYyLDYgKzcyLDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U3RvcmFnZUJ1Y2tldD4gbV9kZWZhdWx0QnVja2V0OwogICAgIFN0cmluZyBtX3BhdGg7
CiAgICAgYm9vbCBtX3BlcnNpc3RlZCB7IGZhbHNlIH07CisgICAgU3RyaW5nIG1fbG9jYWxTdG9y
YWdlUGF0aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMGE0OWY1MGI2MTM1ZmUzOWUxZTA1NWEwNWIzMmYyYjk0MTJmMTZjNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxp
dGVTdG9yYWdlQXJlYS5jcHAKQEAgLTAsMCArMSw0MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTUUxpdGVTdG9yYWdlQXJlYS5oIgorCisjaW5j
bHVkZSA8V2ViQ29yZS9TUUxpdGVGaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxp
dGVTdGF0ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVRyYW5zYWN0aW9uLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlTWFwLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
b25zdGV4cHIgU2Vjb25kcyB0cmFuc2FjdGlvbkR1cmF0aW9uIHsgNTAwX21zIH07Citjb25zdGV4
cHIgdW5zaWduZWQgbWF4aW11bVNpemVGb3JWYWx1ZXNLZXB0SW5NZW1vcnkgeyAxICogS0IgfTsK
K2NvbnN0ZXhwciBhdXRvIGNyZWF0ZUl0ZW1UYWJsZVN0YXRlbWVudEFsdGVybmF0aXZlID0gIkNS
RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENP
TkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiX3M7
Citjb25zdGV4cHIgYXV0byBjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnQgPSAiQ1JFQVRFIFRBQkxF
IEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJM
T0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiX3M7CisKK0FTQ0lJTGl0ZXJhbCBTUUxpdGVT
dG9yYWdlQXJlYTo6c3RhdGVtZW50U3RyaW5nKFN0YXRlbWVudFR5cGUgdHlwZSkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFN0YXRlbWVudFR5cGU6OkNvdW50SXRlbXM6
CisgICAgICAgIHJldHVybiAiU0VMRUNUIENPVU5UKCopIEZST00gSXRlbVRhYmxlIl9zOworICAg
IGNhc2UgU3RhdGVtZW50VHlwZTo6RGVsZXRlSXRlbToKKyAgICAgICAgcmV0dXJuICJERUxFVEUg
RlJPTSBJdGVtVGFibGUgV0hFUkUga2V5PT8iX3M7CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpE
ZWxldGVBbGxJdGVtczoKKyAgICAgICAgcmV0dXJuICJERUxFVEUgRlJPTSBJdGVtVGFibGUiX3M7
CisgICAgY2FzZSBTdGF0ZW1lbnRUeXBlOjpHZXRJdGVtOgorICAgICAgICByZXR1cm4gIlNFTEVD
VCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyJfczsKKyAgICBjYXNlIFN0YXRlbWVu
dFR5cGU6OkdldEFsbEl0ZW1zOgorICAgICAgICByZXR1cm4gIlNFTEVDVCBrZXksIHZhbHVlIEZS
T00gSXRlbVRhYmxlIl9zOworICAgIGNhc2UgU3RhdGVtZW50VHlwZTo6U2V0SXRlbToKKyAgICAg
ICAgcmV0dXJuICJJTlNFUlQgSU5UTyBJdGVtVGFibGUgVkFMVUVTICg/LCA/KSJfczsKKyAgICBj
YXNlIFN0YXRlbWVudFR5cGU6OkludmFsaWQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAiIl9zOworfQorCitTUUxpdGVTdG9y
YWdlQXJlYTo6U1FMaXRlU3RvcmFnZUFyZWEodW5zaWduZWQgcXVvdGEsIGNvbnN0IFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGgsIFJlZjxXb3JrUXVldWU+
JiYgd29ya1F1ZXVlKQorICAgIDogU3RvcmFnZUFyZWFCYXNlKHF1b3RhLCBvcmlnaW4pCisgICAg
LCBtX3BhdGgocGF0aCkKKyAgICAsIG1fcXVldWUoV1RGTW92ZSh3b3JrUXVldWUpKQoreworICAg
IEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKTsgKytpKQorICAgICAg
ICBtX2NhY2hlZFN0YXRlbWVudHMuYXBwZW5kKG51bGxwdHIpOworfQorCit2b2lkIFNRTGl0ZVN0
b3JhZ2VBcmVhOjpjbG9zZSgpCit7CisgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOworCisg
ICAgbV9jYWNoZSA9IHN0ZDo6bnVsbG9wdDsKKyAgICBjb21taXRUcmFuc2FjdGlvbklmTmVjZXNz
YXJ5KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KFN0
YXRlbWVudFR5cGU6OkludmFsaWQpOyArK2kpCisgICAgICAgIG1fY2FjaGVkU3RhdGVtZW50c1tp
XSA9IG51bGxwdHI7CisgICAgbV9kYXRhYmFzZSA9IG51bGxwdHI7Cit9CisKK1NRTGl0ZVN0b3Jh
Z2VBcmVhOjp+U1FMaXRlU3RvcmFnZUFyZWEoKQoreworICAgIEFTU0VSVCghaXNNYWluUnVuTG9v
cCgpKTsKKworICAgIGJvb2wgZGF0YWJhc2VJc0VtcHR5ID0gaXNFbXB0eSgpOworICAgIGNsb3Nl
KCk7CisgICAgaWYgKGRhdGFiYXNlSXNFbXB0eSkKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlRmls
ZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKG1fcGF0aCk7Cit9CisKK2Jvb2wgU1FMaXRlU3Rv
cmFnZUFyZWE6OmlzRW1wdHkoKQoreworICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKKwor
ICAgIGlmIChtX2NhY2hlKQorICAgICAgICByZXR1cm4gbV9jYWNoZS0+aXNFbXB0eSgpOworCisg
ICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBh
dXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlOjpDb3VudEl0ZW1z
KTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJl
YTo6aXNFbXB0eSBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2Rh
dGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gIXN0YXRlbWVudC0+Y29sdW1uSW50
KDApOworfQorCit2b2lkIFNRTGl0ZVN0b3JhZ2VBcmVhOjpjbGVhcigpCit7CisgICAgQVNTRVJU
KCFpc01haW5SdW5Mb29wKCkpOworCisgICAgY2xvc2UoKTsKKyAgICBXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUobV9wYXRoKTsKKyAgICBub3RpZnlMaXN0ZW5l
cnNBYm91dENsZWFyKCk7Cit9CisKK2Jvb2wgU1FMaXRlU3RvcmFnZUFyZWE6OmNyZWF0ZVRhYmxl
SWZOZWNlc3NhcnkoKQoreworICAgIGlmICghbV9kYXRhYmFzZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgU3RyaW5nIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnRhYmxlU1FMKCJJdGVt
VGFibGUiX3MpOworICAgIGlmIChzdGF0ZW1lbnQgPT0gY3JlYXRlSXRlbVRhYmxlU3RhdGVtZW50
IHx8IHN0YXRlbWVudCA9PSBjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnRBbHRlcm5hdGl2ZSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBUYWJsZSBleGlzdHMgYnV0IHN0YXRlbWVudCBp
cyB3cm9uZzsgZHJvcCBpdC4KKyAgICBpZiAoIXN0YXRlbWVudC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgaWYgKCFtX2RhdGFiYXNlLT5leGVjdXRlQ29tbWFuZCgiRFJPUCBUQUJMRSBJdGVtVGFibGUi
X3MpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3Rv
cmFnZUFyZWE6OmNyZWF0ZVRhYmxlSWZOZWNlc3NhcnkgZmFpbGVkIHRvIGRyb3AgZXhpc3Rpbmcg
aXRlbSB0YWJsZSAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFz
ZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gVGFibGUgZG9lcyBub3QgZXhpc3QuCisgICAgaWYgKCFtX2RhdGFi
YXNlLT5leGVjdXRlQ29tbWFuZChjcmVhdGVJdGVtVGFibGVTdGF0ZW1lbnQpKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Y3JlYXRlVGFi
bGVJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gY3JlYXRlIGl0ZW0gdGFibGUgKCVkKSAtICVzIiwgbV9k
YXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNR
TGl0ZVN0b3JhZ2VBcmVhOjpwcmVwYXJlRGF0YWJhc2UoKQoreworICAgIGlmIChtX2RhdGFiYXNl
ICYmIG1fZGF0YWJhc2UtPmlzT3BlbigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1f
ZGF0YWJhc2UgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPigpOworICAgIEZp
bGVTeXN0ZW06Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKG1fcGF0
aCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbihtX3BhdGgpKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6cHJlcGFyZURhdGFiYXNl
IGZhaWxlZCB0byBvcGVuIGRhdGFiYXNlIGF0ICclcyciLCBtX3BhdGgudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIG1fZGF0YWJhc2UgPSBudWxscHRyOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgICAgICAKKyAgICAvLyBTaW5jZSBhIFdvcmtRdWV1ZSBpc24ndCBib3VuZCB0byBh
IHNwZWNpZmljIHRocmVhZCwgd2UgbmVlZCB0byBkaXNhYmxlIHRocmVhZGluZyBjaGVjay4KKyAg
ICAvLyBXZSB3aWxsIG5ldmVyIGFjY2VzcyB0aGUgZGF0YWJhc2UgZnJvbSBkaWZmZXJlbnQgdGhy
ZWFkcyBzaW11bHRhbmVvdXNseS4KKyAgICBtX2RhdGFiYXNlLT5kaXNhYmxlVGhyZWFkaW5nQ2hl
Y2tzKCk7CisKKyAgICBpZiAoIWNyZWF0ZVRhYmxlSWZOZWNlc3NhcnkoKSkgeworICAgICAgICBt
X2RhdGFiYXNlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmIChxdW90YSgpICE9IFdlYkNvcmU6OlN0b3JhZ2VNYXA6Om5vUXVvdGEpCisgICAgICAgIG1f
ZGF0YWJhc2UtPnNldE1heGltdW1TaXplKHF1b3RhKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgU1FMaXRlU3RvcmFnZUFyZWE6OnN0YXJ0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgp
Cit7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uKQorICAgICAgICBtX3RyYW5zYWN0aW9uID0gbWFr
ZVVuaXF1ZTxXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbj4oKm1fZGF0YWJhc2UpOworCisgICAg
aWYgKG1fdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV90cmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaEFmdGVyKHRyYW5z
YWN0aW9uRHVyYXRpb24sIFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9XSB7CisgICAgICAg
IGlmICghd2Vha1RoaXMgfHwgIXdlYWtUaGlzLT5tX3RyYW5zYWN0aW9uKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIAorICAgICAgICBhdXRvIHRyYW5zYWN0aW9uID0gc3RkOjpleGNoYW5nZSh3
ZWFrVGhpcy0+bV90cmFuc2FjdGlvbiwgbnVsbHB0cik7CisgICAgICAgIHRyYW5zYWN0aW9uLT5j
b21taXQoKTsKKyAgICB9KTsKK30KKworV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0
U2NvcGUgU1FMaXRlU3RvcmFnZUFyZWE6OmNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlIHR5
cGUpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIEFTU0VSVCh0eXBlIDwgU3RhdGVt
ZW50VHlwZTo6SW52YWxpZCk7CisKKyAgICBhdXRvIGluZGV4ID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4odHlwZSk7CisgICAgaWYgKCFtX2NhY2hlZFN0YXRlbWVudHNbaW5kZXhdKSB7CisgICAgICAg
IGlmIChhdXRvIHJlc3VsdCA9IG1fZGF0YWJhc2UtPnByZXBhcmVIZWFwU3RhdGVtZW50KHN0YXRl
bWVudFN0cmluZyh0eXBlKSkpCisgICAgICAgICAgICBtX2NhY2hlZFN0YXRlbWVudHNbaW5kZXhd
ID0gcmVzdWx0LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgfQorCisgICAgcmV0dXJu
IFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHsgbV9jYWNoZWRTdGF0ZW1l
bnRzW2luZGV4XS5nZXQoKSB9OworfQorCitFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJvcj4g
U1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgaWYg
KG1fY2FjaGUpIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fY2FjaGUtPmZpbmQoa2V5KTsK
KyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fY2FjaGUtPmVuZCgpKQorICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4g
Z2V0SXRlbUZyb21EYXRhYmFzZShrZXkpOworfQorCitFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VF
cnJvcj4gU1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBrZXkpCit7CisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworCisgICAgYXV0byBzdGF0ZW1l
bnQgPSBjYWNoZWRTdGF0ZW1lbnQoU3RhdGVtZW50VHlwZTo6R2V0SXRlbSk7CisgICAgaWYgKCFz
dGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBrZXkpKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6Z2V0SXRlbUZyb21EYXRh
YmFzZSBmYWlsZWQgb24gY3JlYXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJhc2Ut
Pmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9CisKKyAgICBp
bnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVf
Uk9XKQorICAgICAgICByZXR1cm4gc3RhdGVtZW50LT5jb2x1bW5CbG9iQXNTdHJpbmcoMCk7Cisg
ICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OmdldEl0ZW1Gcm9tRGF0YWJhc2UgZmFpbGVk
IG9uIHN0ZXBwaW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3Io
KSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6SXRlbU5vdEZvdW5kKTsKK30KKworSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gU1FMaXRlU3RvcmFnZUFyZWE6OmFsbEl0ZW1zKCkKK3sKKyAgICBBU1NFUlQo
IWlzTWFpblJ1bkxvb3AoKSk7CisKKyAgICBpZiAoIXByZXBhcmVEYXRhYmFzZSgpKQorICAgICAg
ICByZXR1cm4gSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4geyB9OworCisgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gaXRlbXM7CisgICAgaWYgKG1fY2FjaGUpIHsKKyAgICAgICAgaXRlbXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NhY2hlLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8m
IFtrZXksIHZhbHVlXSA6ICptX2NhY2hlKSB7CisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVs
bCgpKSB7CisgICAgICAgICAgICAgICAgaXRlbXMuYWRkKGtleSwgdmFsdWUpOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXV0byBy
ZXN1bHQgPSBnZXRJdGVtRnJvbURhdGFiYXNlKGtleSkpCisgICAgICAgICAgICAgICAgaXRlbXMu
YWRkKGtleSwgcmVzdWx0LnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpdGVt
czsKKyAgICB9CisKKyAgICAvLyBJbXBvcnQgZnJvbSBkYXRhYmFzZS4KKyAgICBhdXRvIHN0YXRl
bWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0ZW1lbnRUeXBlOjpHZXRBbGxJdGVtcyk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNR
TGl0ZVN0b3JhZ2VBcmVhOjpnZXRBbGxJdGVtcyBmYWlsZWQgb24gY3JlYXRpbmcgc3RhdGVtZW50
ICglZCkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgbV9jYWNoZSA9IEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsgfTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5z
dGVwKCk7CisgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFN0cmlu
ZyBrZXkgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMCk7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9
IHN0YXRlbWVudC0+Y29sdW1uQmxvYkFzU3RyaW5nKDEpOworICAgICAgICBpZiAoIWtleS5pc051
bGwoKSAmJiAhdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1fY2FjaGUtPmFkZChrZXks
IHZhbHVlLnNpemVJbkJ5dGVzKCkgPiBtYXhpbXVtU2l6ZUZvclZhbHVlc0tlcHRJbk1lbW9yeSA/
IFN0cmluZygpIDogdmFsdWUpOworICAgICAgICAgICAgaXRlbXMuYWRkKFdURk1vdmUoa2V5KSwg
V1RGTW92ZSh2YWx1ZSkpOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50
LT5zdGVwKCk7CisgICAgfQorCisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkKKyAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoU3RvcmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpnZXRBbGxJ
dGVtcyBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNl
LT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworCisgICAgcmV0dXJu
IGl0ZW1zOworfQorCitFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IFNRTGl0ZVN0b3JhZ2VB
cmVhOjpzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFn
ZUFyZWFJbXBsSWRlbnRpZmllciBzdG9yYWdlQXJlYUltcGxJRCwgU3RyaW5nJiYga2V5LCBTdHJp
bmcmJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgQVNTRVJUKCFpc01h
aW5SdW5Mb29wKCkpOworCisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworCisgICAgc3RhcnRU
cmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgaWYg
KGF1dG8gdmFsdWVPckVycm9yID0gZ2V0SXRlbShrZXkpKQorICAgICAgICBvbGRWYWx1ZSA9IHZh
bHVlT3JFcnJvci52YWx1ZSgpOworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBjYWNoZWRTdGF0ZW1l
bnQoU3RhdGVtZW50VHlwZTo6U2V0SXRlbSk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBrZXkpIHx8IHN0YXRlbWVudC0+YmluZEJsb2IoMiwgdmFsdWUpKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTUUxpdGVTdG9yYWdlQXJlYTo6
c2V0SXRlbSBmYWlsZWQgb24gY3JlYXRpbmcgc3RhdGVtZW50ICglZCkgLSAlcyIsIG1fZGF0YWJh
c2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChTdG9yYWdlRXJyb3I6OkRhdGFiYXNlKTsKKyAgICB9CisKKyAg
ICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxJ
VEVfRlVMTCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6UXVv
dGFFeGNlZWRlZCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFyZWE6OnNldEl0ZW0gZmFp
bGVkIG9uIHN0ZXBwaW5nIHN0YXRlbWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgZGlzcGF0Y2hF
dmVudHMoY29ubmVjdGlvbiwgc3RvcmFnZUFyZWFJbXBsSUQsIGtleSwgb2xkVmFsdWUsIHZhbHVl
LCB1cmxTdHJpbmcpOworCisgICAgaWYgKG1fY2FjaGUpCisgICAgICAgIG1fY2FjaGUtPnNldChX
VEZNb3ZlKGtleSksIHZhbHVlLnNpemVJbkJ5dGVzKCkgPiBtYXhpbXVtU2l6ZUZvclZhbHVlc0tl
cHRJbk1lbW9yeSA/IFN0cmluZygpIDogV1RGTW92ZSh2YWx1ZSkpOworCisgICAgcmV0dXJuIHsg
fTsKK30KKworRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBTUUxpdGVTdG9yYWdlQXJlYTo6
cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0b3JhZ2VB
cmVhSW1wbElkZW50aWZpZXIgc3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7
CisKKyAgICBpZiAoIXByZXBhcmVEYXRhYmFzZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoU3RvcmFnZUVycm9yOjpEYXRhYmFzZSk7CisKKyAgICBzdGFydFRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKKyAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgaWYgKGF1dG8gdmFsdWVPckVy
cm9yID0gZ2V0SXRlbShrZXkpKQorICAgICAgICBvbGRWYWx1ZSA9IHZhbHVlT3JFcnJvci52YWx1
ZSgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJv
cjo6SXRlbU5vdEZvdW5kKTsKKworICAgIGF1dG8gc3RhdGVtZW50ID0gY2FjaGVkU3RhdGVtZW50
KFN0YXRlbWVudFR5cGU6OkRlbGV0ZUl0ZW0pOworICAgIGlmICghc3RhdGVtZW50IHx8IHN0YXRl
bWVudC0+YmluZFRleHQoMSwga2V5KSB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU1FMaXRlU3RvcmFnZUFy
ZWE6OnJlbW92ZUl0ZW0gZmFpbGVkIG9uIGV4ZWN1dGluZyBzdGF0ZW1lbnQgKCVkKSAtICVzIiwg
bV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworICAg
IH0KKworICAgIGRpc3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1wbElELCBr
ZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsKKworICAgIGlmIChtX2NhY2hlKQor
ICAgICAgICBtX2NhY2hlLT5yZW1vdmUoa2V5KTsKKworICAgIHJldHVybiB7IH07Cit9CisKK0V4
cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gU1FMaXRlU3RvcmFnZUFyZWE6OmNsZWFyKElQQzo6
Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmll
ciBzdG9yYWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgQVNT
RVJUKCFpc01haW5SdW5Mb29wKCkpOworCisgICAgaWYgKCFwcmVwYXJlRGF0YWJhc2UoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6RGF0YWJhc2UpOworCisg
ICAgaWYgKG1fY2FjaGUgJiYgbV9jYWNoZS0+aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9yOjpJdGVtTm90Rm91bmQpOworCisgICAgaWYgKG1fY2Fj
aGUpCisgICAgICAgIG1fY2FjaGUtPmNsZWFyKCk7CisKKyAgICBzdGFydFRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGNhY2hlZFN0YXRlbWVudChTdGF0ZW1l
bnRUeXBlOjpEZWxldGVBbGxJdGVtcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoU3Rv
cmFnZSwgIlNRTGl0ZVN0b3JhZ2VBcmVhOjpjbGVhciBmYWlsZWQgb24gZXhlY3V0aW5nIHN0YXRl
bWVudCAoJWQpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFz
dEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU3RvcmFnZUVycm9y
OjpEYXRhYmFzZSk7CisgICAgfQorCisgICAgaWYgKG1fZGF0YWJhc2UtPmxhc3RDaGFuZ2VzKCkg
PD0gMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFN0b3JhZ2VFcnJvcjo6SXRlbU5v
dEZvdW5kKTsKKworICAgIGRpc3BhdGNoRXZlbnRzKGNvbm5lY3Rpb24sIHN0b3JhZ2VBcmVhSW1w
bElELCBTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCB1cmxTdHJpbmcpOworCisgICAgcmV0
dXJuIHsgfTsKK30KKwordm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y29tbWl0VHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKGF1dG8gdHJhbnNhY3Rpb24gPSBzdGQ6OmV4Y2hhbmdl
KG1fdHJhbnNhY3Rpb24sIG51bGxwdHIpKQorICAgICAgICB0cmFuc2FjdGlvbi0+Y29tbWl0KCk7
Cit9CisKK3ZvaWQgU1FMaXRlU3RvcmFnZUFyZWE6OmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKQor
eworICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKKworICAgIGlmIChtX2RhdGFiYXNlICYm
IG1fZGF0YWJhc2UtPmlzT3BlbigpKQorICAgICAgICBtX2RhdGFiYXNlLT5yZWxlYXNlTWVtb3J5
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuaCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmU5MDU2YTEzNWFiYzAzMzFiMDNkNDg5OWRhNzcyMWNlNmZiNjM0OTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFn
ZUFyZWEuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhQmFzZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRl
RGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTUUxpdGVTdG9yYWdlQXJlYSBm
aW5hbCA6IHB1YmxpYyBTdG9yYWdlQXJlYUJhc2UgeworcHVibGljOgorICAgIFNRTGl0ZVN0b3Jh
Z2VBcmVhKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBjb25z
dCBTdHJpbmcmIHBhdGgsIFJlZjxXb3JrUXVldWU+JiYpOworICAgIH5TUUxpdGVTdG9yYWdlQXJl
YSgpOworCisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgaGFuZGxlTG93TWVtb3J5V2Fybmlu
ZygpOworICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCitwcml2YXRl
OgorICAgIC8vIFN0b3JhZ2VBcmVhQmFzZQorICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIFN0b3JhZ2VBcmVhQmFzZTo6VHlwZTo6U1FMaXRlOyB9OworICAgIFN0b3JhZ2VUeXBl
IHN0b3JhZ2VUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU3RvcmFnZUFyZWFCYXNlOjpTdG9y
YWdlVHlwZTo6TG9jYWw7IH07CisgICAgYm9vbCBpc0VtcHR5KCkgZmluYWw7CisgICAgdm9pZCBj
bGVhcigpIGZpbmFsOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGFsbEl0ZW1zKCkgZmlu
YWw7CisgICAgRXhwZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiBzZXRJdGVtKElQQzo6Q29ubmVj
dGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIFN0cmluZyYmIGtleSwg
U3RyaW5nJiYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKyAgICBFeHBl
Y3RlZDx2b2lkLCBTdG9yYWdlRXJyb3I+IHJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKyAgICBFeHBlY3RlZDx2b2lkLCBTdG9yYWdlRXJy
b3I+IGNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBmaW5hbDsKKworICAgIGJvb2wgY3JlYXRl
VGFibGVJZk5lY2Vzc2FyeSgpOworICAgIGJvb2wgcHJlcGFyZURhdGFiYXNlKCk7CisgICAgdm9p
ZCBzdGFydFRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGVudW0gY2xhc3MgU3RhdGVt
ZW50VHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBDb3VudEl0ZW1zLAorICAgICAgICBEZWxldGVJ
dGVtLAorICAgICAgICBEZWxldGVBbGxJdGVtcywKKyAgICAgICAgR2V0SXRlbSwKKyAgICAgICAg
R2V0QWxsSXRlbXMsCisgICAgICAgIFNldEl0ZW0sCisgICAgICAgIEludmFsaWQKKyAgICB9Owor
ICAgIEFTQ0lJTGl0ZXJhbCBzdGF0ZW1lbnRTdHJpbmcoU3RhdGVtZW50VHlwZSkgY29uc3Q7Cisg
ICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgY2FjaGVkU3RhdGVtZW50
KFN0YXRlbWVudFR5cGUpOworICAgIEV4cGVjdGVkPFN0cmluZywgU3RvcmFnZUVycm9yPiBnZXRJ
dGVtKGNvbnN0IFN0cmluZyYga2V5KTsKKyAgICBFeHBlY3RlZDxTdHJpbmcsIFN0b3JhZ2VFcnJv
cj4gZ2V0SXRlbUZyb21EYXRhYmFzZShjb25zdCBTdHJpbmcmIGtleSk7CisKKyAgICBTdHJpbmcg
bV9wYXRoOworICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiBtX2RhdGFiYXNlOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4+IG1fY2FjaGVkU3RhdGVt
ZW50czsKKyAgICBzdGQ6Om9wdGlvbmFsPEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+PiBtX2NhY2hl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViS2l0OjpTdG9yYWdlQXJlYUJhc2UmIGFyZWEpIHsgcmV0dXJuIGFyZWEudHlwZSgp
ID09IFdlYktpdDo6U3RvcmFnZUFyZWFCYXNlOjpUeXBlOjpTUUxpdGU7IH0KK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDBmZDc5NjBhYzVkYjY3NjU5ZTJkNzM5MTdkZjI2YjRjMDczZmQzMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1h
bmFnZXIuY3BwCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlTWFuYWdlci5oIgorCisjaW5jbHVkZSAiTWVt
b3J5U3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYVJlZ2lzdHJ5LmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitTZXNzaW9uU3RvcmFnZU1hbmFnZXI6OlNlc3Npb25TdG9yYWdl
TWFuYWdlcihTdG9yYWdlQXJlYVJlZ2lzdHJ5JiByZWdpc3RyeSkKKyAgICA6IG1fcmVnaXN0cnko
cmVnaXN0cnkpCit7Cit9CisKK2Jvb2wgU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyOjppc0FjdGl2ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6YW55T2YobV9zdG9yYWdlQXJlYXMudmFsdWVzKCks
IFsmXSAoYXV0byYgc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLT5o
YXNMaXN0ZW5lcnMoKTsKKyAgICB9KTsKK30KKworYm9vbCBTZXNzaW9uU3RvcmFnZU1hbmFnZXI6
Omhhc0RhdGFJbk1lbW9yeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6YW55T2YobV9zdG9y
YWdlQXJlYXMudmFsdWVzKCksIFsmXSAoYXV0byYgc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgcmV0
dXJuICFzdG9yYWdlQXJlYS0+aXNFbXB0eSgpOworICAgIH0pOworfQorCit2b2lkIFNlc3Npb25T
dG9yYWdlTWFuYWdlcjo6Y2xlYXJEYXRhKCkKK3sKKyAgICBmb3IgKGF1dG8mIHN0b3JhZ2VBcmVh
IDogbV9zdG9yYWdlQXJlYXMudmFsdWVzKCkpCisgICAgICAgIHN0b3JhZ2VBcmVhLT5jbGVhcigp
OworfQorCit2b2lkIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6Y29ubmVjdGlvbkNsb3NlZChJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24pCit7CisgICAgZm9yIChhdXRvJiBzdG9y
YWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFzLnZhbHVlcygpKQorICAgICAgICBzdG9yYWdlQXJlYS0+
cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbik7Cit9CisKK1N0b3JhZ2VBcmVhSWRlbnRpZmllciBT
ZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmFkZFN0b3JhZ2VBcmVhKHN0ZDo6dW5pcXVlX3B0cjxNZW1v
cnlTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEsIElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29u
bmVjdGlvbiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIgbmFtZXNwYWNlSWRlbnRpZmllcikK
K3sKKyAgICBhdXRvIGlkZW50aWZpZXIgPSBzdG9yYWdlQXJlYS0+aWRlbnRpZmllcigpOworICAg
IG1fcmVnaXN0cnkucmVnaXN0ZXJTdG9yYWdlQXJlYShpZGVudGlmaWVyLCAqc3RvcmFnZUFyZWEp
OworICAgIHN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25uZWN0aW9uKTsKKyAgICBtX3N0b3Jh
Z2VBcmVhc0J5TmFtZXNwYWNlLmFkZChuYW1lc3BhY2VJZGVudGlmaWVyLCBpZGVudGlmaWVyKTsK
KyAgICBtX3N0b3JhZ2VBcmVhcy5hZGQoaWRlbnRpZmllciwgV1RGTW92ZShzdG9yYWdlQXJlYSkp
OworCisgICAgcmV0dXJuIGlkZW50aWZpZXI7Cit9CisKK1N0b3JhZ2VBcmVhSWRlbnRpZmllciBT
ZXNzaW9uU3RvcmFnZU1hbmFnZXI6OmNvbm5lY3RUb1Nlc3Npb25TdG9yYWdlQXJlYShJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdp
biYgb3JpZ2luLCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciBuYW1lc3BhY2VJZGVudGlmaWVy
KQoreworICAgIGF1dG8gaWRlbnRpZmllciA9IG1fc3RvcmFnZUFyZWFzQnlOYW1lc3BhY2UuZ2V0
KG5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIGlmIChpZGVudGlmaWVyLmlzVmFsaWQoKSkgewor
ICAgICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYXMuY29udGFpbnMoaWRlbnRpZmllcikpOworICAg
ICAgICByZXR1cm4gaWRlbnRpZmllcjsKKyAgICB9CisKKyAgICBhdXRvIG5ld1N0b3JhZ2VBcmVh
ID0gbWFrZVVuaXF1ZTxNZW1vcnlTdG9yYWdlQXJlYT4ob3JpZ2luKTsKKyAgICByZXR1cm4gYWRk
U3RvcmFnZUFyZWEoV1RGTW92ZShuZXdTdG9yYWdlQXJlYSksIGNvbm5lY3Rpb24sIG5hbWVzcGFj
ZUlkZW50aWZpZXIpOworfQorCit2b2lkIFNlc3Npb25TdG9yYWdlTWFuYWdlcjo6ZGlzY29ubmVj
dEZyb21TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24sIFN0
b3JhZ2VBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvKiBzdG9yYWdl
QXJlYSA9IG1fc3RvcmFnZUFyZWFzLmdldChpZGVudGlmaWVyKSkKKyAgICAgICAgc3RvcmFnZUFy
ZWEtPnJlbW92ZUxpc3RlbmVyKGNvbm5lY3Rpb24pOworfQorCit2b2lkIFNlc3Npb25TdG9yYWdl
TWFuYWdlcjo6Y2xvbmVTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5l
Y3Rpb24sIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHNvdXJjZU5hbWVzcGFjZUlkZW50aWZp
ZXIsIFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyIHRhcmdldE5hbWVzcGFjZUlkZW50aWZpZXIp
Cit7CisgICAgYXV0byBpZGVudGlmaWVyID0gbV9zdG9yYWdlQXJlYXNCeU5hbWVzcGFjZS5nZXQo
c291cmNlTmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAgaWYgKCFpZGVudGlmaWVyLmlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VB
cmVhcy5maW5kKGlkZW50aWZpZXIpOyBpdGVyYXRvciAhPSBtX3N0b3JhZ2VBcmVhcy5lbmQoKSkg
eworICAgICAgICBhdXRvIG5ld1N0b3JhZ2VBcmVhID0gaXRlcmF0b3ItPnZhbHVlLT5jbG9uZSgp
OworICAgICAgICBhZGRTdG9yYWdlQXJlYShXVEZNb3ZlKG5ld1N0b3JhZ2VBcmVhKSwgY29ubmVj
dGlvbiwgdGFyZ2V0TmFtZXNwYWNlSWRlbnRpZmllcik7CisgICAgfQorfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzdjYmQ4OTdh
MTUwZWVlMjJlYjcyODBlZTUyZDAyNGRkYzU1NWZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlTWFuYWdlci5oCkBA
IC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlm
aWVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBNZW1vcnlTdG9yYWdlQXJlYTsK
K2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnk7CisKK2NsYXNzIFNlc3Npb25TdG9yYWdlTWFuYWdl
ciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
U2Vzc2lvblN0b3JhZ2VNYW5hZ2VyKFN0b3JhZ2VBcmVhUmVnaXN0cnkmKTsKKyAgICBib29sIGlz
QWN0aXZlKCkgY29uc3Q7CisgICAgYm9vbCBoYXNEYXRhSW5NZW1vcnkoKSBjb25zdDsKKyAgICB2
b2lkIGNsZWFyRGF0YSgpOworICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlEKTsKKworICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBjb25uZWN0VG9TZXNz
aW9uU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJiwgU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZGlz
Y29ubmVjdEZyb21TdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdl
QXJlYUlkZW50aWZpZXIpOworICAgIHZvaWQgY2xvbmVTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlELCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllciwgU3RvcmFnZU5hbWVzcGFj
ZUlkZW50aWZpZXIpOworCitwcml2YXRlOgorICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBhZGRT
dG9yYWdlQXJlYShzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+LCBJUEM6OkNvbm5l
Y3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcik7CisKKyAgICBTdG9y
YWdlQXJlYVJlZ2lzdHJ5JiBtX3JlZ2lzdHJ5OworICAgIEhhc2hNYXA8U3RvcmFnZUFyZWFJZGVu
dGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5U3RvcmFnZUFyZWE+PiBtX3N0b3JhZ2VBcmVh
czsKKyAgICBIYXNoTWFwPFN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyLCBTdG9yYWdlQXJlYUlk
ZW50aWZpZXI+IG1fc3RvcmFnZUFyZWFzQnlOYW1lc3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9TdG9yYWdlQXJlYUJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTQ0YmEwMTM1YTY0M2MwMWE1Yjkw
MGM3NjMxYmExNDk5OGY4ZjNjMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuY3BwCkBAIC0wLDAgKzEsNzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdG9yYWdl
QXJlYUJhc2UuaCIKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1N0b3JhZ2VBcmVhQmFzZTo6U3RvcmFnZUFyZWFCYXNlKHVuc2ln
bmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKKyAgICA6IG1f
aWRlbnRpZmllcihTdG9yYWdlQXJlYUlkZW50aWZpZXI6OmdlbmVyYXRlKCkpCisgICAgLCBtX3F1
b3RhKHF1b3RhKQorICAgICwgbV9vcmlnaW4ob3JpZ2luKQoreworfQorCitTdG9yYWdlQXJlYUJh
c2U6On5TdG9yYWdlQXJlYUJhc2UoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgU3RvcmFnZUFyZWFCYXNl
OjphZGRMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24pCit7Cisg
ICAgQVNTRVJUKCFtX2xpc3RlbmVycy5jb250YWlucyhjb25uZWN0aW9uKSk7CisKKyAgICBtX2xp
c3RlbmVycy5hZGQoY29ubmVjdGlvbik7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFCYXNlOjpyZW1v
dmVMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb24pCit7CisgICAg
bV9saXN0ZW5lcnMucmVtb3ZlKGNvbm5lY3Rpb24pOworfQorCitib29sIFN0b3JhZ2VBcmVhQmFz
ZTo6aGFzTGlzdGVuZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fbGlzdGVuZXJzLmlzRW1w
dHkoKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYUJhc2U6Om5vdGlmeUxpc3RlbmVyc0Fib3V0Q2xl
YXIoKQoreworICAgIGZvciAoYXV0byYgY29ubmVjdGlvbiA6IG1fbGlzdGVuZXJzKQorICAgICAg
ICBJUEM6OkNvbm5lY3Rpb246OnNlbmQoY29ubmVjdGlvbiwgTWVzc2FnZXM6OlN0b3JhZ2VBcmVh
TWFwOjpDbGVhckNhY2hlKCksIG1faWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKwordm9pZCBT
dG9yYWdlQXJlYUJhc2U6OmRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQg
c291cmNlQ29ubmVjdGlvbiwgU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllciBzb3VyY2VJbXBsSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0
IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdAoreworICAg
IEFTU0VSVChzb3VyY2VJbXBsSWRlbnRpZmllcik7CisKKyAgICBmb3IgKGF1dG8mIGNvbm5lY3Rp
b24gOiBtX2xpc3RlbmVycykgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFN0b3JhZ2VBcmVhSW1w
bElkZW50aWZpZXI+IGltcGxJZGVudGlmaWVyOworICAgICAgICBpZiAoY29ubmVjdGlvbiA9PSBz
b3VyY2VDb25uZWN0aW9uKQorICAgICAgICAgICAgaW1wbElkZW50aWZpZXIgPSBzb3VyY2VJbXBs
SWRlbnRpZmllcjsKKyAgICAgICAgSVBDOjpDb25uZWN0aW9uOjpzZW5kKGNvbm5lY3Rpb24sIE1l
c3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlzcGF0Y2hTdG9yYWdlRXZlbnQoaW1wbElkZW50aWZp
ZXIsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCB1cmxTdHJpbmcpLCBtX2lkZW50aWZpZXIudG9V
SW50NjQoKSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuaCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9yYWdlQXJlYUJhc2UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lZDNlZDE0MjA2ZTE3NWRjYWNjOGMxZjk5NDkwNzUwNTQ1ZTM0ZTk4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3Jh
Z2VBcmVhQmFzZS5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSWRl
bnRpZmllci5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBDbGllbnRPcmlnaW47Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitlbnVtIGNsYXNzIFN0b3JhZ2VFcnJvciA6IHVpbnQ4X3QgeworICAgIERh
dGFiYXNlLAorICAgIEl0ZW1Ob3RGb3VuZCwKKyAgICBRdW90YUV4Y2VlZGVkLAorfTsKKworY2xh
c3MgU3RvcmFnZUFyZWFCYXNlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFN0b3JhZ2VBcmVhQmFz
ZT4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0b3JhZ2VBcmVhQmFzZSk7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+U3RvcmFnZUFyZWFC
YXNlKCk7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiBib29sIHsgU1FMaXRlLCBNZW1vcnkgfTsK
KyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKKyAgICBlbnVtIGNsYXNzIFN0b3Jh
Z2VUeXBlIDogYm9vbCB7IFNlc3Npb24sIExvY2FsIH07CisgICAgdmlydHVhbCBTdG9yYWdlVHlw
ZSBzdG9yYWdlVHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CisKKyAgICBTdG9yYWdlQXJlYUlkZW50
aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIFdl
YkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQor
ICAgIHVuc2lnbmVkIHF1b3RhKCkgY29uc3QgeyByZXR1cm4gbV9xdW90YTsgfQorICAgIHZvaWQg
YWRkTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7CisgICAgdm9pZCByZW1vdmVM
aXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKKyAgICBib29sIGhhc0xpc3RlbmVy
cygpIGNvbnN0OworICAgIHZvaWQgbm90aWZ5TGlzdGVuZXJzQWJvdXRDbGVhcigpOworCisgICAg
dmlydHVhbCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBhbGxJdGVtcygpID0gMDsKKyAgICB2aXJ0
dWFsIEV4cGVjdGVkPHZvaWQsIFN0b3JhZ2VFcnJvcj4gc2V0SXRlbShJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUltcGxJZGVudGlmaWVyLCBTdHJpbmcmJiBrZXksIFN0cmlu
ZyYmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgPSAwOworICAgIHZpcnR1YWwgRXhw
ZWN0ZWQ8dm9pZCwgU3RvcmFnZUVycm9yPiByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHVybFN0cmluZykgPSAwOworICAgIHZpcnR1YWwgRXhwZWN0ZWQ8dm9pZCwgU3Rv
cmFnZUVycm9yPiBjbGVhcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCBTdG9yYWdlQXJlYUlt
cGxJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgPSAwOworCitwcm90ZWN0ZWQ6
CisgICAgU3RvcmFnZUFyZWFCYXNlKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGll
bnRPcmlnaW4mKTsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQsIFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZykgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU3RvcmFnZUFyZWFJZGVudGlmaWVy
IG1faWRlbnRpZmllcjsKKyAgICB1bnNpZ25lZCBtX3F1b3RhOworICAgIFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiBtX29yaWdpbjsKKyAgICBIYXNoU2V0PElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQ+
IG1fbGlzdGVuZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdp
c3RyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMWRkMTRjNmY1MGM5NDZhNGNlNGQ4NTAwMzk2MWQzZmZjNmI5
Y2I0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9TdG9yYWdlQXJlYVJlZ2lzdHJ5LmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhUmVnaXN0cnkuaCIK
KworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhQmFzZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
U3RvcmFnZUFyZWFSZWdpc3RyeTo6U3RvcmFnZUFyZWFSZWdpc3RyeSgpID0gZGVmYXVsdDsKKwor
dm9pZCBTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpyZWdpc3RlclN0b3JhZ2VBcmVhKFN0b3JhZ2VBcmVh
SWRlbnRpZmllciBpZGVudGlmaWVyLCBTdG9yYWdlQXJlYUJhc2UmIHN0b3JhZ2VBcmVhKQorewor
ICAgIEFTU0VSVCghbV9zdG9yYWdlQXJlYXMuY29udGFpbnMoaWRlbnRpZmllcikpOworCisgICAg
bV9zdG9yYWdlQXJlYXMuYWRkKGlkZW50aWZpZXIsIHN0b3JhZ2VBcmVhKTsKK30KKwordm9pZCBT
dG9yYWdlQXJlYVJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyU3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVu
dGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFzLmNvbnRhaW5z
KGlkZW50aWZpZXIpKTsKKworICAgIG1fc3RvcmFnZUFyZWFzLnJlbW92ZShpZGVudGlmaWVyKTsK
K30KKworU3RvcmFnZUFyZWFCYXNlKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5OjpnZXRTdG9yYWdlQXJl
YShTdG9yYWdlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4gbV9zdG9y
YWdlQXJlYXMuZ2V0KGlkZW50aWZpZXIpLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TdG9y
YWdlQXJlYVJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
U3RvcmFnZUFyZWFSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwY2M3NDIzNzY1MmY1YzE2N2M2OGJl
MWY2YTJiNmNjNGVlZTQzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5oCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSWRlbnRp
Zmllci5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBTdG9yYWdlQXJlYUJhc2U7CisKK2NsYXNzIFN0b3JhZ2VBcmVhUmVnaXN0cnkgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFN0b3JhZ2VBcmVhUmVn
aXN0cnkoKTsKKyAgICB2b2lkIHJlZ2lzdGVyU3RvcmFnZUFyZWEoU3RvcmFnZUFyZWFJZGVudGlm
aWVyLCBTdG9yYWdlQXJlYUJhc2UmKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTdG9yYWdlQXJlYShT
dG9yYWdlQXJlYUlkZW50aWZpZXIpOworICAgIFN0b3JhZ2VBcmVhQmFzZSogZ2V0U3RvcmFnZUFy
ZWEoU3RvcmFnZUFyZWFJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICBIYXNoTWFwPFN0b3Jh
Z2VBcmVhSWRlbnRpZmllciwgV2Vha1B0cjxTdG9yYWdlQXJlYUJhc2U+PiBtX3N0b3JhZ2VBcmVh
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaCBiL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy9nZW5lcmF0ZS11bmlmaWVkLXNvdXJjZXMuc2gKaW5kZXggYjZkNDBhZDllOTU0N2JkNDBk
ZTg1YzljODVhMzVjMWUyNWNkZjE5MS4uNGYxYWM4M2NiM2EyMjZlY2NkMDc4Mzk4Mzc5MjNjYmM0
NGJhYjkyMyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL2dlbmVyYXRlLXVuaWZp
ZWQtc291cmNlcy5zaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtdW5pZmll
ZC1zb3VyY2VzLnNoCkBAIC0xNCw3ICsxNCw3IEBAIGlmIFsgLXogIiR7QlVJTERfU0NSSVBUU19E
SVJ9IiBdOyB0aGVuCiAgICAgZmkKIGZpCiAKLVVuaWZpZWRTb3VyY2VDcHBGaWxlQ291bnQ9MTEx
CitVbmlmaWVkU291cmNlQ3BwRmlsZUNvdW50PTExMgogVW5pZmllZFNvdXJjZU1tRmlsZUNvdW50
PTgwCiAKIGlmIFsgJCMgLWVxIDAgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggMDVhODViMDE5NjA0
MjAxNmFiNjg1ZjIwZDRiZWY3M2M0NjI2NTYwNy4uNDJmYjYxYjE3NzUxZTExOTczMmZhYWIyNmUx
NThhNTI2MzU1MzUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0xNDMsOCArMTQzLDE0IEBAIE5ldHdvcmtQ
cm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmNwcCBA
bm8tdW5pZnkKIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2Vy
LmNwcAogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9GaWxlU3lzdGVtU3RvcmFnZUhhbmRsZS5jcHAK
IE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5j
cHAKK05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvTG9jYWxTdG9yYWdlTWFuYWdlci5jcHAKK05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvTWVtb3J5U3RvcmFnZUFyZWEuY3BwCiBOZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL05ldHdvcmtTdG9yYWdlTWFuYWdlci5jcHAKIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2Uv
T3JpZ2luU3RvcmFnZU1hbmFnZXIuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0
b3JhZ2VBcmVhLmNwcAorTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZU1hbmFn
ZXIuY3BwCitOZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1N0b3JhZ2VBcmVhQmFzZS5jcHAKK05ldHdv
cmtQcm9jZXNzL3N0b3JhZ2UvU3RvcmFnZUFyZWFSZWdpc3RyeS5jcHAKIAogTmV0d29ya1Byb2Nl
c3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAKIE5ldHdvcmtQcm9jZXNzL1dl
YlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5k
ZXggZjQwMDBhNmI3MTkxMzVjMzQzYjRjZDA5YzAyM2E2OGYyYzVlNzg1ZS4uYjExZjJkNTNjZmZh
ODVmOTZmMjc0MTFkOWQyZGIwN2Q5NmEwN2MzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0xNTcyLDE2
ICsxNTcyLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhdGVTeW1MaW5rRm9yRmls
ZVVwZ3JhZGUoY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0YWIKICAgICAgICAgRmlsZVN5c3RlbTo6
Y3JlYXRlU3ltYm9saWNMaW5rKGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgb2xkVmVyc2lvbkRp
cmVjdG9yeSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0TG9jYWxTdG9yYWdl
RGV0YWlscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFjYW5TZW5kTWVzc2FnZSgpKSB7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpHZXRMb2NhbFN0
b3JhZ2VPcmlnaW5EZXRhaWxzKHNlc3Npb25JRCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpwcmVjb25uZWN0VG8oUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlELCBX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllciB3ZWJQYWdlSUQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIHVzZXJBZ2VudCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIHN0ZDo6b3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21h
aW4+IGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4sIExhc3ROYXZpZ2F0aW9uV2FzQXBwSW5p
dGlhdGVkIGxhc3ROYXZpZ2F0aW9uV2FzQXBwSW5pdGlhdGVkKQogewogICAgIGlmICghdXJsLmlz
VmFsaWQoKSB8fCAhdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVD
b2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNp
dGVEYXRhU3RvcmVDb2NvYS5tbQppbmRleCAwY2NiNjYyYmExYjM5NzNlNDNkNmY3NWMyMTRkNWU3
NWM0ZjlhZWU1Li5kOTk3MWViYWFmOWE2MThhNmMxYjQ5MjVhN2RiZjViNWQ3YWFmZDBjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCkBAIC02NDQsNCArNjQ0LDE1IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6c2VuZE5ldHdvcmtQcm9jZXNzWFBDRW5kcG9pbnRUb0FsbFBy
b2Nlc3NlcygpCiAjZW5kaWYKIH0KIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKK3ZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6ZXhjbHVkZURpcmVjdG9yeUZyb21CYWNrdXAoY29uc3QgU3RyaW5n
JiBkaXJlY3RvcnkpCit7CisgICAgTlNVUkwgKnVybCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOihO
U1N0cmluZyAqKWRpcmVjdG9yeV07CisgICAgaWYgKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFu
YWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRVUkw6dXJsIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3Rvcmll
czpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bnVsbHB0cl0pCisgICAgICAgIFtbTlNVUkwgZmls
ZVVSTFdpdGhQYXRoOihOU1N0cmluZyAqKWRpcmVjdG9yeSBpc0RpcmVjdG9yeTpZRVNdIHNldFJl
c291cmNlVmFsdWU6QFlFUyBmb3JLZXk6TlNVUkxJc0V4Y2x1ZGVkRnJvbUJhY2t1cEtleSBlcnJv
cjpuaWxdOworfQorCisjZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCA5MDk3OTNlMzc1
NjhjMDQyYjEwMDJhMjZhYTAyNzQ3ODRhOTFlNGNhLi4yNTZiODg3NDAzZGFmNjVkNGJhMWJlNWEx
OGY0NWVlZGVjYjc4N2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMTkwMyw2ICsxOTAzLDkgQEAg
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygp
CiAgICAgYXV0byBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSByZXNvbHZlZExvY2FsU3RvcmFnZURp
cmVjdG9yeSgpOwogICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewog
ICAgICAgICBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFnZURp
cmVjdG9yeTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBleGNsdWRlRGlyZWN0
b3J5RnJvbUJhY2t1cChsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOworI2VuZGlmCiAgICAgICAgIC8v
IEZJWE1FOiBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rv
cnkgcmVzb2x2ZXMgdGhlIGRpcmVjdG9yeSwgYnV0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkb25l
LiBSZW1vdmUgdGhpcyBkdXBsaWNhdGUgd29yay4KICAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0g
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2Fs
U3RvcmFnZURpcmVjdG9yeSkpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmhhbmRsZSk7CkBAIC0xOTY5LDE4ICsx
OTcyLDYgQEAgQVBJOjpIVFRQQ29va2llU3RvcmUmIFdlYnNpdGVEYXRhU3RvcmU6OmNvb2tpZVN0
b3JlKCkKICAgICByZXR1cm4gKm1fY29va2llU3RvcmU7CiB9CiAKLXZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0
b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQotewotICAgIGlmICghaXNQZXJzaXN0ZW50KCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG5ldHdvcmtQcm9jZXNz
KCkuZ2V0TG9jYWxTdG9yYWdlRGV0YWlscyhtX3Nlc3Npb25JRCwgW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBkZXRhaWxzKSB7Ci0gICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoZGV0YWlscykpOwotICAgIH0pOwotfQotCiB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oCmluZGV4IDFkZTI1YTY2MDU3ZjJkNjZjNjI5OWU1ZWJiYjgxNDZiZWU5YjgxZTMuLjE0
N2EwYjliYTc4ZDg3MWI3YTc2YTc0OWE3MjQxNzU1ZjNkNzc0NGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAg
LTE2Nyw3ICsxNjcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVEYXRhKE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+LCBXYWxsVGltZSBtb2RpZmllZFNpbmNlLCBGdW5jdGlvbjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vi
c2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiYsIEZ1bmN0aW9u
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICB2b2lkIGdldExvY2FsU3RvcmFn
ZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2Vy
OjpPcmlnaW5EZXRhaWxzPiYmKT4mJik7CiAgICAgdm9pZCBzZXRDYWNoZU1vZGVsU3luY2hyb25v
dXNseUZvclRlc3RpbmcoQ2FjaGVNb2RlbCk7CiAgICAgdm9pZCBzZXRTZXJ2aWNlV29ya2VyVGlt
ZW91dEZvclRlc3RpbmcoU2Vjb25kcyk7CiAgICAgdm9pZCByZXNldFNlcnZpY2VXb3JrZXJUaW1l
b3V0Rm9yVGVzdGluZygpOwpAQCAtMzcyLDYgKzM3MSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGNvdW50Tm9uRGVmYXVsdFNlc3Npb25TZXRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc2l6ZV90
KT4mJik7CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHZvaWQgZXhjbHVkZURpcmVj
dG9yeUZyb21CYWNrdXAoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpOworI2VuZGlmCisKIHByaXZh
dGU6CiAgICAgZW51bSBjbGFzcyBGb3JjZVJlaW5pdGlhbGl6YXRpb24gOiBib29sIHsgTm8sIFll
cyB9OwogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVW5pZmllZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L1Vu
aWZpZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDUwODk4ZTQ2MzAxNzMxOTRhZTRl
ZjdjY2U0M2FlOGViNDY3M2E4NmIuLjJhZDc5NjQ1ZDZlZjY4M2RhZDRlYjA3NmY1ZGQ3MjQ3MmJm
ODYwYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVW5pZmllZFNvdXJjZXMtb3V0cHV0Lnhj
ZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9VbmlmaWVkU291cmNlcy1vdXRwdXQueGNmaWxl
bGlzdApAQCAtMTcsNiArMTcsNyBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTEtbW0ubQogJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmll
ZFNvdXJjZTExLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTExMC5jcHAKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQvdW5pZmllZC1zb3VyY2VzL1VuaWZpZWRTb3VyY2Ux
MTEuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZp
ZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTEyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdC91bmlmaWVkLXNvdXJjZXMvVW5pZmllZFNvdXJjZTEyLW1tLm1t
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQtc291
cmNlcy9VbmlmaWVkU291cmNlMTIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0L3VuaWZpZWQtc291cmNlcy9VbmlmaWVkU291cmNlMTMtbW0ubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE0NWQ0
ZDM2OTMxNzg0NDcwNGQ0NzE4MGZjNGRhZDZmMWI5NjYyMzYuLmRkOTg2OTk5ODViNDZmYmZkMDI1
MjM3OGI1ODJlNDI0NDQ1NTRlOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTUxNCw2ICsxNTE0LDEzIEBACiAJCTkzRTc5OTg1Mjc1
NkZBNTUwMDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNFNzk5ODIyNzU2RkE1NDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlv
bk1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTkzRTc5OTg3Mjc1NkZBQjQwMDc0MDA4QSAv
KiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlc1JlcGxpZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OTgzMjc1NkZBNTQw
MDc0MDA4QSAvKiBXZWJGaWxlU3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlc1JlcGxpZXMu
aCAqLzsgfTsKIAkJOTNFNzk5ODgyNzU2RkFDMjAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9y
YWdlQ29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0U3OTk4MTI3NTZGQTUzMDA3NDAwOEEgLyogV2ViRmlsZVN5c3RlbVN0
b3JhZ2VDb25uZWN0aW9uTWVzc2FnZXMuaCAqLzsgfTsKKwkJOTNFNzk5QzcyNzYwMjc0NjAwNzQw
MDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUM2Mjc2MDI3MzcwMDc0MDA4QSAvKiBTdG9yYWdlQXJl
YVJlZ2lzdHJ5LmggKi87IH07CisJCTkzRTc5OUNFMjc2MDQ5N0IwMDc0MDA4QSAvKiBTZXNzaW9u
U3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzRTc5OUNBMjc2MDQ5N0EwMDc0MDA4QSAvKiBTZXNzaW9uU3RvcmFnZU1hbmFnZXIu
aCAqLzsgfTsKKwkJOTNFNzk5Q0YyNzYwNDk3QjAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5
OUNCMjc2MDQ5N0EwMDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmggKi87IH07CisJCTkz
RTc5OUQyMjc2MEFBNUIwMDc0MDA4QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTc5OUQxMjc2MEFBNUEwMDc0
MDA4QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCAqLzsgfTsKKwkJOTNFNzk5REEyNzYxMjEwODAw
NzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0U3OTlENDI3NjEyMTA3MDA3NDAwOEEgLyogU1FMaXRlU3Rv
cmFnZUFyZWEuaCAqLzsgfTsKKwkJOTNFNzk5REIyNzYxMjEwODAwNzQwMDhBIC8qIE1lbW9yeVN0
b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0U3OTlENTI3NjEyMTA3MDA3NDAwOEEgLyogTWVtb3J5U3RvcmFnZUFyZWEuaCAqLzsgfTsK
KwkJOTNFNzk5REMyNzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNzk5RDYyNzYxMjEwODAw
NzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5oICovOyB9OwogCQk5M0Y1NDlCNDFFMzE3NEI3MDAw
RTcyMzkgLyogV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjU0OUIzMUUzMTc0QjcwMDBFNzIzOSAvKiBXS1Nu
YXBzaG90Q29uZmlndXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1Ymxp
YywgKTsgfTsgfTsKIAkJOTUwRjI4ODAyNTI0MTRFQTAwQjc0RjFDIC8qIFdLTW91c2VEZXZpY2VP
YnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTUwRjI4N0UyNTI0MTRFOTAwQjc0RjFDIC8qIFdLTW91c2VEZXZpY2VPYnNlcnZlci5oICovOyB9
OwogCQk5NTY1MDgzOTI2RDg3QTJCMDBFMTVDQjcgLyogQXBwbGVNZWRpYVNlcnZpY2VzU1BJLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NTY1MDgzNzI2
RDg3QTJCMDBFMTVDQjcgLyogQXBwbGVNZWRpYVNlcnZpY2VzU1BJLmggKi87IH07CkBAIC01MzUz
LDYgKzUzNjAsMTkgQEAKIAkJOTNFNzk5ODEyNzU2RkE1MzAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0
ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRTc5OTgyMjc1NkZBNTQwMDc0MDA4QSAvKiBXZWJGaWxl
U3lzdGVtU3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uTWVz
c2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFNzk5ODMy
NzU2RkE1NDAwNzQwMDhBIC8qIFdlYkZpbGVTeXN0ZW1TdG9yYWdlQ29ubmVjdGlvbk1lc3NhZ2Vz
UmVwbGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGaWxlU3lzdGVt
U3RvcmFnZUNvbm5lY3Rpb25NZXNzYWdlc1JlcGxpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTNFNzk5QzUyNzYwMjczNjAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhUmVnaXN0cnku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZUFyZWFSZWdp
c3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUM2Mjc2MDI3Mzcw
MDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0b3JhZ2VBcmVhUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTNFNzk5QzkyNzYwNDk3QTAwNzQwMDhBIC8qIExvY2FsU3RvcmFnZU1hbmFnZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9jYWxTdG9yYWdlTWFuYWdl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUNBMjc2MDQ5N0EwMDc0
MDA4QSAvKiBTZXNzaW9uU3RvcmFnZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2Vzc2lvblN0b3JhZ2VNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTkzRTc5OUNCMjc2MDQ5N0EwMDc0MDA4QSAvKiBMb2NhbFN0b3JhZ2VNYW5hZ2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2FsU3RvcmFnZU1hbmFnZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5Q0MyNzYwNDk3QjAwNzQwMDhBIC8q
IFNlc3Npb25TdG9yYWdlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTZXNzaW9uU3RvcmFnZU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5M0U3OTlEMTI3NjBBQTVBMDA3NDAwOEEgLyogVW5pZmllZFNvdXJjZTExMi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlmaWVkU291cmNlMTEyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFNzk5RDMyNzYxMjEwNzAwNzQwMDhB
IC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNRTGl0ZVN0b3JhZ2VBcmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTNFNzk5RDQyNzYxMjEwNzAwNzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTGl0ZVN0b3JhZ2VBcmVhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQ1Mjc2MTIxMDcwMDc0MDA4QSAvKiBNZW1vcnlT
dG9yYWdlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlTdG9y
YWdlQXJlYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0U3OTlENjI3NjEyMTA4
MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0b3JhZ2VBcmVhQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
M0U3OTlENzI3NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFCYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VBcmVhQmFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRTc5OUQ4Mjc2MTIxMDgwMDc0MDA4QSAvKiBNZW1vcnlT
dG9yYWdlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZW1v
cnlTdG9yYWdlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjU0OUIz
MUUzMTc0QjcwMDBFNzIzOSAvKiBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y1NDlCNTFFMzE3NERBMDAwRTcyMzkgLyogV0tTbmFw
c2hvdENvbmZpZ3VyYXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXS1NuYXBzaG90Q29uZmlndXJhdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTUwRjI4N0UyNTI0MTRFOTAwQjc0RjFDIC8qIFdLTW91c2VEZXZpY2VPYnNlcnZlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS01vdXNlRGV2aWNlT2JzZXJ2ZXIu
aDsgcGF0aCA9IGlvcy9XS01vdXNlRGV2aWNlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTgyMzQsNiArODI1NCw3IEBACiAJCQkJMUNBRUNCNUQyNzQ2NUFFMzAwQUI3
OEQwIC8qIFVuaWZpZWRTb3VyY2UxMDkuY3BwICovLAogCQkJCTFDQUVDQjYwMjc0NjVBRTMwMEFC
NzhEMCAvKiBVbmlmaWVkU291cmNlMTEwLmNwcCAqLywKIAkJCQkxQ0FFQ0I1RTI3NDY1QUUzMDBB
Qjc4RDAgLyogVW5pZmllZFNvdXJjZTExMS5jcHAgKi8sCisJCQkJOTNFNzk5RDEyNzYwQUE1QTAw
NzQwMDhBIC8qIFVuaWZpZWRTb3VyY2UxMTIuY3BwICovLAogCQkJKTsKIAkJCW5hbWUgPSAidW5p
ZmllZC1zb3VyY2VzIjsKIAkJCXBhdGggPSAiRGVyaXZlZFNvdXJjZXMvV2ViS2l0L3VuaWZpZWQt
c291cmNlcyI7CkBAIC0xMDMxNCwxMSArMTAzMzUsMjMgQEAKIAkJCQk5MzVCNTc5ODI2RjUxMjcw
MDA4QjQ4QUMgLyogRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5oICovLAogCQkJCTkz
MUEwNzUxMjZGMDYzMTAwMDQ0NzRDRCAvKiBGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIuY3BwICov
LAogCQkJCTkzMUEwNzUwMjZGMDYzMTAwMDQ0NzRDRCAvKiBGaWxlU3lzdGVtU3RvcmFnZU1hbmFn
ZXIuaCAqLywKKwkJCQk5M0U3OTlDOTI3NjA0OTdBMDA3NDAwOEEgLyogTG9jYWxTdG9yYWdlTWFu
YWdlci5jcHAgKi8sCisJCQkJOTNFNzk5Q0IyNzYwNDk3QTAwNzQwMDhBIC8qIExvY2FsU3RvcmFn
ZU1hbmFnZXIuaCAqLywKKwkJCQk5M0U3OTlEODI3NjEyMTA4MDA3NDAwOEEgLyogTWVtb3J5U3Rv
cmFnZUFyZWEuY3BwICovLAorCQkJCTkzRTc5OUQ1Mjc2MTIxMDcwMDc0MDA4QSAvKiBNZW1vcnlT
dG9yYWdlQXJlYS5oICovLAogCQkJCTkzMDg1REMzMjZFMUJCQkQwMDBFQzZBNyAvKiBOZXR3b3Jr
U3RvcmFnZU1hbmFnZXIuY3BwICovLAogCQkJCTkzMDg1REM0MjZFMUJCQkQwMDBFQzZBNyAvKiBO
ZXR3b3JrU3RvcmFnZU1hbmFnZXIuaCAqLywKIAkJCQk5MzA4NURDNzI2RTFDNkVFMDAwRUM2QTcg
LyogTmV0d29ya1N0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluICovLAogCQkJCTkzMDg1REM1MjZF
MUM2Q0YwMDBFQzZBNyAvKiBPcmlnaW5TdG9yYWdlTWFuYWdlci5jcHAgKi8sCiAJCQkJOTMwODVE
QzYyNkUxQzZDRjAwMEVDNkE3IC8qIE9yaWdpblN0b3JhZ2VNYW5hZ2VyLmggKi8sCisJCQkJOTNF
Nzk5Q0MyNzYwNDk3QjAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5jcHAgKi8sCisJ
CQkJOTNFNzk5Q0EyNzYwNDk3QTAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5oICov
LAorCQkJCTkzRTc5OUQzMjc2MTIxMDcwMDc0MDA4QSAvKiBTUUxpdGVTdG9yYWdlQXJlYS5jcHAg
Ki8sCisJCQkJOTNFNzk5RDQyNzYxMjEwNzAwNzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmgg
Ki8sCisJCQkJOTNFNzk5RDcyNzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5jcHAg
Ki8sCisJCQkJOTNFNzk5RDYyNzYxMjEwODAwNzQwMDhBIC8qIFN0b3JhZ2VBcmVhQmFzZS5oICov
LAorCQkJCTkzRTc5OUM1Mjc2MDI3MzYwMDc0MDA4QSAvKiBTdG9yYWdlQXJlYVJlZ2lzdHJ5LmNw
cCAqLywKKwkJCQk5M0U3OTlDNjI3NjAyNzM3MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3Ry
eS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBzdG9yYWdlOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTEyOTczLDYgKzEzMDA2LDcgQEAKIAkJCQk1N0RDRURBRTIxNEM2MDMzMDAxNkI4
NDcgLyogTG9jYWxTZXJ2aWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0IyNjE0RTIyN0QxNEIx
MDBCOTdBNzYgLyogTG9jYWxTdG9yYWdlRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
QjI2MTRGMjI3RDE0QjEwMEI5N0E3NiAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTkzRTc5OUNGMjc2MDQ5N0IwMDc0MDA4QSAvKiBMb2NhbFN0b3Jh
Z2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkJFQjZEQjIyRkI5RDQ4MDAyNjk4Njcg
LyogTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUE3RjJGMzEy
NUJGODIwMDA4QUVCMUQgLyogTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQ0Q3Rjcx
RDQ3RTkyQTAwOUYwOEJDIC8qIExvZ0luaXRpYWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAg
LTEyOTkxLDYgKzEzMDI1LDcgQEAKIAkJCQlBMTU3OTlCRDI1ODQ0MzMyMDA1MjgyMzYgLyogTWVk
aWFTYW1wbGVDdXJzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3NUE5Q0YzMjYxNjlCQUIwMDZE
RkEzQSAvKiBNZWRpYVNlc3Npb25Db29yZGluYXRvclByb3h5UHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTE1Nzk5QjcyNTg0NDMzMjAwNTI4MjM2IC8qIE1lZGlhVHJhY2tSZWFkZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTkzRTc5OURCMjc2MTIxMDgwMDc0MDA4QSAvKiBNZW1vcnlTdG9y
YWdlQXJlYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE5MzNERUYxOTY1RUIzMTAwOEFDM0VBIC8q
IE1lbnVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTlCNDc5MDhEMjUzMTREODMwMEVD
MTFBQiAvKiBNZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBQzRDODI5MTZCODc2QTkwMDY5RENDRCAvKiBNZXNzYWdlRmxhZ3MuaCBpbiBIZWFkZXJzICov
LApAQCAtMTMwMzksNyArMTMwNzQsNiBAQAogCQkJCTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAv
KiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM5OTAyMDMxQkU5
QTAyQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0Q0NTRE
NzFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQuaCBpbiBIZWFkZXJzICovLAot
CQkJCTUxN0I1Rjk3Mjc1RUM1RTUwMDJEQzIyRCAvKiBXZWJQdXNoTWVzc2FnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODM5MTQ5NjUxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFyYW1l
dGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3RkM4QTAyNUI4MzMxQzAwNTQ5NUZDIC8qIE5l
dHdvcmtMb2FkU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTQ1MjZFRDI3MUUxNjQ3
MDAwNDY3QjYgLyogTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMTMxMjcsNiArMTMxNjEsNyBAQAogCQkJCTJEMjc5RTE5MjY5NTU3NjgwMDRCM0VFQiAvKiBQ
cm90b3R5cGVUb29sc1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGODEyNzVFOTdCNjAw
MkRDMjJEIC8qIFB1c2hBcHBCdW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0I1RjdEMjc1
RTk3QjYwMDJEQzIyRCAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTE3QjVGOTUyNzVFQkE2MzAwMkRDMjJEIC8qIFB1c2hNZXNzYWdlRm9yVGVzdGluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTFFNjg4NzAxRjZFMkJBQjAwNzAwNkE2IC8qIFF1YXJhbnRpbmVT
UEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMEMyMjdFMjQ1MTEzMEEwMEVENjE0RCAvKiBRdWlj
a0xvb2tUaHVtYm5haWxpbmdTb2Z0TGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFRTU3MjUy
NDA5RjE0MjAwMjAwNUQ2IC8qIFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMzIxMSw2ICsxMzI0Niw3IEBACiAJCQkJNTE0RDlGNTcxOTExOUQzNTAwMDA2M0E3
IC8qIFNlcnZpY2VzQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGREU2NUExOTU0
QTQyQjAwQzQ4RkZBIC8qIFNlc3Npb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwMDJE
NDkxOTZCMzQ1RDAwQjlBRDQ0IC8qIFNlc3Npb25TdGF0ZUNvZGluZy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJOTNFNzk5Q0UyNzYwNDk3QjAwNzQwMDhBIC8qIFNlc3Npb25TdG9yYWdlTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDZCRUI2REYyMkZCQjE2QjAwMjY5ODY3IC8qIFNlc3Npb25T
dG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY0MjBFNTEyRENFMkZGMDBD
QUFFMkMgLyogU2hhcmVhYmxlQml0bWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDNBOUNFMDI1
RDcyRjFDMDA5OTBFMjYgLyogU2hhcmVhYmxlQml0bWFwVXRpbGl0aWVzLmggaW4gSGVhZGVycyAq
LywKQEAgLTEzMjM5LDExICsxMzI3NSwxNCBAQAogCQkJCTkzRDZCNzcyMjU0QkI1MTkwMDU4REQz
QSAvKiBTcGVlY2hSZWNvZ25pdGlvblNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNENkI3
ODQyNTRDQ0QwRTAwNThERDNBIC8qIFNwZWVjaFJlY29nbml0aW9uU2VydmVyTWVzc2FnZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzRDZCNzg1MjU0Q0NENDMwMDU4REQzQSAvKiBTcGVlY2hSZWNv
Z25pdGlvblNlcnZlck1lc3NhZ2VzUmVwbGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNFNzk5
REEyNzYxMjEwODAwNzQwMDhBIC8qIFNRTGl0ZVN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3QTNGRUNBMjIxRjdDMDk3MDBGMjY3Q0QgLyogU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDZCRUI2RDcyMkZCOUJENzAwMjY5ODY3IC8qIFN0b3JhZ2VBcmVh
LmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0U3OTlEQzI3NjEyMTA4MDA3NDAwOEEgLyogU3RvcmFn
ZUFyZWFCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUQzMzA2RjE2QjFEOTkxMDA0RjYwRTcg
LyogU3RvcmFnZUFyZWFJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUNFQ0QyNTE3MTYyREIx
MDAxRkM5RUYgLyogU3RvcmFnZUFyZWFNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMzM0REVF
MTZERThGODgwMDZBOEUzOCAvKiBTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmggaW4gSGVhZGVycyAq
LywKKwkJCQk5M0U3OTlDNzI3NjAyNzQ2MDA3NDAwOEEgLyogU3RvcmFnZUFyZWFSZWdpc3RyeS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTNCMjYxNEQyMjdEMTQ5RTAwQjk3QTc2IC8qIFN0b3JhZ2VN
YW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzZCMDU5ODIzMDM5MDk3MDAyRkMwNkIgLyog
U3RvcmFnZU1hbmFnZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNjhFRURGMjMwM0E5RUQw
MEJEQjExQSAvKiBTdG9yYWdlTWFuYWdlclNldE1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAg
LTEzNTEzLDYgKzEzNTUyLDcgQEAKIAkJCQk1MTdCNUYyRTI3NTczODJBMDAyREMyMkQgLyogV2Vi
UHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTJDRDY5QTI3MjFGMEE5MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE3QjVGNzMyNzVFOTYwOTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25N
YWluLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTdCNUY5NzI3NUVDNUU1MDAyREMyMkQgLyogV2Vi
UHVzaE1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2MUNDQ0E2MjMxNDg1QUEwMEI2NTlC
OSAvKiBXZWJSZW1vdGVPYmplY3RSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NjBF
NzEyMzBGNjdGQzAwNDYxQUFFIC8qIFdlYlJlc291cmNlSW50ZXJjZXB0Q29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTEwQUZGQkExNjU0MjA0ODAwMUJBMDVFIC8qIFdlYlJlc291cmNl
TG9hZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTEzNTQ3LDcgKzEzNTg3LDYgQEAKIAkJCQk5MzU2
RjJEQzIxNTJCNkI1MDBFNkQ1REYgLyogV2ViU1dDbGllbnRDb25uZWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTdBNTMxMDFGNDdBODYyMDBEQ0RDMEEgLyogV2ViU1dDbGllbnRDb25uZWN0
aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2NkJDMDNDMUZBMjY2REEwMDJGQTlD
MSAvKiBXZWJTV0NvbnRleHRNYW5hZ2VyQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NTE3QjVGOTUyNzVFQkE2MzAwMkRDMjJEIC8qIFB1c2hNZXNzYWdlRm9yVGVzdGluZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDYwRjQ4OTAxRjk5NkY3MTAwQ0Y0Qjg3IC8qIFdlYlNXQ29udGV4dE1h
bmFnZXJDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMxMUE5RUNDMjE0
MDM1RjgwMENGQjIwQSAvKiBXZWJTd2l0Y2hpbmdHUFVDbGllbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzNTZGMkRFMjE1MkI3MTAwMEU2RDVERiAvKiBXZWJTV09yaWdpblN0b3JlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTE1MTE2LDkgKzE1MTU1LDkgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQk1MTdCNUY5QTI3NUYzQTg2MDAyREMyMkQgLyog
QXJndW1lbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3QjVGNjgyNzVBOUE3ODAw
MkRDMjJEIC8qIFdlYlB1c2hUb29sQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUx
N0I1RjlCMjc1RjNBOTgwMDJEQzIyRCAvKiBEYWVtb25VdGlsaXRpZXMubW0gaW4gU291cmNlcyAq
LywKIAkJCQk1MTdCNUY5QzI3NUYzQzM3MDAyREMyMkQgLyogRGFlbW9uRW5jb2Rlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1MTdCNUY5QjI3NUYzQTk4MDAyREMyMkQgLyogRGFlbW9uVXRpbGl0
aWVzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE3QjVGNjgyNzVBOUE3ODAwMkRDMjJEIC8qIFdl
YlB1c2hUb29sQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxN0I1RjY1Mjc1QThE
N0YwMDJEQzIyRCAvKiBXZWJQdXNoVG9vbE1haW4ubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTE1MjE0LDcgKzE1
MjUzLDYgQEAKIAkJCQlDREE5M0RCMTIyRjhCQ0Y0MDA0OTBBNjkgLyogRnVsbHNjcmVlblRvdWNo
U2VjaGV1cmlzdGljUGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMUExNTJENzI0
RTVBMjlBMDA5NzhDOEIgLyogSGFuZGxlWFBDRW5kcG9pbnRNZXNzYWdlcy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTI3NDlGNjQ0MjE0NjU2MUIwMDgzODBCRiAvKiBJbmplY3RlZEJ1bmRsZU5vZGVI
YW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3QjVGOTkyNzVFQzYwMTAwMkRDMjJEIC8q
IFdlYlB1c2hNZXNzYWdlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQkyNzQ5RjY0NTIxNDY1
NjFFMDA4MzgwQkYgLyogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5QkY1RUM2NDI1NDExNDU2MDA5ODRFNzcgLyogSlNJUENCaW5kaW5nLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUMxNEQzN0ZFMjRBQ0UwODYwMDdGRjAxNCAvKiBMYXVuY2hTZXJ2aWNl
c0RhdGFiYXNlTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLApAQCAtMTU1MDMsNiArMTU1NDEsNyBA
QAogCQkJCTFDQUVDQjY1Mjc0NjVBRTQwMEFCNzhEMCAvKiBVbmlmaWVkU291cmNlMTA5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFDQUVDQjY4Mjc0NjVBRTQwMEFCNzhEMCAvKiBVbmlmaWVkU291
cmNlMTEwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDQUVDQjY2Mjc0NjVBRTQwMEFCNzhEMCAv
KiBVbmlmaWVkU291cmNlMTExLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzRTc5OUQyMjc2MEFB
NUIwMDc0MDA4QSAvKiBVbmlmaWVkU291cmNlMTEyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUz
OEExRkMwMjNBNTUxQkYwMEQyMzc0RiAvKiBVc2VySW50ZXJmYWNlSWRpb20ubW0gaW4gU291cmNl
cyAqLywKIAkJCQlDRDQ5MUIwRDFFNzMyRTREMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q0OTFCMTcxRTcz
NTI1NTAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNTU3NCw2ICsxNTYxMyw3IEBACiAJCQkJQkNFRTdB
RDAxMjgxNzk4ODAwOTgyN0RBIC8qIFdlYlByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MTdCNUY3QTI3NUU5N0E0MDAyREMyMkQgLyogV2ViUHVzaERh
ZW1vbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxN0I1Rjc5Mjc1RTk3QTEwMDJEQzIyRCAvKiBX
ZWJQdXNoRGFlbW9uTWFpbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUxN0I1Rjk5Mjc1RUM2MDEw
MDJEQzIyRCAvKiBXZWJQdXNoTWVzc2FnZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFG
MDYwRTExNjU0MzE4NTAwRjMyODFCIC8qIFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjA2MEUxMTY1NDMxODUwMEYzMjgxRiAvKiBXZWJS
VENNb25pdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjA2MEUx
MTY1NDMxODUwMEYzMjgyQyAvKiBXZWJSVENSZXNvbHZlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9y
YWdlL1N0b3JhZ2VBcmVhTWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9y
YWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAppbmRleCAwZmE2YWMxOGZkOTQ3MDU5MGNmMTA3ZDZhNDQw
NjZkOTJkOWE0MzZkLi4yY2Y3YTZkNGI2MDA1YzFkN2VjMjU2YmQ2Mzg4NzYyOTRlOWU0Y2YyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJl
YU1hcC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFn
ZUFyZWFNYXAuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTmV0d29ya1N0
b3JhZ2VNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGwuaCIKICNp
bmNsdWRlICJTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hbmFn
ZXJTZXRNZXNzYWdlcy5oIgpAQCAtOTUsNyArOTYsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpz
ZXRJdGVtKEZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBcmVhLCBj
bwogICAgIG1fcGVuZGluZ1ZhbHVlQ2hhbmdlcy5hZGQoa2V5KTsKIAogICAgIGlmIChtX21hcElE
KQotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6
OlNldEl0ZW0oKm1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJyZW50U2Vl
ZCwga2V5LCB2YWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwg
MCk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1h
bmFnZXI6OlNldEl0ZW0oKm1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwgbV9jdXJy
ZW50U2VlZCwga2V5LCB2YWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmlu
ZygpKSwgMCk7CiAgICAgZWxzZQogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAi
U3RvcmFnZUFyZWFNYXA6OnNldEl0ZW0gZmFpbGVkIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMg
aW52YWxpZCIpOwogfQpAQCAtMTE0LDcgKzExNSw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OnJl
bW92ZUl0ZW0oV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNv
CiAgICAgbV9wZW5kaW5nVmFsdWVDaGFuZ2VzLmFkZChrZXkpOwogCiAgICAgaWYgKG1fbWFwSUQp
Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6
UmVtb3ZlSXRlbSgqbV9tYXBJRCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRT
ZWVkLCBrZXksIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOwor
ICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
OjpSZW1vdmVJdGVtKCptX21hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVu
dFNlZWQsIGtleSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgMCk7
CiAgICAgZWxzZQogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTdG9yYWdlLCAiU3RvcmFnZUFy
ZWFNYXA6OnJlbW92ZUl0ZW0gZmFpbGVkIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52YWxp
ZCIpOwogfQpAQCAtMTI5LDcgKzEzMCw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmNsZWFyKFdl
YkNvcmU6OkZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBCiAgICAg
bV9tYXAgPSBtYWtlVW5pcXVlPFN0b3JhZ2VNYXA+KG1fcXVvdGFJbkJ5dGVzKTsKIAogICAgIGlm
IChtX21hcElEKQotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1h
bmFnZXJTZXQ6OkNsZWFyKCptX21hcElELCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3Vy
cmVudFNlZWQsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOwor
ICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
OjpDbGVhcigqbV9tYXBJRCwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBtX2N1cnJlbnRTZWVk
LCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCAwKTsKICAgICBlbHNl
CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2UsICJTdG9yYWdlQXJlYU1hcDo6Y2xl
YXIgZmFpbGVkIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52YWxpZCIpOwogfQpAQCAtMTYw
LDcgKzE2MSw3IEBAIFN0b3JhZ2VNYXAmIFN0b3JhZ2VBcmVhTWFwOjplbnN1cmVNYXAoKQogICAg
ICAgICAgICAgLy8gZnJvbSBvdXIgU3RvcmFnZU1hbmFnZXJTZXQ6OkdldFZhbHVlcygpIElQQy4g
VGhpcyBJUEMgbWF5IGJlIHZlcnkgc2xvdyBiZWNhdXNlIGl0IG1heSBuZWVkIHRvIGZldGNoIHRo
ZSB2YWx1ZXMgZnJvbSBkaXNrIGFuZCB0aGVyZSBtYXkgYmUgYSBsb3Qgb2YgZGF0YS4KICAgICAg
ICAgICAgIElQQzo6VW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29wZSB1bmJvdW5kZWRTeW5jaHJv
bm91c0lQQ1Njb3BlOwogICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFsdWVz
OwotICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFu
YWdlclNldDo6R2V0VmFsdWVzKCptX21hcElEKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0
OjpHZXRWYWx1ZXM6OlJlcGx5KHZhbHVlcyksIDApOworICAgICAgICAgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigp
LnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkdldFZhbHVlcygqbV9t
YXBJRCksIE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6R2V0VmFsdWVzOjpSZXBseSh2YWx1
ZXMpLCAwKTsKICAgICAgICAgICAgIG1fbWFwLT5pbXBvcnRJdGVtcyhXVEZNb3ZlKHZhbHVlcykp
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFN0b3JhZ2Us
ICJTdG9yYWdlQXJlYU1hcDo6ZW5zdXJlTWFwIGZhaWxlZCB0byBsb2FkIGZyb20gbmV0d29yayBw
cm9jZXNzIGJlY2F1c2Ugc3RvcmFnZSBtYXAgSUQgaXMgaW52YWxpZCIpOwpAQCAtMzQ4LDIwICsz
NDksMjMgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6Y29ubmVjdCgpCiAgICAgaWYgKG1fbWFwSUQp
CiAgICAgICAgIHJldHVybjsKIAorICAgIFN0b3JhZ2VBcmVhSWRlbnRpZmllciBtYXBJRDsKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgU3RvcmFnZVR5cGU6OkxvY2FsOgogICAgIGNh
c2UgU3RvcmFnZVR5cGU6OlRyYW5zaWVudExvY2FsOgogICAgICAgICBpZiAoU2VjdXJpdHlPcmln
aW4qIHRvcExldmVsT3JpZ2luID0gbV9uYW1lc3BhY2UudG9wTGV2ZWxPcmlnaW4oKSkKLSAgICAg
ICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6
OkNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWEoV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuc2Vzc2lvbklEKCksIG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCB0b3BMZXZl
bE9yaWdpbi0+ZGF0YSgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6U3Rv
cmFnZU1hbmFnZXJTZXQ6OkNvbm5lY3RUb1RyYW5zaWVudExvY2FsU3RvcmFnZUFyZWE6OlJlcGx5
KG1fbWFwSUQpLCAwKTsKKyAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdl
czo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VB
cmVhKG1fbmFtZXNwYWNlLnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCB0b3BMZXZlbE9yaWdpbi0+ZGF0
YSgpLCBtX3NlY3VyaXR5T3JpZ2luLT5kYXRhKCkpLCBNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VN
YW5hZ2VyOjpDb25uZWN0VG9UcmFuc2llbnRMb2NhbFN0b3JhZ2VBcmVhOjpSZXBseShtYXBJRCks
IDApOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5l
bnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVz
c2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhKFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnNlc3Npb25JRCgpLCBtX25hbWVzcGFjZS5zdG9yYWdlTmFtZXNw
YWNlSUQoKSwgbV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5h
Z2VyU2V0OjpDb25uZWN0VG9Mb2NhbFN0b3JhZ2VBcmVhOjpSZXBseShtX21hcElEKSwgMCk7Cisg
ICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdl
TWFuYWdlcjo6Q29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYShtX25hbWVzcGFjZS5zdG9yYWdlTmFt
ZXNwYWNlSUQoKSwgbV9zZWN1cml0eU9yaWdpbi0+ZGF0YSgpKSwgTWVzc2FnZXM6Ok5ldHdvcmtT
dG9yYWdlTWFuYWdlcjo6Q29ubmVjdFRvTG9jYWxTdG9yYWdlQXJlYTo6UmVwbHkobWFwSUQpLCAw
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdG9yYWdlVHlwZTo6U2Vzc2lvbjoKLSAgICAg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlclNldDo6Q29u
bmVjdFRvU2Vzc2lvblN0b3JhZ2VBcmVhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlc3Npb25J
RCgpLCBtX25hbWVzcGFjZS5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgbV9zZWN1cml0eU9yaWdpbi0+
ZGF0YSgpKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyU2V0OjpDb25uZWN0VG9TZXNzaW9uU3Rv
cmFnZUFyZWE6OlJlcGx5KG1fbWFwSUQpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmRT
eW5jKE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNvbm5lY3RUb1Nlc3Npb25TdG9y
YWdlQXJlYShtX25hbWVzcGFjZS5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgbV9zZWN1cml0eU9yaWdp
bi0+ZGF0YSgpKSwgTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Q29ubmVjdFRvU2Vz
c2lvblN0b3JhZ2VBcmVhOjpSZXBseShtYXBJRCksIDApOwogICAgIH0KIAotICAgIGlmIChtX21h
cElEKQorICAgIGlmIChtYXBJRC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgbV9tYXBJRCA9IG1hcElE
OwogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZWdpc3RlclN0b3JhZ2VBcmVhTWFw
KCp0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmRpc2Nvbm5lY3QoKQpA
QCAtMzczLDcgKzM3Nyw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmRpc2Nvbm5lY3QoKQogICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVucmVnaXN0ZXJTdG9yYWdlQXJlYU1hcCgqdGhpcyk7
CiAKICAgICBpZiAoYXV0byogbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuZXhpc3RpbmdOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKSkKLSAgICAgICAg
bmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3Rv
cmFnZU1hbmFnZXJTZXQ6OkRpc2Nvbm5lY3RGcm9tU3RvcmFnZUFyZWEoKm1fbWFwSUQpLCAwKTsK
KyAgICAgICAgbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpEaXNjb25uZWN0RnJvbVN0b3JhZ2VBcmVhKCpt
X21hcElEKSwgMCk7CiAKICAgICBtX21hcElEID0geyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZUltcGwu
Y3BwCmluZGV4IGY4NGQwMmZjNmY3ZTNiYjFlMzE0MzNjNWYwMGU2MWUwZmRlYmY5MzIuLmRlYjZh
MzQzM2NhYmFmYWY3ZGNhYTU2MGNkYzNhMTVlM2FjYTdlNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlSW1w
bC5jcHAKQEAgLTI3LDkgKzI3LDkgQEAKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlSW1wbC5o
IgogCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYUltcGwu
aCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYU1hcC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VNYW5hZ2Vy
U2V0TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdy
b3VwUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCkBAIC0xMTQsNyArMTE0LDcgQEAg
UmVmPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2VJbXBsOjpjb3B5KFBhZ2UmIG5l
d1BhZ2UpCiAgICAgQVNTRVJUKG1fc3RvcmFnZVR5cGUgPT0gU3RvcmFnZVR5cGU6OlNlc3Npb24p
OwogCiAgICAgaWYgKGF1dG8gbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuZXhpc3RpbmdOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKSkKLSAgICAgICAg
bmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6U3Rv
cmFnZU1hbmFnZXJTZXQ6OkNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2Uoc2Vzc2lvbklEKCks
IG1fc3RvcmFnZU5hbWVzcGFjZUlELCBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UobmV3UGFnZSkuc2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyKCkpLCAwKTsKKyAgICAgICAgbmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpDbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKG1fc3RvcmFnZU5hbWVzcGFj
ZUlELCBXZWJQYWdlOjpmcm9tQ29yZVBhZ2UobmV3UGFnZSkuc2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2VJZGVudGlmaWVyKCkpLCAwKTsKIAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3JhZ2VO
YW1lc3BhY2VJbXBsKG1fc3RvcmFnZVR5cGUsIFdlYlBhZ2U6OmZyb21Db3JlUGFnZShuZXdQYWdl
KS5zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIoKSwgV2ViUGFnZTo6ZnJvbUNvcmVQ
YWdlKG5ld1BhZ2UpLmlkZW50aWZpZXIoKSwgbV90b3BMZXZlbE9yaWdpbi5nZXQoKSwgbV9xdW90
YUluQnl0ZXMpKTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>