<?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>200793</bug_id>
          
          <creation_ts>2019-08-15 15:54:53 -0700</creation_ts>
          <short_desc>REGRESSION(r248713): WebDriver commands which target the implicit main frame now hit an ASSERT</short_desc>
          <delta_ts>2019-08-23 12:35:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebDriver</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>199986</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Blaze Burg">bburg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>bburg</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1561798</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-08-15 15:54:53 -0700</bug_when>
    <thetext>This code used to encode the implicit main frame as std::nullopt and a specified frame as a non-null Optional&lt;uint64_t&gt;. Now FrameIdentifier is expected to always exist, so we should replace an unspecified frame with the main frame identifier earlier and remove Optional&lt;FrameIdentifier&gt; in favor of FrameIdentifier where it makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562041</commentid>
    <comment_count>1</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-08-16 08:44:44 -0700</bug_when>
    <thetext>Need to be careful to avoid problems like https://bugs.webkit.org/show_bug.cgi?id=159777</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562065</commentid>
    <comment_count>2</comment_count>
      <attachid>376506</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-08-16 09:55:52 -0700</bug_when>
    <thetext>Created attachment 376506
[WIP]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562066</commentid>
    <comment_count>3</comment_count>
      <attachid>376506</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-08-16 09:56:37 -0700</bug_when>
    <thetext>Comment on attachment 376506
[WIP]

Trying an approach where we always have a FrameIdentifier. I need to rebaseline test results prior to the regressing change to get a good idea if this fix is insufficient or introduces new issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563119</commentid>
    <comment_count>4</comment_count>
      <attachid>376780</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-08-20 10:17:52 -0700</bug_when>
    <thetext>Created attachment 376780
Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563124</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-20 10:20:52 -0700</bug_when>
    <thetext>&lt;rdar://problem/54516988&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563125</commentid>
    <comment_count>6</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-08-20 10:21:13 -0700</bug_when>
    <thetext>After building with these changes, safaridriver has no changes in test results from the recent rebaselining.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563230</commentid>
    <comment_count>7</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-08-20 14:19:33 -0700</bug_when>
    <thetext>I&apos;m not sure what this wincairo failure is about:

C:\Buildbot\WinCairo-EWS\build\WebKitBuild\Release\WTF\Headers\wtf/Ref.h(60): error C2039: &apos;deref&apos;: is not a member of &apos;WebKit::WebAutomationSession::resolveParentFrameHandle::&lt;lambda_c796265cdb2c19385925e6b6b1a6903e&gt;&apos;
C:\Buildbot\WinCairo-EWS\build\Source\WebKit\UIProcess/Automation/WebAutomationSession.cpp(1094): note: see declaration of &apos;WebKit::WebAutomationSession::resolveParentFrameHandle::&lt;lambda_c796265cdb2c19385925e6b6b1a6903e&gt;&apos;
C:\Buildbot\WinCairo-EWS\build\WebKitBuild\Release\WTF\Headers\wtf/Ref.h(54): note: while compiling class template member function &apos;WTF::Ref&lt;WebKit::WebAutomationSession::resolveParentFrameHandle::&lt;lambda_c796265cdb2c19385925e6b6b1a6903e&gt;,WTF::DumbPtrTraits&lt;T&gt;&gt;::~Ref(void)&apos;
        with
        [
            T=WebKit::WebAutomationSession::resolveParentFrameHandle::&lt;lambda_c796265cdb2c19385925e6b6b1a6903e&gt;
        ]
C:\Buildbot\WinCairo-EWS\build\Source\WebKit\UIProcess/Automation/WebAutomationSession.cpp(1091): note: see reference to function template instantiation &apos;WTF::Ref&lt;WebKit::WebAutomationSession::resolveParentFrameHandle::&lt;lambda_c796265cdb2c19385925e6b6b1a6903e&gt;,WTF::DumbPtrTraits&lt;T&gt;&gt;::~Ref(void)&apos; being compiled
        with
        [
            T=WebKit::WebAutomationSession::resolveParentFrameHandle::&lt;lambda_c796265cdb2c19385925e6b6b1a6903e&gt;
        ]
C:\Buildbot\WinCairo-EWS\build\Source\WebKit\UIProcess/Automation/WebAutomationSession.cpp(1084): note: see reference to class template instantiation &apos;WTF::Ref&lt;WebKit::WebAutomationSession::resolveParentFrameHandle::&lt;lambda_c796265cdb2c19385925e6b6b1a6903e&gt;,WTF::DumbPtrTraits&lt;T&gt;&gt;&apos; being compiled
        with
        [
            T=WebKit::WebAutomationSession::resolveParentFrameHandle::&lt;lambda_c796265cdb2c19385925e6b6b1a6903e&gt;
        ]
C:\Buildbot\WinCairo-EWS\build\Source\WebKit\UIProcess\Automation\WebAutomationSession.h(87): note: see reference to class template instantiation &apos;WTF::Optional&lt;WTF::String&gt;&apos; being compiled</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563233</commentid>
    <comment_count>8</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-08-20 14:20:27 -0700</bug_when>
    <thetext>The entire function referenced:

void WebAutomationSession::resolveParentFrameHandle(const String&amp; browsingContextHandle, const String&amp; frameHandle, Ref&lt;ResolveParentFrameHandleCallback&gt;&amp;&amp; callback)
{
    WebPageProxy* page = webPageProxyForHandle(browsingContextHandle);
    if (!page)
        ASYNC_FAIL_WITH_PREDEFINED_ERROR(WindowNotFound);

    whenMainFrameAvailable(*page, [this, protectedThis = makeRef(*this), callback = WTFMove(callback), page = makeRef(*page), frameHandle](bool available) mutable {
        if (!available)
            ASYNC_FAIL_WITH_PREDEFINED_ERROR(WindowNotFound);

        auto frameID = webFrameIDForHandle(page.get(), frameHandle);
        if (!frameID)
            ASYNC_FAIL_WITH_PREDEFINED_ERROR(FrameNotFound);

        WTF::CompletionHandler&lt;void(Optional&lt;String&gt;, Optional&lt;FrameIdentifier&gt;)&gt; completionHandler = [this, protectedThis = makeRef(*this), callback = callback.copyRef()](Optional&lt;String&gt; errorType, Optional&lt;FrameIdentifier&gt; frameID) mutable {
            if (errorType) {
                callback-&gt;sendFailure(STRING_FOR_PREDEFINED_ERROR_MESSAGE(*errorType));
                return;
            }

            callback-&gt;sendSuccess(handleForWebFrameID(frameID));
        };

        page-&gt;process().sendWithAsyncReply(Messages::WebAutomationSessionProxy::ResolveParentFrame(page-&gt;pageID(), *frameID), WTFMove(completionHandler));
    });
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564025</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2019-08-22 05:19:59 -0700</bug_when>
    <thetext>This affects also the GTK/WPE port. I tested this patch and it fixes the crashes for GTK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564145</commentid>
    <comment_count>10</comment_count>
      <attachid>376780</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-08-22 11:48:10 -0700</bug_when>
    <thetext>Comment on attachment 376780
Proposed Fix

This is a lot of changes. Could you, instead, just use an Optional&lt;FrameIdentifier&gt; and use the main frame when it&apos;s nullopt?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564168</commentid>
    <comment_count>11</comment_count>
      <attachid>376780</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-22 12:24:36 -0700</bug_when>
    <thetext>Comment on attachment 376780
Proposed Fix

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

&gt; Source/WebKit/ChangeLog:14
&gt; +        the special value of &apos;0&apos; for frameID was used as a placeholder value for the main frame&apos;s frameID.

My previous patch used Optional&lt;FrameIdentifier&gt; where nullopt was the special value for MainFrame (instead of 0 previously). I likely missed one spot since we&apos;re asserting but why change the whole approach?

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:210
&gt; +Optional&lt;FrameIdentifier&gt; WebAutomationSession::webFrameIDForHandle(const WebPageProxy&amp; page, Optional&lt;String&gt; frameHandle)

const Optional&lt;String&gt;&amp; ?

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:228
&gt; +    Optional&lt;String&gt; frameHandle;

Seems like this could use your new convertToOptional() and avoid some code duplication.

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:475
&gt; +void WebAutomationSession::whenMainFrameAvailable(const WebPageProxy&amp; page, WTF::CompletionHandler&lt;void(bool)&gt;&amp;&amp; callback)

No need for WTF::

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:482
&gt; +    m_callbacksWaitingForMainFramePerPage.add(page.pageID(), WTFMove(callback));

Should we assert that page.pageID() is not already in the map? Otherwise, we&apos;d drop this callback on the floor.

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1003
&gt; +        m_evaluateJavaScriptFunctionCallbacks.set(callbackID, WTFMove(callback));

Why set() and not add() (note that set() is slower)? Also should we assert() that callbackID is not already in the map. And since it cannot already be in the map, add() makes more sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564171</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-22 12:26:05 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #10)
&gt; Comment on attachment 376780 [details]
&gt; Proposed Fix
&gt; 
&gt; This is a lot of changes. Could you, instead, just use an
&gt; Optional&lt;FrameIdentifier&gt; and use the main frame when it&apos;s nullopt?

Yes, please. This is what my patch was attempting to do (although I likely messed up something if we&apos;re asserting).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564475</commentid>
    <comment_count>13</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-08-23 09:39:50 -0700</bug_when>
    <thetext>I tried doing what you suggested, but it is not sufficient. There are other cases where a concrete frameID is expected before continuing with a command, namely, performInteractionSequence(). I could try changing SimulatedInputDispatcher to support Optional&lt;FrameIdentifier&gt;, I suppose. It may still yet be an easier fix.

#0	0x000000010291a49e in ::WTFCrash() at /Users/bburg/repos/webkit/OpenSource/Source/WTF/wtf/Assertions.cpp:305
#1	0x0000000109934919 in WTF::Optional&lt;WTF::ObjectIdentifier&lt;WebCore::FrameIdentifierType&gt; &gt;::value() &amp; at /Users/bburg/Library/Developer/Xcode/DerivedData/Safari-ffowujeoioebkpbndwdjtcebbgph/Build/Products/Debug/usr/local/include/wtf/Optional.h:544
#2	0x000000010a2b0958 in WebKit::WebAutomationSession::performInteractionSequence(WTF::String const&amp;, WTF::String const*, WTF::JSONImpl::Array const&amp;, WTF::JSONImpl::Array const&amp;, WTF::Ref&lt;Inspector::AutomationBackendDispatcherHandler::PerformInteractionSequenceCallback, WTF::DumbPtrTraits&lt;Inspector::AutomationBackendDispatcherHandler::PerformInteractionSequenceCallback&gt; &gt;&amp;&amp;) at /Users/bburg/repos/webkit/OpenSource/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1925
#3	0x00000001095045aa in Inspector::AutomationBackendDispatcher::performInteractionSequence(long, WTF::RefPtr&lt;WTF::JSONImpl::Object, WTF::DumbPtrTraits&lt;WTF::JSONImpl::Object&gt; &gt;&amp;&amp;) at /Users/bburg/Library/Developer/Xcode/DerivedData/Safari-ffowujeoioebkpbndwdjtcebbgph/Build/Products/Debug/DerivedSources/WebKit2/AutomationBackendDispatchers.cpp:553
#4	0x0000000109500ae7 in Inspector::AutomationBackendDispatcher::dispatch(long, WTF::String const&amp;, WTF::Ref&lt;WTF::JSONImpl::Object, WTF::DumbPtrTraits&lt;WTF::JSONImpl::Object&gt; &gt;&amp;&amp;) at /Users/bburg/Library/Developer/Xcode/DerivedData/Safari-ffowujeoioebkpbndwdjtcebbgph/Build/Products/Debug/DerivedSources/WebKit2/AutomationBackendDispatchers.cpp:118
#5	0x00000001039ba785 in Inspector::BackendDispatcher::dispatch(WTF::String const&amp;) at /Users/bburg/repos/webkit/OpenSource/Source/JavaScriptCore/inspector/InspectorBackendDispatcher.cpp:180
#6	0x000000010a29f1dc in WebKit::WebAutomationSession::dispatchMessageFromRemote(WTF::String const&amp;) at /Users/bburg/repos/webkit/OpenSource/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:129
#7	0x0000000102ebc1bf in ::___ZN9Inspector24RemoteConnectionToTarget19sendMessageToTargetEP8NSString_block_invoke() at /Users/bburg/repos/webkit/OpenSource/Source/JavaScriptCore/inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:233
#8	0x0000000102ec3f4d in WTF::BlockPtr&lt;void ()&gt;::operator()() const at /Users/bburg/Library/Developer/Xcode/DerivedData/Safari-ffowujeoioebkpbndwdjtcebbgph/Build/Products/Debug/usr/local/include/wtf/BlockPtr.h:184
#9	0x0000000102ec3c0a in Inspector::RemoteTargetHandleRunSourceGlobal(void*) at /Users/bburg/repos/webkit/OpenSource/Source/JavaScriptCore/inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:62</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564526</commentid>
    <comment_count>14</comment_count>
      <attachid>377138</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-08-23 11:34:59 -0700</bug_when>
    <thetext>Created attachment 377138
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564529</commentid>
    <comment_count>15</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-08-23 11:36:15 -0700</bug_when>
    <thetext>Attachment 377138 did not pass style-queue:


ERROR: Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1465:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/UIProcess/Automation/WebAutomationSession.h:156:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/UIProcess/Automation/SimulatedInputDispatcher.h:137:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564565</commentid>
    <comment_count>16</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-08-23 12:35:06 -0700</bug_when>
    <thetext>Committed r249062: &lt;https://trac.webkit.org/changeset/249062&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376506</attachid>
            <date>2019-08-16 09:55:52 -0700</date>
            <delta_ts>2019-08-20 10:17:51 -0700</delta_ts>
            <desc>[WIP]</desc>
            <filename>bug-200793-20190816095551.patch</filename>
            <type>text/plain</type>
            <size>9597</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NzE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDJj
NzhkZjUwMGY3NDYzNzVkMzFkODRkODg2ZTMyYTJkODhhYjFjZWMuLmNhYWJmMDU5ZDBiYmU0MDZk
ZjU0NmRlZjYwMjJhZTQ1OTIzODI5NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0yMDIs
MjAgKzIwMiwyNCBAQCBTdHJpbmcgV2ViQXV0b21hdGlvblNlc3Npb246OmhhbmRsZUZvcldlYlBh
Z2VQcm94eShjb25zdCBXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcgogICAgIHJldHVybiBoYW5kbGU7
CiB9CiAKLU9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gV2ViQXV0b21hdGlvblNlc3Npb246Ondl
YkZyYW1lSURGb3JIYW5kbGUoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGJvb2wmIGZyYW1lTm90Rm91
bmQpCitPcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjp3ZWJG
cmFtZUlERm9ySGFuZGxlKGNvbnN0IFdlYlBhZ2VQcm94eSYgcGFnZSwgT3B0aW9uYWw8U3RyaW5n
PiBmcmFtZUhhbmRsZSkKIHsKLSAgICBpZiAoaGFuZGxlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAoIWZyYW1lSGFuZGxlIHx8IGZyYW1lSGFuZGxlLnZh
bHVlKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gcGFnZS5tYWluRnJhbWUoKS0+ZnJhbWVJ
RCgpOwogCi0gICAgYXV0byBpdGVyID0gbV9oYW5kbGVXZWJGcmFtZU1hcC5maW5kKGhhbmRsZSk7
Ci0gICAgaWYgKGl0ZXIgPT0gbV9oYW5kbGVXZWJGcmFtZU1hcC5lbmQoKSkgewotICAgICAgICBm
cmFtZU5vdEZvdW5kID0gdHJ1ZTsKKyAgICBhdXRvIGl0ZXIgPSBtX2hhbmRsZVdlYkZyYW1lTWFw
LmZpbmQoZnJhbWVIYW5kbGUudmFsdWUoKSk7CisgICAgaWYgKGl0ZXIgPT0gbV9oYW5kbGVXZWJG
cmFtZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9CiAKICAg
ICByZXR1cm4gaXRlci0+dmFsdWU7CiB9CiAKK09wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gV2Vi
QXV0b21hdGlvblNlc3Npb246OndlYkZyYW1lSURGb3JIYW5kbGUoY29uc3QgV2ViUGFnZVByb3h5
JiBwYWdlLCBjb25zdCBTdHJpbmcqIGZyYW1lSGFuZGxlU3RyaW5nKQoreworICAgIE9wdGlvbmFs
PFN0cmluZz4gZnJhbWVIYW5kbGUoZnJhbWVIYW5kbGVTdHJpbmcgPyBPcHRpb25hbCgqZnJhbWVI
YW5kbGVTdHJpbmcpIDogV1RGOjpudWxsb3B0KTsKKyAgICByZXR1cm4gd2ViRnJhbWVJREZvckhh
bmRsZShwYWdlLCBmcmFtZUhhbmRsZSk7Cit9CisKIFN0cmluZyBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6aGFuZGxlRm9yV2ViRnJhbWVJRChPcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQp
CiB7CiAgICAgaWYgKCFmcmFtZUlEIHx8ICEqZnJhbWVJRCkKQEAgLTM2NCwxMiArMzY4LDEwIEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGNvbnN0
IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19G
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBib29sIGZy
YW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFu
ZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3Ry
aW5nKCksIGZyYW1lTm90Rm91bmQpOwotICAgIGlmIChmcmFtZU5vdEZvdW5kKQorICAgIGF1dG8g
ZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoKnBhZ2UsIG9wdGlvbmFsRnJhbWVIYW5kbGUp
OworICAgIGlmICghZnJhbWVJRCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKLQogICAgIG1fY2xpZW50LT5yZXF1ZXN0U3dpdGNoVG9Q
YWdlKCp0aGlzLCAqcGFnZSwgW2ZyYW1lSUQsIHBhZ2UgPSBtYWtlUmVmKCpwYWdlKSwgY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSB7CiAgICAgICAgIHBhZ2UtPnNldEZvY3VzKHRydWUp
OwogICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNl
c3Npb25Qcm94eTo6Rm9jdXNGcmFtZShwYWdlLT5wYWdlSUQoKSwgZnJhbWVJRCksIDApOwpAQCAt
NDYxLDE0ICs0NjMsMTUgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6d2FpdEZvck5hdmln
YXRpb25Ub0NvbXBsZXRlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb24KICAgICBib29sIHNob3Vs
ZFRpbWVvdXREdWVUb1VuZXhwZWN0ZWRBbGVydCA9IHBhZ2VMb2FkU3RyYXRlZ3kudmFsdWUoKSA9
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5OjpOb3Jt
YWwKICAgICAgICAgJiYgcGFnZS0+cGFnZUxvYWRTdGF0ZSgpLmlzTG9hZGluZygpICYmIG1fY2xp
ZW50LT5pc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0aGlzLCAqcGFnZSk7CiAKLSAg
ICBpZiAob3B0aW9uYWxGcmFtZUhhbmRsZSAmJiAhb3B0aW9uYWxGcmFtZUhhbmRsZS0+aXNFbXB0
eSgpKSB7Ci0gICAgICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAgICAgICBhdXRv
IGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKCpvcHRpb25hbEZyYW1lSGFuZGxlLCBmcmFt
ZU5vdEZvdW5kKTsKLSAgICAgICAgaWYgKGZyYW1lTm90Rm91bmQpCisgICAgaWYgKG9wdGlvbmFs
RnJhbWVIYW5kbGUpIHsKKyAgICAgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRs
ZSgqcGFnZSwgb3B0aW9uYWxGcmFtZUhhbmRsZSk7CisgICAgICAgIGlmICghZnJhbWVJRCkKICAg
ICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQp
OworCiAgICAgICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcGFnZS0+cHJvY2VzcygpLndlYkZy
YW1lKGZyYW1lSUQudmFsdWUoKSk7CiAgICAgICAgIGlmICghZnJhbWUpCiAgICAgICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKKwogICAgICAg
ICBpZiAoIXNob3VsZFRpbWVvdXREdWVUb1VuZXhwZWN0ZWRBbGVydCkKICAgICAgICAgICAgIHdh
aXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uRnJhbWUoKmZyYW1lLCBwYWdlTG9hZFN0cmF0ZWd5
LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIH0gZWxz
ZSB7CkBAIC05MjgsOSArOTMxLDggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZXZhbHVh
dGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnQKICAgICBpZiAo
IXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05v
dEZvdW5kKTsKIAotICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAgIGF1dG8gZnJh
bWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhhbmRsZSA/ICpvcHRpb25h
bEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwgZnJhbWVOb3RGb3VuZCk7Ci0gICAgaWYgKGZy
YW1lTm90Rm91bmQpCisgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZSgqcGFn
ZSwgb3B0aW9uYWxGcmFtZUhhbmRsZSk7CisgICAgaWYgKCFmcmFtZUlEKQogICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIAogICAgIFZlY3Rv
cjxTdHJpbmc+IGFyZ3VtZW50c1ZlY3RvcjsKQEAgLTk3Miw5ICs5NzQsOCBAQCB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJy
b3dzaW5nQ29udGV4dAogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BS
RURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgYm9vbCBmcmFtZU5vdEZvdW5k
ID0gZmFsc2U7Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShvcHRpb25h
bEZyYW1lSGFuZGxlID8gKm9wdGlvbmFsRnJhbWVIYW5kbGUgOiBlbXB0eVN0cmluZygpLCBmcmFt
ZU5vdEZvdW5kKTsKLSAgICBpZiAoZnJhbWVOb3RGb3VuZCkKKyAgICBhdXRvIGZyYW1lSUQgPSB3
ZWJGcmFtZUlERm9ySGFuZGxlKCpwYWdlLCBvcHRpb25hbEZyYW1lSGFuZGxlKTsKKyAgICBpZiAo
IWZyYW1lSUQpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1l
Tm90Rm91bmQpOwogCiAgICAgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFN0
cmluZz4sIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4pPiBjb21wbGV0aW9uSGFuZGxlciA9IFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gY2FsbGJhY2su
Y29weVJlZigpXShPcHRpb25hbDxTdHJpbmc+IGVycm9yVHlwZSwgT3B0aW9uYWw8RnJhbWVJZGVu
dGlmaWVyPiBmcmFtZUlEKSBtdXRhYmxlIHsKQEAgLTEwMTAsOSArMTAxMSw4IEBAIHZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OnJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcm
IGJyb3dzaW5nQ29udGV4CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBib29sIGZyYW1lTm90Rm91
bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKGZyYW1l
SGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsKLSAgICBpZiAoZnJhbWVOb3RGb3VuZCkKKyAgICBhdXRv
IGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKCpwYWdlLCBmcmFtZUhhbmRsZSk7CisgICAg
aWYgKCFmcmFtZUlEKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihG
cmFtZU5vdEZvdW5kKTsKIAogICAgIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25h
bDxTdHJpbmc+LCBPcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+KT4gY29tcGxldGlvbkhhbmRsZXIg
PSBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFjayA9IGNhbGxi
YWNrLmNvcHlSZWYoKV0oT3B0aW9uYWw8U3RyaW5nPiBlcnJvclR5cGUsIE9wdGlvbmFsPEZyYW1l
SWRlbnRpZmllcj4gZnJhbWVJRCkgbXV0YWJsZSB7CkBAIC0xMDQyLDkgKzEwNDIsOCBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjb21wdXRlRWxlbWVudExheW91dChjb25zdCBTdHJpbmcm
IGJyb3dzaW5nQ29udGV4dEhhbgogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgYm9vbCBmcmFtZU5v
dEZvdW5kID0gZmFsc2U7Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShm
cmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7Ci0gICAgaWYgKGZyYW1lTm90Rm91bmQpCisgICAg
YXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZSgqcGFnZSwgZnJhbWVIYW5kbGUpOwor
ICAgIGlmICghZnJhbWVJRCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1IoRnJhbWVOb3RGb3VuZCk7CiAKICAgICBPcHRpb25hbDxDb29yZGluYXRlU3lzdGVtPiBjb29y
ZGluYXRlU3lzdGVtID0gcHJvdG9jb2xTdHJpbmdUb0Nvb3JkaW5hdGVTeXN0ZW0oY29vcmRpbmF0
ZVN5c3RlbVN0cmluZyk7CkBAIC0xMDk1LDkgKzEwOTQsOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0
SGFuZAogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgYm9vbCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7
Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwgZnJh
bWVOb3RGb3VuZCk7Ci0gICAgaWYgKGZyYW1lTm90Rm91bmQpCisgICAgYXV0byBmcmFtZUlEID0g
d2ViRnJhbWVJREZvckhhbmRsZSgqcGFnZSwgZnJhbWVIYW5kbGUpOworICAgIGlmICghZnJhbWVJ
RCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3Vu
ZCk7CiAKICAgICBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8U3RyaW5nPik+
IGNvbXBsZXRpb25IYW5kbGVyID0gW2NhbGxiYWNrID0gY2FsbGJhY2suY29weVJlZigpXShPcHRp
b25hbDxTdHJpbmc+IGVycm9yVHlwZSkgbXV0YWJsZSB7CkBAIC0xNzY2LDkgKzE3NjQsOCBAQCB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25z
dCBTdHJpbmcmIGhhbmRsZSwgY29ucwogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgYm9vbCBmcmFt
ZU5vdEZvdW5kID0gZmFsc2U7Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRs
ZShvcHRpb25hbEZyYW1lSGFuZGxlID8gKm9wdGlvbmFsRnJhbWVIYW5kbGUgOiBlbXB0eVN0cmlu
ZygpLCBmcmFtZU5vdEZvdW5kKTsKLSAgICBpZiAoZnJhbWVOb3RGb3VuZCkKKyAgICBhdXRvIGZy
YW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKCpwYWdlLCBvcHRpb25hbEZyYW1lSGFuZGxlKTsK
KyAgICBpZiAoIWZyYW1lSUQpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VS
Uk9SKEZyYW1lTm90Rm91bmQpOwogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZjxTaW11bGF0ZWRJ
bnB1dFNvdXJjZT4+IHNvdXJjZUlkVG9JbnB1dFNvdXJjZU1hcDsKQEAgLTE5NDIsOSArMTkzOSw4
IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNhbmNlbEludGVyYWN0aW9uU2VxdWVuY2Uo
Y29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBib29s
IGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9y
SGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5
U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOwotICAgIGlmIChmcmFtZU5vdEZvdW5kKQorICAgIGF1
dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoKnBhZ2UsIG9wdGlvbmFsRnJhbWVIYW5k
bGUpOworICAgIGlmICghZnJhbWVJRCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKICAgICBWZWN0b3I8U2ltdWxhdGVkSW5wdXRLZXlG
cmFtZT4ga2V5RnJhbWVzKHsgU2ltdWxhdGVkSW5wdXRLZXlGcmFtZTo6a2V5RnJhbWVUb1Jlc2V0
SW5wdXRTb3VyY2VzKG1faW5wdXRTb3VyY2VzKSB9KTsKQEAgLTE5NjYsOSArMTk2Miw4IEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnRha2VTY3JlZW5zaG90KGNvbnN0IFN0cmluZyYgaGFu
ZGxlLCBjb25zdCBTdHJpbmcqIG9wCiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBib29sIGZyYW1l
Tm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxl
KG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5n
KCksIGZyYW1lTm90Rm91bmQpOwotICAgIGlmIChmcmFtZU5vdEZvdW5kKQorICAgIGF1dG8gZnJh
bWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoKnBhZ2UsIG9wdGlvbmFsRnJhbWVIYW5kbGUpOwor
ICAgIGlmICghZnJhbWVJRCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1IoRnJhbWVOb3RGb3VuZCk7CiAKICAgICBib29sIHNjcm9sbEludG9WaWV3SWZOZWVkZWQgPSBv
cHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQgPyAqb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lm
TmVlZGVkIDogZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
dXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmgKaW5kZXggOTNiYmM3ZDFhMzc1NWY1ZDY1
ZjA0ZTYzOTUyMWY0ZDNjOTc0ZWI4OS4uODdjYTExMTY3MWZmYjY1ZmI3Nzk0ODA0NzIxYmRiYzI5
MWEwMTgyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaApAQCAtMjIxLDcgKzIyMSw4IEBAIHByaXZhdGU6
CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dD4gYnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKFdlYlBhZ2VQcm94eSYsIFdlYkNvcmU6OkZs
b2F0UmVjdCB3aW5kb3dGcmFtZSk7CiAgICAgdm9pZCBnZXROZXh0Q29udGV4dChSZWY8V2ViQXV0
b21hdGlvblNlc3Npb24+JiYsIFZlY3RvcjxSZWY8V2ViUGFnZVByb3h5Pj4mJiwgUmVmPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0
Pj4sIFJlZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6R2V0QnJvd3NpbmdDb250ZXh0c0NhbGxiYWNr
PiYmKTsKIAotICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4gd2ViRnJhbWVJ
REZvckhhbmRsZShjb25zdCBTdHJpbmcmLCBib29sJiBmcmFtZU5vdEZvdW5kKTsKKyAgICBPcHRp
b25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+IHdlYkZyYW1lSURGb3JIYW5kbGUoY29uc3Qg
V2ViUGFnZVByb3h5JiwgT3B0aW9uYWw8U3RyaW5nPiBvcHRpb25hbEZyYW1lSGFuZGxlKTsKKyAg
ICBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+IHdlYkZyYW1lSURGb3JIYW5kbGUo
Y29uc3QgV2ViUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlU3Ry
aW5nKTsKICAgICBTdHJpbmcgaGFuZGxlRm9yV2ViRnJhbWVJRChPcHRpb25hbDxXZWJDb3JlOjpG
cmFtZUlkZW50aWZpZXI+KTsKICAgICBTdHJpbmcgaGFuZGxlRm9yV2ViRnJhbWVQcm94eShjb25z
dCBXZWJGcmFtZVByb3h5Jik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376780</attachid>
            <date>2019-08-20 10:17:52 -0700</date>
            <delta_ts>2019-08-23 11:34:57 -0700</delta_ts>
            <desc>Proposed Fix</desc>
            <filename>bug-200793-20190820101751.patch</filename>
            <type>text/plain</type>
            <size>82363</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4ODk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGVkNzIwMmNiMzBiYTgzYmVl
MzIwNDJlZGI4NDQyM2EwZjkyZWM3M2EuLjU5ZDdmMDBhODk0YWYxM2FlM2I5MzFjMjdiMGFhODhm
NmJjYjU0NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzcgQEAKKzIwMTktMDgtMTkgIEJyaWFuIEJ1
cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTihyMjQ4NzEzKTogV2Vi
RHJpdmVyIGNvbW1hbmRzIHdoaWNoIHRhcmdldCB0aGUgaW1wbGljaXQgbWFpbiBmcmFtZSBub3cg
aGl0IGFuIEFTU0VSVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjAwNzkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW4gcjI0ODcxMywgV2ViQXV0b21hdGlvblNlc3Npb24gc3RhcnRlZCB1c2luZyBGcmFt
ZUlkZW50aWZpZXIgaW5zdGVhZCBvZiByYXcgdWludDY0X3QuIFRoaXMgY2F1c2VkCisgICAgICAg
IGEgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBtYWluIGZyYW1lJ3MgZnJhbWVJRCBw
cmlvciB0byBEaWRDcmVhdGVNYWluRnJhbWUgbWVzc2FnZSBiZWluZworICAgICAgICByZWNlaXZl
ZCBpbiBVSVByb2Nlc3MuIFRoaXMgcGF0Y2ggZml4ZXMgdGhlIGNyYXNoIGJ5IGJlaW5nIG1vcmUg
c3RyaWN0IGFib3V0IHdhaXRpbmcgZm9yIHRoZSBtYWluCisgICAgICAgIGZyYW1lIHRvIGJlIGNy
ZWF0ZWQgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBjb21tYW5kcyB0aGF0IG1heSBuZWVkIHRvIGxv
b2sgdXAgdGhlIG1haW4gZnJhbWUncyBmcmFtZUlELgorCisgICAgICAgIFRoZSBhcHByb2FjaCBp
bnRyb2R1Y2VzIGNoYW5nZXMgdG8gaG93IG1haW4gZnJhbWVzIGFyZSB1c2VkIGluIFdlYkF1dG9t
YXRpb25TZXNzaW9uW1Byb3h5XS4gUHJldmlvdXNseSwKKyAgICAgICAgdGhlIHNwZWNpYWwgdmFs
dWUgb2YgJzAnIGZvciBmcmFtZUlEIHdhcyB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgdmFsdWUgZm9y
IHRoZSBtYWluIGZyYW1lJ3MgZnJhbWVJRC4KKyAgICAgICAgT2JqZWN0SWRlbnRpZmllciAvIEZy
YW1lSWRlbnRpZmllciBjbGFzcyBpcyBub3QgcmVhbGx5IGRlc2lnbmVkIHRvIHN1cHBvcnQgc2Vu
dGluZWwgdmFsdWVzLCBzbyB0aGUgbmV3CisgICAgICAgIGFwcHJvYWNoIGlzIHRvIGFsd2F5cyBy
ZXNvbHZlIHRoZSByZWFsIGZyYW1lSUQgZm9yIHRoZSBtYWluIGZyYW1lLiBDb25zZXF1ZW50bHks
IHN1cHBvcnQgZm9yIHRoZSAnMCcKKyAgICAgICAgc2VudGluZWwgdmFsdWUgaXMgbm8gbG9uZ2Vy
IG5lZWRlZCBpbiBXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LCBzbyB0aGUgT3B0aW9uYWw8RnJh
bWVJZGVudGlmaWVyPiBhcmd1bWVudAorICAgICAgICBpbiB0aGUgSVBDIG1lc3NhZ2VzIGNhbiBi
ZWNvbWUgc2ltcGx5IEZyYW1lSWRlbnRpZmllci4KKworICAgICAgICBXaGlsZSB0ZXN0aW5nIHRo
aXMgcGF0Y2gsIEkgZm91bmQgdGhhdCBzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dCBpcyB0aGUgb25s
eSBjb21tYW5kIHRoYXQgd2FzIHJhY3kKKyAgICAgICAgZW5vdWdoIHRvIGhpdCB0aGUgQVNTRVJU
LiBVbmZvcnR1bmF0ZWx5LCBpdCdzIHVzZWQgYXMgdGhlIGZpcnN0IGNvbW1hbmQgaW4gbmVhcmx5
IGV2ZXJ5IHRlc3QgY2FzZS4KKyAgICAgICAgSSBtYWRlIG90aGVyIGNvbW1hbmRzIG1vcmUgYXN5
bmMtY29ycmVjdCwgYnV0IG5ldmVyIGhpdCBhbiBhc3NlcnQgdmlhIHRoZW0gd2hpbGUgcmUtcnVu
bmluZyB0ZXN0cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENyZWF0ZU1haW5GcmFtZSk6IElmIHRoZXJl
IGlzIGFuIGFjdGl2ZSBhdXRvbWF0aW9uIHNlc3Npb24sIG5vdGlmeQorICAgICAgICBpdCBhYm91
dCB0aGUgbWFpbiBmcmFtZSB3aGljaCB3YXMganVzdCBjcmVhdGVkLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjp0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6d2lsbENsb3NlUGFnZSk6CisgICAgICAgIENsZWFyIG91dCBy
ZW1haW5pbmcgY2FsbGJhY2tzIHdob3NlIG1haW4gZnJhbWUgaGFzIG5vdCBiZWVuIGNyZWF0ZWQg
eWV0LgorCisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkaWRDcmVhdGVN
YWluRnJhbWUpOgorICAgICAgICBJbnZva2UgdGhlIGNhbGxiYWNrLCBpZiBhbnksIGZvciB0aGUg
cGFnZSB3aG9zZSBtYWluIGZyYW1lIGlzIG5vdyBhdmFpbGFibGUuIE9ubHkgb25lCisgICAgICAg
IGNhbGxiYWNrIGlzIGtlcHQgYXQgYSB0aW1lIGJlY2F1c2UgV2ViRHJpdmVyIGNvbW1hbmRzIGFy
ZSBwcm9jZXNzZWQgc2VyaWFsbHkgcGVyIHNlc3Npb24uCisKKyAgICAgICAgKFdlYktpdDo6V2Vi
QXV0b21hdGlvblNlc3Npb246OndlYkZyYW1lSURGb3JIYW5kbGUpOgorICAgICAgICAoV2ViS2l0
Ojpjb252ZXJ0VG9PcHRpb25hbCk6IEFkZGVkIGhlbHBlciBmdW5jdGlvbi4gSW4gdGhlIGZ1dHVy
ZSwgdGhlIEF1dG9tYXRpb24gcHJvdG9jb2wgdHlwZQorICAgICAgICBzaWduYXR1cmUgd2lsbCB1
c2UgT3B0aW9uYWxzIGRpcmVjdGx5IGluc3RlYWQgb2YgbnVsbGFibGUgcG9pbnRlcnMuCisKKyAg
ICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnN3aXRjaFRvQnJvd3NpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OndoZW5NYWluRnJh
bWVBdmFpbGFibGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6d2Fp
dEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlKToKKyAgICAgICAgTmVlZCB0byB3YWl0IGZvciBtYWlu
IGZyYW1lIHRvIGJlIGF2YWlsYWJsZSB3aGVuIHdhaXRpbmcgZm9yIG5hdmlnYXRpb25zIHRvIG1h
dHVyZS4KKworICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZXZhbHVhdGVK
YXZhU2NyaXB0RnVuY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6cmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6cmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQXV0b21hdGlvblNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnNlbGVjdE9wdGlvbkVsZW1lbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QWxsQ29va2llcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5j
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpjYW5jZWxJbnRlcmFj
dGlvblNlcXVlbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnRh
a2VTY3JlZW5zaG90KToKKyAgICAgICAgTW9zdCBvZiB0aGVzZSByZWZhY3RvcmluZ3MgYXJlIHBy
ZXR0eSBib3JpbmcuIFRoZSBhc3luYyBjYWxsIHRvIHdoZW5NYWluRnJhbWVBdmFpbGFibGUKKyAg
ICAgICAgaGFwcGVucyB3aGVuIGEgZnJhbWVJRCBuZWVkcyB0byBiZSByZXNvbHZlZCBmcm9tIGEg
ZnJhbWVIYW5kbGUuIFNvbWUgb3RoZXIgbG9jYWwgdmFyaWFibGVzCisgICAgICAgIGNvbnZlcnNp
b25zIGhhdmUgYmVlbiBtb3ZlZCBiZWZvcmUgZWFjaCBhc3luYyBjYWxsIHNvIHRoYXQgdGhlIHZh
bHVlcyBhcmUgZWFzaWVyIHRvIGNhcHR1cmUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6ZXZhbHVhdGVKYXZh
U2NyaXB0RnVuY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvblBy
b3h5OjpyZXNvbHZlQ2hpbGRGcmFtZVdpdGhPcmRpbmFsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QXV0b21hdGlvblNlc3Npb25Qcm94eTo6cmVzb2x2ZUNoaWxkRnJhbWVXaXRoTm9kZUhhbmRsZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OnJlc29sdmVDaGls
ZEZyYW1lV2l0aE5hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvblBy
b3h5OjpyZXNvbHZlUGFyZW50RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9u
U2Vzc2lvblByb3h5Ojpmb2N1c0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlv
blNlc3Npb25Qcm94eTo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpzZWxlY3RPcHRpb25FbGVtZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6dGFrZVNjcmVlbnNob3QpOgorICAg
ICAgICBSZW1vdmUgdGhlIGFiaWxpdHkgdG8gcmVzb2x2ZSBhIG1haW4gZnJhbWUncyBmcmFtZUlE
IGxhemlseS4gVGhpcyBpcyByZXRhaW5lZCBmb3IgY29va2llIGNvbW1hbmRzLAorICAgICAgICB3
aGljaCBzZWVtIHRvIGJlIGluY29ycmVjdCBhbmQgd2lsbCBiZSBhZGRyZXNzZWQgaW4gYSBzZXBh
cmF0ZSBwYXRjaC4KKwogMjAxOS0wOC0yMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN1cHBvcnQgZm9yIEphdmFTY3JpcHQg
QmlnSW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dl
YkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDE5YWVmOTQ0Zjc0ZjYyYzE5ZDQ4OTli
OTM4NjYwMGZhNzFjNDY0ODkuLjhlN2RkYWE5OTRiN2FhMDk2M2ExMTA5N2MwYWJhMzc0NGE2YzVm
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xNjQsNiArMTY0LDExIEBAIHZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OnRlcm1pbmF0ZSgpCiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShX
RUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKQogCisgICAgZm9yIChhdXRvJiBpZGVudGlmaWVy
IDogY29weVRvVmVjdG9yKG1fY2FsbGJhY2tzV2FpdGluZ0Zvck1haW5GcmFtZVBlclBhZ2Uua2V5
cygpKSkgeworICAgICAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3NXYWl0aW5nRm9yTWFp
bkZyYW1lUGVyUGFnZS50YWtlKGlkZW50aWZpZXIpOworICAgICAgICBjYWxsYmFjayhmYWxzZSk7
CisgICAgfQorCiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAgaWYgKEluc3BlY3Rv
cjo6RnJvbnRlbmRDaGFubmVsKiBjaGFubmVsID0gbV9yZW1vdGVDaGFubmVsKSB7CiAgICAgICAg
IG1fcmVtb3RlQ2hhbm5lbCA9IG51bGxwdHI7CkBAIC0yMDIsMjAgKzIwNywzMSBAQCBTdHJpbmcg
V2ViQXV0b21hdGlvblNlc3Npb246OmhhbmRsZUZvcldlYlBhZ2VQcm94eShjb25zdCBXZWJQYWdl
UHJveHkmIHdlYlBhZ2VQcgogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKLU9wdGlvbmFsPEZyYW1l
SWRlbnRpZmllcj4gV2ViQXV0b21hdGlvblNlc3Npb246OndlYkZyYW1lSURGb3JIYW5kbGUoY29u
c3QgU3RyaW5nJiBoYW5kbGUsIGJvb2wmIGZyYW1lTm90Rm91bmQpCitPcHRpb25hbDxGcmFtZUlk
ZW50aWZpZXI+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjp3ZWJGcmFtZUlERm9ySGFuZGxlKGNvbnN0
IFdlYlBhZ2VQcm94eSYgcGFnZSwgT3B0aW9uYWw8U3RyaW5nPiBmcmFtZUhhbmRsZSkKIHsKLSAg
ICBpZiAoaGFuZGxlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICAvLyBJdCBpcyBhIHByb2dyYW1taW5nIGVycm9yIHRvIGxvb2sgdXAgYSBmcmFtZUlEIGZyb20g
YSBmcmFtZUhhbmRsZSBiZWZvcmUgdGhlIG1haW4gZnJhbWUgaGFzIGJlZW4gY3JlYXRlZC4KKyAg
ICAvLyBVc2Ugd2hlbk1haW5GcmFtZUF2YWlsYWJsZShjYWxsYmFjaykgdG8gYXN5bmNocm9ub3Vz
bHkgd2FpdCBmb3IgdGhpcyB0byBiZWNvbWUgdGhlIGNhc2UuCisgICAgQVNTRVJUKHBhZ2UubWFp
bkZyYW1lKCkpOwogCi0gICAgYXV0byBpdGVyID0gbV9oYW5kbGVXZWJGcmFtZU1hcC5maW5kKGhh
bmRsZSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9oYW5kbGVXZWJGcmFtZU1hcC5lbmQoKSkgewotICAg
ICAgICBmcmFtZU5vdEZvdW5kID0gdHJ1ZTsKKyAgICBpZiAoIWZyYW1lSGFuZGxlIHx8IGZyYW1l
SGFuZGxlLnZhbHVlKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gcGFnZS5tYWluRnJhbWUo
KS0+ZnJhbWVJRCgpOworCisgICAgYXV0byBpdGVyID0gbV9oYW5kbGVXZWJGcmFtZU1hcC5maW5k
KGZyYW1lSGFuZGxlLnZhbHVlKCkpOworICAgIGlmIChpdGVyID09IG1faGFuZGxlV2ViRnJhbWVN
YXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfQogCiAgICAgcmV0
dXJuIGl0ZXItPnZhbHVlOwogfQogCitPcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IFdlYkF1dG9t
YXRpb25TZXNzaW9uOjp3ZWJGcmFtZUlERm9ySGFuZGxlKGNvbnN0IFdlYlBhZ2VQcm94eSYgcGFn
ZSwgY29uc3QgU3RyaW5nKiBmcmFtZUhhbmRsZVN0cmluZykKK3sKKyAgICBPcHRpb25hbDxTdHJp
bmc+IGZyYW1lSGFuZGxlOworICAgIGlmIChmcmFtZUhhbmRsZVN0cmluZyAmJiAhZnJhbWVIYW5k
bGVTdHJpbmctPmlzRW1wdHkoKSkKKyAgICAgICAgZnJhbWVIYW5kbGUgPSAqZnJhbWVIYW5kbGVT
dHJpbmc7CisKKyAgICByZXR1cm4gd2ViRnJhbWVJREZvckhhbmRsZShwYWdlLCBmcmFtZUhhbmRs
ZSk7Cit9CisKIFN0cmluZyBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aGFuZGxlRm9yV2ViRnJhbWVJ
RChPcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQpCiB7CiAgICAgaWYgKCFmcmFtZUlE
IHx8ICEqZnJhbWVJRCkKQEAgLTI0OSw2ICsyNjUsMTcgQEAgU3RyaW5nIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpoYW5kbGVGb3JXZWJGcmFtZVByb3h5KGNvbnN0IFdlYkZyYW1lUHJveHkmIHdlYkZy
YW0KICAgICByZXR1cm4gaGFuZGxlRm9yV2ViRnJhbWVJRCh3ZWJGcmFtZVByb3h5LmZyYW1lSUQo
KSk7CiB9CiAKK3N0YXRpYyBPcHRpb25hbDxTdHJpbmc+IGNvbnZlcnRUb09wdGlvbmFsKGNvbnN0
IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSkKK3sKKyAgICBpZiAoIW9wdGlvbmFsRnJhbWVI
YW5kbGUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAob3B0aW9uYWxG
cmFtZUhhbmRsZS0+aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisg
ICAgcmV0dXJuICpvcHRpb25hbEZyYW1lSGFuZGxlOworfQorCiBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0PiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
YnVpbGRCcm93c2luZ0NvbnRleHRGb3JQYWdlKFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViQ29yZTo6
RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKQogewogICAgIGF1dG8gb3JpZ2luT2JqZWN0ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9pbnQ6OmNyZWF0ZSgpCkBAIC0zNjQsMTcgKzM5
MSwyMCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4
dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dAogICAgIGlmICghcGFnZSkKICAgICAgICAg
QVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAg
Ym9vbCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJ
REZvckhhbmRsZShvcHRpb25hbEZyYW1lSGFuZGxlID8gKm9wdGlvbmFsRnJhbWVIYW5kbGUgOiBl
bXB0eVN0cmluZygpLCBmcmFtZU5vdEZvdW5kKTsKLSAgICBpZiAoZnJhbWVOb3RGb3VuZCkKLSAg
ICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7Cisg
ICAgd2hlbk1haW5GcmFtZUF2YWlsYWJsZSgqcGFnZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSA9IG1ha2VS
ZWYoKnBhZ2UpLCBmcmFtZUhhbmRsZSA9IGNvbnZlcnRUb09wdGlvbmFsKG9wdGlvbmFsRnJhbWVI
YW5kbGUpXShib29sIGF2YWlsYWJsZSkgbXV0YWJsZSB7CisgICAgICAgIGlmICghYXZhaWxhYmxl
KQorICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90
Rm91bmQpOwogCisgICAgICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUocGFn
ZS5nZXQoKSwgZnJhbWVIYW5kbGUpOworICAgICAgICBpZiAoIWZyYW1lSUQpCisgICAgICAgICAg
ICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIAotICAg
IG1fY2xpZW50LT5yZXF1ZXN0U3dpdGNoVG9QYWdlKCp0aGlzLCAqcGFnZSwgW2ZyYW1lSUQsIHBh
Z2UgPSBtYWtlUmVmKCpwYWdlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSB7Ci0g
ICAgICAgIHBhZ2UtPnNldEZvY3VzKHRydWUpOwotICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6Rm9jdXNGcmFtZShwYWdlLT5w
YWdlSUQoKSwgZnJhbWVJRCksIDApOworICAgICAgICBtX2NsaWVudC0+cmVxdWVzdFN3aXRjaFRv
UGFnZSgqdGhpcywgcGFnZS5nZXQoKSwgW2ZyYW1lSUQsIHBhZ2UgPSBXVEZNb3ZlKHBhZ2UpLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUgeworICAgICAgICAgICAgcGFn
ZS0+c2V0Rm9jdXModHJ1ZSk7CisgICAgICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6Rm9jdXNGcmFtZShwYWdlLT5wYWdlSUQo
KSwgKmZyYW1lSUQpLCAwKTsKIAotICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKKyAg
ICAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOworICAgICAgICB9KTsKICAgICB9KTsK
IH0KIApAQCAtNDQyLDYgKzQ3MiwxNiBAQCBzdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4gcGFnZUxvYWRTdHJhdAogICAgIHJl
dHVybiBwYXJzZWRQYWdlTG9hZFN0cmF0ZWd5OwogfQogCit2b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjp3aGVuTWFpbkZyYW1lQXZhaWxhYmxlKGNvbnN0IFdlYlBhZ2VQcm94eSYgcGFnZSwgV1RG
OjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQoreworICAgIGlmIChw
YWdlLm1haW5GcmFtZSgpKSB7CisgICAgICAgIGNhbGxiYWNrKHRydWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIG1fY2FsbGJhY2tzV2FpdGluZ0Zvck1haW5GcmFtZVBlclBh
Z2UuYWRkKHBhZ2UucGFnZUlEKCksIFdURk1vdmUoY2FsbGJhY2spKTsKK30KKwogdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlKGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5k
bGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBp
bnQqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZvck5hdmlnYXRpb25Ub0NvbXBs
ZXRlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Vi
UGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CkBAIC00NTMsMzcgKzQ5
MywzNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRvQ29t
cGxldGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbgogICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFt
ZXRlciAncGFnZUxvYWRTdHJhdGVneScgaXMgaW52YWxpZC4iKTsKICAgICBhdXRvIHBhZ2VMb2Fk
VGltZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vj
b25kcygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsK
IAotICAgIC8vIElmIHBhZ2UgaXMgbG9hZGluZyBhbmQgdGhlcmUncyBhbiBhY3RpdmUgSmF2YVNj
cmlwdCBkaWFsb2cgaXMgcHJvYmFibHkgYmVjYXVzZSB0aGUKLSAgICAvLyBkaWFsb2cgd2FzIHN0
YXJ0ZWQgaW4gYW4gb25sb2FkIGhhbmRsZXIsIHNvIGluIGNhc2Ugb2Ygbm9ybWFsIHBhZ2UgbG9h
ZCBzdHJhdGVneSB0aGUKLSAgICAvLyBsb2FkIHdpbGwgbm90IGZpbmlzaCB1bnRpbCB0aGUgZGlh
bG9nIGlzIGRpc21pc3NlZC4gSW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgdGltZW91dCwKLSAg
ICAvLyB3ZSByZXR1cm4gd2l0aG91dCB3YWl0aW5nIHNpbmNlIHdlIGtub3cgaXQgd2lsbCB0aW1l
b3V0IGZvciBzdXJlLiBXZSB3YW50IHRvIGNoZWNrCi0gICAgLy8gYXJndW1lbnRzIGZpcnN0LCB0
aG91Z2guCi0gICAgYm9vbCBzaG91bGRUaW1lb3V0RHVlVG9VbmV4cGVjdGVkQWxlcnQgPSBwYWdl
TG9hZFN0cmF0ZWd5LnZhbHVlKCkgPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
UGFnZUxvYWRTdHJhdGVneTo6Tm9ybWFsCi0gICAgICAgICYmIHBhZ2UtPnBhZ2VMb2FkU3RhdGUo
KS5pc0xvYWRpbmcoKSAmJiBtX2NsaWVudC0+aXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZ09uUGFn
ZSgqdGhpcywgKnBhZ2UpOwotCi0gICAgaWYgKG9wdGlvbmFsRnJhbWVIYW5kbGUgJiYgIW9wdGlv
bmFsRnJhbWVIYW5kbGUtPmlzRW1wdHkoKSkgewotICAgICAgICBib29sIGZyYW1lTm90Rm91bmQg
PSBmYWxzZTsKLSAgICAgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZSgqb3B0
aW9uYWxGcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7Ci0gICAgICAgIGlmIChmcmFtZU5vdEZv
dW5kKQorICAgIHdoZW5NYWluRnJhbWVBdmFpbGFibGUoKnBhZ2UsIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2Ug
PSBtYWtlUmVmKCpwYWdlKSwgZnJhbWVIYW5kbGUgPSBjb252ZXJ0VG9PcHRpb25hbChvcHRpb25h
bEZyYW1lSGFuZGxlKSwgcGFnZUxvYWRTdHJhdGVneSwgcGFnZUxvYWRUaW1lb3V0XShib29sIGF2
YWlsYWJsZSkgbXV0YWJsZSB7CisgICAgICAgIGlmICghYXZhaWxhYmxlKQorICAgICAgICAgICAg
QVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOworCisgICAg
ICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUocGFnZS5nZXQoKSwgZnJhbWVI
YW5kbGUpOworICAgICAgICBpZiAoIWZyYW1lSUQpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKKwogICAgICAgICBXZWJGcmFtZVBy
b3h5KiBmcmFtZSA9IHBhZ2UtPnByb2Nlc3MoKS53ZWJGcmFtZShmcmFtZUlELnZhbHVlKCkpOwog
ICAgICAgICBpZiAoIWZyYW1lKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1IoRnJhbWVOb3RGb3VuZCk7Ci0gICAgICAgIGlmICghc2hvdWxkVGltZW91dER1ZVRv
VW5leHBlY3RlZEFsZXJ0KQotICAgICAgICAgICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRl
T25GcmFtZSgqZnJhbWUsIHBhZ2VMb2FkU3RyYXRlZ3kudmFsdWUoKSwgcGFnZUxvYWRUaW1lb3V0
LCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFzaG91bGRU
aW1lb3V0RHVlVG9VbmV4cGVjdGVkQWxlcnQpCi0gICAgICAgICAgICB3YWl0Rm9yTmF2aWdhdGlv
blRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3kudmFsdWUoKSwgcGFnZUxv
YWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfQogCi0gICAgaWYgKHNob3VsZFRp
bWVvdXREdWVUb1VuZXhwZWN0ZWRBbGVydCkgewotICAgICAgICAvLyDCpzkgTmF2aWdhdGlvbi4K
LSAgICAgICAgLy8gNy4gSWYgdGhlIHByZXZpb3VzIHN0ZXAgY29tcGxldGVkIGJ5IHRoZSBzZXNz
aW9uIHBhZ2UgbG9hZCB0aW1lb3V0IGJlaW5nIHJlYWNoZWQgYW5kIHRoZSBicm93c2VyIGRvZXMg
bm90Ci0gICAgICAgIC8vIGhhdmUgYW4gYWN0aXZlIHVzZXIgcHJvbXB0LCByZXR1cm4gZXJyb3Ig
d2l0aCBlcnJvciBjb2RlIHRpbWVvdXQuCi0gICAgICAgIC8vIDguIFJldHVybiBzdWNjZXNzIHdp
dGggZGF0YSBudWxsLgotICAgICAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViZHJpdmVy
L3dlYmRyaXZlci1zcGVjLmh0bWwjZGZuLXdhaXQtZm9yLW5hdmlnYXRpb24tdG8tY29tcGxldGUK
LSAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7Ci0gICAgfQorICAgICAgICAvLyBJZiBw
YWdlIGlzIGxvYWRpbmcgYW5kIHRoZXJlJ3MgYW4gYWN0aXZlIEphdmFTY3JpcHQgZGlhbG9nIGlz
IHByb2JhYmx5IGJlY2F1c2UgdGhlCisgICAgICAgIC8vIGRpYWxvZyB3YXMgc3RhcnRlZCBpbiBh
biBvbmxvYWQgaGFuZGxlciwgc28gaW4gY2FzZSBvZiBub3JtYWwgcGFnZSBsb2FkIHN0cmF0ZWd5
IHRoZQorICAgICAgICAvLyBsb2FkIHdpbGwgbm90IGZpbmlzaCB1bnRpbCB0aGUgZGlhbG9nIGlz
IGRpc21pc3NlZC4gSW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgdGltZW91dCwKKyAgICAgICAg
Ly8gd2UgcmV0dXJuIHdpdGhvdXQgd2FpdGluZyBzaW5jZSB3ZSBrbm93IGl0IHdpbGwgdGltZW91
dCBmb3Igc3VyZS4gV2Ugd2FudCB0byBjaGVjaworICAgICAgICAvLyBhcmd1bWVudHMgZmlyc3Qs
IHRob3VnaC4KKyAgICAgICAgYm9vbCBzaG91bGRUaW1lb3V0RHVlVG9VbmV4cGVjdGVkQWxlcnQg
PSBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCkgPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6UGFnZUxvYWRTdHJhdGVneTo6Tm9ybWFsCisgICAgICAgICAgICAmJiBwYWdlLT5wYWdl
TG9hZFN0YXRlKCkuaXNMb2FkaW5nKCkgJiYgbV9jbGllbnQtPmlzU2hvd2luZ0phdmFTY3JpcHRE
aWFsb2dPblBhZ2UoKnRoaXMsIHBhZ2UuZ2V0KCkpOworICAgICAgICBpZiAoc2hvdWxkVGltZW91
dER1ZVRvVW5leHBlY3RlZEFsZXJ0KSB7CisgICAgICAgICAgICAvLyDCpzkgTmF2aWdhdGlvbi4K
KyAgICAgICAgICAgIC8vIDcuIElmIHRoZSBwcmV2aW91cyBzdGVwIGNvbXBsZXRlZCBieSB0aGUg
c2Vzc2lvbiBwYWdlIGxvYWQgdGltZW91dCBiZWluZyByZWFjaGVkIGFuZCB0aGUgYnJvd3NlciBk
b2VzIG5vdAorICAgICAgICAgICAgLy8gaGF2ZSBhbiBhY3RpdmUgdXNlciBwcm9tcHQsIHJldHVy
biBlcnJvciB3aXRoIGVycm9yIGNvZGUgdGltZW91dC4KKyAgICAgICAgICAgIC8vIDguIFJldHVy
biBzdWNjZXNzIHdpdGggZGF0YSBudWxsLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly93M2MuZ2l0
aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2Rmbi13YWl0LWZvci1uYXZpZ2F0
aW9uLXRvLWNvbXBsZXRlCisgICAgICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHdhaXRGb3JOYXZpZ2F0aW9u
VG9Db21wbGV0ZU9uRnJhbWUoKmZyYW1lLCBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCksIHBhZ2VM
b2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIH0pOwogfQogCiB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2UoV2ViUGFn
ZVByb3h5JiBwYWdlLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0
cmF0ZWd5IGxvYWRTdHJhdGVneSwgU2Vjb25kcyB0aW1lb3V0LCBSZWY8SW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlPiYmIGNhbGxiYWNrKQpAQCAtNzU2LDYgKzc5Niwx
NCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZWxvYWRCcm93c2luZ0NvbnRleHQoY29u
c3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cgogICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21w
bGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVv
dXQsIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
ZGlkQ3JlYXRlTWFpbkZyYW1lKGNvbnN0IFdlYkZyYW1lUHJveHkmIGZyYW1lKQoreworICAgIEFT
U0VSVChmcmFtZS5pc01haW5GcmFtZSgpKTsKKyAgICAKKyAgICBpZiAoYXV0byBjYWxsYmFjayA9
IG1fY2FsbGJhY2tzV2FpdGluZ0Zvck1haW5GcmFtZVBlclBhZ2UudGFrZShmcmFtZS5wYWdlKCkt
PnBhZ2VJRCgpKSkKKyAgICAgICAgY2FsbGJhY2sodHJ1ZSk7Cit9CisKIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246Om5hdmlnYXRpb25PY2N1cnJlZEZvckZyYW1lKGNvbnN0IFdlYkZyYW1lUHJv
eHkmIGZyYW1lKQogewogICAgIGlmIChmcmFtZS5pc01haW5GcmFtZSgpKSB7CkBAIC04MzIsNiAr
ODgwLDkgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6d2lsbENsb3NlUGFnZShjb25zdCBX
ZWJQYWdlUHJveHkmIHBhZ2UpCiAgICAgICAgIGNhbGxiYWNrKEFVVE9NQVRJT05fQ09NTUFORF9F
UlJPUl9XSVRIX05BTUUoV2luZG93Tm90Rm91bmQpKTsKICNlbmRpZgogCisgICAgaWYgKGF1dG8g
Y2FsbGJhY2sgPSBtX2NhbGxiYWNrc1dhaXRpbmdGb3JNYWluRnJhbWVQZXJQYWdlLnRha2UocGFn
ZS5wYWdlSUQoKSkpCisgICAgICAgIGNhbGxiYWNrKGZhbHNlKTsKKwogI2lmIEVOQUJMRShXRUJE
UklWRVJfQUNUSU9OU19BUEkpCiAgICAgLy8gVGhlbiB0ZWxsIHRoZSBpbnB1dCBkaXNwYXRjaGVy
IHRvIGNhbmNlbCBzbyB0aW1lcnMgYXJlIHN0b3BwZWQsIGFuZCBsZXQgaXQgZ28gb3V0IG9mIHNj
b3BlLgogICAgIE9wdGlvbmFsPFJlZjxTaW11bGF0ZWRJbnB1dERpc3BhdGNoZXI+PiBpbnB1dERp
c3BhdGNoZXIgPSBtX2lucHV0RGlzcGF0Y2hlcnNCeVBhZ2UudGFrZShwYWdlLnBhZ2VJRCgpKTsK
QEAgLTkyNCwxNCArOTc1LDggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aGFuZGxlUnVu
T3BlblBhbmVsKGNvbnN0IFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgV2UKIAogdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRs
ZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbiwgY29uc3QgSlNPTjo6QXJyYXkmIGFyZ3VtZW50cywg
Y29uc3QgYm9vbCogb3B0aW9uYWxFeHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50LCBjb25z
dCBpbnQqIG9wdGlvbmFsQ2FsbGJhY2tUaW1lb3V0LCBSZWY8RXZhbHVhdGVKYXZhU2NyaXB0RnVu
Y3Rpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKLSAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3
ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKLSAgICBpZiAoIXBh
Z2UpCi0gICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZv
dW5kKTsKLQotICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAgIGF1dG8gZnJhbWVJ
RCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhhbmRsZSA/ICpvcHRpb25hbEZy
YW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwgZnJhbWVOb3RGb3VuZCk7Ci0gICAgaWYgKGZyYW1l
Tm90Rm91bmQpCi0gICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1l
Tm90Rm91bmQpOworICAgIGJvb2wgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCA9IG9w
dGlvbmFsRXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCA/ICpvcHRpb25hbEV4cGVjdHNJ
bXBsaWNpdENhbGxiYWNrQXJndW1lbnQgOiBmYWxzZTsKKyAgICBpbnQgY2FsbGJhY2tUaW1lb3V0
ID0gb3B0aW9uYWxDYWxsYmFja1RpbWVvdXQgPyAqb3B0aW9uYWxDYWxsYmFja1RpbWVvdXQgOiAw
OwogCiAgICAgVmVjdG9yPFN0cmluZz4gYXJndW1lbnRzVmVjdG9yOwogICAgIGFyZ3VtZW50c1Zl
Y3Rvci5yZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRzLmxlbmd0aCgpKTsKQEAgLTk0MiwxMyArOTg3
LDIzIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0
aW9uKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250CiAgICAgICAgIGFyZ3VtZW50c1ZlY3Rvci51
bmNoZWNrZWRBcHBlbmQoYXJndW1lbnRTdHJpbmcpOwogICAgIH0KIAotICAgIGJvb2wgZXhwZWN0
c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCA9IG9wdGlvbmFsRXhwZWN0c0ltcGxpY2l0Q2FsbGJh
Y2tBcmd1bWVudCA/ICpvcHRpb25hbEV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQgOiBm
YWxzZTsKLSAgICBpbnQgY2FsbGJhY2tUaW1lb3V0ID0gb3B0aW9uYWxDYWxsYmFja1RpbWVvdXQg
PyAqb3B0aW9uYWxDYWxsYmFja1RpbWVvdXQgOiAwOworICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9
IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOworICAgIGlmICgh
cGFnZSkKKyAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90
Rm91bmQpOworCisgICAgd2hlbk1haW5GcmFtZUF2YWlsYWJsZSgqcGFnZSwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
cGFnZSA9IG1ha2VSZWYoKnBhZ2UpLCBmcmFtZUhhbmRsZSA9IGNvbnZlcnRUb09wdGlvbmFsKG9w
dGlvbmFsRnJhbWVIYW5kbGUpLCBmdW5jdGlvbiwgYXJndW1lbnRzVmVjdG9yLCBjYWxsYmFja1Rp
bWVvdXQsIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnRdKGJvb2wgYXZhaWxhYmxlKSBt
dXRhYmxlIHsKKyAgICAgICAgaWYgKCFhdmFpbGFibGUpCisgICAgICAgICAgICBBU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CisKKyAgICAgICAgYXV0byBm
cmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShwYWdlLmdldCgpLCBmcmFtZUhhbmRsZSk7Cisg
ICAgICAgIGlmICghZnJhbWVJRCkKKyAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJ
TkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCi0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IG1f
bmV4dEV2YWx1YXRlSmF2YVNjcmlwdENhbGxiYWNrSUQrKzsKLSAgICBtX2V2YWx1YXRlSmF2YVNj
cmlwdEZ1bmN0aW9uQ2FsbGJhY2tzLnNldChjYWxsYmFja0lELCBXVEZNb3ZlKGNhbGxiYWNrKSk7
CisgICAgICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBtX25leHRFdmFsdWF0ZUphdmFTY3JpcHRD
YWxsYmFja0lEKys7CisgICAgICAgIG1fZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFj
a3Muc2V0KGNhbGxiYWNrSUQsIFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAgIHBhZ2UtPnByb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpFdmFsdWF0ZUph
dmFTY3JpcHRGdW5jdGlvbihwYWdlLT5wYWdlSUQoKSwgZnJhbWVJRCwgZnVuY3Rpb24sIGFyZ3Vt
ZW50c1ZlY3RvciwgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgY2FsbGJhY2tUaW1l
b3V0LCBjYWxsYmFja0lEKSwgMCk7CisgICAgICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlv
bihwYWdlLT5wYWdlSUQoKSwgKmZyYW1lSUQsIGZ1bmN0aW9uLCBhcmd1bWVudHNWZWN0b3IsIGV4
cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQsIGNhbGxiYWNrVGltZW91dCwgY2FsbGJhY2tJ
RCksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaWRFdmFs
dWF0ZUphdmFTY3JpcHRGdW5jdGlvbih1aW50NjRfdCBjYWxsYmFja0lELCBjb25zdCBTdHJpbmcm
IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBlcnJvclR5cGUpCkBAIC05NjUsNDMgKzEwMjAsNTEgQEAg
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24o
dWludDY0X3QgY2FsbGJhY2tJRCwgY28KIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVz
b2x2ZUNoaWxkRnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUs
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgaW50KiBvcHRpb25hbE9y
ZGluYWwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOYW1lLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
Tm9kZUhhbmRsZSwgUmVmPFJlc29sdmVDaGlsZEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYgY2FsbGJh
Y2spCiB7Ci0gICAgaWYgKCFvcHRpb25hbE9yZGluYWwgJiYgIW9wdGlvbmFsTmFtZSAmJiAhb3B0
aW9uYWxOb2RlSGFuZGxlKQorICAgIE9wdGlvbmFsPGludD4gZnJhbWVPcmRpbmFsID0gb3B0aW9u
YWxPcmRpbmFsID8gbWFrZU9wdGlvbmFsKCpvcHRpb25hbE9yZGluYWwpIDogV1RGOjpudWxsb3B0
OworICAgIE9wdGlvbmFsPFN0cmluZz4gZnJhbWVOYW1lID0gb3B0aW9uYWxOYW1lID8gbWFrZU9w
dGlvbmFsKCpvcHRpb25hbE5hbWUpIDogV1RGOjpudWxsb3B0OworICAgIE9wdGlvbmFsPFN0cmlu
Zz4gbm9kZUhhbmRsZU9mRnJhbWUgPSBvcHRpb25hbE5vZGVIYW5kbGUgPyBtYWtlT3B0aW9uYWwo
Km9wdGlvbmFsTm9kZUhhbmRsZSkgOiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoIWZyYW1lT3Jk
aW5hbCAmJiAhZnJhbWVOYW1lICYmICFub2RlSGFuZGxlT2ZGcmFtZSkKICAgICAgICAgQVNZTkNf
RkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwg
IkNvbW1hbmQgbXVzdCBzcGVjaWZ5IGEgY2hpbGQgZnJhbWUgYnkgb3JkaW5hbCwgbmFtZSwgb3Ig
ZWxlbWVudCBoYW5kbGUuIik7CiAKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJv
eHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAg
ICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAot
ICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZy
YW1lSURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhhbmRsZSA/ICpvcHRpb25hbEZyYW1lSGFuZGxl
IDogZW1wdHlTdHJpbmcoKSwgZnJhbWVOb3RGb3VuZCk7Ci0gICAgaWYgKGZyYW1lTm90Rm91bmQp
Ci0gICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQp
OworICAgIHdoZW5NYWluRnJhbWVBdmFpbGFibGUoKnBhZ2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UgPSBt
YWtlUmVmKCpwYWdlKSwgZnJhbWVIYW5kbGUgPSBjb252ZXJ0VG9PcHRpb25hbChvcHRpb25hbEZy
YW1lSGFuZGxlKSwgZnJhbWVPcmRpbmFsLCBmcmFtZU5hbWUsIG5vZGVIYW5kbGVPZkZyYW1lXShi
b29sIGF2YWlsYWJsZSkgbXV0YWJsZSB7CisgICAgICAgIGlmICghYXZhaWxhYmxlKQorICAgICAg
ICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwog
Ci0gICAgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFN0cmluZz4sIE9wdGlv
bmFsPEZyYW1lSWRlbnRpZmllcj4pPiBjb21wbGV0aW9uSGFuZGxlciA9IFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gY2FsbGJhY2suY29weVJlZigpXShP
cHRpb25hbDxTdHJpbmc+IGVycm9yVHlwZSwgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFt
ZUlEKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKGVycm9yVHlwZSkgewotICAgICAgICAgICAgY2Fs
bGJhY2stPnNlbmRGYWlsdXJlKFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9NRVNTQUdFKCpl
cnJvclR5cGUpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBhdXRv
IGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKHBhZ2UuZ2V0KCksIGZyYW1lSGFuZGxlKTsK
KyAgICAgICAgaWYgKCFmcmFtZUlEKQorICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKLSAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNj
ZXNzKGhhbmRsZUZvcldlYkZyYW1lSUQoZnJhbWVJRCkpOwotICAgIH07CisgICAgICAgIFdURjo6
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxTdHJpbmc+LCBPcHRpb25hbDxGcmFtZUlk
ZW50aWZpZXI+KT4gY29tcGxldGlvbkhhbmRsZXIgPSBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBjYWxsYmFjayA9IGNhbGxiYWNrLmNvcHlSZWYoKV0oT3B0aW9uYWw8U3Ry
aW5nPiBlcnJvclR5cGUsIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCkgbXV0YWJs
ZSB7CisgICAgICAgICAgICBpZiAoZXJyb3JUeXBlKSB7CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2stPnNlbmRGYWlsdXJlKFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9NRVNTQUdFKCplcnJv
clR5cGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICBp
ZiAob3B0aW9uYWxOb2RlSGFuZGxlKSB7Ci0gICAgICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlJlc29sdmVD
aGlsZEZyYW1lV2l0aE5vZGVIYW5kbGUocGFnZS0+cGFnZUlEKCksIGZyYW1lSUQsICpvcHRpb25h
bE5vZGVIYW5kbGUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoaGFuZGxlRm9yV2Vi
RnJhbWVJRChmcmFtZUlEKSk7CisgICAgICAgIH07CiAKLSAgICBpZiAob3B0aW9uYWxOYW1lKSB7
Ci0gICAgICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlJlc29sdmVDaGlsZEZyYW1lV2l0aE5hbWUocGFnZS0+
cGFnZUlEKCksIGZyYW1lSUQsICpvcHRpb25hbE5hbWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIGlmIChub2RlSGFuZGxlT2ZG
cmFtZSkgeworICAgICAgICAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZUNoaWxkRnJhbWVXaXRo
Tm9kZUhhbmRsZShwYWdlLT5wYWdlSUQoKSwgKmZyYW1lSUQsICpub2RlSGFuZGxlT2ZGcmFtZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQogCi0gICAgaWYgKG9wdGlvbmFsT3JkaW5hbCkgewotICAgICAgICBwYWdlLT5wcm9jZXNz
KCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5
OjpSZXNvbHZlQ2hpbGRGcmFtZVdpdGhPcmRpbmFsKHBhZ2UtPnBhZ2VJRCgpLCBmcmFtZUlELCAq
b3B0aW9uYWxPcmRpbmFsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgICAgICBpZiAoZnJhbWVOYW1lKSB7CisgICAgICAgICAgICBwYWdl
LT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vz
c2lvblByb3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdpdGhOYW1lKHBhZ2UtPnBhZ2VJRCgpLCAqZnJh
bWVJRCwgKmZyYW1lTmFtZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmcmFtZU9yZGluYWwpIHsKKyAg
ICAgICAgICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlJlc29sdmVDaGlsZEZyYW1lV2l0aE9yZGluYWwocGFn
ZS0+cGFnZUlEKCksICpmcmFtZUlELCAqZnJhbWVPcmRpbmFsKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfSk7CiB9
CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZShj
b25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhh
bmRsZSwgUmVmPFJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQpA
QCAtMTAxMCwyMSArMTA3MywyNSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZl
UGFyZW50RnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleAogICAgIGlmICgh
cGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90
Rm91bmQpOwogCi0gICAgYm9vbCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7Ci0gICAgYXV0byBmcmFt
ZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7Ci0g
ICAgaWYgKGZyYW1lTm90Rm91bmQpCi0gICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SKEZyYW1lTm90Rm91bmQpOworICAgIHdoZW5NYWluRnJhbWVBdmFpbGFibGUoKnBhZ2Us
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayksIHBhZ2UgPSBtYWtlUmVmKCpwYWdlKSwgZnJhbWVIYW5kbGVdKGJvb2wgYXZh
aWxhYmxlKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFhdmFpbGFibGUpCisgICAgICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBX
VEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8U3RyaW5nPiwgT3B0aW9uYWw8RnJh
bWVJZGVudGlmaWVyPik+IGNvbXBsZXRpb25IYW5kbGVyID0gW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBjYWxsYmFjay5jb3B5UmVmKCldKE9wdGlvbmFs
PFN0cmluZz4gZXJyb3JUeXBlLCBPcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQpIG11
dGFibGUgewotICAgICAgICBpZiAoZXJyb3JUeXBlKSB7Ci0gICAgICAgICAgICBjYWxsYmFjay0+
c2VuZEZhaWx1cmUoU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX01FU1NBR0UoKmVycm9yVHlw
ZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGF1dG8gZnJhbWVJ
RCA9IHdlYkZyYW1lSURGb3JIYW5kbGUocGFnZS5nZXQoKSwgZnJhbWVIYW5kbGUpOworICAgICAg
ICBpZiAoIWZyYW1lSUQpCisgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUihGcmFtZU5vdEZvdW5kKTsKIAotICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoaGFu
ZGxlRm9yV2ViRnJhbWVJRChmcmFtZUlEKSk7Ci0gICAgfTsKKyAgICAgICAgV1RGOjpDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFN0cmluZz4sIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmll
cj4pPiBjb21wbGV0aW9uSGFuZGxlciA9IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIGNhbGxiYWNrID0gY2FsbGJhY2suY29weVJlZigpXShPcHRpb25hbDxTdHJpbmc+IGVy
cm9yVHlwZSwgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlEKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIGlmIChlcnJvclR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjay0+c2Vu
ZEZhaWx1cmUoU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX01FU1NBR0UoKmVycm9yVHlwZSkp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y2FsbGJhY2stPnNlbmRTdWNjZXNzKGhhbmRsZUZvcldlYkZyYW1lSUQoZnJhbWVJRCkpOworICAg
ICAgICB9OwogCi0gICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZVBhcmVudEZyYW1lKHBhZ2UtPnBh
Z2VJRCgpLCBmcmFtZUlEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICBw
YWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9u
U2Vzc2lvblByb3h5OjpSZXNvbHZlUGFyZW50RnJhbWUocGFnZS0+cGFnZUlEKCksICpmcmFtZUlE
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOwogfQogCiBzdGF0aWMgT3B0
aW9uYWw8Q29vcmRpbmF0ZVN5c3RlbT4gcHJvdG9jb2xTdHJpbmdUb0Nvb3JkaW5hdGVTeXN0ZW0o
Y29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtU3RyaW5nKQpAQCAtMTAzOCw1NSArMTEwNSw2
MCBAQCBzdGF0aWMgT3B0aW9uYWw8Q29vcmRpbmF0ZVN5c3RlbT4gcHJvdG9jb2xTdHJpbmdUb0Nv
b3JkaW5hdGVTeXN0ZW0oY29uc3QgU3RyaW5nJgogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
Ojpjb21wdXRlRWxlbWVudExheW91dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRs
ZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBj
b25zdCBib29sKiBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGNvbnN0IFN0cmluZyYg
Y29vcmRpbmF0ZVN5c3RlbVN0cmluZywgUmVmPENvbXB1dGVFbGVtZW50TGF5b3V0Q2FsbGJhY2s+
JiYgY2FsbGJhY2spCiB7CisgICAgT3B0aW9uYWw8Q29vcmRpbmF0ZVN5c3RlbT4gY29vcmRpbmF0
ZVN5c3RlbSA9IHByb3RvY29sU3RyaW5nVG9Db29yZGluYXRlU3lzdGVtKGNvb3JkaW5hdGVTeXN0
ZW1TdHJpbmcpOworICAgIGlmICghY29vcmRpbmF0ZVN5c3RlbSkKKyAgICAgICAgQVNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRo
ZSBwYXJhbWV0ZXIgJ2Nvb3JkaW5hdGVTeXN0ZW0nIGlzIGludmFsaWQuIik7CisKKyAgICBib29s
IHNjcm9sbEludG9WaWV3SWZOZWVkZWQgPSBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQg
PyAqb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkIDogZmFsc2U7CisKICAgICBXZWJQYWdl
UHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxl
KTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VS
Uk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwot
ICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1l
Tm90Rm91bmQpOwotICAgIGlmIChmcmFtZU5vdEZvdW5kKQotICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKKyAgICB3aGVuTWFpbkZyYW1lQXZh
aWxhYmxlKCpwYWdlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlID0gbWFrZVJlZigqcGFnZSksIGZyYW1lSGFu
ZGxlLCBub2RlSGFuZGxlLCBjb29yZGluYXRlU3lzdGVtLCBzY3JvbGxJbnRvVmlld0lmTmVlZGVk
XShib29sIGF2YWlsYWJsZSkgbXV0YWJsZSB7CisgICAgICAgIGlmICghYXZhaWxhYmxlKQorICAg
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQp
OwogCi0gICAgT3B0aW9uYWw8Q29vcmRpbmF0ZVN5c3RlbT4gY29vcmRpbmF0ZVN5c3RlbSA9IHBy
b3RvY29sU3RyaW5nVG9Db29yZGluYXRlU3lzdGVtKGNvb3JkaW5hdGVTeXN0ZW1TdHJpbmcpOwot
ICAgIGlmICghY29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIg
J2Nvb3JkaW5hdGVTeXN0ZW0nIGlzIGludmFsaWQuIik7CisgICAgICAgIGF1dG8gZnJhbWVJRCA9
IHdlYkZyYW1lSURGb3JIYW5kbGUocGFnZS5nZXQoKSwgZnJhbWVIYW5kbGUpOworICAgICAgICBp
ZiAoIWZyYW1lSUQpCisgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
UihGcmFtZU5vdEZvdW5kKTsKIAotICAgIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRp
b25hbDxTdHJpbmc+LCBXZWJDb3JlOjpJbnRSZWN0LCBPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2lu
dD4sIGJvb2wpPiBjb21wbGV0aW9uSGFuZGxlciA9IFtjYWxsYmFjayA9IGNhbGxiYWNrLmNvcHlS
ZWYoKV0oT3B0aW9uYWw8U3RyaW5nPiBlcnJvclR5cGUsIFdlYkNvcmU6OkludFJlY3QgcmVjdCwg
T3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+IGluVmlld0NlbnRlclBvaW50LCBib29sIGlzT2Jz
Y3VyZWQpIG11dGFibGUgewotICAgICAgICBpZiAoZXJyb3JUeXBlKSB7Ci0gICAgICAgICAgICBj
YWxsYmFjay0+c2VuZEZhaWx1cmUoU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX01FU1NBR0Uo
KmVycm9yVHlwZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIFdU
Rjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxTdHJpbmc+LCBXZWJDb3JlOjpJbnRS
ZWN0LCBPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIGJvb2wpPiBjb21wbGV0aW9uSGFuZGxl
ciA9IFtjYWxsYmFjayA9IGNhbGxiYWNrLmNvcHlSZWYoKV0oT3B0aW9uYWw8U3RyaW5nPiBlcnJv
clR5cGUsIFdlYkNvcmU6OkludFJlY3QgcmVjdCwgT3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+
IGluVmlld0NlbnRlclBvaW50LCBib29sIGlzT2JzY3VyZWQpIG11dGFibGUgeworICAgICAgICAg
ICAgaWYgKGVycm9yVHlwZSkgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVy
ZShTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTUVTU0FHRSgqZXJyb3JUeXBlKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gb3JpZ2lu
T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9pbnQ6OmNyZWF0ZSgp
Ci0gICAgICAgICAgICAuc2V0WChyZWN0LngoKSkKLSAgICAgICAgICAgIC5zZXRZKHJlY3QueSgp
KQotICAgICAgICAgICAgLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIGF1dG8gb3JpZ2luT2JqZWN0
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9pbnQ6OmNyZWF0ZSgpCisgICAg
ICAgICAgICAgICAgLnNldFgocmVjdC54KCkpCisgICAgICAgICAgICAgICAgLnNldFkocmVjdC55
KCkpCisgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAotICAgICAgICBhdXRvIHNpemVPYmpl
Y3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTaXplOjpjcmVhdGUoKQotICAg
ICAgICAgICAgLnNldFdpZHRoKHJlY3Qud2lkdGgoKSkKLSAgICAgICAgICAgIC5zZXRIZWlnaHQo
cmVjdC5oZWlnaHQoKSkKLSAgICAgICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgICAgICBhdXRv
IHNpemVPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTaXplOjpjcmVh
dGUoKQorICAgICAgICAgICAgICAgIC5zZXRXaWR0aChyZWN0LndpZHRoKCkpCisgICAgICAgICAg
ICAgICAgLnNldEhlaWdodChyZWN0LmhlaWdodCgpKQorICAgICAgICAgICAgICAgIC5yZWxlYXNl
KCk7CiAKLSAgICAgICAgYXV0byByZWN0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6UmVjdDo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRPcmlnaW4oV1RGTW92ZShv
cmlnaW5PYmplY3QpKQotICAgICAgICAgICAgLnNldFNpemUoV1RGTW92ZShzaXplT2JqZWN0KSkK
LSAgICAgICAgICAgIC5yZWxlYXNlKCk7CisgICAgICAgICAgICBhdXRvIHJlY3RPYmplY3QgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpSZWN0OjpjcmVhdGUoKQorICAgICAgICAg
ICAgICAgIC5zZXRPcmlnaW4oV1RGTW92ZShvcmlnaW5PYmplY3QpKQorICAgICAgICAgICAgICAg
IC5zZXRTaXplKFdURk1vdmUoc2l6ZU9iamVjdCkpCisgICAgICAgICAgICAgICAgLnJlbGVhc2Uo
KTsKIAotICAgICAgICBpZiAoIWluVmlld0NlbnRlclBvaW50KSB7Ci0gICAgICAgICAgICBjYWxs
YmFjay0+c2VuZFN1Y2Nlc3MoV1RGTW92ZShyZWN0T2JqZWN0KSwgbnVsbHB0ciwgaXNPYnNjdXJl
ZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaW5W
aWV3Q2VudGVyUG9pbnQpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3Mo
V1RGTW92ZShyZWN0T2JqZWN0KSwgbnVsbHB0ciwgaXNPYnNjdXJlZCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gaW5WaWV3Q2VudGVyUG9p
bnRPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQb2ludDo6Y3JlYXRl
KCkKLSAgICAgICAgICAgIC5zZXRYKGluVmlld0NlbnRlclBvaW50LnZhbHVlKCkueCgpKQotICAg
ICAgICAgICAgLnNldFkoaW5WaWV3Q2VudGVyUG9pbnQudmFsdWUoKS55KCkpCi0gICAgICAgICAg
ICAucmVsZWFzZSgpOworICAgICAgICAgICAgYXV0byBpblZpZXdDZW50ZXJQb2ludE9iamVjdCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBvaW50OjpjcmVhdGUoKQorICAgICAg
ICAgICAgICAgIC5zZXRYKGluVmlld0NlbnRlclBvaW50LnZhbHVlKCkueCgpKQorICAgICAgICAg
ICAgICAgIC5zZXRZKGluVmlld0NlbnRlclBvaW50LnZhbHVlKCkueSgpKQorICAgICAgICAgICAg
ICAgIC5yZWxlYXNlKCk7CiAKLSAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKFdURk1vdmUo
cmVjdE9iamVjdCksIFdURk1vdmUoaW5WaWV3Q2VudGVyUG9pbnRPYmplY3QpLCBpc09ic2N1cmVk
KTsKLSAgICB9OworICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKFdURk1vdmUocmVj
dE9iamVjdCksIFdURk1vdmUoaW5WaWV3Q2VudGVyUG9pbnRPYmplY3QpLCBpc09ic2N1cmVkKTsK
KyAgICAgICAgfTsKIAotICAgIGJvb2wgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA9IG9wdGlvbmFs
U2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA/ICpvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQg
OiBmYWxzZTsKLSAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpDb21wdXRlRWxlbWVudExheW91dChwYWdlLT5w
YWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSwgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29v
cmRpbmF0ZVN5c3RlbS52YWx1ZSgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
ICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRv
bWF0aW9uU2Vzc2lvblByb3h5OjpDb21wdXRlRWxlbWVudExheW91dChwYWdlLT5wYWdlSUQoKSwg
KmZyYW1lSUQsIG5vZGVIYW5kbGUsIHNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGNvb3JkaW5hdGVT
eXN0ZW0udmFsdWUoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKIH0K
IAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBT
dHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwg
Y29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBSZWY8U2VsZWN0T3B0aW9uRWxlbWVudENhbGxiYWNr
PiYmIGNhbGxiYWNrKQpAQCAtMTA5NSwyMSArMTE2NywyNSBAQCB2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0
SGFuZAogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgYm9vbCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7
Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwgZnJh
bWVOb3RGb3VuZCk7Ci0gICAgaWYgKGZyYW1lTm90Rm91bmQpCi0gICAgICAgIEFTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOworICAgIHdoZW5NYWluRnJhbWVB
dmFpbGFibGUoKnBhZ2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UgPSBtYWtlUmVmKCpwYWdlKSwgZnJhbWVI
YW5kbGUsIG5vZGVIYW5kbGVdKGJvb2wgYXZhaWxhYmxlKSBtdXRhYmxlIHsKKyAgICAgICAgaWYg
KCFhdmFpbGFibGUpCisgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
UihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0
aW9uYWw8U3RyaW5nPik+IGNvbXBsZXRpb25IYW5kbGVyID0gW2NhbGxiYWNrID0gY2FsbGJhY2su
Y29weVJlZigpXShPcHRpb25hbDxTdHJpbmc+IGVycm9yVHlwZSkgbXV0YWJsZSB7Ci0gICAgICAg
IGlmIChlcnJvclR5cGUpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShTVFJJ
TkdfRk9SX1BSRURFRklORURfRVJST1JfTUVTU0FHRSgqZXJyb3JUeXBlKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhbGxiYWNrLT5zZW5kU3Vj
Y2VzcygpOwotICAgIH07CisgICAgICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5k
bGUocGFnZS5nZXQoKSwgZnJhbWVIYW5kbGUpOworICAgICAgICBpZiAoIWZyYW1lSUQpCisgICAg
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsK
IAotICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1
dG9tYXRpb25TZXNzaW9uUHJveHk6OlNlbGVjdE9wdGlvbkVsZW1lbnQocGFnZS0+cGFnZUlEKCks
IGZyYW1lSUQsIG5vZGVIYW5kbGUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAg
ICAgIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxTdHJpbmc+KT4gY29tcGxl
dGlvbkhhbmRsZXIgPSBbY2FsbGJhY2sgPSBjYWxsYmFjay5jb3B5UmVmKCldKE9wdGlvbmFsPFN0
cmluZz4gZXJyb3JUeXBlKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmIChlcnJvclR5cGUpIHsK
KyAgICAgICAgICAgICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoU1RSSU5HX0ZPUl9QUkVERUZJ
TkVEX0VSUk9SX01FU1NBR0UoKmVycm9yVHlwZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRT
dWNjZXNzKCk7CisgICAgICAgIH07CisKKyAgICAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6U2VsZWN0T3B0
aW9uRWxlbWVudChwYWdlLT5wYWdlSUQoKSwgKmZyYW1lSUQsIG5vZGVIYW5kbGUpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246OmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBib29sKiBy
ZXN1bHQpCkBAIC0xMjc5LDYgKzEzNTUsOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpn
ZXRBbGxDb29raWVzKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZQogICAg
ICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoYnVpbGRBcnJheUZvckNvb2tpZXMoY29va2llcykp
OwogICAgIH07CiAKKyAgICAvLyBGSVhNRTogdGhpcyBjb21tYW5kIHNob3VsZCBjb25zdWx0IHRo
ZSBjdXJyZW50IGJyb3dzaW5nIGNvbnRleHQgKHdoaWNoIG1pZ2h0IGJlIGEgZnJhbWUpLgorICAg
IC8vIEFzIHdyaXR0ZW4sIHRoaXMgY29kZSBvbmx5IGxvb2tzIGF0IGNvb2tpZXMgdGhhdCBjb21l
IGZyb20gdGhlIG1haW4gZnJhbWUuCiAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6R2V0Q29va2llc0ZvckZy
YW1lKHBhZ2UtPnBhZ2VJRCgpLCBXVEY6Om51bGxvcHQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKQEAgLTE3NjYsMTk2ICsxODQ0LDIwNCBAQCB2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwg
Y29ucwogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgYm9vbCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7
Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShvcHRpb25hbEZyYW1lSGFu
ZGxlID8gKm9wdGlvbmFsRnJhbWVIYW5kbGUgOiBlbXB0eVN0cmluZygpLCBmcmFtZU5vdEZvdW5k
KTsKLSAgICBpZiAoZnJhbWVOb3RGb3VuZCkKLSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CisgICAgd2hlbk1haW5GcmFtZUF2YWlsYWJsZSgq
cGFnZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSA9IG1ha2VSZWYoKnBhZ2UpLCBmcmFtZUhhbmRsZSA9IGNv
bnZlcnRUb09wdGlvbmFsKG9wdGlvbmFsRnJhbWVIYW5kbGUpLCBpbnB1dFNvdXJjZXMgPSBtYWtl
UmVmKGlucHV0U291cmNlcyksIHN0ZXBzID0gbWFrZVJlZihzdGVwcyldKGJvb2wgYXZhaWxhYmxl
KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFhdmFpbGFibGUpCisgICAgICAgICAgICBBU1lOQ19G
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBIYXNoTWFw
PFN0cmluZywgUmVmPFNpbXVsYXRlZElucHV0U291cmNlPj4gc291cmNlSWRUb0lucHV0U291cmNl
TWFwOwotICAgIEhhc2hNYXA8U2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBlLCBTdHJpbmcsIFdURjo6
SW50SGFzaDxTaW11bGF0ZWRJbnB1dFNvdXJjZVR5cGU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJh
aXRzPFNpbXVsYXRlZElucHV0U291cmNlVHlwZT4+IHR5cGVUb1NvdXJjZUlkTWFwOworICAgICAg
ICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKHBhZ2UuZ2V0KCksIGZyYW1lSGFu
ZGxlKTsKKyAgICAgICAgaWYgKCFmcmFtZUlEKQorICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKLSAgICAvLyBQYXJzZSBhbmQgdmFs
aWRhdGUgQXV0b21hdGlvbiBwcm90b2NvbCBhcmd1bWVudHMuIEJ5IHRoaXMgcG9pbnQsIHRoZSBk
cml2ZXIgaGFzCi0gICAgLy8gYWxyZWFkeSBwZXJmb3JtZWQgdGhlIHN0ZXBzIGluIMKnMTcuMyBQ
cm9jZXNzaW5nIEFjdGlvbnMgUmVxdWVzdHMuCi0gICAgaWYgKCFpbnB1dFNvdXJjZXMubGVuZ3Ro
KCkpCi0gICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdpbnB1dFNvdXJjZXMnIHdhcyBub3Qg
Zm91bmQgb3IgZW1wdHkuIik7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWY8U2ltdWxhdGVk
SW5wdXRTb3VyY2U+PiBzb3VyY2VJZFRvSW5wdXRTb3VyY2VNYXA7CisgICAgICAgIEhhc2hNYXA8
U2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBlLCBTdHJpbmcsIFdURjo6SW50SGFzaDxTaW11bGF0ZWRJ
bnB1dFNvdXJjZVR5cGU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzPFNpbXVsYXRlZElucHV0
U291cmNlVHlwZT4+IHR5cGVUb1NvdXJjZUlkTWFwOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBp
bnB1dFNvdXJjZSA6IGlucHV0U291cmNlcykgewotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBpbnB1dFNvdXJjZU9iamVjdDsKLSAgICAgICAgaWYgKCFpbnB1dFNvdXJjZS0+YXNPYmplY3Qo
aW5wdXRTb3VyY2VPYmplY3QpKQotICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGlucHV0IHNvdXJjZSBp
biB0aGUgJ2lucHV0U291cmNlcycgcGFyYW1ldGVyIHdhcyBpbnZhbGlkLiIpOwotICAgICAgICAK
LSAgICAgICAgU3RyaW5nIHNvdXJjZUlkOwotICAgICAgICBpZiAoIWlucHV0U291cmNlT2JqZWN0
LT5nZXRTdHJpbmcoInNvdXJjZUlkIl9zLCBzb3VyY2VJZCkpCi0gICAgICAgICAgICBBU1lOQ19G
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAi
QW4gaW5wdXQgc291cmNlIGluIHRoZSAnaW5wdXRTb3VyY2VzJyBwYXJhbWV0ZXIgaXMgbWlzc2lu
ZyBhICdzb3VyY2VJZCcuIik7CisgICAgICAgIC8vIFBhcnNlIGFuZCB2YWxpZGF0ZSBBdXRvbWF0
aW9uIHByb3RvY29sIGFyZ3VtZW50cy4gQnkgdGhpcyBwb2ludCwgdGhlIGRyaXZlciBoYXMKKyAg
ICAgICAgLy8gYWxyZWFkeSBwZXJmb3JtZWQgdGhlIHN0ZXBzIGluIMKnMTcuMyBQcm9jZXNzaW5n
IEFjdGlvbnMgUmVxdWVzdHMuCisgICAgICAgIGlmICghaW5wdXRTb3VyY2VzLT5sZW5ndGgoKSkK
KyAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdpbnB1dFNvdXJjZXMnIHdhcyBub3Qg
Zm91bmQgb3IgZW1wdHkuIik7CisKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpbnB1dFNvdXJj
ZSA6IGlucHV0U291cmNlcy5nZXQoKSkgeworICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gaW5wdXRTb3VyY2VPYmplY3Q7CisgICAgICAgICAgICBpZiAoIWlucHV0U291cmNlLT5hc09i
amVjdChpbnB1dFNvdXJjZU9iamVjdCkpCisgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGlucHV0
IHNvdXJjZSBpbiB0aGUgJ2lucHV0U291cmNlcycgcGFyYW1ldGVyIHdhcyBpbnZhbGlkLiIpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcgc291cmNlSWQ7CisgICAgICAgICAgICBp
ZiAoIWlucHV0U291cmNlT2JqZWN0LT5nZXRTdHJpbmcoInNvdXJjZUlkIl9zLCBzb3VyY2VJZCkp
CisgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RF
VEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGlucHV0IHNvdXJjZSBpbiB0aGUgJ2lucHV0U291
cmNlcycgcGFyYW1ldGVyIGlzIG1pc3NpbmcgYSAnc291cmNlSWQnLiIpOwogCi0gICAgICAgIFN0
cmluZyBzb3VyY2VUeXBlOwotICAgICAgICBpZiAoIWlucHV0U291cmNlT2JqZWN0LT5nZXRTdHJp
bmcoInNvdXJjZVR5cGUiX3MsIHNvdXJjZVR5cGUpKQotICAgICAgICAgICAgQVNZTkNfRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGlu
cHV0IHNvdXJjZSBpbiB0aGUgJ2lucHV0U291cmNlcycgcGFyYW1ldGVyIGlzIG1pc3NpbmcgYSAn
c291cmNlVHlwZScuIik7CisgICAgICAgICAgICBTdHJpbmcgc291cmNlVHlwZTsKKyAgICAgICAg
ICAgIGlmICghaW5wdXRTb3VyY2VPYmplY3QtPmdldFN0cmluZygic291cmNlVHlwZSJfcywgc291
cmNlVHlwZSkpCisgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGlucHV0IHNvdXJjZSBpbiB0aGUg
J2lucHV0U291cmNlcycgcGFyYW1ldGVyIGlzIG1pc3NpbmcgYSAnc291cmNlVHlwZScuIik7CiAK
LSAgICAgICAgYXV0byBwYXJzZWRJbnB1dFNvdXJjZVR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OklucHV0U291cmNlVHlwZT4oc291cmNlVHlwZSk7Ci0gICAg
ICAgIGlmICghcGFyc2VkSW5wdXRTb3VyY2VUeXBlKQotICAgICAgICAgICAgQVNZTkNfRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGlu
cHV0IHNvdXJjZSBpbiB0aGUgJ2lucHV0U291cmNlcycgcGFyYW1ldGVyIGhhcyBhbiBpbnZhbGlk
ICdzb3VyY2VUeXBlJy4iKTsKKyAgICAgICAgICAgIGF1dG8gcGFyc2VkSW5wdXRTb3VyY2VUeXBl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpJbnB1dFNvdXJjZVR5
cGU+KHNvdXJjZVR5cGUpOworICAgICAgICAgICAgaWYgKCFwYXJzZWRJbnB1dFNvdXJjZVR5cGUp
CisgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RF
VEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGlucHV0IHNvdXJjZSBpbiB0aGUgJ2lucHV0U291
cmNlcycgcGFyYW1ldGVyIGhhcyBhbiBpbnZhbGlkICdzb3VyY2VUeXBlJy4iKTsKIAotICAgICAg
ICBTaW11bGF0ZWRJbnB1dFNvdXJjZVR5cGUgaW5wdXRTb3VyY2VUeXBlID0gc2ltdWxhdGVkSW5w
dXRTb3VyY2VUeXBlRnJvbVByb3RvY29sU291cmNlVHlwZSgqcGFyc2VkSW5wdXRTb3VyY2VUeXBl
KTsKKyAgICAgICAgICAgIFNpbXVsYXRlZElucHV0U291cmNlVHlwZSBpbnB1dFNvdXJjZVR5cGUg
PSBzaW11bGF0ZWRJbnB1dFNvdXJjZVR5cGVGcm9tUHJvdG9jb2xTb3VyY2VUeXBlKCpwYXJzZWRJ
bnB1dFNvdXJjZVR5cGUpOwogCi0gICAgICAgIC8vIE5vdGU6IGlPUyBkb2VzIG5vdCBzdXBwb3J0
IG1vdXNlIGlucHV0IHNvdXJjZXMsIGFuZCBvdGhlciBwbGF0Zm9ybXMgZG8gbm90IHN1cHBvcnQg
dG91Y2ggaW5wdXQgc291cmNlcy4KLSAgICAgICAgLy8gSWYgYSBtaXNtYXRjaCBoYXBwZW5zLCBh
bGlhcyB0byB0aGUgc3VwcG9ydGVkIGlucHV0IHNvdXJjZS4gVGhpcyB3b3JrcyBiZWNhdXNlIGJv
dGggTW91c2UgYW5kIFRvdWNoIGlucHV0IHNvdXJjZXMKLSAgICAgICAgLy8gdXNlIGEgTW91c2VC
dXR0b24gdG8gaW5kaWNhdGUgdGhlIHJlc3VsdCBvZiBpbnRlcmFjdGluZyAoZG93bi91cC9tb3Zl
KSwgd2hpY2ggY2FuIGJlIGludGVycHJldGVkIGZvciB0b3VjaCBvciBtb3VzZS4KKyAgICAgICAg
ICAgIC8vIE5vdGU6IGlPUyBkb2VzIG5vdCBzdXBwb3J0IG1vdXNlIGlucHV0IHNvdXJjZXMsIGFu
ZCBvdGhlciBwbGF0Zm9ybXMgZG8gbm90IHN1cHBvcnQgdG91Y2ggaW5wdXQgc291cmNlcy4KKyAg
ICAgICAgICAgIC8vIElmIGEgbWlzbWF0Y2ggaGFwcGVucywgYWxpYXMgdG8gdGhlIHN1cHBvcnRl
ZCBpbnB1dCBzb3VyY2UuIFRoaXMgd29ya3MgYmVjYXVzZSBib3RoIE1vdXNlIGFuZCBUb3VjaCBp
bnB1dCBzb3VyY2VzCisgICAgICAgICAgICAvLyB1c2UgYSBNb3VzZUJ1dHRvbiB0byBpbmRpY2F0
ZSB0aGUgcmVzdWx0IG9mIGludGVyYWN0aW5nIChkb3duL3VwL21vdmUpLCB3aGljaCBjYW4gYmUg
aW50ZXJwcmV0ZWQgZm9yIHRvdWNoIG9yIG1vdXNlLgogI2lmICFFTkFCTEUoV0VCRFJJVkVSX01P
VVNFX0lOVEVSQUNUSU9OUykgJiYgRU5BQkxFKFdFQkRSSVZFUl9UT1VDSF9JTlRFUkFDVElPTlMp
Ci0gICAgICAgIGlmIChpbnB1dFNvdXJjZVR5cGUgPT0gU2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBl
OjpNb3VzZSkKLSAgICAgICAgICAgIGlucHV0U291cmNlVHlwZSA9IFNpbXVsYXRlZElucHV0U291
cmNlVHlwZTo6VG91Y2g7CisgICAgICAgICAgICBpZiAoaW5wdXRTb3VyY2VUeXBlID09IFNpbXVs
YXRlZElucHV0U291cmNlVHlwZTo6TW91c2UpCisgICAgICAgICAgICAgICAgaW5wdXRTb3VyY2VU
eXBlID0gU2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBlOjpUb3VjaDsKICNlbmRpZgogI2lmICFFTkFC
TEUoV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUykKLSAgICAgICAgaWYgKGlucHV0U291cmNl
VHlwZSA9PSBTaW11bGF0ZWRJbnB1dFNvdXJjZVR5cGU6Ok1vdXNlKQotICAgICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTm90SW1wbGVtZW50ZWQs
ICJNb3VzZSBpbnB1dCBzb3VyY2VzIGFyZSBub3QgeWV0IHN1cHBvcnRlZC4iKTsKKyAgICAgICAg
ICAgIGlmIChpbnB1dFNvdXJjZVR5cGUgPT0gU2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBlOjpNb3Vz
ZSkKKyAgICAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRf
REVUQUlMUyhOb3RJbXBsZW1lbnRlZCwgIk1vdXNlIGlucHV0IHNvdXJjZXMgYXJlIG5vdCB5ZXQg
c3VwcG9ydGVkLiIpOwogI2VuZGlmCiAjaWYgIUVOQUJMRShXRUJEUklWRVJfVE9VQ0hfSU5URVJB
Q1RJT05TKQotICAgICAgICBpZiAoaW5wdXRTb3VyY2VUeXBlID09IFNpbXVsYXRlZElucHV0U291
cmNlVHlwZTo6VG91Y2gpCi0gICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUl9BTkRfREVUQUlMUyhOb3RJbXBsZW1lbnRlZCwgIlRvdWNoIGlucHV0IHNvdXJjZXMgYXJl
IG5vdCB5ZXQgc3VwcG9ydGVkLiIpOworICAgICAgICAgICAgaWYgKGlucHV0U291cmNlVHlwZSA9
PSBTaW11bGF0ZWRJbnB1dFNvdXJjZVR5cGU6OlRvdWNoKQorICAgICAgICAgICAgICAgIEFTWU5D
X0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE5vdEltcGxlbWVudGVkLCAi
VG91Y2ggaW5wdXQgc291cmNlcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQuIik7CiAjZW5kaWYKICNp
ZiAhRU5BQkxFKFdFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpCi0gICAgICAgIGlmIChp
bnB1dFNvdXJjZVR5cGUgPT0gU2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBlOjpLZXlib2FyZCkKLSAg
ICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE5v
dEltcGxlbWVudGVkLCAiS2V5Ym9hcmQgaW5wdXQgc291cmNlcyBhcmUgbm90IHlldCBzdXBwb3J0
ZWQuIik7CisgICAgICAgICAgICBpZiAoaW5wdXRTb3VyY2VUeXBlID09IFNpbXVsYXRlZElucHV0
U291cmNlVHlwZTo6S2V5Ym9hcmQpCisgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BS
RURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTm90SW1wbGVtZW50ZWQsICJLZXlib2FyZCBpbnB1
dCBzb3VyY2VzIGFyZSBub3QgeWV0IHN1cHBvcnRlZC4iKTsKICNlbmRpZgotICAgICAgICBpZiAo
dHlwZVRvU291cmNlSWRNYXAuY29udGFpbnMoaW5wdXRTb3VyY2VUeXBlKSkKLSAgICAgICAgICAg
IEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJh
bWV0ZXIsICJUd28gaW5wdXQgc291cmNlcyB3aXRoIHRoZSBzYW1lIHR5cGUgd2VyZSBzcGVjaWZp
ZWQuIik7Ci0gICAgICAgIGlmIChzb3VyY2VJZFRvSW5wdXRTb3VyY2VNYXAuY29udGFpbnMoc291
cmNlSWQpKQotICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5E
X0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlR3byBpbnB1dCBzb3VyY2VzIHdpdGggdGhlIHNh
bWUgc291cmNlSWQgd2VyZSBzcGVjaWZpZWQuIik7CisgICAgICAgICAgICBpZiAodHlwZVRvU291
cmNlSWRNYXAuY29udGFpbnMoaW5wdXRTb3VyY2VUeXBlKSkKKyAgICAgICAgICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVy
LCAiVHdvIGlucHV0IHNvdXJjZXMgd2l0aCB0aGUgc2FtZSB0eXBlIHdlcmUgc3BlY2lmaWVkLiIp
OworICAgICAgICAgICAgaWYgKHNvdXJjZUlkVG9JbnB1dFNvdXJjZU1hcC5jb250YWlucyhzb3Vy
Y2VJZCkpCisgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1Jf
QU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlR3byBpbnB1dCBzb3VyY2VzIHdpdGggdGhl
IHNhbWUgc291cmNlSWQgd2VyZSBzcGVjaWZpZWQuIik7CiAKLSAgICAgICAgdHlwZVRvU291cmNl
SWRNYXAuYWRkKGlucHV0U291cmNlVHlwZSwgc291cmNlSWQpOwotICAgICAgICBzb3VyY2VJZFRv
SW5wdXRTb3VyY2VNYXAuYWRkKHNvdXJjZUlkLCAqaW5wdXRTb3VyY2VGb3JUeXBlKGlucHV0U291
cmNlVHlwZSkpOwotICAgIH0KKyAgICAgICAgICAgIHR5cGVUb1NvdXJjZUlkTWFwLmFkZChpbnB1
dFNvdXJjZVR5cGUsIHNvdXJjZUlkKTsKKyAgICAgICAgICAgIHNvdXJjZUlkVG9JbnB1dFNvdXJj
ZU1hcC5hZGQoc291cmNlSWQsICppbnB1dFNvdXJjZUZvclR5cGUoaW5wdXRTb3VyY2VUeXBlKSk7
CisgICAgICAgIH0KIAotICAgIFZlY3RvcjxTaW11bGF0ZWRJbnB1dEtleUZyYW1lPiBrZXlGcmFt
ZXM7CisgICAgICAgIFZlY3RvcjxTaW11bGF0ZWRJbnB1dEtleUZyYW1lPiBrZXlGcmFtZXM7CiAK
LSAgICBpZiAoIXN0ZXBzLmxlbmd0aCgpKQotICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVG
SU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAn
c3RlcHMnIHdhcyBub3QgZm91bmQgb3IgZW1wdHkuIik7CisgICAgICAgIGlmICghc3RlcHMtPmxl
bmd0aCgpKQorICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5E
X0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3N0ZXBzJyB3YXMgbm90
IGZvdW5kIG9yIGVtcHR5LiIpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBzdGVwIDogc3RlcHMp
IHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gc3RlcE9iamVjdDsKLSAgICAgICAgaWYg
KCFzdGVwLT5hc09iamVjdChzdGVwT2JqZWN0KSkKLSAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBIHN0ZXAg
aW4gdGhlICdzdGVwcycgcGFyYW1ldGVyIHdhcyBub3QgYW4gb2JqZWN0LiIpOworICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIHN0ZXAgOiBzdGVwcy5nZXQoKSkgeworICAgICAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gc3RlcE9iamVjdDsKKyAgICAgICAgICAgIGlmICghc3RlcC0+YXNPYmpl
Y3Qoc3RlcE9iamVjdCkpCisgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkEgc3RlcCBpbiB0aGUgJ3N0
ZXBzJyBwYXJhbWV0ZXIgd2FzIG5vdCBhbiBvYmplY3QuIik7CiAKLSAgICAgICAgUmVmUHRyPEpT
T046OkFycmF5PiBzdGVwU3RhdGVzOwotICAgICAgICBpZiAoIXN0ZXBPYmplY3QtPmdldEFycmF5
KCJzdGF0ZXMiX3MsIHN0ZXBTdGF0ZXMpKQotICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BS
RURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkEgc3RlcCBpcyBt
aXNzaW5nIHRoZSAnc3RhdGVzJyBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpBcnJheT4gc3RlcFN0YXRlczsKKyAgICAgICAgICAgIGlmICghc3RlcE9iamVjdC0+Z2V0QXJy
YXkoInN0YXRlcyJfcywgc3RlcFN0YXRlcykpCisgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkEgc3Rl
cCBpcyBtaXNzaW5nIHRoZSAnc3RhdGVzJyBwcm9wZXJ0eS4iKTsKIAotICAgICAgICBWZWN0b3I8
U2ltdWxhdGVkSW5wdXRLZXlGcmFtZTo6U3RhdGVFbnRyeT4gZW50cmllczsKLSAgICAgICAgZW50
cmllcy5yZXNlcnZlQ2FwYWNpdHkoc3RlcFN0YXRlcy0+bGVuZ3RoKCkpOworICAgICAgICAgICAg
VmVjdG9yPFNpbXVsYXRlZElucHV0S2V5RnJhbWU6OlN0YXRlRW50cnk+IGVudHJpZXM7CisgICAg
ICAgICAgICBlbnRyaWVzLnJlc2VydmVDYXBhY2l0eShzdGVwU3RhdGVzLT5sZW5ndGgoKSk7CiAK
LSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0ZSA6ICpzdGVwU3RhdGVzKSB7Ci0gICAgICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBzdGF0ZU9iamVjdDsKLSAgICAgICAgICAgIGlmICgh
c3RhdGUtPmFzT2JqZWN0KHN0YXRlT2JqZWN0KSkKLSAgICAgICAgICAgICAgICBBU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiRW5j
b3VudGVyZWQgYSBub24tb2JqZWN0IHN0ZXAgc3RhdGUuIik7CisgICAgICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIHN0YXRlIDogKnN0ZXBTdGF0ZXMpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBzdGF0ZU9iamVjdDsKKyAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLT5h
c09iamVjdChzdGF0ZU9iamVjdCkpCisgICAgICAgICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJFbmNvdW50
ZXJlZCBhIG5vbi1vYmplY3Qgc3RlcCBzdGF0ZS4iKTsKIAotICAgICAgICAgICAgU3RyaW5nIHNv
dXJjZUlkOwotICAgICAgICAgICAgaWYgKCFzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJzb3VyY2VJ
ZCJfcywgc291cmNlSWQpKQotICAgICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJ
TkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJTdGVwIHN0YXRlIGxhY2tz
IHJlcXVpcmVkICdzb3VyY2VJZCcgcHJvcGVydHkuIik7CisgICAgICAgICAgICAgICAgU3RyaW5n
IHNvdXJjZUlkOworICAgICAgICAgICAgICAgIGlmICghc3RhdGVPYmplY3QtPmdldFN0cmluZygi
c291cmNlSWQiX3MsIHNvdXJjZUlkKSkKKyAgICAgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlN0ZXAg
c3RhdGUgbGFja3MgcmVxdWlyZWQgJ3NvdXJjZUlkJyBwcm9wZXJ0eS4iKTsKIAotICAgICAgICAg
ICAgaWYgKCFzb3VyY2VJZFRvSW5wdXRTb3VyY2VNYXAuY29udGFpbnMoc291cmNlSWQpKQotICAg
ICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludmFsaWRQYXJhbWV0ZXIsICJVbmtub3duICdzb3VyY2VJZCcgc3BlY2lmaWVkLiIpOworICAg
ICAgICAgICAgICAgIGlmICghc291cmNlSWRUb0lucHV0U291cmNlTWFwLmNvbnRhaW5zKHNvdXJj
ZUlkKSkKKyAgICAgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlVua25vd24gJ3NvdXJjZUlkJyBzcGVj
aWZpZWQuIik7CiAKLSAgICAgICAgICAgIFNpbXVsYXRlZElucHV0U291cmNlJiBpbnB1dFNvdXJj
ZSA9ICpzb3VyY2VJZFRvSW5wdXRTb3VyY2VNYXAuZ2V0KHNvdXJjZUlkKTsKLSAgICAgICAgICAg
IFNpbXVsYXRlZElucHV0U291cmNlU3RhdGUgc291cmNlU3RhdGUgeyB9OworICAgICAgICAgICAg
ICAgIFNpbXVsYXRlZElucHV0U291cmNlJiBpbnB1dFNvdXJjZSA9ICpzb3VyY2VJZFRvSW5wdXRT
b3VyY2VNYXAuZ2V0KHNvdXJjZUlkKTsKKyAgICAgICAgICAgICAgICBTaW11bGF0ZWRJbnB1dFNv
dXJjZVN0YXRlIHNvdXJjZVN0YXRlIHsgfTsKIAotICAgICAgICAgICAgU3RyaW5nIHByZXNzZWRD
aGFyS2V5U3RyaW5nOwotICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoInBy
ZXNzZWRDaGFyS2V5Il9zLCBwcmVzc2VkQ2hhcktleVN0cmluZykpCi0gICAgICAgICAgICAgICAg
c291cmNlU3RhdGUucHJlc3NlZENoYXJLZXkgPSBwcmVzc2VkQ2hhcktleVN0cmluZy5jaGFyYWN0
ZXJBdCgwKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcHJlc3NlZENoYXJLZXlTdHJpbmc7Cisg
ICAgICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoInByZXNzZWRDaGFyS2V5
Il9zLCBwcmVzc2VkQ2hhcktleVN0cmluZykpCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZVN0
YXRlLnByZXNzZWRDaGFyS2V5ID0gcHJlc3NlZENoYXJLZXlTdHJpbmcuY2hhcmFjdGVyQXQoMCk7
CiAKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gcHJlc3NlZFZpcnR1YWxLZXlzQXJy
YXk7Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QtPmdldEFycmF5KCJwcmVzc2VkVmlydHVh
bEtleXMiX3MsIHByZXNzZWRWaXJ0dWFsS2V5c0FycmF5KSkgewotICAgICAgICAgICAgICAgIFZp
cnR1YWxLZXlTZXQgcHJlc3NlZFZpcnR1YWxLZXlzIHsgfTsKKyAgICAgICAgICAgICAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IHByZXNzZWRWaXJ0dWFsS2V5c0FycmF5OworICAgICAgICAgICAgICAg
IGlmIChzdGF0ZU9iamVjdC0+Z2V0QXJyYXkoInByZXNzZWRWaXJ0dWFsS2V5cyJfcywgcHJlc3Nl
ZFZpcnR1YWxLZXlzQXJyYXkpKSB7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxLZXlTZXQg
cHJlc3NlZFZpcnR1YWxLZXlzIHsgfTsKIAotICAgICAgICAgICAgICAgIGZvciAoYXV0byBpdCA9
IHByZXNzZWRWaXJ0dWFsS2V5c0FycmF5LT5iZWdpbigpOyBpdCAhPSBwcmVzc2VkVmlydHVhbEtl
eXNBcnJheS0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByZXNz
ZWRWaXJ0dWFsS2V5U3RyaW5nOwotICAgICAgICAgICAgICAgICAgICBpZiAoISgqaXQpLT5hc1N0
cmluZyhwcmVzc2VkVmlydHVhbEtleVN0cmluZykpCi0gICAgICAgICAgICAgICAgICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1l
dGVyLCAiRW5jb3VudGVyZWQgYSBub24tc3RyaW5nIHZpcnR1YWwga2V5IHZhbHVlLiIpOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBwcmVzc2VkVmlydHVhbEtleXNBcnJheS0+
YmVnaW4oKTsgaXQgIT0gcHJlc3NlZFZpcnR1YWxLZXlzQXJyYXktPmVuZCgpOyArK2l0KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJlc3NlZFZpcnR1YWxLZXlTdHJpbmc7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgqaXQpLT5hc1N0cmluZyhwcmVzc2VkVmlydHVh
bEtleVN0cmluZykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkVuY291bnRl
cmVkIGEgbm9uLXN0cmluZyB2aXJ0dWFsIGtleSB2YWx1ZS4iKTsKIAotICAgICAgICAgICAgICAg
ICAgICBPcHRpb25hbDxWaXJ0dWFsS2V5PiBwYXJzZWRWaXJ0dWFsS2V5ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpWaXJ0dWFsS2V5PihwcmVzc2VkVmlydHVhbEtl
eVN0cmluZyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFyc2VkVmlydHVhbEtleSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FO
RF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJFbmNvdW50ZXJlZCBhbiB1bmtub3duIHZpcnR1
YWwga2V5IHZhbHVlLiIpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBwcmVzc2VkVmlydHVhbEtleXMuYWRkKHBhcnNlZFZpcnR1YWxLZXkudmFsdWUo
KSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWw8
VmlydHVhbEtleT4gcGFyc2VkVmlydHVhbEtleSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6VmlydHVhbEtleT4ocHJlc3NlZFZpcnR1YWxLZXlTdHJpbmcpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRWaXJ0dWFsS2V5KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRB
SUxTKEludmFsaWRQYXJhbWV0ZXIsICJFbmNvdW50ZXJlZCBhbiB1bmtub3duIHZpcnR1YWwga2V5
IHZhbHVlLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXNzZWRWaXJ0dWFsS2V5cy5hZGQocGFyc2VkVmlydHVhbEtleS52YWx1
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgc291cmNlU3Rh
dGUucHJlc3NlZFZpcnR1YWxLZXlzID0gcHJlc3NlZFZpcnR1YWxLZXlzOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5wcmVzc2VkVmlydHVhbEtleXMgPSBw
cmVzc2VkVmlydHVhbEtleXM7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTdHJp
bmcgcHJlc3NlZEJ1dHRvblN0cmluZzsKLSAgICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC0+Z2V0
U3RyaW5nKCJwcmVzc2VkQnV0dG9uIl9zLCBwcmVzc2VkQnV0dG9uU3RyaW5nKSkgewotICAgICAg
ICAgICAgICAgIGF1dG8gcHJvdG9jb2xCdXR0b24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uPihwcmVzc2VkQnV0dG9uU3RyaW5nKTsKLSAgICAg
ICAgICAgICAgICBzb3VyY2VTdGF0ZS5wcmVzc2VkTW91c2VCdXR0b24gPSBwcm90b2NvbEJ1dHRv
bi52YWx1ZU9yKE1vdXNlQnV0dG9uOjpOb25lKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBTdHJpbmcgcHJlc3NlZEJ1dHRvblN0cmluZzsKKyAgICAgICAgICAgICAgICBpZiAoc3Rh
dGVPYmplY3QtPmdldFN0cmluZygicHJlc3NlZEJ1dHRvbiJfcywgcHJlc3NlZEJ1dHRvblN0cmlu
ZykpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBwcm90b2NvbEJ1dHRvbiA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VCdXR0b24+KHByZXNzZWRCdXR0
b25TdHJpbmcpOworICAgICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5wcmVzc2VkTW91c2VC
dXR0b24gPSBwcm90b2NvbEJ1dHRvbi52YWx1ZU9yKE1vdXNlQnV0dG9uOjpOb25lKTsKKyAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFN0cmluZyBvcmlnaW5TdHJpbmc7Ci0gICAgICAg
ICAgICBpZiAoc3RhdGVPYmplY3QtPmdldFN0cmluZygib3JpZ2luIl9zLCBvcmlnaW5TdHJpbmcp
KQotICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRlLm9yaWdpbiA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VNb3ZlT3JpZ2luPihvcmlnaW5TdHJpbmcpOwor
ICAgICAgICAgICAgICAgIFN0cmluZyBvcmlnaW5TdHJpbmc7CisgICAgICAgICAgICAgICAgaWYg
KHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoIm9yaWdpbiJfcywgb3JpZ2luU3RyaW5nKSkKKyAgICAg
ICAgICAgICAgICAgICAgc291cmNlU3RhdGUub3JpZ2luID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZU1vdmVPcmlnaW4+KG9yaWdpblN0cmluZyk7CiAKLSAg
ICAgICAgICAgIGlmIChzb3VyY2VTdGF0ZS5vcmlnaW4gJiYgc291cmNlU3RhdGUub3JpZ2luLnZh
bHVlKCkgPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VNb3ZlT3JpZ2lu
OjpFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5vZGVIYW5kbGVTdHJpbmc7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJub2RlSGFuZGxlIl9z
LCBub2RlSGFuZGxlU3RyaW5nKSkKLSAgICAgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIk5vZGUgaGFu
ZGxlIG5vdCBwcm92aWRlZCBmb3IgJ0VsZW1lbnQnIG9yaWdpbiIpOwotICAgICAgICAgICAgICAg
IHNvdXJjZVN0YXRlLm5vZGVIYW5kbGUgPSBub2RlSGFuZGxlU3RyaW5nOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChzb3VyY2VTdGF0ZS5vcmlnaW4gJiYgc291cmNlU3RhdGUu
b3JpZ2luLnZhbHVlKCkgPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VN
b3ZlT3JpZ2luOjpFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBub2RlSGFu
ZGxlU3RyaW5nOworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRlT2JqZWN0LT5nZXRTdHJp
bmcoIm5vZGVIYW5kbGUiX3MsIG5vZGVIYW5kbGVTdHJpbmcpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxp
ZFBhcmFtZXRlciwgIk5vZGUgaGFuZGxlIG5vdCBwcm92aWRlZCBmb3IgJ0VsZW1lbnQnIG9yaWdp
biIpOworICAgICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5ub2RlSGFuZGxlID0gbm9kZUhh
bmRsZVN0cmluZzsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGxvY2F0aW9uT2JqZWN0OwotICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0LT5n
ZXRPYmplY3QoImxvY2F0aW9uIl9zLCBsb2NhdGlvbk9iamVjdCkpIHsKLSAgICAgICAgICAgICAg
ICBpbnQgeCwgeTsKLSAgICAgICAgICAgICAgICBpZiAobG9jYXRpb25PYmplY3QtPmdldEludGVn
ZXIoIngiX3MsIHgpICYmIGxvY2F0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKCJ5Il9zLCB5KSkKLSAg
ICAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUubG9jYXRpb24gPSBXZWJDb3JlOjpJbnRQb2lu
dCh4LCB5KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBsb2NhdGlvbk9iamVjdDsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QtPmdl
dE9iamVjdCgibG9jYXRpb24iX3MsIGxvY2F0aW9uT2JqZWN0KSkgeworICAgICAgICAgICAgICAg
ICAgICBpbnQgeCwgeTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uT2JqZWN0LT5n
ZXRJbnRlZ2VyKCJ4Il9zLCB4KSAmJiBsb2NhdGlvbk9iamVjdC0+Z2V0SW50ZWdlcigieSJfcywg
eSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5sb2NhdGlvbiA9IFdlYkNv
cmU6OkludFBvaW50KHgsIHkpOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaW50
IHBhcnNlZER1cmF0aW9uOwotICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0LT5nZXRJbnRlZ2Vy
KCJkdXJhdGlvbiJfcywgcGFyc2VkRHVyYXRpb24pKQotICAgICAgICAgICAgICAgIHNvdXJjZVN0
YXRlLmR1cmF0aW9uID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhwYXJzZWREdXJhdGlvbik7
CisgICAgICAgICAgICAgICAgaW50IHBhcnNlZER1cmF0aW9uOworICAgICAgICAgICAgICAgIGlm
IChzdGF0ZU9iamVjdC0+Z2V0SW50ZWdlcigiZHVyYXRpb24iX3MsIHBhcnNlZER1cmF0aW9uKSkK
KyAgICAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUuZHVyYXRpb24gPSBTZWNvbmRzOjpmcm9t
TWlsbGlzZWNvbmRzKHBhcnNlZER1cmF0aW9uKTsKIAotICAgICAgICAgICAgZW50cmllcy51bmNo
ZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFNpbXVsYXRlZElucHV0U291cmNlJiwgU2ltdWxhdGVkSW5w
dXRTb3VyY2VTdGF0ZT4geyBpbnB1dFNvdXJjZSwgc291cmNlU3RhdGUgfSk7CisgICAgICAgICAg
ICAgICAgZW50cmllcy51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFNpbXVsYXRlZElucHV0U291
cmNlJiwgU2ltdWxhdGVkSW5wdXRTb3VyY2VTdGF0ZT4geyBpbnB1dFNvdXJjZSwgc291cmNlU3Rh
dGUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGtleUZyYW1l
cy5hcHBlbmQoU2ltdWxhdGVkSW5wdXRLZXlGcmFtZShXVEZNb3ZlKGVudHJpZXMpKSk7CiAgICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGtleUZyYW1lcy5hcHBlbmQoU2ltdWxhdGVkSW5wdXRL
ZXlGcmFtZShXVEZNb3ZlKGVudHJpZXMpKSk7Ci0gICAgfQogCi0gICAgU2ltdWxhdGVkSW5wdXRE
aXNwYXRjaGVyJiBpbnB1dERpc3BhdGNoZXIgPSBpbnB1dERpc3BhdGNoZXJGb3JQYWdlKCpwYWdl
KTsKLSAgICBpZiAoaW5wdXREaXNwYXRjaGVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
X0FORF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJBIHByZXZpb3VzIGludGVyYWN0aW9uIGlzIHN0
aWxsIHVuZGVyd2F5LiIpOwotICAgIH0KKyAgICAgICAgU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVy
JiBpbnB1dERpc3BhdGNoZXIgPSBpbnB1dERpc3BhdGNoZXJGb3JQYWdlKHBhZ2UuZ2V0KCkpOwor
ICAgICAgICBpZiAoaW5wdXREaXNwYXRjaGVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1JfQU5EX0RFVEFJTFMoSW50ZXJuYWxFcnJvciwgIkEgcHJldmlvdXMgaW50ZXJhY3Rp
b24gaXMgc3RpbGwgdW5kZXJ3YXkuIik7CisgICAgICAgIH0KIAotICAgIC8vIERlbGVnYXRlIHRo
ZSByZXN0IG9mIMKnMTcuNCBEaXNwYXRjaGluZyBBY3Rpb25zIHRvIHRoZSBkaXNwYXRjaGVyLgot
ICAgIGlucHV0RGlzcGF0Y2hlci5ydW4oZnJhbWVJRC52YWx1ZSgpLCBXVEZNb3ZlKGtleUZyYW1l
cyksIG1faW5wdXRTb3VyY2VzLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShPcHRpb25hbDxBdXRvbWF0aW9uQ29tbWFuZEVycm9y
PiBlcnJvcikgewotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICBjYWxsYmFjay0+c2Vu
ZEZhaWx1cmUoZXJyb3IudmFsdWUoKS50b1Byb3RvY29sU3RyaW5nKCkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKKyAgICAgICAgLy8gRGVsZWdh
dGUgdGhlIHJlc3Qgb2YgwqcxNy40IERpc3BhdGNoaW5nIEFjdGlvbnMgdG8gdGhlIGRpc3BhdGNo
ZXIuCisgICAgICAgIGlucHV0RGlzcGF0Y2hlci5ydW4oZnJhbWVJRC52YWx1ZSgpLCBXVEZNb3Zl
KGtleUZyYW1lcyksIG1faW5wdXRTb3VyY2VzLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShPcHRpb25hbDxBdXRvbWF0aW9uQ29t
bWFuZEVycm9yPiBlcnJvcikgeworICAgICAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAg
ICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShlcnJvci52YWx1ZSgpLnRvUHJvdG9jb2xTdHJpbmco
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNj
ZXNzKCk7CisgICAgICAgIH0pOwogICAgIH0pOwogI2VuZGlmIC8vIEVOQUJMRShXRUJEUklWRVJf
QUNUSU9OU19BUEkpCiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNhbmNlbEludGVy
YWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9u
YWxGcmFtZUhhbmRsZSwgUmVmPENhbmNlbEludGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFjaz4mJiBj
YWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNhbmNlbEludGVyYWN0aW9uU2Vx
dWVuY2UoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyog
b3B0aW9uYWxGcmFtZUhhbmRsZSwgUmVmPENhbmNlbEludGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFj
az4mJiBjYWxsYmFjaykKIHsKICAgICAvLyBUaGlzIGNvbW1hbmQgaW1wbGVtZW50cyBXZWJLaXQg
c3VwcG9ydCBmb3IgwqcxNy42IFJlbGVhc2UgQWN0aW9ucy4KIAogI2lmICFFTkFCTEUoV0VCRFJJ
VkVSX0FDVElPTlNfQVBJKQogICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKE5v
dEltcGxlbWVudGVkKTsKICNlbHNlCi0gICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVBy
b3h5Rm9ySGFuZGxlKGhhbmRsZSk7CisgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVBy
b3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAg
ICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAK
LSAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJG
cmFtZUlERm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRs
ZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOwotICAgIGlmIChmcmFtZU5vdEZvdW5k
KQotICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5k
KTsKKyAgICB3aGVuTWFpbkZyYW1lQXZhaWxhYmxlKCpwYWdlLCBbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlID0g
bWFrZVJlZigqcGFnZSksIGZyYW1lSGFuZGxlID0gY29udmVydFRvT3B0aW9uYWwob3B0aW9uYWxG
cmFtZUhhbmRsZSldKGJvb2wgYXZhaWxhYmxlKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFhdmFp
bGFibGUpCisgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5k
b3dOb3RGb3VuZCk7CiAKLSAgICBWZWN0b3I8U2ltdWxhdGVkSW5wdXRLZXlGcmFtZT4ga2V5RnJh
bWVzKHsgU2ltdWxhdGVkSW5wdXRLZXlGcmFtZTo6a2V5RnJhbWVUb1Jlc2V0SW5wdXRTb3VyY2Vz
KG1faW5wdXRTb3VyY2VzKSB9KTsKLSAgICBTaW11bGF0ZWRJbnB1dERpc3BhdGNoZXImIGlucHV0
RGlzcGF0Y2hlciA9IGlucHV0RGlzcGF0Y2hlckZvclBhZ2UoKnBhZ2UpOwotICAgIGlucHV0RGlz
cGF0Y2hlci5jYW5jZWwoKTsKLSAgICAKLSAgICBpbnB1dERpc3BhdGNoZXIucnVuKGZyYW1lSUQu
dmFsdWUoKSwgV1RGTW92ZShrZXlGcmFtZXMpLCBtX2lucHV0U291cmNlcywgW3Byb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oT3B0aW9u
YWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4gZXJyb3IpIHsKLSAgICAgICAgaWYgKGVycm9yKQot
ICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKGVycm9yLnZhbHVlKCkudG9Qcm90b2Nv
bFN0cmluZygpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNj
ZXNzKCk7CisgICAgICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUocGFnZS5n
ZXQoKSwgZnJhbWVIYW5kbGUpOworICAgICAgICBpZiAoIWZyYW1lSUQpCisgICAgICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKKworICAgICAg
ICBWZWN0b3I8U2ltdWxhdGVkSW5wdXRLZXlGcmFtZT4ga2V5RnJhbWVzKHsgU2ltdWxhdGVkSW5w
dXRLZXlGcmFtZTo6a2V5RnJhbWVUb1Jlc2V0SW5wdXRTb3VyY2VzKG1faW5wdXRTb3VyY2VzKSB9
KTsKKyAgICAgICAgU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyJiBpbnB1dERpc3BhdGNoZXIgPSBp
bnB1dERpc3BhdGNoZXJGb3JQYWdlKHBhZ2UuZ2V0KCkpOworICAgICAgICBpbnB1dERpc3BhdGNo
ZXIuY2FuY2VsKCk7CisgICAgICAgIAorICAgICAgICBpbnB1dERpc3BhdGNoZXIucnVuKGZyYW1l
SUQudmFsdWUoKSwgV1RGTW92ZShrZXlGcmFtZXMpLCBtX2lucHV0U291cmNlcywgW3Byb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oT3B0
aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4gZXJyb3IpIG11dGFibGUgeworICAgICAgICAg
ICAgaWYgKGVycm9yKQorICAgICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShlcnJv
ci52YWx1ZSgpLnRvUHJvdG9jb2xTdHJpbmcoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CisgICAgICAgIH0pOwogICAgIH0pOwog
I2VuZGlmIC8vIEVOQUJMRShXRUJEUklWRVJfQUNUSU9OU19BUEkpCiB9CkBAIC0xOTY2LDE5ICsy
MDUyLDI0IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnRha2VTY3JlZW5zaG90KGNvbnN0
IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wCiAgICAgaWYgKCFwYWdlKQogICAgICAg
ICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAg
ICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFt
ZUlERm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6
IGVtcHR5U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOwotICAgIGlmIChmcmFtZU5vdEZvdW5kKQot
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsK
LQogICAgIGJvb2wgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA9IG9wdGlvbmFsU2Nyb2xsSW50b1Zp
ZXdJZk5lZWRlZCA/ICpvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQgOiBmYWxzZTsKICAg
ICBTdHJpbmcgbm9kZUhhbmRsZSA9IG9wdGlvbmFsTm9kZUhhbmRsZSA/ICpvcHRpb25hbE5vZGVI
YW5kbGUgOiBlbXB0eVN0cmluZygpOwogICAgIGJvb2wgY2xpcFRvVmlld3BvcnQgPSBvcHRpb25h
bENsaXBUb1ZpZXdwb3J0ID8gKm9wdGlvbmFsQ2xpcFRvVmlld3BvcnQgOiBmYWxzZTsKIAotICAg
IHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBtX25leHRTY3JlZW5zaG90Q2FsbGJhY2tJRCsrOwotICAg
IG1fc2NyZWVuc2hvdENhbGxiYWNrcy5zZXQoY2FsbGJhY2tJRCwgV1RGTW92ZShjYWxsYmFjaykp
OworICAgIHdoZW5NYWluRnJhbWVBdmFpbGFibGUoKnBhZ2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UgPSBt
YWtlUmVmKCpwYWdlKSwgZnJhbWVIYW5kbGUgPSBjb252ZXJ0VG9PcHRpb25hbChvcHRpb25hbEZy
YW1lSGFuZGxlKSwgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgbm9kZUhhbmRsZSwgY2xpcFRvVmll
d3BvcnRdKGJvb2wgYXZhaWxhYmxlKSBtdXRhYmxlIHsKIAotICAgIHBhZ2UtPnByb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpUYWtlU2NyZWVuc2hvdChw
YWdlLT5wYWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSwgc2Nyb2xsSW50b1ZpZXdJZk5lZWRl
ZCwgY2xpcFRvVmlld3BvcnQsIGNhbGxiYWNrSUQpLCAwKTsKKyAgICAgICAgaWYgKCFhdmFpbGFi
bGUpCisgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dO
b3RGb3VuZCk7CisKKyAgICAgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShw
YWdlLmdldCgpLCBmcmFtZUhhbmRsZSk7CisgICAgICAgIGlmICghZnJhbWVJRCkKKyAgICAgICAg
ICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOworCisg
ICAgICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBtX25leHRTY3JlZW5zaG90Q2FsbGJhY2tJRCsr
OworICAgICAgICBtX3NjcmVlbnNob3RDYWxsYmFja3Muc2V0KGNhbGxiYWNrSUQsIFdURk1vdmUo
Y2FsbGJhY2spKTsKKworICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2Vi
QXV0b21hdGlvblNlc3Npb25Qcm94eTo6VGFrZVNjcmVlbnNob3QocGFnZS0+cGFnZUlEKCksICpm
cmFtZUlELCBub2RlSGFuZGxlLCBzY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBjbGlwVG9WaWV3cG9y
dCwgY2FsbGJhY2tJRCksIDApOworICAgIH0pOwogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpkaWRUYWtlU2NyZWVuc2hvdCh1aW50NjRfdCBjYWxsYmFja0lELCBjb25zdCBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSYgaW1hZ2VEYXRhSGFuZGxlLCBjb25zdCBTdHJpbmcmIGVycm9yVHlw
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2Vi
QXV0b21hdGlvblNlc3Npb24uaAppbmRleCA5M2JiYzdkMWEzNzU1ZjVkNjVmMDRlNjM5NTIxZjRk
M2M5NzRlYjg5Li43MTM4NjVhZGM1N2FhM2E0NTUzZTI0ZGViZGYxZDYzZmRmYTNlZjYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25T
ZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRv
bWF0aW9uU2Vzc2lvbi5oCkBAIC0xMTksNiArMTE5LDcgQEAgcHVibGljOgogICAgIFdlYlByb2Nl
c3NQb29sKiBwcm9jZXNzUG9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc1Bvb2w7IH0KICAg
ICB2b2lkIHNldFByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sKik7CiAKKyAgICB2b2lkIGRpZENy
ZWF0ZU1haW5GcmFtZShjb25zdCBXZWJGcmFtZVByb3h5Jik7CiAgICAgdm9pZCBuYXZpZ2F0aW9u
T2NjdXJyZWRGb3JGcmFtZShjb25zdCBXZWJGcmFtZVByb3h5Jik7CiAgICAgdm9pZCBkb2N1bWVu
dExvYWRlZEZvckZyYW1lKGNvbnN0IFdlYkZyYW1lUHJveHkmKTsKICAgICB2b2lkIGluc3BlY3Rv
ckZyb250ZW5kTG9hZGVkKGNvbnN0IFdlYlBhZ2VQcm94eSYpOwpAQCAtMjIxLDEwICsyMjIsMTUg
QEAgcHJpdmF0ZToKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJv
d3NpbmdDb250ZXh0PiBidWlsZEJyb3dzaW5nQ29udGV4dEZvclBhZ2UoV2ViUGFnZVByb3h5Jiwg
V2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKTsKICAgICB2b2lkIGdldE5leHRDb250ZXh0
KFJlZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbj4mJiwgVmVjdG9yPFJlZjxXZWJQYWdlUHJveHk+PiYm
LCBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93
c2luZ0NvbnRleHQ+PiwgUmVmPFdlYkF1dG9tYXRpb25TZXNzaW9uOjpHZXRCcm93c2luZ0NvbnRl
eHRzQ2FsbGJhY2s+JiYpOwogCi0gICAgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVy
PiB3ZWJGcmFtZUlERm9ySGFuZGxlKGNvbnN0IFN0cmluZyYsIGJvb2wmIGZyYW1lTm90Rm91bmQp
OworICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4gd2ViRnJhbWVJREZvckhh
bmRsZShjb25zdCBXZWJQYWdlUHJveHkmLCBPcHRpb25hbDxTdHJpbmc+IG9wdGlvbmFsRnJhbWVI
YW5kbGUpOworICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4gd2ViRnJhbWVJ
REZvckhhbmRsZShjb25zdCBXZWJQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJh
bWVIYW5kbGVTdHJpbmcpOwogICAgIFN0cmluZyBoYW5kbGVGb3JXZWJGcmFtZUlEKE9wdGlvbmFs
PFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4pOwogICAgIFN0cmluZyBoYW5kbGVGb3JXZWJGcmFt
ZVByb3h5KGNvbnN0IFdlYkZyYW1lUHJveHkmKTsKIAorICAgIC8vIFJ1bnMgYSBjb21wbGV0aW9u
IGhhbmRsZXIgd2hlbiB0aGUgbWFpbiBmcmFtZSBoYXMgYmVlbiBjcmVhdGVkLiBUaGlzIG1heSBi
ZSBpbW1lZGlhdGUgb3IgYXN5bmMgZGVwZW5kaW5nIG9uIHBhZ2Ugc3RhdGUuCisgICAgLy8gVGhl
IGFyZ3VtZW50IHByb3ZpZGVkIHRvIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgaXMgZmFsc2UgaWYg
dGhlIHNlc3Npb24gaXMgYmVpbmcgdG9ybiBkb3duLCBhbmQgdHJ1ZSBvdGhlcndpc2UuCisgICAg
dm9pZCB3aGVuTWFpbkZyYW1lQXZhaWxhYmxlKGNvbnN0IFdlYlBhZ2VQcm94eSYsIFdURjo6Q29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisKICAgICB2b2lkIHdhaXRGb3JOYXZpZ2F0
aW9uVG9Db21wbGV0ZU9uUGFnZShXZWJQYWdlUHJveHkmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5LCBTZWNvbmRzLCBSZWY8SW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlPiYmKTsKICAgICB2b2lkIHdhaXRGb3JOYXZpZ2F0
aW9uVG9Db21wbGV0ZU9uRnJhbWUoV2ViRnJhbWVQcm94eSYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3ksIFNlY29uZHMsIFJlZjxJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U+JiYpOwogICAgIHZvaWQgcmVzcG9uZFRvUGVu
ZGluZ1BhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2tzV2l0aFRpbWVvdXQoSGFzaE1hcDxXZWJDb3JlOjpQ
YWdlSWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OkNhbGxi
YWNrQmFzZT4+Jik7CkBAIC0yOTksNiArMzA1LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoV0VC
RFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUykKICAgICBIYXNoTWFwPFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyLCBGdW5jdGlvbjx2b2lkKE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4+
IG1fcGVuZGluZ01vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrc1BlclBhZ2U7CiAjZW5kaWYKKyAg
ICBIYXNoTWFwPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+PiBtX2NhbGxiYWNrc1dhaXRpbmdGb3JNYWluRnJhbWVQZXJQYWdlOwogCiAg
ICAgdWludDY0X3QgbV9uZXh0RXZhbHVhdGVKYXZhU2NyaXB0Q2FsbGJhY2tJRCB7IDEgfTsKICAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8SW5zcGVjdG9yOjpBdXRvbWF0aW9uQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjpFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbkNhbGxiYWNrPj4gbV9l
dmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbkNhbGxiYWNrczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGVlN2U1ODgzZTg4ZTBmYWMwZWM1NDU1ZmU1N2I0YmU2
MDE4OTY1OGIuLjFjNGI4Y2Q4MGU4YTc5NTNhOGExZmI3ZjViNTk0ZjYxYzY1YmRhYzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMzg5NCw3ICszODk0LDEy
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDcmVhdGVNYWluRnJhbWUoRnJhbWVJZGVudGlmaWVy
IGZyYW1lSUQpCiAKICAgICAvLyBBZGQgdGhlIGZyYW1lIHRvIHRoZSBwcm9jZXNzIHdpZGUgbWFw
LgogICAgIG1fcHJvY2Vzcy0+ZnJhbWVDcmVhdGVkKGZyYW1lSUQsICptX21haW5GcmFtZSk7Ci19
CisKKyAgICAvLyBGaW5pc2ggYW55IGF1dG9tYXRpb24gY29tbWFuZHMgdGhhdCBhcmUgd2FpdGlu
ZyBmb3IgdGhlIG1haW4gZnJhbWUgdG8gYmUgY3JlYXRlZC4KKyAgICBpZiAobV9jb250cm9sbGVk
QnlBdXRvbWF0aW9uKSB7CisgICAgICAgIGlmIChhdXRvKiBhdXRvbWF0aW9uU2Vzc2lvbiA9IG1f
cHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5hdXRvbWF0aW9uU2Vzc2lvbigpKQorICAgICAgICAgICAg
YXV0b21hdGlvblNlc3Npb24tPmRpZENyZWF0ZU1haW5GcmFtZSgqbV9tYWluRnJhbWUpOworICAg
IH19CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDcmVhdGVTdWJmcmFtZShGcmFtZUlkZW50aWZp
ZXIgZnJhbWVJRCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAKaW5kZXggYmJl
MjU2NTA4MzllZTAzNTNkN2YwM2M2Yzc4NGYzNWMzYWJiZjA5Yy4uYTZkY2ZkYWMxNmQwYmIwZWVj
ZGY0YTBhOWM4Yzc2MzkzMDBiOTAyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5j
cHAKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OmRp
ZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWUoV2ViRnJhbWUmIGZyYW1lKQogICAgICAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6RGlkRXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24o
Y2FsbGJhY2tJRCwgZXJyb3JNZXNzYWdlLCBlcnJvclR5cGUpLCAwKTsKIH0KIAotdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvblByb3h5OjpldmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmll
cj4gb3B0aW9uYWxGcmFtZUlELCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uLCBWZWN0b3I8U3RyaW5n
PiBhcmd1bWVudHMsIGJvb2wgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgaW50IGNh
bGxiYWNrVGltZW91dCwgdWludDY0X3QgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb25Qcm94eTo6ZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24oV2ViQ29yZTo6UGFnZUlkZW50
aWZpZXIgcGFnZUlELCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgY29uc3QgU3Ry
aW5nJiBmdW5jdGlvbiwgVmVjdG9yPFN0cmluZz4gYXJndW1lbnRzLCBib29sIGV4cGVjdHNJbXBs
aWNpdENhbGxiYWNrQXJndW1lbnQsIGludCBjYWxsYmFja1RpbWVvdXQsIHVpbnQ2NF90IGNhbGxi
YWNrSUQpCiB7CiAgICAgV2ViUGFnZSogcGFnZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndl
YlBhZ2UocGFnZUlEKTsKICAgICBpZiAoIXBhZ2UpIHsKQEAgLTI0MCw3ICsyNDAsNyBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OmV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKFdl
YkNvcmU6OlBhZ2VJZGVudGlmaQogICAgICAgICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkVycm9yTWVzc2FnZTo6V2luZG93Tm90Rm91bmQpKSwgMCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0gb3B0aW9uYWxGcmFtZUlEID8g
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUoKm9wdGlvbmFsRnJhbWVJRCkgOiBwYWdl
LT5tYWluV2ViRnJhbWUoKTsKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS53ZWJGcmFtZShmcmFtZUlEKTsKICAgICBpZiAoIWZyYW1lKSB7CiAgICAgICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpEaWRFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlv
bihjYWxsYmFja0lELCB7IH0sCiAgICAgICAgICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uSGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6RXJyb3JNZXNzYWdlOjpGcmFtZU5vdEZvdW5kKSksIDApOwpAQCAtMjUwLDcg
KzI1MCw2IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6ZXZhbHVhdGVKYXZhU2Ny
aXB0RnVuY3Rpb24oV2ViQ29yZTo6UGFnZUlkZW50aWZpCiAgICAgSlNPYmplY3RSZWYgc2NyaXB0
T2JqZWN0ID0gc2NyaXB0T2JqZWN0Rm9yRnJhbWUoKmZyYW1lKTsKICAgICBBU1NFUlQoc2NyaXB0
T2JqZWN0KTsKIAotICAgIGF1dG8gZnJhbWVJRCA9IGZyYW1lLT5mcmFtZUlEKCk7CiAgICAgSlNW
YWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0ID0gZnJhbWUtPmpzQ29udGV4dCgpOwogCkBAIC0zMTMsNyArMzEyLDcgQEAgdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvblByb3h5OjpkaWRFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihXZWJD
b3JlOjpGcmFtZUlkZW4KICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6RGlkRXZh
bHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24oY2FsbGJhY2tJRCwgcmVzdWx0LCBlcnJvclR5cGUpLCAw
KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpyZXNvbHZlQ2hpbGRGcmFt
ZVdpdGhPcmRpbmFsKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgT3B0aW9uYWw8V2Vi
Q29yZTo6RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCB1aW50MzJfdCBvcmRpbmFsLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFN0cmluZz4sIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1l
SWRlbnRpZmllcj4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvblByb3h5OjpyZXNvbHZlQ2hpbGRGcmFtZVdpdGhPcmRpbmFsKFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyIHBhZ2VJRCwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIHVpbnQzMl90
IG9yZGluYWwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8U3RyaW5nPiwgT3B0aW9u
YWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgV2ViUGFnZSogcGFnZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlBhZ2UocGFnZUlE
KTsKICAgICBpZiAoIXBhZ2UpIHsKQEAgLTMyNCw3ICszMjMsNyBAQCB2b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uUHJveHk6OnJlc29sdmVDaGlsZEZyYW1lV2l0aE9yZGluYWwoV2ViQ29yZTo6UGFn
ZUlkZW50aQogCiAgICAgU3RyaW5nIGZyYW1lTm90Rm91bmRFcnJvclR5cGUgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RXJyb3JNZXNzYWdlOjpGcmFtZU5vdEZvdW5kKTsK
IAotICAgIFdlYkZyYW1lKiBmcmFtZSA9IGZyYW1lSUQgPyBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS53ZWJGcmFtZSgqZnJhbWVJRCkgOiBwYWdlLT5tYWluV2ViRnJhbWUoKTsKKyAgICBXZWJGcmFt
ZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlEKTsKICAg
ICBpZiAoIWZyYW1lKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZyYW1lTm90Rm91bmRF
cnJvclR5cGUsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgIHJldHVybjsKQEAgLTM1MSw3ICszNTAs
NyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OnJlc29sdmVDaGlsZEZyYW1lV2l0
aE9yZGluYWwoV2ViQ29yZTo6UGFnZUlkZW50aQogICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6
bnVsbG9wdCwgY2hpbGRGcmFtZS0+ZnJhbWVJRCgpKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvblByb3h5OjpyZXNvbHZlQ2hpbGRGcmFtZVdpdGhOb2RlSGFuZGxlKFdlYkNvcmU6OlBh
Z2VJZGVudGlmaWVyIHBhZ2VJRCwgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiBm
cmFtZUlELCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
T3B0aW9uYWw8U3RyaW5nPiwgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OnJlc29s
dmVDaGlsZEZyYW1lV2l0aE5vZGVIYW5kbGUoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlE
LCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBub2RlSGFu
ZGxlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFN0cmluZz4sIE9wdGlvbmFsPFdl
YkNvcmU6OkZyYW1lSWRlbnRpZmllcj4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIFdl
YlBhZ2UqIHBhZ2UgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlKHBhZ2VJRCk7CiAg
ICAgaWYgKCFwYWdlKSB7CkBAIC0zNjIsNyArMzYxLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvblByb3h5OjpyZXNvbHZlQ2hpbGRGcmFtZVdpdGhOb2RlSGFuZGxlKFdlYkNvcmU6OlBhZ2VJ
ZGUKIAogICAgIFN0cmluZyBmcmFtZU5vdEZvdW5kRXJyb3JUeXBlID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkVycm9yTWVzc2FnZTo6RnJhbWVOb3RGb3VuZCk7CiAKLSAg
ICBXZWJGcmFtZSogZnJhbWUgPSBmcmFtZUlEID8gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2Vi
RnJhbWUoKmZyYW1lSUQpIDogcGFnZS0+bWFpbldlYkZyYW1lKCk7CisgICAgV2ViRnJhbWUqIGZy
YW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJRCk7CiAgICAgaWYg
KCFmcmFtZSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmcmFtZU5vdEZvdW5kRXJyb3JU
eXBlLCBXVEY6Om51bGxvcHQpOwogICAgICAgICByZXR1cm47CkBAIC0zODksNyArMzg4LDcgQEAg
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpyZXNvbHZlQ2hpbGRGcmFtZVdpdGhOb2Rl
SGFuZGxlKFdlYkNvcmU6OlBhZ2VJZGUKICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om51bGxv
cHQsIGZyYW1lRnJvbUVsZW1lbnQtPmZyYW1lSUQoKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb25Qcm94eTo6cmVzb2x2ZUNoaWxkRnJhbWVXaXRoTmFtZShXZWJDb3JlOjpQYWdlSWRl
bnRpZmllciBwYWdlSUQsIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4gZnJhbWVJ
RCwgY29uc3QgU3RyaW5nJiBuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFN0
cmluZz4sIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4pPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpyZXNvbHZlQ2hpbGRGcmFt
ZVdpdGhOYW1lKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgV2ViQ29yZTo6RnJhbWVJ
ZGVudGlmaWVyIGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChPcHRpb25hbDxTdHJpbmc+LCBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBXZWJQYWdlKiBwYWdlID0gV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkud2ViUGFnZShwYWdlSUQpOwogICAgIGlmICghcGFnZSkgewpAQCAtNDAw
LDcgKzM5OSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6cmVzb2x2ZUNoaWxk
RnJhbWVXaXRoTmFtZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllCiAKICAgICBTdHJpbmcgZnJhbWVO
b3RGb3VuZEVycm9yVHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJz
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpF
cnJvck1lc3NhZ2U6OkZyYW1lTm90Rm91bmQpOwogCi0gICAgV2ViRnJhbWUqIGZyYW1lID0gZnJh
bWVJRCA/IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkZyYW1lKCpmcmFtZUlEKSA6IHBhZ2Ut
Pm1haW5XZWJGcmFtZSgpOworICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLndlYkZyYW1lKGZyYW1lSUQpOwogICAgIGlmICghZnJhbWUpIHsKICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoZnJhbWVOb3RGb3VuZEVycm9yVHlwZSwgV1RGOjpudWxsb3B0KTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtNDI3LDcgKzQyNiw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b25Qcm94eTo6cmVzb2x2ZUNoaWxkRnJhbWVXaXRoTmFtZShXZWJDb3JlOjpQYWdlSWRlbnRpZmll
CiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBjaGlsZEZyYW1lLT5mcmFtZUlE
KCkpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OnJlc29sdmVQYXJlbnRG
cmFtZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIE9wdGlvbmFsPFdlYkNvcmU6OkZy
YW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxT
dHJpbmc+LCBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+KT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6cmVzb2x2ZVBhcmVudEZy
YW1lKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgV2ViQ29yZTo6RnJhbWVJZGVudGlm
aWVyIGZyYW1lSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8U3RyaW5nPiwgT3B0
aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgV2ViUGFnZSogcGFnZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlBhZ2UocGFn
ZUlEKTsKICAgICBpZiAoIXBhZ2UpIHsKQEAgLTQzOCw3ICs0MzcsNyBAQCB2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uUHJveHk6OnJlc29sdmVQYXJlbnRGcmFtZShXZWJDb3JlOjpQYWdlSWRlbnRp
ZmllciBwYWdlSQogCiAgICAgU3RyaW5nIGZyYW1lTm90Rm91bmRFcnJvclR5cGUgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RXJyb3JNZXNzYWdlOjpGcmFtZU5vdEZvdW5k
KTsKIAotICAgIFdlYkZyYW1lKiBmcmFtZSA9IGZyYW1lSUQgPyBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS53ZWJGcmFtZSgqZnJhbWVJRCkgOiBwYWdlLT5tYWluV2ViRnJhbWUoKTsKKyAgICBXZWJG
cmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlEKTsK
ICAgICBpZiAoIWZyYW1lKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZyYW1lTm90Rm91
bmRFcnJvclR5cGUsIFdURjo6bnVsbG9wdCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ1MywxMyAr
NDUyLDEzIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6cmVzb2x2ZVBhcmVudEZy
YW1lKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJCiAgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGOjpudWxsb3B0LCBwYXJlbnRGcmFtZS0+ZnJhbWVJRCgpKTsKIH0KIAotdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvblByb3h5Ojpmb2N1c0ZyYW1lKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBh
Z2VJRCwgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlEKQordm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5Ojpmb2N1c0ZyYW1lKFdlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyIHBhZ2VJRCwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQpCiB7CiAgICAgV2Vi
UGFnZSogcGFnZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlBhZ2UocGFnZUlEKTsKICAg
ICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdlYkZyYW1lKiBmcmFtZSA9IGZy
YW1lSUQgPyBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZSgqZnJhbWVJRCkgOiBwYWdl
LT5tYWluV2ViRnJhbWUoKTsKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS53ZWJGcmFtZShmcmFtZUlEKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1
cm47CiAKQEAgLTUyOCw3ICs1MjcsNyBAQCBzdGF0aWMgV2ViQ29yZTo6RmxvYXRQb2ludCBjb252
ZXJ0UG9pbnRGcm9tRnJhbWVDbGllbnRUb1Jvb3RWaWV3KFdlYkNvcmU6OkZyYW1lVgogICAgIHJl
dHVybiBjbGllbnRQb2ludDsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5Ojpj
b21wdXRlRWxlbWVudExheW91dChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIE9wdGlv
bmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgU3RyaW5nIG5vZGVIYW5kbGUs
IGJvb2wgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRl
U3lzdGVtLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFN0cmluZz4sIFdlYkNvcmU6
OkludFJlY3QsIE9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50PiwgYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OmNvbXB1dGVFbGVtZW50
TGF5b3V0KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgV2ViQ29yZTo6RnJhbWVJZGVu
dGlmaWVyIGZyYW1lSUQsIFN0cmluZyBub2RlSGFuZGxlLCBib29sIHNjcm9sbEludG9WaWV3SWZO
ZWVkZWQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChPcHRpb25hbDxTdHJpbmc+LCBXZWJDb3JlOjpJbnRSZWN0LCBPcHRpb25hbDxXZWJD
b3JlOjpJbnRQb2ludD4sIGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIFdlYlBh
Z2UqIHBhZ2UgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlKHBhZ2VJRCk7CiAgICAg
aWYgKCFwYWdlKSB7CkBAIC01MzcsNyArNTM2LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
blByb3h5Ojpjb21wdXRlRWxlbWVudExheW91dChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWcK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdlYkZyYW1lKiBmcmFtZSA9IGZyYW1lSUQg
PyBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZSgqZnJhbWVJRCkgOiBwYWdlLT5tYWlu
V2ViRnJhbWUoKTsKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS53ZWJGcmFtZShmcmFtZUlEKTsKICAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+Y29yZUZyYW1l
KCkgfHwgIWZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpKSB7CiAgICAgICAgIFN0cmluZyBmcmFt
ZU5vdEZvdW5kRXJyb3JUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkVycm9yTWVzc2FnZTo6RnJhbWVOb3RGb3VuZCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KGZyYW1lTm90Rm91bmRFcnJvclR5cGUsIHsgfSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CkBAIC02
MzYsNyArNjM1LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5Ojpjb21wdXRlRWxl
bWVudExheW91dChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWcKICAgICBjb21wbGV0aW9uSGFu
ZGxlcihXVEY6Om51bGxvcHQsIHJlc3VsdEVsZW1lbnRCb3VuZHMsIHJlc3VsdEluVmlld0NlbnRl
clBvaW50LCBpc09ic2N1cmVkKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5
OjpzZWxlY3RPcHRpb25FbGVtZW50KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgT3B0
aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBTdHJpbmcgbm9kZUhhbmRs
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxTdHJpbmc+KT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6c2VsZWN0T3B0aW9uRWxl
bWVudChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIFdlYkNvcmU6OkZyYW1lSWRlbnRp
ZmllciBmcmFtZUlELCBTdHJpbmcgbm9kZUhhbmRsZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChP
cHRpb25hbDxTdHJpbmc+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBXZWJQYWdlKiBw
YWdlID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViUGFnZShwYWdlSUQpOwogICAgIGlmICgh
cGFnZSkgewpAQCAtNjQ1LDcgKzY0NCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb25Qcm94
eTo6c2VsZWN0T3B0aW9uRWxlbWVudChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBXZWJGcmFtZSogZnJhbWUgPSBmcmFtZUlEID8gV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUoKmZyYW1lSUQpIDogcGFnZS0+bWFpbldlYkZy
YW1lKCk7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2Vi
RnJhbWUoZnJhbWVJRCk7CiAgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmNvcmVGcmFtZSgpIHx8
ICFmcmFtZS0+Y29yZUZyYW1lKCktPnZpZXcoKSkgewogICAgICAgICBTdHJpbmcgZnJhbWVOb3RG
b3VuZEVycm9yVHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpFcnJv
ck1lc3NhZ2U6OkZyYW1lTm90Rm91bmQpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmcmFt
ZU5vdEZvdW5kRXJyb3JUeXBlKTsKQEAgLTcwNCw3ICs3MDMsNyBAQCBzdGF0aWMgV2ViQ29yZTo6
SW50UmVjdCBzbmFwc2hvdFJlY3RGb3JTY3JlZW5zaG90KFdlYlBhZ2UmIHBhZ2UsIFdlYkNvcmU6
OkVsZW1lbgogICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb25Q
cm94eTo6dGFrZVNjcmVlbnNob3QoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlELCBPcHRp
b25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIFN0cmluZyBub2RlSGFuZGxl
LCBib29sIHNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGJvb2wgY2xpcFRvVmlld3BvcnQsIHVpbnQ2
NF90IGNhbGxiYWNrSUQpCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OnRha2VTY3Jl
ZW5zaG90KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgV2ViQ29yZTo6RnJhbWVJZGVu
dGlmaWVyIGZyYW1lSUQsIFN0cmluZyBub2RlSGFuZGxlLCBib29sIHNjcm9sbEludG9WaWV3SWZO
ZWVkZWQsIGJvb2wgY2xpcFRvVmlld3BvcnQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7CiAgICAg
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwogCkBAIC03MTUsNyArNzE0LDcgQEAgdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5Ojp0YWtlU2NyZWVuc2hvdChXZWJDb3JlOjpQYWdl
SWRlbnRpZmllciBwYWdlSUQsIE8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdlYkZy
YW1lKiBmcmFtZSA9IGZyYW1lSUQgPyBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZSgq
ZnJhbWVJRCkgOiBwYWdlLT5tYWluV2ViRnJhbWUoKTsKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlEKTsKICAgICBpZiAoIWZyYW1l
IHx8ICFmcmFtZS0+Y29yZUZyYW1lKCkpIHsKICAgICAgICAgU3RyaW5nIGZyYW1lTm90Rm91bmRF
cnJvclR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6Z2V0RW51
bUNvbnN0YW50VmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RXJyb3JNZXNz
YWdlOjpGcmFtZU5vdEZvdW5kKTsKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Np
b246OkRpZFRha2VTY3JlZW5zaG90KGNhbGxiYWNrSUQsIGhhbmRsZSwgZnJhbWVOb3RGb3VuZEVy
cm9yVHlwZSksIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5oCmluZGV4IGI2YmE3OGRm
NDg1NzBhYjRjY2U0MjE2ZjQyNmFhMDEzNjk4YWRlYmIuLjc0YjA4ODI5OTY2YTBjZDdiMjdhOGEx
YWZmOWMyOTNmNzEyMTFjYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9B
dXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmgKQEAgLTYy
LDE1ICs2MiwxNSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAKICAgICAvLyBDYWxsZWQgYnkg
V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eSBtZXNzYWdlcwotICAgIHZvaWQgZXZhbHVhdGVKYXZh
U2NyaXB0RnVuY3Rpb24oV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIE9wdGlvbmFsPFdlYkNvcmU6
OkZyYW1lSWRlbnRpZmllcj4sIGNvbnN0IFN0cmluZyYgZnVuY3Rpb24sIFZlY3RvcjxTdHJpbmc+
IGFyZ3VtZW50cywgYm9vbCBleHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50LCBpbnQgY2Fs
bGJhY2tUaW1lb3V0LCB1aW50NjRfdCBjYWxsYmFja0lEKTsKLSAgICB2b2lkIHJlc29sdmVDaGls
ZEZyYW1lV2l0aE9yZGluYWwoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIE9wdGlvbmFsPFdlYkNv
cmU6OkZyYW1lSWRlbnRpZmllcj4sIHVpbnQzMl90IG9yZGluYWwsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoT3B0aW9uYWw8U3RyaW5nPiwgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVy
Pik+JiYpOwotICAgIHZvaWQgcmVzb2x2ZUNoaWxkRnJhbWVXaXRoTm9kZUhhbmRsZShXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllciwgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiwgY29u
c3QgU3RyaW5nJiBub2RlSGFuZGxlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFN0
cmluZz4sIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4pPiYmKTsKLSAgICB2b2lk
IHJlc29sdmVDaGlsZEZyYW1lV2l0aE5hbWUoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIE9wdGlv
bmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIGNvbnN0IFN0cmluZyYgbmFtZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxTdHJpbmc+LCBPcHRpb25hbDxXZWJDb3JlOjpGcmFt
ZUlkZW50aWZpZXI+KT4mJik7Ci0gICAgdm9pZCByZXNvbHZlUGFyZW50RnJhbWUoV2ViQ29yZTo6
UGFnZUlkZW50aWZpZXIsIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8U3RyaW5nPiwgT3B0aW9uYWw8V2ViQ29yZTo6RnJh
bWVJZGVudGlmaWVyPik+JiYpOwotICAgIHZvaWQgZm9jdXNGcmFtZShXZWJDb3JlOjpQYWdlSWRl
bnRpZmllciwgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPik7Ci0gICAgdm9pZCBj
b21wdXRlRWxlbWVudExheW91dChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgT3B0aW9uYWw8V2Vi
Q29yZTo6RnJhbWVJZGVudGlmaWVyPiwgU3RyaW5nIG5vZGVIYW5kbGUsIGJvb2wgc2Nyb2xsSW50
b1ZpZXdJZk5lZWRlZCwgQ29vcmRpbmF0ZVN5c3RlbSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChP
cHRpb25hbDxTdHJpbmc+LCBXZWJDb3JlOjpJbnRSZWN0LCBPcHRpb25hbDxXZWJDb3JlOjpJbnRQ
b2ludD4sIGJvb2wpPiYmKTsKLSAgICB2b2lkIHNlbGVjdE9wdGlvbkVsZW1lbnQoV2ViQ29yZTo6
UGFnZUlkZW50aWZpZXIsIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIFN0cmlu
ZyBub2RlSGFuZGxlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFN0cmluZz4pPiYm
KTsKLSAgICB2b2lkIHRha2VTY3JlZW5zaG90KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBPcHRp
b25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+LCBTdHJpbmcgbm9kZUhhbmRsZSwgYm9vbCBz
Y3JvbGxJbnRvVmlld0lmTmVlZGVkLCBib29sIGNsaXBUb1ZpZXdwb3J0LCB1aW50NjRfdCBjYWxs
YmFja0lEKTsKKyAgICB2b2lkIGV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKFdlYkNvcmU6OlBh
Z2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZnVu
Y3Rpb24sIFZlY3RvcjxTdHJpbmc+IGFyZ3VtZW50cywgYm9vbCBleHBlY3RzSW1wbGljaXRDYWxs
YmFja0FyZ3VtZW50LCBpbnQgY2FsbGJhY2tUaW1lb3V0LCB1aW50NjRfdCBjYWxsYmFja0lEKTsK
KyAgICB2b2lkIHJlc29sdmVDaGlsZEZyYW1lV2l0aE9yZGluYWwoV2ViQ29yZTo6UGFnZUlkZW50
aWZpZXIsIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwgdWludDMyX3Qgb3JkaW5hbCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxTdHJpbmc+LCBPcHRpb25hbDxXZWJDb3JlOjpGcmFt
ZUlkZW50aWZpZXI+KT4mJik7CisgICAgdm9pZCByZXNvbHZlQ2hpbGRGcmFtZVdpdGhOb2RlSGFu
ZGxlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxT
dHJpbmc+LCBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+KT4mJik7CisgICAgdm9p
ZCByZXNvbHZlQ2hpbGRGcmFtZVdpdGhOYW1lKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBXZWJD
b3JlOjpGcmFtZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChPcHRpb25hbDxTdHJpbmc+LCBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZp
ZXI+KT4mJik7CisgICAgdm9pZCByZXNvbHZlUGFyZW50RnJhbWUoV2ViQ29yZTo6UGFnZUlkZW50
aWZpZXIsIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChP
cHRpb25hbDxTdHJpbmc+LCBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+KT4mJik7
CisgICAgdm9pZCBmb2N1c0ZyYW1lKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpG
cmFtZUlkZW50aWZpZXIpOworICAgIHZvaWQgY29tcHV0ZUVsZW1lbnRMYXlvdXQoV2ViQ29yZTo6
UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwgU3RyaW5nIG5vZGVIYW5k
bGUsIGJvb2wgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgQ29vcmRpbmF0ZVN5c3RlbSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxTdHJpbmc+LCBXZWJDb3JlOjpJbnRSZWN0LCBPcHRp
b25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIGJvb2wpPiYmKTsKKyAgICB2b2lkIHNlbGVjdE9wdGlv
bkVsZW1lbnQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmll
ciwgU3RyaW5nIG5vZGVIYW5kbGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8U3Ry
aW5nPik+JiYpOworICAgIHZvaWQgdGFrZVNjcmVlbnNob3QoV2ViQ29yZTo6UGFnZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwgU3RyaW5nIG5vZGVIYW5kbGUsIGJvb2wgc2Ny
b2xsSW50b1ZpZXdJZk5lZWRlZCwgYm9vbCBjbGlwVG9WaWV3cG9ydCwgdWludDY0X3QgY2FsbGJh
Y2tJRCk7CiAgICAgdm9pZCBnZXRDb29raWVzRm9yRnJhbWUoV2ViQ29yZTo6UGFnZUlkZW50aWZp
ZXIsIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoT3B0aW9uYWw8U3RyaW5nPiwgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4pPiYmKTsKICAg
ICB2b2lkIGRlbGV0ZUNvb2tpZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgT3B0aW9uYWw8V2Vi
Q29yZTo6RnJhbWVJZGVudGlmaWVyPiwgU3RyaW5nIGNvb2tpZU5hbWUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoT3B0aW9uYWw8U3RyaW5nPik+JiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5Lm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb25Qcm94eS5tZXNzYWdlcy5pbgppbmRleCBmYzZkOWZkMTU1OWMxY2ZhNjUyMmYxNDg0
Njk3OTgzOThmNmFhMTk5Li4zYTFkOTEyYTgwZjljNDM4ODVmZDQxODVjYTY3MmIwMzc4YTdjZWQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRv
bWF0aW9uU2Vzc2lvblByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkubWVzc2FnZXMuaW4KQEAg
LTIxLDIwICsyMSwyMCBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBtZXNzYWdlcyAtPiBXZWJBdXRvbWF0
aW9uU2Vzc2lvblByb3h5IHsKLSAgICBFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmll
cj4gZnJhbWVJRCwgU3RyaW5nIGZ1bmN0aW9uLCBWZWN0b3I8U3RyaW5nPiBhcmd1bWVudHMsIGJv
b2wgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgaW50IGNhbGxiYWNrVGltZW91dCwg
dWludDY0X3QgY2FsbGJhY2tJRCkKKyAgICBFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihXZWJD
b3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFt
ZUlELCBTdHJpbmcgZnVuY3Rpb24sIFZlY3RvcjxTdHJpbmc+IGFyZ3VtZW50cywgYm9vbCBleHBl
Y3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50LCBpbnQgY2FsbGJhY2tUaW1lb3V0LCB1aW50NjRf
dCBjYWxsYmFja0lEKQogCi0gICAgUmVzb2x2ZUNoaWxkRnJhbWVXaXRoT3JkaW5hbChXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmll
cj4gZnJhbWVJRCwgdWludDMyX3Qgb3JkaW5hbCkgLT4gKE9wdGlvbmFsPFN0cmluZz4gZXJyb3JU
eXBlLCBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQpIEFzeW5jCi0g
ICAgUmVzb2x2ZUNoaWxkRnJhbWVXaXRoTm9kZUhhbmRsZShXZWJDb3JlOjpQYWdlSWRlbnRpZmll
ciBwYWdlSUQsIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgU3Ry
aW5nIG5vZGVIYW5kbGUpIC0+IChPcHRpb25hbDxTdHJpbmc+IGVycm9yVHlwZSwgT3B0aW9uYWw8
V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlEKSBBc3luYwotICAgIFJlc29sdmVDaGls
ZEZyYW1lV2l0aE5hbWUoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlELCBPcHRpb25hbDxX
ZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIFN0cmluZyBuYW1lKSAtPiAoT3B0aW9u
YWw8U3RyaW5nPiBlcnJvclR5cGUsIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4g
ZnJhbWVJRCkgQXN5bmMKLSAgICBSZXNvbHZlUGFyZW50RnJhbWUoV2ViQ29yZTo6UGFnZUlkZW50
aWZpZXIgcGFnZUlELCBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQp
IC0+IChPcHRpb25hbDxTdHJpbmc+IGVycm9yVHlwZSwgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJ
ZGVudGlmaWVyPiBmcmFtZUlEKSBBc3luYworICAgIFJlc29sdmVDaGlsZEZyYW1lV2l0aE9yZGlu
YWwoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlELCBXZWJDb3JlOjpGcmFtZUlkZW50aWZp
ZXIgZnJhbWVJRCwgdWludDMyX3Qgb3JkaW5hbCkgLT4gKE9wdGlvbmFsPFN0cmluZz4gZXJyb3JU
eXBlLCBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQpIEFzeW5jCisg
ICAgUmVzb2x2ZUNoaWxkRnJhbWVXaXRoTm9kZUhhbmRsZShXZWJDb3JlOjpQYWdlSWRlbnRpZmll
ciBwYWdlSUQsIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBTdHJpbmcgbm9kZUhh
bmRsZSkgLT4gKE9wdGlvbmFsPFN0cmluZz4gZXJyb3JUeXBlLCBPcHRpb25hbDxXZWJDb3JlOjpG
cmFtZUlkZW50aWZpZXI+IGZyYW1lSUQpIEFzeW5jCisgICAgUmVzb2x2ZUNoaWxkRnJhbWVXaXRo
TmFtZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIFdlYkNvcmU6OkZyYW1lSWRlbnRp
ZmllciBmcmFtZUlELCBTdHJpbmcgbmFtZSkgLT4gKE9wdGlvbmFsPFN0cmluZz4gZXJyb3JUeXBl
LCBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQpIEFzeW5jCisgICAg
UmVzb2x2ZVBhcmVudEZyYW1lKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgV2ViQ29y
ZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQpIC0+IChPcHRpb25hbDxTdHJpbmc+IGVycm9yVHlw
ZSwgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlEKSBBc3luYwogCi0g
ICAgRm9jdXNGcmFtZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIE9wdGlvbmFsPFdl
YkNvcmU6OkZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCkKKyAgICBGb2N1c0ZyYW1lKFdlYkNvcmU6
OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQp
CiAKLSAgICBDb21wdXRlRWxlbWVudExheW91dChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdl
SUQsIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgU3RyaW5nIG5v
ZGVIYW5kbGUsIGJvb2wgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgZW51bTp1aW50OF90IFdlYktp
dDo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSAtPiAoT3B0aW9uYWw8U3RyaW5n
PiBlcnJvclR5cGUsIFdlYkNvcmU6OkludFJlY3QgcmVjdCwgT3B0aW9uYWw8V2ViQ29yZTo6SW50
UG9pbnQ+IGluVmlld0NlbnRlclBvaW50LCBib29sIGlzT2JzY3VyZWQpIEFzeW5jCisgICAgQ29t
cHV0ZUVsZW1lbnRMYXlvdXQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlELCBXZWJDb3Jl
OjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgU3RyaW5nIG5vZGVIYW5kbGUsIGJvb2wgc2Nyb2xs
SW50b1ZpZXdJZk5lZWRlZCwgZW51bTp1aW50OF90IFdlYktpdDo6Q29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtKSAtPiAoT3B0aW9uYWw8U3RyaW5nPiBlcnJvclR5cGUsIFdlYkNvcmU6
OkludFJlY3QgcmVjdCwgT3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+IGluVmlld0NlbnRlclBv
aW50LCBib29sIGlzT2JzY3VyZWQpIEFzeW5jCiAKLSAgICBTZWxlY3RPcHRpb25FbGVtZW50KFdl
YkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVu
dGlmaWVyPiBmcmFtZUlELCBTdHJpbmcgbm9kZUhhbmRsZSkgLT4gKE9wdGlvbmFsPFN0cmluZz4g
ZXJyb3JUeXBlKSBBc3luYworICAgIFNlbGVjdE9wdGlvbkVsZW1lbnQoV2ViQ29yZTo6UGFnZUlk
ZW50aWZpZXIgcGFnZUlELCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgU3RyaW5n
IG5vZGVIYW5kbGUpIC0+IChPcHRpb25hbDxTdHJpbmc+IGVycm9yVHlwZSkgQXN5bmMKIAotICAg
IFRha2VTY3JlZW5zaG90KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgT3B0aW9uYWw8
V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBTdHJpbmcgbm9kZUhhbmRsZSwgYm9v
bCBzY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBib29sIGNsaXBUb1ZpZXdwb3J0LCB1aW50NjRfdCBj
YWxsYmFja0lEKQorICAgIFRha2VTY3JlZW5zaG90KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBh
Z2VJRCwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFN0cmluZyBub2RlSGFuZGxl
LCBib29sIHNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGJvb2wgY2xpcFRvVmlld3BvcnQsIHVpbnQ2
NF90IGNhbGxiYWNrSUQpCiAKICAgICBHZXRDb29raWVzRm9yRnJhbWUoV2ViQ29yZTo6UGFnZUlk
ZW50aWZpZXIgcGFnZUlELCBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+IGZyYW1l
SUQpIC0+IChPcHRpb25hbDxTdHJpbmc+IGVycm9yVHlwZSwgVmVjdG9yPFdlYkNvcmU6OkNvb2tp
ZT4gY29va2llcykgQXN5bmMKICAgICBEZWxldGVDb29raWUoV2ViQ29yZTo6UGFnZUlkZW50aWZp
ZXIgcGFnZUlELCBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIFN0
cmluZyBjb29raWVOYW1lKSAtPiAoT3B0aW9uYWw8U3RyaW5nPiBlcnJvclR5cGUpIEFzeW5jCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377138</attachid>
            <date>2019-08-23 11:34:59 -0700</date>
            <delta_ts>2019-08-23 11:39:33 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>bug-200793-20190823113458.patch</filename>
            <type>text/plain</type>
            <size>8503</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5MDQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGVkZTM1MWQyZjc3ODdhMGQ5
YzEwZWJjYmQ2NmMzZDUwYWY3MDU3NjAuLjNlODA1OTMyY2UxYTU0ZmM4NzRjNjg1NzAyY2EwY2Zh
M2MwNDIwZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTktMDgtMjMgIEJyaWFuIEJ1
cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTihyMjQ4NzEzKTogV2Vi
RHJpdmVyIGNvbW1hbmRzIHdoaWNoIHRhcmdldCB0aGUgaW1wbGljaXQgbWFpbiBmcmFtZSBub3cg
aGl0IGFuIEFTU0VSVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjAwNzkzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NDUxNjk4OD4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW11bGF0ZWRJbnB1dERp
c3BhdGNoZXIgYW5kIGl0cyBjYWxsZXJzIG5lZWQgdG8gc3VwcG9ydCBPcHRpb25hbDxGcmFtZUlk
ZW50aWZpZXI+CisgICAgICAgIGFuZCBXVEY6Om51bGxvcHQgYXMgYW4gZW5jb2RpbmcgZm9yIHRo
ZSBpbXBsaWNpdCBtYWluIGZyYW1lLgorCisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24v
U2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRp
b24vU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2ltdWxh
dGVkSW5wdXREaXNwYXRjaGVyOjpyZXNvbHZlTG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpT
aW11bGF0ZWRJbnB1dERpc3BhdGNoZXI6OnJ1bik6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0
b21hdGlvblNlc3Npb246OnZpZXdwb3J0SW5WaWV3Q2VudGVyUG9pbnRPZkVsZW1lbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUludGVyYWN0aW9uU2Vx
dWVuY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50
ZXJhY3Rpb25TZXF1ZW5jZSk6CisKIDIwMTktMDgtMjIgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBw
bGUuY29tPgogCiAgICAgICAgIFt3YXRjaE9TXSBEaXNhYmxlIENvbnRlbnQgRmlsdGVyaW5nIGlu
IHRoZSBzaW11bGF0b3IgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0F1dG9tYXRpb24vU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyLmNwcAppbmRleCAy
OWZlYTZhY2FlNzhiZTQ4ZDhjODBkNDZjNDNmYTIzNDQ0Y2Q1ZjAxLi42YjljYTY0M2RkYjgwZmI0
NTY1MTA5MDJjOWQxZmQxMWJlOWZmNThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BdXRvbWF0aW9uL1NpbXVsYXRlZElucHV0RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9TaW11bGF0ZWRJbnB1dERpc3BhdGNoZXIuY3Bw
CkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBTaW11bGF0ZWRJbnB1dERpc3BhdGNoZXI6OnJlc29s
dmVMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY3VycmVudEwKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgTW91c2VNb3ZlT3JpZ2luOjpFbGVtZW50OiB7Ci0gICAgICAg
IG1fY2xpZW50LnZpZXdwb3J0SW5WaWV3Q2VudGVyUG9pbnRPZkVsZW1lbnQobV9wYWdlLCBtX2Zy
YW1lSUQudmFsdWUoKSwgbm9kZUhhbmRsZS52YWx1ZSgpLCBbZGVzdGluYXRpb24gPSBsb2NhdGlv
bi52YWx1ZSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XShPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4gaW5WaWV3Q2VudGVyUG9pbnQsIE9wdGlvbmFs
PEF1dG9tYXRpb25Db21tYW5kRXJyb3I+IGVycm9yKSBtdXRhYmxlIHsKKyAgICAgICAgbV9jbGll
bnQudmlld3BvcnRJblZpZXdDZW50ZXJQb2ludE9mRWxlbWVudChtX3BhZ2UsIG1fZnJhbWVJRCwg
bm9kZUhhbmRsZS52YWx1ZSgpLCBbZGVzdGluYXRpb24gPSBsb2NhdGlvbi52YWx1ZSgpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShPcHRpb25hbDxXZWJD
b3JlOjpJbnRQb2ludD4gaW5WaWV3Q2VudGVyUG9pbnQsIE9wdGlvbmFsPEF1dG9tYXRpb25Db21t
YW5kRXJyb3I+IGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChlcnJvcikgewogICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bnVsbG9wdCwgZXJyb3IpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIFNpbXVsYXRlZElu
cHV0RGlzcGF0Y2hlcjo6dHJhbnNpdGlvbklucHV0U291cmNlVG9TdGF0ZShTaW11bGF0ZWRJbnB1
dFNvdXJjZQogICAgIH0KIH0KIAotdm9pZCBTaW11bGF0ZWRJbnB1dERpc3BhdGNoZXI6OnJ1bihX
ZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgVmVjdG9yPFNpbXVsYXRlZElucHV0S2V5
RnJhbWU+JiYga2V5RnJhbWVzLCBIYXNoU2V0PFJlZjxTaW11bGF0ZWRJbnB1dFNvdXJjZT4+JiBp
bnB1dFNvdXJjZXMsIEF1dG9tYXRpb25Db21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5k
bGVyKQordm9pZCBTaW11bGF0ZWRJbnB1dERpc3BhdGNoZXI6OnJ1bihPcHRpb25hbDxXZWJDb3Jl
OjpGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIFZlY3RvcjxTaW11bGF0ZWRJbnB1dEtleUZyYW1l
PiYmIGtleUZyYW1lcywgSGFzaFNldDxSZWY8U2ltdWxhdGVkSW5wdXRTb3VyY2U+PiYgaW5wdXRT
b3VyY2VzLCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoIWlzQWN0aXZlKCkpOwogICAgIGlmIChpc0FjdGl2ZSgpKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1NpbXVsYXRlZElucHV0
RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9TaW11bGF0
ZWRJbnB1dERpc3BhdGNoZXIuaAppbmRleCBhZmYzZjc4YTVmYmNiZDgyNTU2MWQ3NjI1Yjc1Njdl
MzRjZjM2YzU1Li41MWQ1NDAxZGUwMDQ4YzgzZGM5YjkxYWE3YTE5YzA4NTZiYTFhMjJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1NpbXVsYXRlZElucHV0
RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vU2lt
dWxhdGVkSW5wdXREaXNwYXRjaGVyLmgKQEAgLTEzNCw3ICsxMzQsNyBAQCBwdWJsaWM6CiAjaWYg
RU5BQkxFKFdFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzaW11bGF0ZUtleWJvYXJkSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5JiwgS2V5Ym9hcmRJ
bnRlcmFjdGlvbiwgV1RGOjpWYXJpYW50PFZpcnR1YWxLZXksIENoYXJLZXk+JiYsIEF1dG9tYXRp
b25Db21wbGV0aW9uSGFuZGxlciYmKSA9IDA7CiAjZW5kaWYKLSAgICAgICAgdmlydHVhbCB2b2lk
IHZpZXdwb3J0SW5WaWV3Q2VudGVyUG9pbnRPZkVsZW1lbnQoV2ViUGFnZVByb3h5JiwgV2ViQ29y
ZTo6RnJhbWVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIEZ1bmN0aW9uPHZv
aWQgKE9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50PiwgT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1h
bmRFcnJvcj4pPiYmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydEluVmlld0Nl
bnRlclBvaW50T2ZFbGVtZW50KFdlYlBhZ2VQcm94eSYsIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1l
SWRlbnRpZmllcj4sIGNvbnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgRnVuY3Rpb248dm9pZCAoT3B0
aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+LCBPcHRpb25hbDxBdXRvbWF0aW9uQ29tbWFuZEVycm9y
Pik+JiYpID0gMDsKICAgICB9OwogCiAgICAgc3RhdGljIFJlZjxTaW11bGF0ZWRJbnB1dERpc3Bh
dGNoZXI+IGNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIFNpbXVsYXRlZElucHV0RGlzcGF0Y2hl
cjo6Q2xpZW50JiBjbGllbnQpCkBAIC0xNDQsNyArMTQ0LDcgQEAgcHVibGljOgogCiAgICAgflNp
bXVsYXRlZElucHV0RGlzcGF0Y2hlcigpOwogCi0gICAgdm9pZCBydW4oV2ViQ29yZTo6RnJhbWVJ
ZGVudGlmaWVyLCBWZWN0b3I8U2ltdWxhdGVkSW5wdXRLZXlGcmFtZT4mJiBrZXlGcmFtZXMsIEhh
c2hTZXQ8UmVmPFNpbXVsYXRlZElucHV0U291cmNlPj4mIGlucHV0U291cmNlcywgQXV0b21hdGlv
bkNvbXBsZXRpb25IYW5kbGVyJiYpOworICAgIHZvaWQgcnVuKE9wdGlvbmFsPFdlYkNvcmU6OkZy
YW1lSWRlbnRpZmllcj4sIFZlY3RvcjxTaW11bGF0ZWRJbnB1dEtleUZyYW1lPiYmIGtleUZyYW1l
cywgSGFzaFNldDxSZWY8U2ltdWxhdGVkSW5wdXRTb3VyY2U+PiYgaW5wdXRTb3VyY2VzLCBBdXRv
bWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJik7CiAgICAgdm9pZCBjYW5jZWwoKTsKIAogICAgIGJv
b2wgaXNBY3RpdmUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggMTlhZWY5NDRm
NzRmNjJjMTlkNDg5OWI5Mzg2NjAwZmE3MWM0NjQ4OS4uYmVhYTg5OGJhZGI5NmRhYjk4YjYwOTU4
MTY3ZTkxODg2YjcwOTljNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTE0NjIsNyArMTQ2
Miw3IEBAIFNpbXVsYXRlZElucHV0U291cmNlKiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aW5wdXRT
b3VyY2VGb3JUeXBlKFNpbXVsYXRlZElucHV0U291CiB9CiAKIC8vIE1BUks6IFNpbXVsYXRlZElu
cHV0RGlzcGF0Y2hlcjo6Q2xpZW50IEFQSQotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6dmll
d3BvcnRJblZpZXdDZW50ZXJQb2ludE9mRWxlbWVudChXZWJQYWdlUHJveHkmIHBhZ2UsIEZyYW1l
SWRlbnRpZmllciBmcmFtZUlELCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIEZ1bmN0aW9uPHZv
aWQgKE9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50PiwgT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1h
bmRFcnJvcj4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6dmlld3BvcnRJblZpZXdDZW50ZXJQb2ludE9mRWxlbWVudChXZWJQYWdlUHJveHkmIHBhZ2Us
IE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBub2RlSGFu
ZGxlLCBGdW5jdGlvbjx2b2lkIChPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIE9wdGlvbmFs
PEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBX
VEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8U3RyaW5nPiwgV2ViQ29yZTo6SW50
UmVjdCwgT3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+LCBib29sKT4gZGlkQ29tcHV0ZUVsZW1l
bnRMYXlvdXRIYW5kbGVyID0gW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKE9wdGlvbmFsPFN0cmluZz4gZXJyb3JUeXBlLCBXZWJDb3JlOjpJbnRSZWN0LCBP
cHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4gaW5WaWV3Q2VudGVyUG9pbnQsIGJvb2wpIG11dGFi
bGUgewogICAgICAgICBpZiAoZXJyb3JUeXBlKSB7CkBAIC0xOTIyLDcgKzE5MjIsNyBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBT
dHJpbmcmIGhhbmRsZSwgY29ucwogICAgIH0KIAogICAgIC8vIERlbGVnYXRlIHRoZSByZXN0IG9m
IMKnMTcuNCBEaXNwYXRjaGluZyBBY3Rpb25zIHRvIHRoZSBkaXNwYXRjaGVyLgotICAgIGlucHV0
RGlzcGF0Y2hlci5ydW4oZnJhbWVJRC52YWx1ZSgpLCBXVEZNb3ZlKGtleUZyYW1lcyksIG1faW5w
dXRTb3VyY2VzLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXShPcHRpb25hbDxBdXRvbWF0aW9uQ29tbWFuZEVycm9yPiBlcnJvcikg
eworICAgIGlucHV0RGlzcGF0Y2hlci5ydW4oZnJhbWVJRCwgV1RGTW92ZShrZXlGcmFtZXMpLCBt
X2lucHV0U291cmNlcywgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKV0oT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4gZXJy
b3IpIHsKICAgICAgICAgaWYgKGVycm9yKQogICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWls
dXJlKGVycm9yLnZhbHVlKCkudG9Qcm90b2NvbFN0cmluZygpKTsKICAgICAgICAgZWxzZQpAQCAt
MTk1MSw3ICsxOTUxLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50ZXJh
Y3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QKICAgICBTaW11bGF0ZWRJ
bnB1dERpc3BhdGNoZXImIGlucHV0RGlzcGF0Y2hlciA9IGlucHV0RGlzcGF0Y2hlckZvclBhZ2Uo
KnBhZ2UpOwogICAgIGlucHV0RGlzcGF0Y2hlci5jYW5jZWwoKTsKICAgICAKLSAgICBpbnB1dERp
c3BhdGNoZXIucnVuKGZyYW1lSUQudmFsdWUoKSwgV1RGTW92ZShrZXlGcmFtZXMpLCBtX2lucHV0
U291cmNlcywgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0oT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4gZXJyb3IpIHsK
KyAgICBpbnB1dERpc3BhdGNoZXIucnVuKGZyYW1lSUQsIFdURk1vdmUoa2V5RnJhbWVzKSwgbV9p
bnB1dFNvdXJjZXMsIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldKE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+IGVycm9y
KSB7CiAgICAgICAgIGlmIChlcnJvcikKICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVy
ZShlcnJvci52YWx1ZSgpLnRvUHJvdG9jb2xTdHJpbmcoKSk7CiAgICAgICAgIGVsc2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNl
c3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb24uaAppbmRleCA5M2JiYzdkMWEzNzU1ZjVkNjVmMDRlNjM5NTIxZjRkM2M5NzRlYjg5
Li5lYjRiZDJiYTUzYzUzN2FjYmVjMjc4Mjk3ZTk1ZDU3ZTFhODU3YmNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vz
c2lvbi5oCkBAIC0xNTMsNyArMTUzLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShXRUJEUklWRVJf
S0VZQk9BUkRfSU5URVJBQ1RJT05TKQogICAgIHZvaWQgc2ltdWxhdGVLZXlib2FyZEludGVyYWN0
aW9uKFdlYlBhZ2VQcm94eSYsIEtleWJvYXJkSW50ZXJhY3Rpb24sIFdURjo6VmFyaWFudDxWaXJ0
dWFsS2V5LCBDaGFyS2V5PiYmLCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJikgZmluYWw7
CiAjZW5kaWYKLSAgICB2b2lkIHZpZXdwb3J0SW5WaWV3Q2VudGVyUG9pbnRPZkVsZW1lbnQoV2Vi
UGFnZVByb3h5JiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5vZGVI
YW5kbGUsIEZ1bmN0aW9uPHZvaWQgKE9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50PiwgT3B0aW9u
YWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4pPiYmKSBmaW5hbDsKKyAgICB2b2lkIHZpZXdwb3J0
SW5WaWV3Q2VudGVyUG9pbnRPZkVsZW1lbnQoV2ViUGFnZVByb3h5JiwgT3B0aW9uYWw8V2ViQ29y
ZTo6RnJhbWVJZGVudGlmaWVyPiwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBGdW5jdGlvbjx2
b2lkIChPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIE9wdGlvbmFsPEF1dG9tYXRpb25Db21t
YW5kRXJyb3I+KT4mJikgZmluYWw7CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX0FDVElP
TlNfQVBJKQogCg==
</data>
<flag name="review"
          id="392902"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>